From 85f8740e7ce11851ceabe4c149e2ee4bb9606346 Mon Sep 17 00:00:00 2001 From: adri Date: Tue, 12 Dec 2017 10:47:31 +0100 Subject: [PATCH] Initial commit --- .gitignore | 29 ++++ .tfignore | 1 + .vs/horloge/v14/-DESKTOP-M2KTSKL.atsuo | Bin 0 -> 33792 bytes .vs/horloge/v14/.atsuo | Bin 0 -> 38400 bytes horloge.atsln | 22 +++ horloge/global.h | 31 ++++ horloge/horloge.componentinfo.xml | 86 +++++++++++ horloge/horloge.cppproj | 193 +++++++++++++++++++++++++ horloge/horlogeLepot.cpp | 133 +++++++++++++++++ horloge/horlogeLepot.h | 35 +++++ horloge/main-DESKTOP-M2KTSKL.cpp | 44 ++++++ horloge/main.cpp | 145 +++++++++++++++++++ horloge/max7219.cpp | 125 ++++++++++++++++ horloge/max7219.h | 47 ++++++ horloge/util.cpp | 120 +++++++++++++++ horloge/util.h | 26 ++++ 16 files changed, 1037 insertions(+) create mode 100644 .gitignore create mode 100644 .tfignore create mode 100644 .vs/horloge/v14/-DESKTOP-M2KTSKL.atsuo create mode 100644 .vs/horloge/v14/.atsuo create mode 100644 horloge.atsln create mode 100644 horloge/global.h create mode 100644 horloge/horloge.componentinfo.xml create mode 100644 horloge/horloge.cppproj create mode 100644 horloge/horlogeLepot.cpp create mode 100644 horloge/horlogeLepot.h create mode 100644 horloge/main-DESKTOP-M2KTSKL.cpp create mode 100644 horloge/main.cpp create mode 100644 horloge/max7219.cpp create mode 100644 horloge/max7219.h create mode 100644 horloge/util.cpp create mode 100644 horloge/util.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..176c449 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +Thumbs.db +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.sln.docstates +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +*.vssscc +$tf*/ \ No newline at end of file diff --git a/.tfignore b/.tfignore new file mode 100644 index 0000000..e37a9f1 --- /dev/null +++ b/.tfignore @@ -0,0 +1 @@ +\.git \ No newline at end of file diff --git a/.vs/horloge/v14/-DESKTOP-M2KTSKL.atsuo b/.vs/horloge/v14/-DESKTOP-M2KTSKL.atsuo new file mode 100644 index 0000000000000000000000000000000000000000..a33a7ed4ea8f9a5c8da0183665cf0c0f1c986825 GIT binary patch literal 33792 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 literal 0 HcmV?d00001 diff --git a/.vs/horloge/v14/.atsuo b/.vs/horloge/v14/.atsuo new file mode 100644 index 0000000000000000000000000000000000000000..3b4dcf0e67b3b9ca495ce91546f2b6147473e770 GIT binary patch literal 38400 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 +#include + + +#define __BP_PLUS__ PINB0 +#define __BP_MOIN__ PINB1 +#define __BP_CONF__ PINB3 +#define __BP_START__ PINB2 +#define __TMP_BP_MAX__ 1000 //Acc?l?ration Min +#define __TMP_BP_MIN__ 50 //Acc?leration MAx +#define __TMP_BP_NLOOP_DEC__ 2 //Acc?l?ration apr?s x incr?mentation/d?cr?mentation +#define __TMP_BP_SETUP__ 500 //tmp pour rentrer dans le setup +typedef enum { NONE = 0, LCONF = 1, RCONF = 2} setup_t; +typedef enum {NORMALMODE = 0, CHRONO = 1, MINUTERIE = 2, REVEIL = 3} mode_t; +extern uint8_t appuisBPflag; + + + +#endif /* GLOBAL_H_ */ \ No newline at end of file diff --git a/horloge/horloge.componentinfo.xml b/horloge/horloge.componentinfo.xml new file mode 100644 index 0000000..8a755c6 --- /dev/null +++ b/horloge/horloge.componentinfo.xml @@ -0,0 +1,86 @@ + + + + + + + Device + Startup + + + Atmel + 1.2.0 + G:/Program Files (x86)\Atmel\Studio\7.0\Packs + + + + + G:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include + + include + C + + + include + + + + + G:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include\avr\iom328p.h + + header + C + UMk4QUzkkuShabuoYtNl/Q== + + include/avr/iom328p.h + + + + + G:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\templates\main.c + template + source + C Exe + GD1k8YYhulqRs6FD1B2Hog== + + templates/main.c + Main file (.c) + + + + G:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\templates\main.cpp + template + source + C Exe + ZJ6gYgbh1LauuUkZtQozzA== + + templates/main.cpp + Main file (.cpp) + + + + G:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p + + libraryPrefix + GCC + + + gcc/dev/atmega328p + + + + + ATmega_DFP + G:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.132/Atmel.ATmega_DFP.pdsc + 1.2.132 + true + ATmega328P + + + + Resolved + Fixed + true + + + \ No newline at end of file diff --git a/horloge/horloge.cppproj b/horloge/horloge.cppproj new file mode 100644 index 0000000..002c600 --- /dev/null +++ b/horloge/horloge.cppproj @@ -0,0 +1,193 @@ + + + + 2.0 + 7.0 + com.Atmel.AVRGCC8.CPP + dce6c7e3-ee26-4d79-826b-08594b9ad897 + ATmega328P + none + Executable + CPP + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + horloge + horloge + horloge + Native + true + false + true + true + 0x20000000 + + true + exception_table + 2 + 0 + + + + + + + + + + + + + com.atmel.avrdbg.tool.simulator + + 0x1E950F + + + + + + com.atmel.avrdbg.tool.simulator + + + Simulator + + + + + + -mmcu=atmega328p -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" + True + True + True + True + False + True + True + + + NDEBUG + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\include + + + Optimize for size (-Os) + True + True + True + True + True + + + NDEBUG + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\include + + + Optimize for size (-Os) + True + True + True + + + libm + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\include + + + + + + + + + -mmcu=atmega328p -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" + True + True + True + True + False + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\include + + + Optimize (-O1) + True + True + Default (-g2) + True + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\include + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.2.132\include + + + Default (-Wa,-g) + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + \ No newline at end of file diff --git a/horloge/horlogeLepot.cpp b/horloge/horlogeLepot.cpp new file mode 100644 index 0000000..cd435c4 --- /dev/null +++ b/horloge/horlogeLepot.cpp @@ -0,0 +1,133 @@ +/* + * horlogeLepot.c + * + * Created: 28-11-17 13:18:33 + * Author: Adrien + */ +#include "max7219.h" +#include "util.h" +#include "horlogeLepot.h" +#include "global.h" + + + + +#pragma region horloge + +horloge::horloge(max7219 *max) +{ + this->max = max; + t = millis(); + ar[0] = ar[1] = ar[2] = ar[3] = 0; + heures=0; + minutes=0; + HHMM=0; + decalageMinutes=0; + decalageHeures=0; //Pour "synchronis?" sur la fonction millis +} + +void horloge::afficherHeur() +{ + t = millis(); + unsigned long decalageMilis = HH_MMtoHHMM(decalageHeures, decalageMinutes); + decalageMilis = HHMMToMillis(decalageMilis); + millisToHH_MM_Decalage(&heures, &minutes, decalageMilis); + HHMM = HH_MMtoHHMM(heures, minutes);//on fusionne pour n'avoir qu'un chiffre. 11h30 devien 1130 + intTo4DigitArray(HHMM, ar, 4);//Decompose chaque digit + if(((t%1000)>500)) //Clignotement des ":" + ar[2] |= _BV(7); + else + ar[2] &= ~(_BV(7)); + max->sendDigitFromArray(ar,4); + max->on(); +} +void horloge::configMinute() +{ + t=millis(); + unsigned long decalageMilis = HH_MMtoHHMM(decalageHeures, decalageMinutes); + decalageMilis = HHMMToMillis(decalageMilis); + millisToHH_MM_Decalage(&heures, &minutes, decalageMilis); + HHMM = HH_MMtoHHMM(heures, minutes);//on fusionne pour n'avoir qu'un chiffre. 11h30 devien 1130 + intTo4DigitArray(HHMM, ar, 4);//Decompose chaque digit + if(((t%1000)>500) && PINB&_BV(__BP_MOIN__) && PINB&_BV(__BP_PLUS__) && PINB&_BV(__BP_START__) && PINB&_BV(__BP_CONF__)) //Clignotement des ":" et des min (arret du clignotement si on apuie sur un bp) + { + ar[2] |= _BV(7); + ar[0] |= 0x0F; + ar[1] |= 0x0F; + } + else + { + ar[2] &= ~(_BV(7)); + } + max->sendDigitFromArray(ar,4); + if(!(PINB&_BV(__BP_PLUS__)) && !appuisBPflag) + { + _delay_ms(10); + ++decalageMinutes %= 60; + appuisBPflag = 1; + } + if(!(PINB&_BV(__BP_MOIN__)) && !appuisBPflag) + { + _delay_ms(10); + --decalageMinutes = (decalageMinutes>59)?59:decalageMinutes; + appuisBPflag = 1; + } +} + + +void horloge::configHeure() +{ + t = millis(); + unsigned long decalageMilis = HH_MMtoHHMM(decalageHeures, decalageMinutes); + decalageMilis = HHMMToMillis(decalageMilis); + millisToHH_MM_Decalage(&heures, &minutes, decalageMilis); + HHMM = HH_MMtoHHMM(heures, minutes);//on fusionne pour n'avoir qu'un chiffre. 11h30 devien 1130 + intTo4DigitArray(HHMM, ar, 4);//Decompose chaque digit + if(((t%1000)>500) && PINB&_BV(__BP_MOIN__) && PINB&_BV(__BP_PLUS__) && PINB&_BV(__BP_START__) && PINB&_BV(__BP_CONF__)) //Clignotement des ":" et des min (arret du clignotement si on apuie sur un bp) + { + ar[2] |= _BV(7); + ar[2] |= 0x0F; + ar[3] |= 0x0F; + + } + else + { + ar[2] &= ~(_BV(7)); + } + max->sendDigitFromArray(ar,4); + if(!(PINB&_BV(__BP_PLUS__)) && !appuisBPflag) + { + _delay_ms(10); + ++decalageHeures %= 24; + appuisBPflag = 1; + } + if(!(PINB&_BV(__BP_MOIN__)) && !appuisBPflag) + { + _delay_ms(10); + --decalageHeures = (decalageHeures>23)?23:decalageHeures; + appuisBPflag = 1; + } +} +void afficherHeur() +{ + +} + +void configMinute() +{ + +} + +void configHeure() +{ + +} +#pragma endregion horloge +#pragma region minuterie +#pragma endregion minuterie + +#pragma region compteur +#pragma endregion compteur + +#pragma region reveil +#pragma endregion reveil \ No newline at end of file diff --git a/horloge/horlogeLepot.h b/horloge/horlogeLepot.h new file mode 100644 index 0000000..39aaab6 --- /dev/null +++ b/horloge/horlogeLepot.h @@ -0,0 +1,35 @@ +/* + * horlogeLepot.h + * + * Created: 28-11-17 13:18:01 + * Author: Adrien + */ + + +#ifndef HORLOGELEPOT_H_ +#define HORLOGELEPOT_H_ + +#ifndef __MAX7219_H__ +#include "max7219.h" +#endif + +class horloge +{ + private: + max7219 *max; + unsigned long t; + uint8_t ar[4]; + uint8_t heures, minutes; + int HHMM; + uint8_t decalageMinutes, decalageHeures; //Pour "synchronis?" sur la fonction millis + + public: + horloge(max7219 *max); + void afficherHeur(); + void configMinute(); + void configHeure(); +}; + + + +#endif /* HORLOGELEPOT_H_ */ \ No newline at end of file diff --git a/horloge/main-DESKTOP-M2KTSKL.cpp b/horloge/main-DESKTOP-M2KTSKL.cpp new file mode 100644 index 0000000..803d747 --- /dev/null +++ b/horloge/main-DESKTOP-M2KTSKL.cpp @@ -0,0 +1,44 @@ +/* + * horloge.cpp + * + * Created: 17-10-17 20:53:10 + * Author : Adrien + */ + +#define F_CPU 16000000UL + +#include +#include + +#include "util.h" +#include "max7219.h" + +#define __plus__ 1 +#define __moins__ 2 +#define __start__ 3 +#define __conf__ 4 +#define __MAX_DIN__ 5 +#define __MAX_LOAD__ 6 +#define __MAX_CLK__ 7 + + +int main(void) +{ + /* Replace with your application code */ + max7219 max(__MAX_DIN__, __MAX_LOAD__, __MAX_LOAD__, 4); + max.sendRAWdata(1,max7219::D1); + uint8_t heures = 0, minutes = 0, secondes = 0; + while (1) + { + max.sendRAWdata(1,max7219::D1); + max.sendRAWdata(1,max7219::D2); + max.setIntensity(50); + + } +} + + +isr(__INT__) +{ + +} diff --git a/horloge/main.cpp b/horloge/main.cpp new file mode 100644 index 0000000..148d823 --- /dev/null +++ b/horloge/main.cpp @@ -0,0 +1,145 @@ + /* + * horloge.cpp + * + * Created: 17-10-17 20:53:10 + * Author : Adrien + *|---------------------------- + *| LCONF | RCONF | + *|____________________________ + *| D4 | D3 | D2 | D1 | + *|---------------------------- + *| ### ### ### ### | + *| # # # # o # # # # | + *| ### ### ### ### | + *| # # # # o # # # # | + *| ### o ### o ### o ### o| + *|---------------------------- + *| o = dot ; pour activer mettre � 1 le bit 7 digit|_BV(7) + */ + +#define F_CPU 16000000UL + + +#include +#include + +#include "util.h" +//#include "max7219.h" +#include "horlogeLepot.h" +#include "global.h" + + +uint8_t appuisBPflag = 0; + +int main(void) +{ + max7219 max(2,3,4, 4); + horloge horloge0(&max); + /* Replace with your application qcode */ + DDRB &= ~(_BV(__BP_PLUS__)|_BV(__BP_MOIN__)|_BV(__BP_CONF__)|_BV(__BP_START__)); + PORTB |= _BV(__BP_PLUS__)|_BV(__BP_MOIN__)|_BV(__BP_CONF__)|_BV(__BP_START__); //PULL-UP + mode_t mode = NORMALMODE; + setup_t setup = NONE; + setupMilis(); + + unsigned int tempoBP = __TMP_BP_MAX__; + unsigned int tempoBPi = 0; + unsigned long millisBPStart = 0; + + _delay_ms(50); + unsigned long t = millis(); + + while (1) + { + t = millis(); + +#pragma region GestionTempoBP + if((millis()-millisBPStart) > tempoBP && appuisBPflag) + { + millisBPStart = millis(); + appuisBPflag = 0; + tempoBPi++; + if(tempoBP>__TMP_BP_MIN__ && tempoBPi == __TMP_BP_NLOOP_DEC__) + { + tempoBP *=0.75; + tempoBPi = 0; + } + } + if(PINB&_BV(__BP_MOIN__) && PINB&_BV(__BP_PLUS__) && PINB&_BV(__BP_START__) && PINB&_BV(__BP_CONF__) ) //Reset des var lors du relachement + { + appuisBPflag = 0; + tempoBPi = 0; + tempoBP = __TMP_BP_MAX__; + } +#pragma endregion GestionTempoBP + +#pragma region GestionConfig + if(!(PINB&_BV(__BP_CONF__))) //Getsion config + { + _delay_ms(10);//Anti rebon soft + unsigned int tapuis = millis(); + while(!(PINB&_BV(__BP_CONF__))) + { + //Routine a exe si besoin + } + if(millis()-tapuis < __TMP_BP_SETUP__ && !setup) + { + + switch(mode) + { + case NORMALMODE: + + mode = CHRONO; + break; + case CHRONO: + mode = MINUTERIE; + break; + case MINUTERIE: + mode = REVEIL; + break; + case REVEIL: + mode = NORMALMODE; + break; + } + } + else + { + switch(setup) + { + case NONE: + setup = RCONF; + break; + case RCONF: + setup = LCONF; + break; + case LCONF: + setup = NONE; + break; + } + } + } +#pragma endregion GestionConfig + + if(!setup) + { + switch(mode) + { + default: + horloge0.afficherHeur(); + break; + } + } + else + { + switch (setup) + { + case RCONF: + horloge0.configMinute(); + break; + case LCONF: + horloge0.configHeure(); + break; + } + } + } +} diff --git a/horloge/max7219.cpp b/horloge/max7219.cpp new file mode 100644 index 0000000..166dbaf --- /dev/null +++ b/horloge/max7219.cpp @@ -0,0 +1,125 @@ +/* +* max7219.cpp +* +* Created: 17-10-17 21:26:30 +* Author: Adrien +*/ +#define F_CPU 16000000UL + +#include "max7219.h" +#include "util.h" +#include +#include +#include +#include + +max7219::max7219(uint8_t din, uint8_t load, uint8_t clk, uint8_t nOfDigit) +{ + this->din = pinArduinoToPINXX(din); + this->load = pinArduinoToPINXX(load); + this->clk = pinArduinoToPINXX(clk); + this->nOfDigit = nOfDigit; + pinDin = pinToPINX(din); + pinLoad = pinToPINX(load); + pinClk = pinToPINX(clk); + ddrDin = pinDin+1; ddrLoad=pinLoad+1;ddrClk=pinClk+1; + portDin = pinDin+2; portLoad=pinLoad+2;portClk=pinClk+2; + *ddrDin |= _BV(pinArduinoToPINXX(din)); + *ddrLoad |= _BV(pinArduinoToPINXX(load)); + *ddrClk |= _BV(pinArduinoToPINXX(clk)); + setLoadTo(1); + setClkTo(0); + setDataTo(0); + _delay_ms(50); + sendRAWdata(nOfDigit, SCANLIMIT); + sendRAWdata((0xff),DECODEMODE); + on(); +} + + void max7219::sendRAWdata(volatile uint8_t data, volatile address ad) + { + int i = 0; + setClkTo(0); + setLoadTo(0); + _NOP(); + _NOP(); + + for (i=0; i<8 ; i++) + { + setDataTo(ad&(0b10000000>>i)); + _NOP(); + _NOP(); + setClkTo(1); + _delay_us(1); + setClkTo(0); + _NOP(); + _NOP(); + } + for (i=0; i<8 ; i++) + { + setClkTo(0); + setDataTo(data&(0b10000000>>i)); + _NOP(); + _NOP(); + setClkTo(1); + _delay_us(1); + setClkTo(0); + _NOP(); + _NOP(); + } + setLoadTo(1); + _delay_us(1); + } + void max7219::on() + { + sendRAWdata(0x01, SHUTDOWN); + } + void max7219::off() + { + sendRAWdata(0x00, SHUTDOWN); + } + void max7219::sendDigitFromArray(uint8_t *array, uint8_t s) + { + sendRAWdata(0xFF, DECODEMODE); + for (int i=0;i + +class max7219 +{ +//variables +public: + typedef enum{NOP=0x00,D1=0x01,D2=0x02,D3,D4,D5,D6,D7,D8,DECODEMODE,INTENSITY=0x0A,SCANLIMIT,SHUTDOWN,TEST=0x0F} address; +protected: +private: + uint8_t nOfDigit; + uint8_t din,load,clk; + uint8_t decodeMode; +volatile uint8_t *pinDin, *portDin, *ddrDin; +volatile uint8_t *pinLoad, *portLoad, *ddrLoad; +volatile uint8_t *pinClk, *portClk, *ddrClk; + + + +//functions +public: + max7219(uint8_t din, uint8_t load, uint8_t clk, uint8_t nOfDigit); + void sendRAWdata(uint8_t data, address ad); + void on(); + void off(); + void sendDigitFromArray(uint8_t *array, uint8_t s); + void setIntensity(uint8_t i); +protected: +private: + void setClkTo(uint8_t v); + void setLoadTo(uint8_t v); + void setDataTo(uint8_t v); + + +}; //max7219 + +#endif //__MAX7219_H__ diff --git a/horloge/util.cpp b/horloge/util.cpp new file mode 100644 index 0000000..b1ae593 --- /dev/null +++ b/horloge/util.cpp @@ -0,0 +1,120 @@ +/* + * util.cpp + * + * Created: 17-10-17 21:21:20 + * Author: Adrien + */ +#include +#include + +#include "util.h" +#include "global.h" + +unsigned long tmpMillis = 0UL; + + +uint8_t uint8ToBCD(uint8_t val) +{ + return (val%10)|((val/10)<<4); +} + +void intTo4DigitArray(unsigned int d, uint8_t * array, uint8_t arrayMax) +{ + int i; + for(i = 0; d && i +typedef enum {A0=14, A1, A2, A3, A4, A5} AnalogPin; +uint8_t uint8ToBCD(uint8_t val); +volatile uint8_t *pinToPINX(uint8_t pin); +uint8_t pinArduinoToPINXX(uint8_t pin); +void setupMilis(); +unsigned long millis(); +void intTo4DigitArray(unsigned int d, uint8_t * array, uint8_t arrayMax); +unsigned int millisToHHMM(); +void millisToHH_MM(uint8_t * HH, uint8_t *MM); +void millisToHH_MM_Decalage(uint8_t * HH, uint8_t *MM, unsigned long decalage); +unsigned long HHMMToMillis(unsigned int HHMM); +unsigned int HH_MMtoHHMM(uint8_t HH, uint8_t MM); +void HHMMtoHH_MM(uint8_t HHMM, uint8_t * HH, uint8_t *MM); +uint8_t VerifappuisBP(); +#endif /* UTIL_H_ */ \ No newline at end of file