[Resolvido] DS1307-DS1621 e comunicação I2C

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

[Resolvido] DS1307-DS1621 e comunicação I2C

Mensagempor [Daniel] » 23 Ago 2010 12:33

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.
Editado pela última vez por [Daniel] em 19 Out 2010 14:43, em um total de 2 vezes.
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor mastk » 23 Ago 2010 12:38

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.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor Djalma Toledo Rodrigues » 23 Ago 2010 12:41

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
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor tcpipchip » 23 Ago 2010 13:45

Aqui é o material que preparei para meus alunos...

http://www.inf.furb.br/~maw/topicos/top ... p_viii.pdf

http://www.inf.furb.br/~maw/topicos/topicos_cap_vii.pdf

Talvez te sirva...

Miguel
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor vtrx » 23 Ago 2010 14:05

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.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor [Daniel] » 23 Ago 2010 16:19

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!
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor vtrx » 23 Ago 2010 18:28

Passa o email que mando.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor [Daniel] » 26 Ago 2010 17:47

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.

Imagem

Como posso resolver isso, alguém sabe? o que significa?
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor rafael.wachter » 27 Ago 2010 00:15

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
Any program which runs right is obsolete.
Avatar do usuário
rafael.wachter
Nibble
 
Mensagens: 89
Registrado em: 19 Nov 2008 13:12
Localização: no RS tchê

Mensagempor [Daniel] » 04 Set 2010 08:30

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.
;*****************************************************************************
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor vtrx » 04 Set 2010 13:25

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?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor rcakto » 05 Set 2010 17:19

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...
rcakto
Word
 
Mensagens: 787
Registrado em: 09 Jun 2010 00:57
Localização: vitoria ES

Mensagempor [Daniel] » 12 Set 2010 19:30

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.
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor [Daniel] » 05 Out 2010 12:35

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?
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor [Daniel] » 09 Out 2010 11:15

Alguém sabe como devo proceder para por exemplo incrementar os minutos e gravar de volta no RTC?
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x