Página 1 de 2
[Resolvido] DS1307-DS1621 e comunicação I2C

Enviado:
23 Ago 2010 12:33
por [Daniel]
Alguém sabe como posso ligar os dois dallas nesse pic? I2C...Mas como eu faço isso.
Alguem tem os códigos ou alguma coisa assim que possa me ajudar, qualquer informação é de grande valia, minha intenção é usar um LCD 16x2 com o pic e esses dallas, primeiramente quero usar o ds1307 depois eu penso no termometro e mostrar os valor no visor do lcd. Pretendo programar isso em assembly.

Enviado:
23 Ago 2010 12:38
por mastk
Se a comunicaçao for one-wire, nao me lembro exatamente, devera, reservar um pino para cada DS e trata-los separadamente, caso o one-wire nao suporte mais de um escravo no barramento. De uma olhada no protocolo, para ter certeza.

Enviado:
23 Ago 2010 12:41
por Djalma Toledo Rodrigues
Sugestão
Antes de mais nada baixe o Datasheet deles
la esta tudo explicado para o 'Montador do Programa'
Se ainda assim duvidas houver, não exite em voltar a este Fórum
DJ

Enviado:
23 Ago 2010 13:45
por tcpipchip

Enviado:
23 Ago 2010 14:05
por vtrx
Daniel,se não me engano voce programam em ASM certo?
Se for tenho um projeto de teste completo(temperaura,horas e LCD) usando o 16F84 mas não será difícil usar o 16f628.

Enviado:
23 Ago 2010 16:19
por [Daniel]
mastk:
Certo, mas eu vou tentar com o I²C mesmo... vamos ver o que da.
Djalma Toledo Rodrigues:
Opa, ja baixei os dois estão salvos aqui.
tcpipchip:
Prof!? que bacana heim...
Sim eu salvei junto com os datasheets agora, vejo isso como uma forma muito mais facil de compreender os datasheets de uma forma resumida e mais simples. (funções básicas)
vtrx:
Uhm sim eu programo em asm mesmo... bah!! E como posso consegui-lo? Sim é verdade não deve ser muito complicado mesmo, acredito.
Obrigado a todos pela colaboração!

Enviado:
23 Ago 2010 18:28
por vtrx
Passa o email que mando.

Enviado:
26 Ago 2010 17:47
por [Daniel]
Colegas, estou deparado com um erro aqui, na simulação do proteus, alguém sabe o que pode ser?
Infinitamente é mostrado esse erro:
[HD44780] Controller received data whilst busy.
Como posso resolver isso, alguém sabe? o que significa?

Enviado:
27 Ago 2010 00:15
por rafael.wachter
apartir da minha vã ignorância em simulação no proteus mas interpratando as mensagens e vendo q ela vem do LCD...
vc provavelmente não está deixando um tempo minimo(q pode variar dependendo do LCD) para ele executar os comandos q vc envia

Enviado:
04 Set 2010 08:30
por [Daniel]
Então colegas, achei ainda muito complexo e resolvi fazer para aprender como eu consegui compreender com o pwm (de uma modo geral), peguei o livro Conectando o PIC - recursos avançados, e copiei para mim a parte que fala sobre SPI e I2C, então peguei o esquema e o codigo e passei para o micro afim de testar e descobrir como fazer isso funcionar, o programa funciona com um pic 16f877a e o I2C do mesmo, depois que conseguir ver funcionando assim, é provavel que consiga entender a mesma técnica por software.
É o seguinte, montei o circuito e escrevi todo o programa mas sem comentários, vou mostrar aos senhores, gostaria que se alguém tiver tempo, possa olhar os mesmos, segue o link para download, o esquema para
simulação no proteus e o arquivo
hex com o
asm junto, gostaria que alguem que ja conhece a comunicação i2c testasse o programa, e se conseguir ou puder por favor me diga o que esta errado ficaria grato por isso. Pois nao esta funcionando, eu copiei igual ao livro porém só adicionei uma linha, "ERRORLEVEL -302" que diz respeito a não mostrar esse erro na compilação do mplab que no caso seria a respeito dos registradores que não operam no bank0, mas esta tudo ok, pois foi usado o #define lá em cima, e passei as subrotinas para o fim do programa não antes das configs como estava antes.
seguem todos os arquivos:
http://www.4shared.com/file/AshckpjT/I2C_EEPROM.html
somente o programa:
- Código: Selecionar todos
;*****************************************************************************
;PROGRAMA TESTE EEPROM 24C04 EXTERNA COM PIC16F877A E COMUNICACAO I2C
;LIVRO CONECTANTO O PIC - RECURSOS AVANCADOS - EXEMPLO 8
;VERSÃO 2.0 - DATA: 24/02/2003 - NICOLAS CESAR LAVINA E DAVID JOSE DE SOUZA
;*****************************************************************************
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
;*****************************************************************************
CBLOCK 0X20
FILTRO_BOTOES
TEMPO_TURBO
TEMPO1
TEMPO0
FLAG
AUX
ENDERECO_HIGH
ENDERECO_LOW
BUFFER
VALOR_DADOS
ENDC
;*****************************************************************************
#INCLUDE <P16F877A.INC>
ERRORLEVEL -302
;*****************************************************************************
#DEFINE BANK1 BSF STATUS,RP0
#DEFINE BANK0 BCF STATUS,RP0
;*****************************************************************************
FILTRO_TECLA EQU .200
TURBO_TECLA EQU .60
END_EEPROM_H EQU 0X00
END_EEPROM_L EQU 0X00
;*****************************************************************************
#DEFINE F_ERRO FLAG,0
;*****************************************************************************
#DEFINE BOTAO_0 PORTB,0
#DEFINE BOTAO_1 PORTB,1
#DEFINE BOTAO_2 PORTB,2
#DEFINE BOTAO_3 PORTB,3
;*****************************************************************************
#DEFINE DISPLAY PORTD
#DEFINE RS PORTE,0
#DEFINE ENABLE PORTE,1
#DEFINE SCL PORTC,3
;*****************************************************************************
#DEFINE SDA PORTC,4
;*****************************************************************************
ORG 0X00
GOTO CONFIG
;*****************************************************************************
CONFIG
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BANK1
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'11111111'
MOVWF TRISB
MOVLW B'11110101'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'00000100'
MOVWF TRISE
MOVLW B'11011111'
MOVWF OPTION_REG
MOVWF B'00000000'
MOVWF INTCON
MOVLW B'00000111'
MOVWF ADCON1
MOVLW B'00001001'
MOVWF SSPADD
MOVLW B'10000000'
MOVWF SSPSTAT
BANK0
MOVLW B'00101000'
MOVWF SSPCON
BSF SCL
BTFSC STATUS,NOT_TO
GOTO $
MOVLW 0X20
MOVWF FSR
LIMPA_RAM
CLRF INDF
INCF FSR,F
MOVF FSR,W
XORLW 0X80
BTFSS STATUS,Z
GOTO LIMPA_RAM
;*****************************************************************************
INICIALIZACAO_DISPLAY
BCF RS
MOVLW 0X30
CALL ESCREVE
MOVLW .3
CALL DELAY_MS
MOVLW 0X30
CALL ESCREVE
MOVLW 0X30
CALL ESCREVE
MOVLW B'00111000'
CALL ESCREVE
MOVLW B'00000001'
CALL ESCREVE
MOVLW .1
CALL DELAY_MS
MOVLW B'00001100'
CALL ESCREVE
MOVLW B'00000110'
CALL ESCREVE
BSF RS
;*****************************************************************************
LE_MEMORIA_EEPROM
MOVLW END_EEPROM_H
MOVWF ENDERECO_HIGH
MOVLW END_EEPROM_L
MOVWF ENDERECO_LOW
CALL I2C_EEPROM_READ
MOVF BUFFER,W
MOVWF VALOR_DADOS
;*****************************************************************************
CALL ATUALIZA_TELA_LINHA_1
CALL ATUALIZA_TELA_LINHA_2
;*****************************************************************************
VARRE
CLRWDT
VARRE_BOTOES
BTFSS BOTAO_0
GOTO TRATA_BOTAO_0
BTFSS BOTAO_1
GOTO TRATA_BOTAO_1
BTFSS BOTAO_2
GOTO TRATA_BOTAO_2
BTFSS BOTAO_3
GOTO TRATA_BOTAO_3
;*****************************************************************************
MOVLW FILTRO_TECLA
MOVWF FILTRO_BOTOES
MOVLW .1
MOVWF TEMPO_TURBO
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_0
DECFSZ FILTRO_BOTOES,F
GOTO VARRE
DECFSZ TEMPO_TURBO,F
GOTO VARRE
MOVLW TURBO_TECLA
MOVWF TEMPO_TURBO
INCF VALOR_DADOS,F
CALL ATUALIZA_TELA_LINHA_2
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_1
DECFSZ FILTRO_BOTOES,F
GOTO VARRE
DECFSZ TEMPO_TURBO,F
GOTO VARRE
MOVLW TURBO_TECLA
MOVWF TEMPO_TURBO
DECF VALOR_DADOS,F
CALL ATUALIZA_TELA_LINHA_2
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_2
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z
GOTO VARRE
GRAVA_MEMORIA_EEPROM
MOVLW END_EEPROM_H
MOVWF ENDERECO_HIGH
MOVLW END_EEPROM_L
MOVWF ENDERECO_LOW
MOVF VALOR_DADOS,W
MOVWF BUFFER
CALL I2C_EEPROM_WRITE
MOVLW .10
CALL DELAY_MS
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_3
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z
GOTO VARRE
DECFSZ FILTRO_BOTOES,F
GOTO VARRE
MOVLW END_EEPROM_H
MOVWF ENDERECO_HIGH
MOVLW END_EEPROM_L
MOVWF ENDERECO_LOW
CALL I2C_EEPROM_READ
BTFSC F_ERRO
GOTO $+3
MOVF BUFFER,W
MOVWF VALOR_DADOS
CALL ATUALIZA_TELA_LINHA_2
GOTO VARRE
;*****************************************************************************
;SUB-ROTINAS
;*****************************************************************************
DELAY_MS
MOVWF TEMPO1
MOVLW .250
MOVWF TEMPO0
CLRWDT
DECFSZ TEMPO0,F
GOTO $-2
DECFSZ TEMPO1,F
GOTO $-6
RETURN
;*****************************************************************************
ESCREVE
MOVWF DISPLAY
NOP
BSF ENABLE
GOTO $+1
BCF ENABLE
MOVLW .1
CALL DELAY_MS
RETURN
;*****************************************************************************
ATUALIZA_TELA_LINHA_1
BCF RS
MOVLW 0X83
CALL ESCREVE
BSF RS
MOVLW 'M'
CALL ESCREVE
MOVLW 'A'
CALL ESCREVE
MOVLW 'S'
CALL ESCREVE
MOVLW 'T'
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW 'R'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'I'
CALL ESCREVE
MOVLW '2'
CALL ESCREVE
MOVLW 'C'
CALL ESCREVE
RETURN
;*****************************************************************************
ATUALIZA_TELA_LINHA_2
BCF RS
MOVLW 0XC6
CALL ESCREVE
BSF RS
SWAPF VALOR_DADOS,W
ANDLW B'00001111'
MOVWF AUX
MOVLW 0X0A
SUBWF AUX,W
MOVLW 0X30
BTFSC STATUS,C
MOVLW 0X37
ADDWF AUX,W
CALL ESCREVE
MOVF VALOR_DADOS,W
ANDLW B'00001111'
MOVWF AUX
MOVLW 0X0A
SUBWF AUX,W
MOVLW 0X30
BTFSC STATUS,C
MOVLW 0X37
ADDWF AUX,W
CALL ESCREVE
MOVLW 'h'
CALL ESCREVE
RETURN
;*****************************************************************************
AGUARDA_I2C_LIVRE
BANK1
BTFSC SSPSTAT,R_W
GOTO $-1
MOVF SSPCON2,W
ANDLW B'00011111'
BTFSS STATUS,Z
GOTO $-3
BANK0
RETURN
;*****************************************************************************
ACK_OUT
BANK1
BCF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
BANK0
RETURN
;*****************************************************************************
NACK_OUT
BANK1
BSF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
BANK0
RETURN
;*****************************************************************************
TESTA_ACK
BANK1
BTFSC SSPCON2,ACKSTAT
GOTO RECEBEU_NACK
BANK0
BCF F_ERRO
RETURN
;*****************************************************************************
RECEBEU_NACK
BANK0
BSF F_ERRO
RETURN
;*****************************************************************************
I2C_EEPROM_READ
BANK1
BSF SSPCON2,SEN
BANK0
CALL AGUARDA_I2C_LIVRE
BCF STATUS,C
RLF ENDERECO_HIGH,W
IORLW B'10100000'
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
MOVF ENDERECO_LOW,W
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
BANK1
BSF SSPCON2,RSEN
BANK0
CALL AGUARDA_I2C_LIVRE
RLF ENDERECO_HIGH,W
IORLW B'10100000'
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
BANK1
BSF SSPCON2,RCEN
BANK0
CALL AGUARDA_I2C_LIVRE
MOVF SSPBUF,W
MOVWF BUFFER
CALL NACK_OUT
CALL AGUARDA_I2C_LIVRE
BANK1
BSF SSPCON2,PEN
BANK0
CALL AGUARDA_I2C_LIVRE
RETURN
;*****************************************************************************
I2C_EEPROM_WRITE
BANK1
BSF SSPCON2,SEN
BANK0
CALL AGUARDA_I2C_LIVRE
BCF STATUS,C
RLF ENDERECO_HIGH,W
IORLW B'10100000'
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
MOVF ENDERECO_LOW,W
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
MOVF BUFFER,W
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
BANK1
BSF SSPCON2,PEN
BANK0
CALL AGUARDA_I2C_LIVRE
RETURN
;*****************************************************************************
I2C_ERRO
BANK1
BSF SSPCON2,PEN
BANK0
BCF RS
MOVLW 0XC6
CALL ESCREVE
BSF RS
MOVLW 'E'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW .250
CALL DELAY_MS
MOVLW .250
CALL DELAY_MS
MOVLW .250
CALL DELAY_MS
MOVLW .250
CALL DELAY_MS
CALL ATUALIZA_TELA_LINHA_2
RETURN
;*****************************************************************************
END ;FIM DO PROGRAMA.
;*****************************************************************************

Enviado:
04 Set 2010 13:25
por vtrx
Daniel,primeiro voce tem que dizer oque voce quer.
Quer gravar/ler numa eeprom serial(I2C)?
Se sim,quer por HardWare ou SoftWare?
Voce sabia que eeproms 24C01 a 24C16 são endereçadas diferentemente das 24C32 a 24C512,quero dizer,uma rotina de alta performance em ASM(Soft) para 24C16 não funciona numa 24C32.
Voce que testar o DS1307 para ver como funciona?
Se sim(ja que parece que o exemplo mais complexo que te passei voce não compreendeu)posso te passar uma com o 16F628+DS1307+comandos/resultado pela serial ->PC...
Oque não funcionou neste código que voce postou, ja que ele é simples?

Enviado:
05 Set 2010 17:19
por rcakto
companheiro olha eu sempre programei usando na primeira linha #INCLUDE <P16F877A.INC>
para depois entrar com os dados __CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
nao sei pq mas tinha hora que funcionava direito colocando depois mas as vezes dava pau por isso... e CBLOCK 0X20
FILTRO_BOTOES
TEMPO_TURBO
TEMPO1
TEMPO0
FLAG
AUX
ENDERECO_HIGH
ENDERECO_LOW
BUFFER
VALOR_DADOS
ENDC
ta precisando de uma identação tb.. so para ficar mais legivel mesmo...XD
bom de qualquer forma nao tenho como lhe ajudar mais do que isso... to sem tempo para dar uma geral em tudo... mas se ninguem lhe ajudar ate amanha eu tento ver o que posso fazer...

Enviado:
12 Set 2010 19:30
por [Daniel]
Colegas, aos poucos as coisa ta andando...
Consegui ler as informações do dallas 1307 por soft e mostrar num lcd, estou estudando como vou gravar essas infos ainda mas tudo bem...vou conseguir to quase la.
Sobre a eeprom, se eu quiser ligar uma 24C04 por exemplo (tenho uma de tv para testar aqui) alguem sabe me diser como eu "converso" com ela? Olhei no datasheet mas ainda nao esta claro pra mim, como eu devo proceder alguem sabe o passo a passo e os requisitos para iniciar uma comunicação i2c por exemplo?
Como eu endereço esse chip para operar junto com o ds na mesma linha? E mais =), tem algum programa pra eu ler e gravar a eeprom sem usar um micro controlador e ver o mapas da memória. Eu tenho um gravador de eeprom serial, isso ajuda? Consertei uma tv a muito tempo com ele.

Enviado:
05 Out 2010 12:35
por [Daniel]
Pois é a rotina funciona no pic 16f628, por soft. Agora tentei usar a mesma no pic16f876 e não funciona, ja estou usando nesse mesmo pic as interrupções de TMR0 e TRM2, alguém pode me ajudar com isso?

Enviado:
09 Out 2010 11:15
por [Daniel]
Alguém sabe como devo proceder para por exemplo incrementar os minutos e gravar de volta no RTC?