collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: I2C Problemas  (Lida 14110 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
I2C Problemas
« em: 12 de Janeiro de 2010, 20:52 »
Pessoal tudo bem!! :)

Pessoal sou novo por aqui, peço desde jà desculpas se alguma coisa fizer de errado, isto como ainda não ter conhecimento aqui do forum!

Bem eu estudo Linguagem C e o compilador è o CCS que estou a usar !
Comecei a estudar agora o protocol I2C para comunicar com o chip Ds1307 + o chip DS1631, o que tem dado dores de cabeça porque em individual atè funciona ,mas os dois no mesmo barramento nem pensar!

Eu uso o Pic 16F877A embora o meu ingles seja fraco jà revi os datasheetes muintas vezes de todos os chips e nao consigo que funcione!
Eu posso postar aqui tanto o codigo principal como as bibliotecas que estou a usar para ver o que esta errado quanto ao
endereço dos chips eu tenho o seguinte;

Código: [Seleccione]
DS1307= i2c_write(0xD0);  1101 000 0=w
      //     =  i2c_write(0xD1); 1101 000 1=R

         Para o DS1631
DS1631=i2c_write(0x92);  1001 001 0=w aqui Configuro A2=0  A1=0  A0=1 + 0=w
     //      =i2c_write(0x93);  1001 001 1=R

Entao no codigo tenho    #use i2c(master,sda=PIN_C4,scl=PIN_C3)
Eu estou usar os pinos C4 e C3 do PIC 16F877A para a comunicaçao dos
chips, para os dois com as resistores pullup 2.5k!!

Vou postar entao o codigo para ver se voces veem onde estou a falhar!depois posso postar aqui as bibliotecas se desejarem!

Desde jà agradeo a todos que  poder ajudar
Um abraço

#include <16f877A.h>                                   
 
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT 
#use delay(clock=4000000)                           

#use i2c(master,sda=PIN_C4,scl=PIN_C3,FORCE_HW)// pinos de comunicaçao...Pic+DS1307 
#include <RTC_DS1307.c>//libraria do RTC DS1307
#include <kbd4x4ABCD_PROTEUS.c> //libraria do teclado                         
#include <flex_lcd.c>
#include <DS1631.c>
   

#use standard_io (b)                                         
#use standard_io (a)
#use standard_io(c)                                                 
#use standard_io(D)     

//#define use_portb_lcd TRUE         //definir portb lcd
//Variaveis globais                                                                   

void main()//Funçao principal
{
  BYTE sec;
  BYTE min;
  BYTE hrs;                                                                         
  BYTE day;
  BYTE month;
  BYTE yr;
  BYTE dow;

     float value; 
 
 lcd_init();                                     
    delay_ms(50);
   
        //ds1307_init();
          //delay_ms(50);

                  ds1307_set_date_time(10,10,10,0,10,10,00); 
       
  while(1)
  {                                                                                       
   ds1307_init();
   delay_ms(1000);                                                                       
   
    ds1307_get_date(day,month,yr,dow);                                                   
    ds1307_get_time(hrs,min,sec);
     
    printf(lcd_Putc,"\f \%02d/\%02d/\%02d\r\n",day,month,yr);
    printf(lcd_Putc," %02d:\%02d:\%02d", hrs,min,sec);
                                                                     
                                                             
      init_temp(); 
       delay_ms(100);
       value = (float)read_full_temp();
       value /= 100.0;
       value=(value-32)/1.8;
       lcd_gotoxy(8,1);
      printf(lcd_putc,"\ftemp.%03.1f", value);                           
      delay_ms(100);
       
     }
                         
   
  }
« Última modificação: 12 de Janeiro de 2010, 23:24 por metRo_ »

Offline p0wd3r

  • Mini Robot
  • *
  • Mensagens: 74
Re: I2C Problemas
« Responder #1 em: 12 de Janeiro de 2010, 22:45 »
Se individualmente funcionam então era de prever que funcionassem em conjunto, logo parto do princípio que estejas com problemas eléctricos. Como estás a ligar o barramento I2C? Quais as resistências de pull-up e a tensão que estás a usar na PIC?

Quanto ao código, CSS não me diz nada, eu programo à "HOMEM"  ;D ;D ;D

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: I2C Problemas
« Responder #2 em: 12 de Janeiro de 2010, 22:49 »
Certifica-te que os endereços dos chips são diferentes, para tal tens 2 ou 3 pinos em cada um para o definires. No código, certifica-te também que estás a usar o endereço correcto.
Tr3s
Daniel Gonçalves

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Re: I2C Problemas
« Responder #3 em: 12 de Janeiro de 2010, 23:17 »
Se individualmente funcionam então era de prever que funcionassem em conjunto, logo parto do princípio que estejas com problemas eléctricos. Como estás a ligar o barramento I2C? Quais as resistências de pull-up e a tensão que estás a usar na PIC?

Quanto ao código, CSS não me diz nada, eu programo à "HOMEM"  ;D ;D ;D

Colega obrigado por responderes!

Em termos electricos acho que esta tudo bem, agora quanto ao barramento fiz assim; ligei os pinos  SCL e SDA do DS1307 +Ds1631 ao pino C4 e C3 do PIc que corresponde ao SDA e SCL do PIC

Quanto  as resistencia tem duas de 2.5K

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Re: I2C Problemas
« Responder #4 em: 12 de Janeiro de 2010, 23:21 »
Certifica-te que os endereços dos chips são diferentes, para tal tens 2 ou 3 pinos em cada um para o definires. No código, certifica-te também que estás a usar o endereço correcto.

Obrigado por responder!

Como eu citei em cima no codigo penso que esta bem, quer dizer que o Ds1307 tem endereço fixo, quanto ao Ds1631 esse tem 3 pinos A2,A1,A0 que podem ser modificados! quanto ao codigo tenho duvidas porque ainda nao tenho grande experiencia, por isso nâo sei por onde continuar!

Por isso eu postei o codigo em cima para ver se algem detecta algum erro!

desde ja agradeço

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: I2C Problemas
« Responder #5 em: 12 de Janeiro de 2010, 23:39 »
O código que puseste não é suficiente para ver mais  ;)
Tr3s
Daniel Gonçalves

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Re: I2C Problemas
« Responder #6 em: 13 de Janeiro de 2010, 06:34 »
O código que puseste não é suficiente para ver mais  ;)

Bom Dia Daniel tudo bem!!

Olha eu que  falta no meu ver são as biblioteca mas eu posso postar aqui caso queiras, eu nao postei porque os poste muito grande,mas caso queiras eu posto!
Agora se o codigo mesmo assim falta mais alguma coisa sinceramente não sei ir mais longe!, mas caso possas correguir agradeço!

Um abraço

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: I2C Problemas
« Responder #7 em: 13 de Janeiro de 2010, 09:28 »
(...) fiz assim; ligei os pinos  SCL e SDA do DS1307 +Ds1631 ao pino C4 e C3 do PIc que corresponde ao SDA e SCL do PIC

Tens que ligar o SCL com SCL e SDA com SDA.

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Re: I2C Problemas
« Responder #8 em: 13 de Janeiro de 2010, 10:03 »
(...) fiz assim; ligei os pinos  SCL e SDA do DS1307 +Ds1631 ao pino C4 e C3 do PIc que corresponde ao SDA e SCL do PIC

Tens que ligar o SCL com SCL e SDA com SDA.

Sim,Sim ,foi assim que fiz eu em cima talvez me expliquei mal !

Obrigado

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: I2C Problemas
« Responder #9 em: 13 de Janeiro de 2010, 13:50 »
E os pull-ups tão bem de certeza?

StarRider

  • Visitante
Re: I2C Problemas
« Responder #10 em: 13 de Janeiro de 2010, 14:03 »
E os pull-ups tão bem de certeza?

Boas,

Acho que passa por isso mesmo, eu antes de mais ia para os 4K7... e depois então logo via.
Apesar da ideia de que o valor dos pullup nao é critico, quanto mais dispositivos existirem no
bus maior é a capacitancia (acho que o máximo ronda os 400pf) ... pullups de maior valor
são aconselháveis.

Acho que o  fiasgardone não tem nada a perder em experimentar com pullups de 4K7 (ou mesmo
10k).

Abraços
Paulo A.


« Última modificação: 13 de Janeiro de 2010, 14:09 por StarRider »

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Re: I2C Problemas
« Responder #11 em: 13 de Janeiro de 2010, 14:50 »
Pessoal tudo bem!!

Bem.. respondendo aos colegas a cima ! eu tenho as resistencias  de pullups ligadas ente as linhas de SDA e SCL  e o Positivo da alimenntação ou seja os 5V para cada linha uma resistencia!

Eu experimentei os  3 valores das resistencias   2.5K,4.7K,10K e de todas o resultado è o mesmo o que mostra no LCD è;
45/25/-1
45:85:85
( Peço desculpa esqueci-me de postar no primeiro poste)

Acho que isto tem a ver com o DS1307 e não sai disso, quanto a temperatura não mostra nada!
Tenho feito tudo mas sem resultado
Para meu azar jà revistei o forum do CCs todo e nada que me consiga ajudar!
Todos juntos havemos de conseguir ! 

Um abraço

« Última modificação: 13 de Janeiro de 2010, 14:52 por fiasgardone »

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: I2C Problemas
« Responder #12 em: 13 de Janeiro de 2010, 17:53 »
Acho que passa por isso mesmo, eu antes de mais ia para os 4K7... e depois então logo via.
Apesar da ideia de que o valor dos pullup nao é critico, quanto mais dispositivos existirem no
bus maior é a capacitancia (acho que o máximo ronda os 400pf) ... pullups de maior valor
são aconselháveis.

Acho que querias dizer pull-ups de *menor* valor. Reduzir o valor do pull-up torna mais rápida a carga da capacitância do bus, fazendo com que a linha vá mais depressa para os 5V quando todos os dispositivos a largam.

Também há um limite inferior, pois os drivers dos dispositivos só fornecem X corrente e esse X em conjunto com o pull-up tem que ser suficiente para manter a linha suficientemente perto do GND quando "activa".

Mas são só 2 dispositivos no bus, o pull-up paqui não me parece crítico. Eu ia mais para um problema de endereçamento (mas parece que o endereço não é configurável, é um número único) ou um problema de libertação do bus (verifica que ambas as linhas SDA e SCL vêm a 5V depois de falar com um chip e antes de começar a falar com o outro) ou um problema de tempo (os sinais estão a mudar demasiado depressa). Ou então não estás a emitir um STOP depois de usar o DS1307 e quando vais aceder ao outro DS o 1307 ainda responde estrangando assim a comunicação.

Offline p0wd3r

  • Mini Robot
  • *
  • Mensagens: 74
Re: I2C Problemas
« Responder #13 em: 13 de Janeiro de 2010, 19:42 »
Olha uma coisa, estes chips (Ds1307 + o chip DS1631) estão alimentados a que tensão ?

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Re: I2C Problemas
« Responder #14 em: 13 de Janeiro de 2010, 20:19 »
Pessoal

 Todos os componentes estaõ ligados a 5V !

Eu tambem penso que seja outro problema mas não dos resistencias pull-ups, bem o chips Ds1307 esse tem o endereço unico ¨,mas o DS1631 esse tem pode ser configuravel ele tem 3 pinos de configuração è o A2,A1,A0, espero não estar enganado! eu medi o bus e estao nos 5 V

Agora quando individual atè funciona,agora quando ligo os dois chips no mesmo bus ,aí fica preso , men a temperatura mostra !

Pessoal caso algem quiser experimentar eu posto aqui as bibliotecas ou atè só para ver onde esta o erro ou erros, sinceramente jà estou com isto a bastante tempo e ainda não consegui por a funcionar!

Agradeço emenso os vossos comentarios


Forte abraço
« Última modificação: 13 de Janeiro de 2010, 20:23 por fiasgardone »