Lettura dati da RTC PCF8563
- Cecco
- Autore della discussione
- Visitatori
-
13 Anni 5 Mesi fa - 13 Anni 5 Mesi fa #1
da Cecco
Lettura dati da RTC PCF8563 è stato creato da Cecco
Sto smanettando col RTCC della Freedom2.
Ho scritto qualche riga per mandare a video ora,data e giorno della settimana leggendo dal PCF8563.
Funziona tutto alla perfezione tranne quando introduco nel codice la stampa del giorno della settimana.
questo il main:
Non ho capito se l'errore sta nel ciclo di lettura oppure nel formato errato nel printf.
Ho scritto qualche riga per mandare a video ora,data e giorno della settimana leggendo dal PCF8563.
Funziona tutto alla perfezione tranne quando introduco nel codice la stampa del giorno della settimana.
questo il main:
Code:
void main()
{
lcd_init();
RTC_reset();//reset RTC
D_T_set(); //setta data e ora
while (true){
D_T_read(); //legge data e ora
lcd_gotoxy(3,1);
printf(lcd_putc,"%02u:%02u:%02u", hour, min, sec);
lcd_gotoxy(1,2);
printf(lcd_putc,"%02u-%02u-20%02u %02u", day, month, year, bdow);
// se bdow è inserito, la lettura di tutto è sballata.
}}
[b]questa la parte dell driver:[/b]
//setta ora e data
void D_T_set(){
output_float(PIN_C0);
output_float(PIN_C1);
i2c_start();
i2c_write(0xa2);
i2c_write(0x00);
i2c_write(0x20); //stoppa RTC
i2c_write(0x02); //indirizzo dei secondi (primo)
i2c_write(0x00); //set secondi
i2c_write(0x05); //set minuti
i2c_write(0x20); //set ora
i2c_write(0x01); //set giorno
i2c_write(0x05); //set weekday
i2c_write(0x12); //set mese
i2c_write(0x11); //set anno
i2c_stop();
i2c_start();
RTC_reset();
}
//legge ora e data da PCF
void D_T_read(){
output_float(PIN_C0);
output_float(PIN_C1);
i2c_start();
i2c_write(0xa2);
i2c_write(0x02);
i2c_start();
i2c_write(0xa3);
bsec = i2c_read(0); //legge secondi
i2c_start();
i2c_write(0xa3);
bmin = i2c_read(0); //minuti
i2c_start();
i2c_write(0xa3);
bhour = i2c_read(0); //ore
i2c_start();
i2c_write(0xa3);
bday = i2c_read(0); //giorno
i2c_start();
i2c_write(0xa3);
bdow = i2c_read(0); //weekday
i2c_start();
i2c_write(0xa3);
bmonth = i2c_read(0); //mese
i2c_start();
i2c_write(0xa3);
byear = i2c_read(0); //anno
i2c_stop();
//conversioni
sec = bcd2bin(bsec & 0x7F);
min = bcd2bin(bmin & 0x7F);
hour = bcd2bin(bhour & 0x3F);
day = bcd2bin(bday & 0x3F);
month = bcd2bin(bmonth & 0x1F);
year = bcd2bin(byear);
//dofw= bin2dec[bdow]; <<<<<--------------- è giusta?
}
Non ho capito se l'errore sta nel ciclo di lettura oppure nel formato errato nel printf.
Ultima Modifica 13 Anni 5 Mesi fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Cecco
- Autore della discussione
- Visitatori
-
13 Anni 5 Mesi fa - 13 Anni 5 Mesi fa #2
da Cecco
Risposta da Cecco al topic Re: Lettura dati da RTC PCF8563
Aggiungo inoltre che ho provato anche a passare alla printf il valore non convertito ma non ho visto nessun miglioramento.
Come si fa per inserire il codice in una finestra separata?
Come si fa per inserire il codice in una finestra separata?
Ultima Modifica 13 Anni 5 Mesi fa da Cecco.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Mauro Laurenti
-
- Moderatore
-
Less
Di più
13 Anni 5 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Lettura dati da RTC PCF8563
Ciao,
accertati che il formato delle variabili sia corretto e che le dimensioni degli array usati siano corrette.
Caratteri strani sono spesso sintomi di array non propriamente terminati con /0 o di dimensioni errate.
Nel codice sopra vedo dei caratteri strani ma potrebbe essere legato al copia e incolla.
Per scrivere il codice in un altra finestra:
Seleziona il codice e premi il tasto "code" nella finestra del forum in cui stai scrivendo.
Altrimenti scrivi code e /code rispettivamente all'inizio e alla fine del codice.
Devi includere le due parole tra parentesi quadre (cosa che non ho fatto altrimenti sarebbero state considerate parole chiave, e sarebbero state rimosse dal testo).
Saluti,
Mauro
accertati che il formato delle variabili sia corretto e che le dimensioni degli array usati siano corrette.
Caratteri strani sono spesso sintomi di array non propriamente terminati con /0 o di dimensioni errate.
Nel codice sopra vedo dei caratteri strani ma potrebbe essere legato al copia e incolla.
Per scrivere il codice in un altra finestra:
Seleziona il codice e premi il tasto "code" nella finestra del forum in cui stai scrivendo.
Altrimenti scrivi code e /code rispettivamente all'inizio e alla fine del codice.
Devi includere le due parole tra parentesi quadre (cosa che non ho fatto altrimenti sarebbero state considerate parole chiave, e sarebbero state rimosse dal testo).
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Cecco
- Autore della discussione
- Visitatori
-
13 Anni 4 Mesi fa - 13 Anni 4 Mesi fa #4
da Cecco
Risposta da Cecco al topic Re: Lettura dati da RTC PCF8563
Tutto OK, problema risolto.
In pratica stavo leggendo tutti gli otto bit del registro dei Weekdays invece dei primi tre.
Ho applicato un & bitwise e tutto è andato a posto.
Ho corretto la riga incriminata in:
ciao.
In pratica stavo leggendo tutti gli otto bit del registro dei Weekdays invece dei primi tre.
Ho applicato un & bitwise e tutto è andato a posto.
Ho corretto la riga incriminata in:
Code:
wday = bcd2bin(bdow&0x07); //prende in considerazione solo i primi 3 bit, vedi datasheet
ciao.
Ultima Modifica 13 Anni 4 Mesi fa da Cecco.
Si prega Accesso o Crea un account a partecipare alla conversazione.
13 Anni 1 Ora fa #5
da Lello Guidi
Risposta da Lello Guidi al topic Re: Lettura dati da RTC PCF8563
Hai creato delle librerie apposite?
E' possibile averle ?
Saluti
Lello
E' possibile averle ?
Saluti
Lello
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti