» Advertenties

Zo 20 Mei 2012, 07:39

C code -
  1. #define F_CPU 8000000
  2.  
  3. #define ds1307addr   0b11010000     ///< hex: 0xD0
  4.  
  5. #include "s/g.h"
  6. #include "s/rprintf.c"
  7. #include "s/i2c.c"
  8. #include "s/ds1307.c"
  9. #include "util/delay.h"
  10.  
  11. u08 bcd2int(u08 p);
  12.  
  13. //! main functie, start programma, moet altijd aanwezich zijn
  14. int main(void){
  15.   uartInit(UART_FULL, 19200);
  16.   rprintfInit(uartSendByte);
  17.   rprintf("UART PRESENTn");
  18.  
  19.   i2cInit(100);
  20.   ds1307Init();
  21.   ds1307SetHour(4);
  22.   ds1307SetMin(3);
  23.   ds1307SetSec(2);
  24.  
  25.  
  26.   u08 time[3];
  27.  
  28.   while(1){
  29.     ds1307Read(time);
  30.     rprintf("DS1307: %d:%d:%dn", bcd2int(time[2]), bcd2int(time[1]), bcd2int(time[0]));
  31.  
  32.     _delay_ms(1000);  
  33.   }
  34.  
  35.   return 0;
  36. }
  37.  
  38.  
  39. /**
  40.  *   @param     p     bcd
  41.  *   @return   p converted to int
  42.  **/
  43. u08 bcd2int(u08 p){
  44.   return (p & 0x0F) + ((p>>4) * 10);
  45. }


Datum en tijd staat als BCD notatie in de registers van de DS1307, dus deze waarde moet worden omgezet naar een normale integer. Hiervoor dient de functie bcd2int().
Nog geen reacties.
Naam
a-z A-Z 0-9 _

 
E-mail
Wordt niet getoont.
  (niet verplicht)
 
Mail sturen als
(optie)
Smoerijf reageerd
Eender wie reageaard
Nooit
 
Mail sturen
(optie)
Enkel mailen bij eerste reactie
Bij elke reactie mailen
 
Reactie
Laatste wijziging: Wo 15 April 2009, 21:14