thorium90

DS1307.h

Dec 10th, 2011
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.43 KB | None | 0 0
  1. /*
  2. ##########################################################################
  3. ##                          ARDUINO SOURCES                             ##
  4. ##########################################################################
  5. */
  6. /*
  7.    ___|  _)  | _)       _)                         ___|                    
  8.  \___ \   |  |  |   __|  |  |   |  __ `__ \       |       _ \    __|  __ \  
  9.        |  |  |  |  (     |  |   |  |   |   |      |      (   |  |     |   |
  10.  _____/  _| _| _| \___| _| \__,_| _|  _|  _|     \____| \___/  _|     .__/  
  11.                                                                      _|  
  12. Code source libre de droit. Si vous utilisez mon code, merci à vous d'en préciser la source.
  13.  
  14. @Date : 26/11/2011
  15. @Auteur : Silicium Corp
  16. */
  17. #ifndef DS1307_HEADER
  18. #define DS1307_HEADER        //Evite les inclusions multiples
  19. #include "WProgram.h"        //Permet au compillateur Arduino de bien faire son travail quand on taf avec nos propres librairies
  20. #include <Wire.h>
  21.  
  22.  
  23. /*CONSTANTE PAR DEFINE*/
  24. #define _00H_SEC 0
  25. #define _01H_MIN 1
  26. #define _02H_HRS 2
  27. #define _03H_DOW 3
  28. #define _04H_DAT 4
  29. #define _05H_MTH 5
  30. #define _06H_YRS 6
  31. #define _07H_PIN 7
  32.  
  33. #define _1Hz 0
  34. #define _4kHz 1
  35. #define _8kHz 2
  36. #define _32kHz 3
  37.  
  38. #define START_YEAR_REGISTER 2000
  39. #define LENGTH_REGISTER 8
  40. #define LENGTH_DATE_REGISTER 4
  41. #define LENGTH_CLOCK_REGISTER 3
  42. #define ID_REGISTER B1101000  
  43.  
  44. /*MASQUE BINAIRE*/
  45. #define X4BIT_UNITS_MASK     B00001111
  46. #define X3BIT_UNITS_MASK     B00000111
  47.  
  48. #define X4BIT_DECADE_MASK    B11110000
  49. #define X3BIT_DECADE_MASK    B01110000
  50. #define X2BIT_DECADE_MASK    B00110000
  51. #define X1BIT_DECADE_MASK    B00010000
  52.  
  53. #define CLOCKHALT_MASK       B10000000
  54. #define CLOCK_MOD_MASK       B01000000
  55. #define CLK_AM_PM_MASK       B00100000
  56. #define OUT_MASK             B10000000
  57. #define SQWE_MASK            B00010000
  58. #define RS_MASK              B00000011
  59.  
  60.  
  61.  
  62. class DS1307
  63. {
  64.    private:
  65.        byte bufferRegister[LENGTH_REGISTER];      //Tableau contenant les valeurs du registre du DS1307 au format BCD
  66.        int timeRegister[LENGTH_REGISTER];         //Tableau contenant les valeurs du registre convertit en entier.
  67.        void readWire(void);                       //Opére une lecture de 8 octects sur le registre du DS1307
  68.        void save(void);                           //Opére l'ecriture de bufferRegister[] sur le registre du DS1307
  69.        void convertBCDtoINT();                    //Traduit le tableau au format BCD dans le tableau timeRegister[] au format int
  70.        void convertINTtoBCD();                    //Traduit le tableau au format int dans le tableau bufferRegister[] au format BCD
  71.        void updateParameter();                    //Permet d'effectuer une mise à jours des parametres.
  72.        void updateRegister();                     //Permet une mise a jour du registre BCD de la classe
  73.        
  74.        boolean is12Hmode;          //True : Mode 12h selectioné
  75.        boolean isPostMeridiem;     //True : En mode 12h : PM
  76.        boolean isCHenable;         //True : Horloge eteinte
  77.        boolean isOUTenable;        //True : Pin 7 sous tension
  78.        boolean isSQWEenable;       //True : Signal carré en fonction
  79.  
  80.        int waveFrequency;          //Fréquence du signal carré : 0=1hz, 1=4KHz, 2=8KHz, 3=32KHz
  81.        
  82.        
  83.    public:
  84.        DS1307();
  85.  
  86.        int* getTimeRegister(boolean = true);           //Donne heure, date et pin 7
  87.        boolean getIs12Hmode(boolean = true);           //Donne son mode de fonctionnement (12/24h). true = 24h
  88.        boolean getIsPostMeridiem(boolean = true);      //Donne l'etat de la gestion AM/PM (True si refresh demandé)
  89.        boolean getIsCHenable(boolean = true);          //Donne l'état de fonctionnement de l'horloge. true = horloge off
  90.        boolean getIsSQWEenable(boolean = true);        //Donne l'état du signal carré en sortie du pin 7. true = signal ON
  91.        boolean getIsOUTenable(boolean = true);         //Donne l'état logique du pin 7.
  92.        int getWaveFrequency(boolean = true);           //Donne la fréquence du signal carré en sortie du pin 7 0=1hz, 1=4KHz, 2=8KHz, 3=32KHz
  93.        
  94.        void setTime(int,int,int);                             //Régle l'heure setTime(heures, minutes, secondes).                  
  95.        void setCalendar(int,int,int,int);                     //Régle la date setCalendar (jour de la semaine, date, mois, année)  
  96.        void setTimeRegister(int,int,int,int,int,int,int);     //Régle date et heure setTimeRegister                                
  97.        void setSecond(int);                                   //Régle les secondes                                                  
  98.        void setMinute(int);                                   //Régle les minutes                                                  
  99.        void setHour(int);                                     //Régle les heures                                                    
  100.        void setDay(int);                                      //Régle les jour du mois                                              
  101.        void setDayOfMonth(int);                               //Régle le jour de la semaine                                        
  102.        void setMonth(int);                                    //Régle les mois                                                      
  103.        void setYear(int);                                     //Régle les années                                                    
  104.        void setWaveFrequency(int);                            //Régle la fréquence du signal carré // frequences : 0=1hz, 1=4KHz, 2=8KHz, 3=32KHz                              
  105.        
  106.        void startOUT();                  //Place l'état logique du port de sortie du pin 7 à 1.
  107.        void stopOUT();                   //Place l'état logique du port de sortie du pin 7 à 0. Eteint en meme temps le signal carré.
  108.        void startClock();                //Démarre l'horloge et met à jour les parametres
  109.        void stopClock();                 //Stop l'horloge
  110.        void startWave();                 //Démarre le signal Carré
  111.        void stopWave();                  //Stop le signal carré
  112.        void switchMode();                //Inverse le mode 12/24 et prend en charge la conversion des heures.
  113.        void switchMeridiem();            //Inverse la valeur de isPostMeridiem si le mode 12h est actif.
  114.        
  115. };
  116.  
  117. extern DS1307 ClockChip;                 //Externalisation de l'objet.
  118.  
  119. #endif
  120.  
  121.  
Advertisement
Add Comment
Please, Sign In to add comment