DS1307 Travando

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor otavio luiz » 12 Set 2008 08:25

phophollety escreveu:Coloque um resistor de valor alto (va testando, 1M, 4M7, 10M etc..) entre os terminais do resistor.

O seu dedo está atuando como capacitor ou resistor parasita na ordem de Mega Ohm ou Pico Farads...

Tente depois colocar um cap de 10pF algo em torno disso entre o resistor.

Se olhar os datasheets de osciladores como o 4060, nota-se os resistores...

Imagem

???? Coloque um resistor de valor alto entre os terminais do resistor????? Vixi, eu mesmo não entendi nada
Lembre-se, zona de Fresnel não é nenhuma franquia de puteiro.
Avatar do usuário
otavio luiz
Byte
 
Mensagens: 257
Registrado em: 11 Out 2006 13:56
Localização: Barretos - SP, terra de Peão

Mensagempor microcontrolador.pic » 12 Set 2008 08:32

lpagano escreveu:microcontrolador.pic,

Esse procedimento de aterrar o pino 3 está no Application Notes ou no Datasheet do DS1307 (não me lembro qual deles, mas é só dar uma pesquisada).

Eu aterrei esse pino e matou o meu problema, fora o capacitor de desacoplamento de uns 100nF entre Vcc e GND que também tive que usar no meu caso.

Ainda bem que o seu problema foi resolvido. Isso estimula mais ainda o uso do nosso fórum para discutir esses assuntos.


Valeu!



Muito obrigado pela dica!
:D
Avatar do usuário
microcontrolador.pic
Nibble
 
Mensagens: 50
Registrado em: 08 Set 2008 19:51

Mensagempor lpagano » 13 Set 2008 09:19

phophollety,

Esse resistor de alto valor seria também aplicável no caso do cristal do DS1307 (32,768 Hz)?

São características diferentes do circuito que você deu (4,19MHz).

Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor Djalma Toledo Rodrigues » 13 Set 2008 12:19

Esse resistor de 4.7 MOhom é para evitar que a entrada do 4521 fique aberta em relação a CC , já que o Cristal é isolante. No seu caso, como no PIC também, não é necessário pois, o Oscilador já possui internamente essa R.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor phophollety » 14 Set 2008 09:21

phophollety escreveu:Coloque um resistor de valor alto (va testando, 1M, 4M7, 10M etc..) entre os terminais do CRISTAL (desculpem-me o erro..)

O seu dedo está atuando como capacitor ou resistor parasita na ordem de Mega Ohm ou Pico Farads...

Tente depois colocar um cap de 10pF algo em torno disso entre o resistor.

Se olhar os datasheets de osciladores como o 4060, nota-se os resistores...

Imagem


Desculpem-me o erro..

Entre os terminais do CRISTAL coloque um resistor! Isso aumenta a corrente e pode estabilizar melhor...

Se ainda tiver problemas, monte aquele clássico oscilador de cristal com uma porta NOT ou um transistor mesmo e ligue na entrada do oscilador do DS1307 para alguns testes...
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor SoMeWhErE » 03 Nov 2008 14:25

Boa Tarde...

Não sei mais o que fazer....já procurei nos fórums...li...testei e nada adiantou até agora.

Troquei o DS, o cristal, tirei da placa coloquei no protoboard......

Vamos lá, vou descrever como estão as coisas aqui, estou usando MikroC.

- O DS está ligada à um PIC18F452.
- No protoboard está sem bateria, e o pino está aterrado, na placa de testes da microgenios está com bateria.
- Capacitor disco cerâmico de 100nF entre alimentação do DS.
- Resistores pull-up de 10k nos pinos RC3(SCL) e RC4(SDA).
- Carcaça do Cristal Aterrada.

Segue as Funções que estou usando:

Código: Selecionar todos
//Função para converter BCD e mostrar no LCD.
void BCD(unsigned short x, unsigned short y,unsigned short var)
{
   var1 = (var >> 4)+48; //converte 1º nibble em BCD, depois string
   LCD_custom_Chr(x,y,var1);   //escreve caractere no LCD
   var2 = (var & 0x0F)+48; //converte 2º nibble em BCD, depois string
   LCD_custom_Chr_Cp(var2);   //escreve caractere no LCD
}

//Função de leitura do DS1307
void leitura_rtc()
{
   I2C_Start();  //inicializa comunicação i2c
   I2C_Wr(0xD0);//endereço do DS1307 acionado (0) para gravação
   I2C_Wr(0x00);//endereço de inicio da programação, dos segundos.
   I2C_Repeated_Start();// Issue I2C signal repeated start
   I2C_Wr(0xD1);//endereço do DS1307 acionado (1) para leitura
   segundo = I2C_Rd(1);//lê o 1º byte e avisa que iremos ler mais
   minuto = I2C_Rd(1);//lê o 2º byte e avisa que iremos ler mais
   hora = I2C_Rd(0);//lê o 3º byte horas e encerra as leituras de dados
   I2C_Stop();  //finaliza comunicação I2C
}
//Função usada na inicialização do DS1307
void programa_i2c()
{
   I2C_Init(100000); // iniciliza I2C com frequencia de 100KHz
   delay_us(5);
   
   I2C_Start(); //inicializa a comunicação I2C
   I2C_Wr(0xD0);//endereço do DS1307 acionado (0) para gravação
   I2C_Wr(0x00);//endereço de inicio da programação, dos segundos.
   I2C_Wr(0x30);//inicia segundos, Bit 7 = 0, para ligar o cristal
   I2C_Repeated_Start();// Repete Sinal de Start
   I2C_Wr(0xD0);// Envia comando para modo de Escrita no RTC
   I2C_Wr(0x07);// Posiciono no REG 7 - Registrador de Controle
   I2C_Wr(0x80);// Desabilita pino de saída com frequencia ajustavel
   I2C_Stop(); // Finaliza comunicação I2C
}

//Programa Principal
void main()
{
   TRISD = 0;        //define portd como saida
   ADCON1 = 0x06;//torna todos os pinos AD como i/o de uso geral
   Lcd_custom_Config(&PORTD,7,6,5,4,&PORTE,2,0,1); //configura e inicializa LCD no modo 4 bits
   Lcd_custom_Cmd(Lcd_CLEAR);       // apaga display
   Lcd_custom_Cmd(Lcd_CURSOR_OFF);  // desliga cursor

   programa_i2c();

   while(1)       //inicializa loop
   {
      display_lcd(); //escreve no display lcd o valor
      leitura_rtc(); //efetua leitura de segundo, minuto e horas do DS1307
      delay_ms(1000); //gera delay de 1 segundo
   }
}


Quando liga ele sempre aparece isso no LCD:
01:00:00 ------> depois -----> 3?:7?:50 e fica nisso
se eu desconecto do DS o pino RC4(SDA) aparece isso 00:00:50.....

Já estou ficando LOUCO.....não sei mais o que fazer.....pra esse negócio funcionar.....

Se alguém puder me ajudar......agradeço...

VALEWSSSSS......
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor lpagano » 04 Nov 2008 08:34

Já experimentou tirar a instrução "delay_us(5)" para ver o que acontece?
Não entendi a linha "I2C_Wr(0x30)" da função inicialização do I2C em que você liga o cristal. Que eu me lembre no meu protótipo não coloquei isso.

Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor SoMeWhErE » 04 Nov 2008 09:37

lpagano escreveu:Já experimentou tirar a instrução "delay_us(5)" para ver o que acontece?
Não entendi a linha "I2C_Wr(0x30)" da função inicialização do I2C em que você liga o cristal. Que eu me lembre no meu protótipo não coloquei isso.

Valeu!


Olá...

Tirei o delay_us(5) e não mudou nada.

Em relação a linha "I2C_Wr(0x30)", para ligar o cristal não é só colocar o bit 7 = 0, pensei então, qualquer valor que eu inicializar os segundos, o bit 7 estando em 0 é pra inicializar o oscilador, não eh?

VALEWSSSS
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor SoMeWhErE » 04 Nov 2008 10:44

Coloquei os capacitores a terra, não tinha de 12,5pF como no datasheet, o mais proximo que tenho aqui é de 22pF, coloquei só pra testar, mas deu na mesma.

PORÉM.....
coloquei umas linhas pra testar...e divinha o que descobri....depois da leitura dos segundos coloquei estas linhas aqui, pra verificar o bit 7 do byte dos segundos (que habilita o oscilador)...e olha só.....

Código: Selecionar todos
if(segundo.f7==1)
      LCD_custom_Chr(2,1,49);
else
      LCD_custom_Chr(2,1,48);


....fica exibindo "1" no lcd....mas estou inicializando o byte dos segundo com 0 agora, e continua dando a mesma coisa.

Coloquei outras linhas para testar....

O comando I2C_Start e I2C_Wr retornam valores...dae fiz o seguinte coloquei umas variaveis pra receber esses valores e mostrei no lcd...

Na função que faz a configuração inicial do DS:
- Start: está retornando 0.....pelo Help-> retorna 0 quando não há erros, aqui está OK.
-Write: todos os Wr dentro da configuração estão retornando 2, porém é pra retornar 0 quando não há erro.

VALEW.....
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor SoMeWhErE » 05 Nov 2008 09:49

Ae pessoal consegui fazer funcionar....

Seguinte.....não pelo hardware...

O MikroC tem uma biblioteca para I2C via software, pensei vou testar por aqui.... peguei uma biblioteca para DS no forum da Mikroe.

Configurei SDA e SCL, respectivamete em RB0 e RB1. Ajustei o programa ..e mandei gravar....estou testando com o PIC na Placa Microgenios e o DS no Protoboard......

Quando liguei a alimentação....desanimei...não funcionou...deu na mesma....porém....me veio uma LUZ.... :idea: ......de ligar o dip swicht dos leds que estão na placa e ligados ao PORTB....TCHARAM......o negócio comecou a funcionar.......marcar as horas, minutos e segundos, certinho que eu tinha configurado no software......dae tirei os resistores de PULL UP...e continuou a funcionar....porem quando desligava os leds do portb, parava o relogio.....como os leds estão ligados ao GND, desliguei a chave dos leds...e coloquei os resistores para PULL DOWN....

AE....agora td funfando certinho.....

só naum descobri ainda pq não funcionou com o Hardware I2C....

mas no meu projeto eu terei que usar I2C via software msm...só estava testando via hardware para testar o DS....pq vou usar SPI para conversar com um SD CARD............xiii...próximo desafio.....tomara que dê menos trabalho que o relogio.

VALEW.....PESSUAR...
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor Sergio38br » 05 Nov 2008 09:52

Qual pic que esta na placa?? se lembre que o SD precisa de pelo menos de 512 bytes livres

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor SoMeWhErE » 05 Nov 2008 10:04

Sergio38br escreveu:Qual pic que esta na placa?? se lembre que o SD precisa de pelo menos de 512 bytes livres

[ ]'s
Sergio


No projeto será o PIC18F4550....

Falando USB com o PC, SPI com o SD Card, e agora soft_I2C com o DS.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Solução...

Mensagempor Vonnilmam » 11 Nov 2008 11:18

Eu já passei por esse problema a solução veio ao seguir exatamente o que o fabricando do DS1307 recomenda que é justamente o cuidado com a ligação do cristal aos pinos do DS,

Faça o PCB utilizando trilhas bem proximas entre o DS e o cristal isso serve também para o capacitor de 100nf entre os pinos de alimentação (aliás faça essa ligação em cima de cada pino GND e VCC)

Em torno dos pinos que vão ligados o cristal faça um laço de terra afim de contornar os pinos do oscilador...

No meu caso não utilizo aterrar o cristal e não utilizo capacitores de compensação...

O meu relogio funciona com bateria de bkp, pelo que notei no sheet as ligaçãoes em torno do DS devem ser feitas o mais curtas possiveis e também a adoção de cuidados com EMI, procure sempre fazer uma zono de terra em torno do chip e utilizar um ferrite de 1cmx0.5cm mais o menos isso de tamanho com um fio enrrolado nesse ferrite com mais ou menos 2 a 5 voltas e coloque esse filtro na alimentação do circuito todo.

Problemas de EMI são uma realidade principalmente em se tratando de circuitos com alimentação abaixo de 3v3 que são mais susceptiveis a ruidos, você sabia que na fonte de alimentação por mais filtrada que ela seja existem ruidos de alta frequencia que giram em torno de 1mhz até uns 100mhs? esses ruidos podem interferir em circuitos sensiveis e que trabalham em altas velocidades como é o caso dos DSPs....

Para solucionar esses e outros problemas faça sempre uma fonte bem filtrada e utilize filtros EMI como o que indiquei acima e sempre faça loops de terra em torno dos pinos de um cristal oscilador....

espero ter ajudado,
Muito obrigado
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Anterior

Voltar para PIC

Quem está online

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

cron

x