Pessoall,
Estou fazendo a comunicação entre dois PICs via I2C, alguém sabe como coloco o endereço do PIC escravo? ou coloco 00000000 no Master chamando o escravo?
Moderadores: andre_luis, 51, guest2003, Renie
tcpipchip escreveu:Antes a gente necessita saber em que linguagem estas fazendo...
Eu já fiz o pic slave para ser uma camera i2c para se comunicar com o modulo TELIT Ge863...que tinha i2c...
Usei o exemplo do link abaixo...
http://www.picbasic.co.uk/forum/showthread.php?t=5632
Miguel
'************************************************************
'* Nome : driver.bas *
'* Author : Miguel Wisintainer *
'* Date : 09/04/2006 *
'* Version : 6.0 100% *
'* Notes : PIC CAMERA i2c para TELIT PYTHON *
'* Changes : Returns error camera *
' Vendo questao SYNC, quando ocorre erro *
' 115200 i2clows 1,REMOVIDO RESET CAMERA,status connect Setup *
' WATCH-DOG ENABLE 64 PREESCALER *
' removido reset *
' connect = 60 *
' I2CSLOW AGORA PARA 1 ----MUDEI NOVAMENTE PARA 0 *
' TIRADO BOREM RESET, STACK RESET *
' SEM CONNECT NO INICIO CAMERA *
' I2CHOLD = 1 *
' I2CSLOW = 1 *
' RESTART CAUSE IMPLEMENTED *
' TIRADO PAUSE 500 PARA INICIALIZAÇÕES *
' TEMPORIAMENTE PORTA SAIDA *
' REHABILITAR RESETE CAMERA (POWER DOWN) *
' DIMINUIR 10% HSERIN *
' RESULT PARA GET_IMAGE
' GRAVACAO AT45XXXX VIA ATME168 SPI
'************************************************************
INCLUDE "modedefs.bas"
' ifdef PLL@REQ ; Do we require the PLL ?
@ __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
' else
'@ __CONFIG _CONFIG1H, _OSCS_ON_1H & _HS_OSC_1H
' endif
@ __CONFIG _CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_ON_2L
' ifdef WATCHDOG_REQ
' @__CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_128_2
' else
@ __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_64_2H
' endif
@ __CONFIG _CONFIG3H, _CCP2MX_ON_3H
' ifdef DEBUG@REQ ; Do we require DEBUG ?
' @__CONFIG CONFIG4L, STVR_ON_4 & LVP_OFF_4 & DEBUG_ON_4
' else
@ __CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
' EEPROM BACKUP IMAGEM
DEFINE I2C_SLOW 1
'DASABILITE
DEFINE I2C_HOLD 1
'WATCH DOG
DEFINE NO_CLRWDT 0
'CRISTAL PROXIMO DE 29 MHZ (melhor opcao para i2c)
DEFINE OSC 32
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h
DEFINE HSER_BAUD 115200
DEFINE HSER_CLROERR 1
DEFINE HSER_SPBRG 3
'LCD PARA O TELIT
Define LCD_BITS 4 ' 4-bit interface
Define LCD_LINES 2 ' 2 line LCD
' LCD should be connected as follows:
' LCD PIC
' DB4 PortB.0
' DB5 PortB.1
' DB6 PortB.2
' DB7 PortB.3
Define LCD_DREG PORTB
Define LCD_DBIT 0
' RS PortA.4 (add 4.7K pullup resistor to 5 volts)
Define LCD_RSREG PORTA
Define LCD_RSBIT 4
' E PortA.5
Define LCD_EREG PORTA
Define LCD_EBIT 5
' RW Ground
' Vdd 5 volts
' Vss Ground
' Vo 20K potentiometer (wire wiper to Vo, adjust for contrast)
' DB0-3 No connect
Define LCD_COMMANDUS 1500 ' Adjust for slower LCD modules
Define LCD_DATAUS 50
'Command Operation
' $FE, 1 Clear display
'$FE, 2 Return home (beginning of first line)
'$FE, $0C Cursor off
'$FE, $0E Underline cursor on
'$FE, $0F Blinking cursor on
'$FE, $10 Move cursor left one position
'$FE, $14 Move cursor right one position
'$FE, $C0 Move cursor to beginning of second line
'$FE, $94 Move cursor to beginning of third line
'$FE, $D4 Move cursor to beginning of fourth line
'TECLADO DO TELIX
key VAR BYTE ' Key value
RB0_LCD_KBD var PORTB.0
RB1_LCD_KBD VAR PORTB.1
RB2_LCD_KBD VAR PORTB.2
RB3_LCD_KBD VAR PORTB.3
RB4_KBY VAR PORTB.4
RB5_KBY VAR PORTB.5
RB6_KBY VAR PORTB.6
RB7_KBY VAR PORTB.7
'COMUNICAÇÃO CONTROLE TELIT
C108_CTR VAR PORTC.0
TELIT_ON_OFF VAR PORTC.5
'TELIT_RESET VAR PORTC.2
'PARA CAMERA
RETRIES VAR WORD
B1 VAR BYTE
B2 VAR BYTE
B3 VAR BYTE
B4 VAR BYTE
B5 VAR BYTE
B6 VAR BYTE
FILE_LENGTH VAR WORD
PACKET_LENGTH VAR word
TEMP VAR BYTE
PACKET VAR WORD
NO_PACKET VAR WORD
INDEX_PACKAGE VAR word
INDEX_IMAGE VAR word
INDEX_I2C VAR WORD
BUFFER CON 256
'RESOLUCAO CAMERA
RESOLUCAO VAR BYTE
'VELOCIDADE CAMERA
TRUE CON 1
FALSE CON 0
BUFFER_V VAR WORD
BUFFER_AUX VAR WORD
' Define constants para I2c slave
I2Caddress CON $02 ' Make our address 2
' Define used register flags
SSPIF VAR PIR1.3 ' SSP (I2C) interrupt flag
BF VAR SSPSTAT.0 ' SSP (I2C) Buffer Full
R_W VAR SSPSTAT.2 ' SSP (I2C) Read/Write
D_A VAR SSPSTAT.5 ' SSP (I2C) Data/Address
CKP VAR SSPCON1.4 ' SSP (I2C) SCK Release Control
SSPEN VAR SSPCON1.5 ' SSP (I2C) Enable
SSPOV VAR SSPCON1.6 ' SSP (I2C) Receive Overflow Indicator
WCOL VAR SSPCON1.7 ' SSP (I2C) Write Collision Detect
'PICBASIC CAUSE OF RESET
RI_CAUSE_OF_RESET VAR RCON.4
TO_CAUSE_OF_RESET VAR RCON.3
PD_CAUSE_OF_RESET VAR RCON.2
POR_CAUSE_OF_RESET VAR RCON.1
BOR_CAUSE_OF_RESET VAR RCON.0
'LIGA DESLIGA CAMERA
CAMERA_ON_OFF VAR PORTC.1
' Allocate RAM
i2c_index var byte 'Indice Vector i2c
vetor_i2c_index var byte[54] 'Vetor I2c
RESULT VAR BYTE ' DISPOSITIVO RESPONDE COM 1 OU TECLA
DATAIN VAR BYTE
OPCAO_I2C_PERIF VAR BYTE
'GUARDA UM FRAME DA IMAGEM
IMAGE VAR BYTE[BUFFER]
'AQUI COMEÇA O PROGRAMA PRINCIPAL
'PORTA CONTROLE TELIT
PORTC = 0
TRISC.0 = 1 '00000001
'TRISC.2 = 0 NAO MAIS RESET TELIT...APENAS ON OFF
'PAUSA PARA INICIALIZAÇÕES
'PAUSE 500
' Initialize I2C slave mode
SSPADD = I2Caddress ' Set our address
SSPCON2 = 0 ' General call address disabled
SSPCON1 = $36 ' Set to I2C slave with 7-bit address
i2c_index = 0
INTCON2.7 = 0 'Enable PORTB pull-ups para Teclado Telit
ADCON1 = 7 'ALL PIN DIGITAL (portA)
'PARA TAMANHO BUFFER (LSB E MSB)
BUFFER_V = BUFFER
'PARA PEGAR LSB E MSB
BUFFER_AUX = BUFFER_V - 6
'ZERA INDEXADOR INDEX_IMAGE
INDEX_IMAGE = 0
'I2C PERIPHERAL
OPCAO_I2C_PERIF = " "
'STARTUP (SINALIZA)
'PAUSE 1000 ; AGUARDA LCD INICIALIZAR
'loopis:
' HSerout ["hello my world",13,10] 'CONVERSAR COM A CAMARA????, OU LEITOR???
' PAUSE 1000
' goto loopis
'HSERIN 1000,LIMPA_BUFFER,[B1,B2,B3,B4,B5,B6] 'SOMENTE NO PROTEUS
'GOSUB TIRA_FOTO
'HABILITA INTERRUPT SSP
'ON INTERRUPT goto I2C_ISR
'GLOBAL = 1
'GOSUB CAMERA_SETUP
'HABILITA WATCH DOG
'WDTCON.0 = 0
'TELIT RESET
'TELIT_RESET = 0
'MOSTRA MODO OPERACAO TELIT
IF RI_CAUSE_OF_RESET = 1 THEN
IF TO_CAUSE_OF_RESET = 1 THEN
IF PD_CAUSE_OF_RESET = 1 THEN
IF POR_CAUSE_OF_RESET = 0 THEN
IF BOR_CAUSE_OF_RESET = 0 THEN
if C108_CTR = 1 then
lcdout $fe,1," MODO EXECUCAO"
LCDOUT $fe,$c0,"AGUARDANDO APLIC"
else
lcdout $fe,1," MODO DE UPLOAD"
endif
'LIGA CAMERA
TRISC.1 = 0
CAMERA_ON_OFF = 1
'LIGA TELIT
TRISC.5 = 0
TELIT_ON_OFF = 1
PAUSE 1000
CLEARWDT
PAUSE 1000
CLEARWDT
PAUSE 1000
CLEARWDT
TELIT_ON_OFF = 0
TRISC.5 = 1
'3 PAUSE FOR CAUSA DO WATCH-DOG
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
' LIGA CAMERA
TRISC.1 = 0
CAMERA_ON_OFF = 1
'APENAS PARA INICIALIZAR TXD/RXD
'GOSUB CAMERA_CONNECT
WHILE TRUE
CLEARWDT
IF SSPIF = TRUE Then ' Check for I2C interrupt flag
GoSub i2cslave
EndIF
'call getkey
'lcdout $fe,1,dec key
'pause 100
WEND
'***********************************************
'LEITURA DO TECLADO
'BUG: UMA TECLA POR VEZ DEVE SER PRESSIONADA
'MELHORADA PARA SER MAIS RÁPIDA
'***********************************************
getkey:
key = 16
RB0_LCD_KBD = 0:RB1_LCD_KBD = 1:RB2_LCD_KBD = 1:RB3_LCD_KBD = 1
IF RB4_KBY = 0 THEN KEY = 0
IF RB5_KBY = 0 THEN KEY = 1
IF RB6_KBY = 0 THEN KEY = 2
IF RB7_KBY = 0 THEN KEY = 12
RB0_LCD_KBD = 1:RB1_LCD_KBD = 0:RB2_LCD_KBD = 1:RB3_LCD_KBD = 1
IF RB4_KBY = 0 THEN KEY = 3
IF RB5_KBY = 0 THEN KEY = 4
IF RB6_KBY = 0 THEN KEY = 5
IF RB7_KBY = 0 THEN KEY = 13
RB0_LCD_KBD = 1:RB1_LCD_KBD = 1:RB2_LCD_KBD = 0:RB3_LCD_KBD = 1
IF RB4_KBY = 0 THEN KEY = 6
IF RB5_KBY = 0 THEN KEY = 7
IF RB6_KBY = 0 THEN KEY = 8
IF RB7_KBY = 0 THEN KEY = 14
RB0_LCD_KBD = 1:RB1_LCD_KBD = 1:RB2_LCD_KBD = 1:RB3_LCD_KBD = 0
IF RB4_KBY = 0 THEN KEY = 9
IF RB5_KBY = 0 THEN KEY = 10
IF RB6_KBY = 0 THEN KEY = 11
IF RB7_KBY = 0 THEN KEY = 15
RETURN
'**************************************************************************************
'* Sends a 6-byte long packet to the camera.
'**************************************************************************************
SEND_CAMERA:
HSEROUT[B1,B2,B3,B4,B5,B6]
RETURN
'**************************************************************************************
'* (Re) connects and resynchronize to the camera, possibly waking it
'* up from auto-power save feature.
'**************************************************************************************
'**************************************************************************************
'* Receives an ACKNOWLEDGE packet. Logs a message on the debug stream in
'* case of errors.
'**************************************************************************************
CAMERA_CONNECT:
RESULT = 0
FOR RETRIES = 1 TO 60 'FIQUE TENTANDO
b1 = $aa 'ENVIANDO PACOTES DE SYNC
b2 = $0d
b3 = 0
b4 = 0
b5 = 0
b6 = 0
gosub send_camera
HSERIN 45,TIME_OUT_CAMERA,[B1,B2,B3,B4,B5,B6]
if (B1 = $AA) AND (B2 = $0E) AND (B3 = $0D) AND (B5 = $00) AND (B6 = $00) THEN
RESULT = 1
GOTO SAI_CAMERA_CONNECT 'ENTAO SINCRONIZE O PACOTE
ENDIF
'ERRO CRITICO, CAMERA COM PROBLEMAS
IF (B1 = $AA) AND (B2 = $0F) THEN
RESULT = B5
GOTO SAI_CAMERA_CONNECT_II
ENDIF
TIME_OUT_CAMERA:
CLEARWDT
NEXT RETRIES
'NAO CONSEGUIU COMUNICAR COM CAMERA :(
RESULT = $0E
'BASIC4EVER
'GOTO SAI_CAMERA_CONNECT_II
SAI_CAMERA_CONNECT:
HSERIN 45, SAI_CAMERA_CONNECT_II,[B1,B2,B3,B4,B5,B6]
IF (B1 = $AA) AND (B2 = $0D) AND (B3 = $00) AND (B4 = $00) AND (B5 = $00) AND (B6 = $00) THEN
RESULT = 2
b1 = $AA 'CONFIRME SYNC COM PACOTE DE ACK
b2 = $0E
b3 = $0D
b4 = 0
b5 = 0
b6 = 0
gosub SEND_CAMERA
ELSE
RESULT = $0E
ENDIF
SAI_CAMERA_CONNECT_II:
RETURN
'**************************************************************************************
'* Receives an ACKNOWLEDGE packet. Logs a message on the debug stream in
'* case of errors.
'**************************************************************************************
acknowledge:
HSERIN 45,SAI_acknowledge,[B1,B2,B3,B4,B5,B6]
IF B1<>$AA THEN
IF B2<>$0E THEN
'lcdout $fe,138, "ERROR"
ENDIF
ENDIF
SAI_acknowledge:
RETURN
'**************************************************************************************
'* Connects to the camera and sets the resolution given.
'* Sets buffer size for picture data transfers to BUFFER SIZE bytes.
'* Resolution can be one of two values: vgaResolution (640x480)
'* and cctvResolution (320x200)
'**************************************************************************************
CAMERA_SETUP:
b1 = $AA
b2 = $01
b3 = $00
b4 = $07
b5 = $07
b6 = RESOLUCAO
GOSUB SEND_CAMERA
GOSUB acknowledge
if (B1 = $AA) AND (B2 = $0E) AND (B3 = $01) AND (B5 = $00) AND (B6 = $00) THEN
RESULT = 1
'SETA O TAMANHO DO BUFFER
b1 = $AA
b2 = $06
b3 = $08
b4 = BUFFER_V.LOWBYTE
b5 = BUFFER_V.HIGHBYTE
b6 = $00
GOSUB SEND_CAMERA
GOSUB acknowledge
'LCDOUT $FE,1, HEX B1, " ",HEX B2, " ",HEX B3, " ",HEX B4, " ",HEX B5, " ",HEX B6, " "
'PAUSE 15000
if (B1 = $AA) AND (B2 = $0E) AND (B3 = $06) AND (B5 = $00) AND (B6 = $00) THEN
RESULT = 2
ENDIF
ENDIF
RETURN
'********************************************************
'TAKE A PICTURE
'********************************************************
CAMERA_SNAPSHOT:
b1 = $AA
b2 = $05
b3 = $00
b4 = $00
b5 = $00
b6 = $00
GOSUB SEND_CAMERA 'Send SNAPSHOT command...
GOSUB acknowledge '...and get acknowledge.
'HSEROUT [HEX B1, HEX B2, HEX B3]
if (B1 = $AA) AND (B2 = $0E) AND (B3 = $05) AND (B5 = $00) AND (B6 = $00) THEN
RESULT = 1
ELSE
RESULT = 2
ENDIF
RETURN
'**************************************************************************************
'* Takes a snapshot and dumps picture data to input/output stream #3
'* The caller must open the stram prior to call - this routine knows nothing
'* of where data is actually going.
'**************************************************************************************
GET_IMAGE:
b1 = $AA
b2 = $04
b3 = $01
b4 = $00
b5 = $00
b6 = $00
GOSUB SEND_CAMERA 'Request snapshot data header
gosub acknowledge
if (B1 = $AA) AND (B2 = $0E) AND (B3 = $04) AND (B5 = $00) AND (B6 = $00) THEN
HSERIN 45,SAI_GET_IMAGE,[B1,B2,B3,B4,B5,B6] '...then command response.
RESULT = 1
if (B1 = $AA) AND (B2 = $0A) AND (B3 = $01) THEN
FILE_LENGTH = B6
FILE_LENGTH = FILE_LENGTH * 256
FILE_LENGTH = FILE_LENGTH + B5
FILE_LENGTH = FILE_LENGTH * 256
FILE_LENGTH = FILE_LENGTH + B4
NO_PACKET = FILE_LENGTH / (BUFFER - 6)
INDEX_I2C = 0
RESULT = 2
ENDIF
ENDIF
SAI_GET_IMAGE:
RETURN
'****************************************************************
'********** SOLICITA PACOTE *****************
'****************************************************************
SOLICITA_PACOTE:
IF PACKET > NO_PACKET THEN
b1 = $AA
b2 = $0E
b3 = $00
b4 = $00
b5 = $F0
b6 = $F0
GOSUB SEND_CAMERA 'SEND ACK
ELSE
RETRIES = 0
WHILE RETRIES <> 20
b1 = $AA
b2 = $0E
b3 = $00
b4 = $00
b5 = PACKET.LOWBYTE
b6 = PACKET.HIGHBYTE
GOSUB SEND_CAMERA
GOSUB LE_FRAME
WEND
ENDIF
PACKET = PACKET + 1
'HSEROUT [" ",HEX B1, " ",HEX B2, " ",HEX B3, " ",HEX B4, " ",HEX B5, " ",HEX B6, " ", dec file_length]
RETURN
'****************************************************************
'LIMPA USART, GARANTIR QUE NAO TENHA DADO NO BUFFER
'****************************************************************
CLEAR_USART:
HSERIN 1,TIME_OUT_CLEAR_USART,[TEMP]
TIME_OUT_CLEAR_USART:
RETURN
'****************************************************************
'********** TEM MAIS FRAME PARA SER LIDO OU NAO *****************
'****************************************************************
'45 TROCAR PARA 1
TIME_OUT_LE_FRAME:
'lcdout $fe,138, "ERROR2"
IMAGE[0] = PACKET.LOWBYTE
IMAGE[1] = PACKET.LOWBYTE
RETURN
LE_FRAME:
RETRIES = RETRIES + 1
HSERIN 6,TIME_OUT_LE_FRAME,[TEMP]
HSERIN 6,TIME_OUT_LE_FRAME,[TEMP]
HSERIN 6,TIME_OUT_LE_FRAME,[PACKET_LENGTH.LOWBYTE]
HSERIN 6,TIME_OUT_LE_FRAME,[PACKET_LENGTH.hIGHBYTE]
if PACKET_LENGTH > BUFFER_AUX THEN
'lcdout $fe,138, "ERROR3"
GOTO TIME_OUT_LE_FRAME
RETURN
ENDIF
FOR INDEX_PACKAGE = 0 TO PACKET_LENGTH - 1
HSERIN 6,TIME_OUT_LE_FRAME,[IMAGE[INDEX_PACKAGE]]
'DECREMENTA PARA TELIT MONITORAR SE CHEGOU A ZERO...
FILE_LENGTH = FILE_LENGTH - 1
CLEARWDT
NEXT INDEX_PACKAGE
HSERIN 6,TIME_OUT_LE_FRAME,[TEMP]
HSERIN 6,TIME_OUT_LE_FRAME,[TEMP]
SAI_LE_FRAME:
RETRIES = 20
RETURN
'************************************************************
'* TRATA I2C SE É ESCRITA, LEITURA OU ID
'************************************************************
i2cslave: ' I2C slave subroutine
SSPIF = 0 ' Clear interrupt flag
IF R_W = 1 Then i2crd ' Read data from us
IF BF = 0 Then i2cexit ' Nothing in buffer so exit
IF D_A = 1 Then i2cwr ' Data for us (not address) 1 = DATA
IF SSPBUF != I2Caddress Then i2cexit ' Clear the address from the buffer
i2c_index = 0 ' Mark as first read
GoTo i2cexit
i2cwr:
' I2C write data to us
datain = SSPBUF ' Put data into array
vetor_i2c_index[i2c_index] = datain
i2c_index = i2c_index + 1 'REMOVER COMENTARIO DEPOIS
if DATAIN = $00 then 'SE DEU LIMITE DO LCD OU NULL
i2c_index = 0
gosub Analisa_Pacote_I2c
endif
GoTo i2cexit
i2crd: ' I2C read data from us
IF D_A = 0 Then ' ADDRESS
i2c_index = 0 ' Mark as first read
EndIF
'SE OPCAO FOR CAMERA....SNAPSHOT OU NEXT FRAME
IF OPCAO_I2C_PERIF = "N" THEN
RESULT = IMAGE[INDEX_IMAGE]
INDEX_IMAGE = INDEX_IMAGE + 1
IF INDEX_IMAGE = PACKET_LENGTH THEN
IF FILE_LENGTH <= BUFFER - 6 THEN
IMAGE[0] = FILE_LENGTH.lowbyte
IMAGE[1] = FILE_LENGTH.highbyte
ELSE
IMAGE[0] = BUFFER_AUX.LOWBYTE
IMAGE[1] = BUFFER_AUX.HIGHBYTE
ENDIF
INDEX_IMAGE = 0
ENDIF
ENDIF
SSPBUF = RESULT
CKP = 1 ' Release SCL line
GoTo i2cexit ' That's it
i2cexit:
Return
'**********************************************************
'ANALISA O QUE MASTER QUER DO DISPOSITIVO I2C
'**********************************************************
Analisa_Pacote_I2c:
RESULT = 0
'P(S) = PICTURE SNAPSHOT 'P(N) = PICTURE NEXT FRAME
IF vetor_i2c_index[0] = "C" THEN 'SOLICITACAO CAMERA
IF vetor_i2c_index[1] = "N" THEN 'FOI SOLICITADO PROXIMO PACOTE FOTO
OPCAO_I2C_PERIF = "N"
GOSUB CLEAR_USART
GOSUB SOLICITA_PACOTE
'POR CAUSA DAQUELES 2 BYTES QUE TEM O TAMANHO NO BUFFER
INDEX_IMAGE = 0
RETURN
ENDIF
IF vetor_i2c_index[1] = "F" THEN 'FOI SOLICITADO TIRAR FOTO
OPCAO_I2C_PERIF = "F"
GOSUB GET_IMAGE
INDEX_IMAGE = 0
PACKET = 0
RETURN
ENDIF
IF vetor_i2c_index[1] = "S" THEN 'FOI SOLICITADO SETUP CAMERA
RESOLUCAO = vetor_i2c_index[2]
'PARAMETRO RESOLUCAO PASSADO
OPCAO_I2C_PERIF = "S"
RESULT = FALSE
GOSUB CAMERA_SETUP
RETURN
ENDIF
IF vetor_i2c_index[1] = "Y" THEN 'FOI SOLICITADO SYNC CAMERA
OPCAO_I2C_PERIF = "Y"
RESULT = FALSE
GOSUB CAMERA_CONNECT
RETURN
ENDIF
IF vetor_i2c_index[1] = "H" THEN 'FOI SOLICITADO SYNC CAMERA
OPCAO_I2C_PERIF = "H"
RESULT = FALSE
GOSUB CAMERA_SNAPSHOT
RETURN
ENDIF
ENDIF
IF vetor_i2c_index[0] = "D" THEN 'LCD REQUISITADO
OPCAO_I2C_PERIF = "D" 'FOI SOLICITADO LCD
I2C_INDEX = 1 'MANDA CARACTERES DE CONTROLE
WHILE vetor_i2c_index[I2C_INDEX]<>0 'OU DADOS PARA LCD
lcdout vetor_i2c_index[I2C_INDEX]
I2C_INDEX = I2C_INDEX + 1
WEND
RESULT = 1 'DISPOSTIVO LCD RESPONDEU
RETURN
ENDIF
IF vetor_i2c_index[0] = "K" THEN
OPCAO_I2C_PERIF = "K" 'FOI SOLICITADO TECLADO TELIT
GOSUB getkey 'DISPOSITIVO RESPONDEU COM STATUS TECLA
RESULT = KEY
RETURN
ENDIF
IF vetor_i2c_index[0] = "1" THEN
OPCAO_I2C_PERIF = "1" 'FOI SOLITADO LIGAR CAMERA
TRISC.1 = 0
CAMERA_ON_OFF = 1
RETURN
endif
IF vetor_i2c_index[0] = "0" THEN
OPCAO_I2C_PERIF = "0" 'FOI SOLITADO LIGAR CAMERA
TRISC.1 = 0
CAMERA_ON_OFF = 0
RETURN
endif
IF vetor_i2c_index[0] = "R" THEN
OPCAO_I2C_PERIF = "R" 'FORCE UM RESET
'DESLIGA CAMERA E ESPERA RESETAR...
TRISC.1 = 0
CAMERA_ON_OFF = 0
PAUSE 1000
CLEARWDT
PAUSE 1000
CLEARWDT
'CAMERA_ON_OFF = 1
PAUSE 5000
ENDIF
return
END
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante