Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Interfacciamento RTC DS1302

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Interfacciamento RTC DS1302

Messaggioda Foto Utentedaniele1996 » 21 apr 2022, 12:00

Ciao a tutti, avendo la necessità di mantenere l'orario anche dopo lo spegnimento ho deciso di aggiungere un rtc DS1302. Inizialmente funzionava, manteneva l'orario, nelle ultime prove quando leggo la data mi restituisce 01:01:01 01/01/01 Day: 01. Nel codice non imposto a zero il bit CH all'indirizzo 0x80(R)/0x81(W), può essere questo il problema? Appena posso provo a caricare il codice che imposta questo bit a zero e vi dico.
Per quanto riguarda la batteria, ho recuperato da un "timer" digitale una batteria ricaricabile 2032 i cui dati di targa indicano 3.6V, l'ho installata e ho impostato il caricabatteria a 2 diodi e la resistenza da 2K. Esattamente nel registro 0x90 imposto il valore di 0xA5 (1010 0101) (ho preso questo valore da un esempio su internet). Tenendolo qualche giorno acceso, ho misurato la tensione della batteria ed è a circa 4V, Questo può dare problemi? Esattamente quando si può considerare "carica" la batteria? Grazie :)
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

1
voti

[2] Re: Interfacciamento RTC DS1302

Messaggioda Foto UtenteGioArca67 » 21 apr 2022, 16:03

La batteria ricaricabile citata dovrebbe essere agli ioni di litio, quella indicata è la tensione nominale: cioè la media fra tensione della batteria quando ritenuta carica - circa 4,2 V - e quando ritenuta scarica - circa 3.0 V -, a seconda di questi valori (ognuno la pensa in modo diverso, e per questioni di marketing) esce 3,6V o 3,7V.
A 4 V la batteria è quasi completamente carica
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4588
Iscritto il: 12 mar 2021, 9:36

0
voti

[3] Re: Interfacciamento RTC DS1302

Messaggioda Foto Utentedaniele1996 » 22 apr 2022, 2:32

Quindi non è un problema se la tengo sempre sotto carica?
comunque, ho provato ad impostare il bit manualmente, non cambia nulla... rimane sempre bloccato su 1/1/1 1:1:1
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[4] Re: Interfacciamento RTC DS1302

Messaggioda Foto Utentestefanopc » 22 apr 2022, 10:15

Non è un problema ma se si tratta di una Li-Ion io non oltrepassarei i 4.1V .
Agendo su switch diodi e resistenze interne si dovrebbe riuscire a mantenere la batteria alla tensione desiderata.
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
13,3k 5 9 13
Master EY
Master EY
 
Messaggi: 5566
Iscritto il: 4 ago 2020, 9:11

0
voti

[5] Re: Interfacciamento RTC DS1302

Messaggioda Foto Utentedaniele1996 » 22 apr 2022, 12:45

daniele1996 ha scritto:ho impostato il caricabatteria a 2 diodi e la resistenza da 2K. Tenendolo qualche giorno acceso, ho misurato la tensione della batteria ed è a circa 4V

Due diodi sono 1.4V, quindi 5 - 1.4 = 3.6V, mi sono tiraro il conto così... però evidentemente c'è qualcosa di un po diverso visto che la batteria era a 4V... mi domando se sia necessario qualche accorgimento in più...
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[6] Re: Interfacciamento RTC DS1302

Messaggioda Foto Utentestefanopc » 22 apr 2022, 13:15

Forse la batteria è carica.
La caduta sui diodi a correnti molto inferiori al mA potrebbe essere anche di 0.5V.
Metti un multimetro in serie alla batteria e misura da che parte va la corrente .
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
13,3k 5 9 13
Master EY
Master EY
 
Messaggi: 5566
Iscritto il: 4 ago 2020, 9:11

0
voti

[7] Re: Interfacciamento RTC DS1302

Messaggioda Foto Utentedaniele1996 » 23 apr 2022, 0:54

stefanopc ha scritto:Metti un multimetro in serie alla batteria e misura da che parte va la corrente

Appena posso controllo, invece per quanto riguarda la lettura dell'orario, non capisco il perché non funziona, eppure il programma mi sembra corretto...
Vi posto la funzione che legge/scrive
Codice: Seleziona tutto
void write_cmd(){
   reset_rtc();
   output_rtc_en(1);
   for(rtc_i = 0; rtc_i < 8; rtc_i += 1){
      output_data(rtc_cmd & (1 << rtc_i));
      _delay_us(1);
      output_clk(1);
      if((rtc_i == 7) && (rtc_cmd & 1))break;
      _delay_us(1);
      output_clk(0);
   }
   if(rtc_cmd & 1){ // read
      rtc_read = 0;
      for(rtc_i = 0; rtc_i < 8 ; rtc_i +=1){
         //output_data(rtc_cmd & (1 << rtc_i));
         output_clk(1);
         _delay_us(1);
         output_clk(0);
         _delay_us(1);
         if(input_data()){
            rtc_read |= 1 << (rtc_i);
         }
      }
   }else{ // write
      DDRA |= (1 << PA6);
      PORTA &= ~(1 << PA6);
      for(rtc_i = 0; rtc_i < 8; rtc_i += 1){
         if(rtc_write & (1 << rtc_i)){
            output_data(1);
         }else{
            output_data(0);
         }
         output_clk(0);
         _delay_us(1);
         output_clk(1);
         _delay_us(1);
      }
   }
   output_clk(0);
   output_rtc_en(0);
}
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti