centralina irrigazione 16f877

  • graziano1985
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
3 Anni 8 Mesi fa #1 da graziano1985
centralina irrigazione 16f877 è stato creato da graziano1985
ciao a tutti , mi sto cimentando nella realizzazione di una centralina per irrigazione ,
utilizzo come RTC un DS1337, e fin qua tutto bene in linea di massima funziona.
ho letto nelle librerie (V 4.0.4 ) che i dati sono espressi in esadecimale quindi il problema sorge quando voglio impostare l'ora di attivazione dopo il 9 quindi 10 che in decimale diventa 16 e cosi per gli altri valori. di seguito il codice che sto usando:
Code:
unsigned int start = 0x00; //variabile per i minuti attivazione irrigazione unsigned int stop =0x00; //variabile per i minuti stop irrigazione unsigned int orastart = 0x00; //variabile per le ore attivazione irrigazione while(1){ if (PORTBbits.RB0==0) { RTCC_increment_minutes (); delay_ms (150); } if (PORTBbits.RB1==0) { RTCC_increment_hours (); delay_ms (300); } LCD_home(); LCD_write_message("Time : "); LCD_write_string (RTCC_get_time_seconds()); LCD_goto_xy (1,2); LCD_write_integer (orastart,3, ZERO_CLEANING_ON); LCD_write_integer (RTCC_get_hours(),2, ZERO_CLEANING_ON); if (RTCC_get_hours()==orastart) { if ((RTCC_get_minutes()>=start)&&(RTCC_get_minutes()<=stop)) { PORTAbits.RA0=1; } else { PORTAbits.RA0=0; }

chi mi suggerisce una soluzione ??
grazie

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • firstcolle
  • Platino Utente
  • Platino Utente
Di più
3 Anni 8 Mesi fa #2 da firstcolle
Risposta da firstcolle al topic centralina irrigazione 16f877
Ciao, se non ricordo male, i valori vengono restituiti in BCD. il che significa che il valore esadecimale 0x16 non identifica il valore decimale 10 ma identifica il valore decimale 16.
nei byte codificati in BCD, i 4 bit alti identificano le decine, con valore da 0x00 a 0x90, e i 4 bit bassi identificano le unità. con valore da 0x00 a 0x09.

per scrivere il valore sul display ti conviene scrivere prima il valore delle decine e poi il valore delle unità. dovrebbe essere cosi:
Code:
unsinged char seconds = 0; seconds = RTCC_get_time_seconds(); LCD_write_integer (seconds >>4, 1, ZERO_CLEANING_ON); LCD_write_integer (seconds & 0x0F, 1, ZERO_CLEANING_ON);

ovviamente la stessa cosa vale se vuoi salvare l'orario nel DS1337: se vuoi scrivere le ore 10:30 devi inviare per le ore il valore esadecimale 0x10 e per i minuti il valore 0x30

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • graziano1985
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
3 Anni 6 Mesi fa #3 da graziano1985
Risposta da graziano1985 al topic centralina irrigazione 16f877
grazie per la risposta e scusa il ritardo con il quale rispondo ..
in ogni caso ho abbandonato il ds1337 e ho utilizzato il timer 0 tanto non necessito di massima precisione e sembra funzionare egregiamente..

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • firstcolle
  • Platino Utente
  • Platino Utente
Di più
3 Anni 6 Mesi fa #4 da firstcolle
Risposta da firstcolle al topic centralina irrigazione 16f877
ottimo!

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi