Wochenend-Projekt: Einschlaflicht v01.06 Prototype

[pastacode lang=“c“ manual=“%2F*%0A%20*%20Attiny13_Einschlaflampe_v01_06_final.c%0A%20*%0A%20*%20Created%3A%2025.06.2018%2008%3A00%3A00%0A%20*%20Author%20%3A%20Bernd%0A%20*%0A%20*%0A%20*%20Chip%20type%3A%20Attiny13a%0A%20*%20Clock%20frequency%3A%20SUT_CKSEL%20auf%20INTRCoSC_128KHZ_14CK_64MS%20(128kHz%20%2F%208%20%3D%2016kHz)%0A%20*%0A%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2B——–%2B%0A%20*%20%20%20%20%20%20%20%20%5B%20%20%20%20%20%20%20%20(PB5)%20%7C1*%20%20%20%20%208%7C%20(VCC)%20%20Power%20%20%20%20%20%5D%0A%20*%20%20%20%20%20%20%20%20%5B%20%20%20%20%20%20%20%20(PB3)%20%7C2%20%20%20%20%20%207%7C%20(PB2)%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20*%20%20%20%20%20%20%20%20%5B%20%20%20%20%20%20%20%20(PB4)%20%7C3%20%20%20%20%20%206%7C%20(PB1)%20%20Button%20%20%20%20%5D%0A%20*%20%20%20%20%20%20%20%20%5B%20Ground%20(GND)%20%7C4%20%20%20%20%20%205%7C%20(PB0)%20%20LED%20White%20%5D%0A%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2B——–%2B%0A%20*%0A%20*%0A%20*%20Kurze%20Beschreibung%3A%0A%20*%20——————-%0A%20*%20%20-%20Die%20Lampe%20geht%20beim%20bet%C3%A4tigen%20des%20Tasters%20an%20PB1%20an%20(LED%20PB0%20Leuchtet)%0A%20*%20%20-%20Ohne%20weiteres%20Dr%C3%BCcken%20leuchtet%20sie%20etwa%2020%20Sekunden%0A%20*%20%20-%20Ein%20kurzes%20dr%C3%BCcken%20schaltet%20die%20Lampe%20aus%20oder%20an%0A%20*%09-%20Durch%20langes%20Dr%C3%BCcken%20kommt%20man%20in%20den%20Auswahl-Modus%0A%20*%09%09Es%20gibt%20drei%20Moden%20je%20nachdem%20wann%20man%20die%20Taste%20wieder%20los%20l%C3%A4sst%0A%20*%09-Moduswechsel%20durch%20langes%20Dr%C3%BCcken%20des%20Tasters%0A%20*%09%09%09Modus%201%20LED%20Blinkt%20langsam%20-%20hier%20wenn%20los%20gelassen%20wird%20leuchtet%20die%20Lampe%20etwa%205%20min.%0A%20*%09%09%09Modus%202%20LED%20Blinkt%20mittel%20%20-%20hier%20wenn%20los%20gelassen%20wird%20leuchtet%20die%20Lampe%20etwa%2010%20min.%0A%20*%09%09%09Modus%203%20LED%20Blinkt%20schnell%20-%20hier%20wenn%20los%20gelassen%20wird%20leuchtet%20die%20Lampe%20etwa%2015%20min.%0A%20*%20%0A%20*%2F%0A%0A%2F%2F%20%23define%20F_CPU%209600000UL%20%20%2F%2FDelay%20anpassen%20wegen%20Fusebit%0A%23define%20F_CPU%20128000UL%20%20%2F%2FDelay%20anpassen%20wegen%20Fusebit%0A%0A%23define%20LED_PIN%20PB0%20%20%20%20%20%20%20%2F%2F%20PB0%20as%20a%20LED%20pin%0A%23define%20Taster%09PB1%0A%23define%20AN%09%091%0A%23define%20AUS%09%090%0A%20%0A%23include%20%3Cavr%2Fwdt.h%3E%0A%23include%20%3Cstdint.h%3E%0A%23include%20%3Cutil%2Fdelay.h%3E%0A%23include%20%3Cavr%2Fio.h%3E%0A%23include%20%3Cavr%2Finterrupt.h%3E%0A%23include%20%3Cavr%2Fpower.h%3E%0A%23include%20%3Cavr%2Fsleep.h%3E%0A%0A%2F%2F%20Leere%20Interrupt-Routine%0AISR(PCINT0_vect)%0A%7B%0A%7D%0A%0Aint%20main%20(void)%0A%7B%0A%09%2F%2FWatchdog%20ausschalten!%0A%09MCUSR%20%26%3D%20~(1%3C%3CWDRF)%3B%0A%09WDTCR%20%7C%3D%20(1%3C%3CWDCE)%20%7C%20(1%3C%3CWDE)%3B%0A%09WDTCR%20%3D%200×00%3B%0A%09%0A%09DDRB%20%20%7C%3D%20(1%3C%3CLED_PIN)%3B%20%20%20%20%20%2F%2F%20Auf%20Ausgang%20schalten%0A%09PORTB%20%7C%3D%20(1%3C%3CTaster)%3B%20%20%20%20%20%2F%2F%20PullUp%20einschalten%0A%09%0A%09PORTB%20%7C%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2F%20LED%20einschalten%0A%09_delay_ms(400)%3B%20%2F%2F%20Kurzes%20Entprellen%20vom%20Watchdog%20auffachen%20(Tastendruck)%0A%09%0A%09int%20iLeuchtdauer%3D80%3B%20%2F%2FStandard%20Wert%20f%C3%BCr%20Leuchten%20%22iLeuchtdauer%20%2F%204%20%3D%20etwa%20Leuchtzeit%20in%20Sekunden%09%0A%09int%20iTimer%3D0%3B%0A%09int%20i%20%3D%200%3B%0A%09%0A%09while%20(1)%0A%09%7B%0A%09%09if%20(!(PINB%20%26%20(1%3C%3CTaster)))%20%2F%2F%20Pr%C3%BCfen%20auf%20Tastendruck%20-%20Bei%20Druck%20Befehl%20ausf%C3%BChren%0A%09%09%7B%0A%09%09%09_delay_ms(500)%3B%20%2F%2F%20kurze%20Pause%0A%09%09%09if%20(!(PINB%20%26%20(1%3C%3CTaster)))%20%2F%2F%20Pr%C3%BCfen%20auf%20Tastendruck%20-%20Bei%20Druck%20Befehl%20ausf%C3%BChren%0A%09%09%09%7B%0A%09%09%09%09iTimer%2B%2B%3B%20%2F%2F%20Z%C3%A4hler%20f%C3%BCr%20Auswahl%20erh%C3%B6hen%0A%09%09%09%09if%20(iTimer%3D%3D5)%0A%09%09%09%09%7B%0A%09%09%09%09%09for%20(i%3D0%3Bi%3C%3D10%3B%20i%2B%2B)%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09PORTB%20%5E%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2FToggl%0A%09%09%09%09%09%09_delay_ms(250)%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09%2F%2FNach%20Toggle%20die%20LED%20einschalten%20und%20die%20Leuchtdauer%20setzen%0A%09%09%09%09%09PORTB%20%7C%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2F%20LED%20einschalten%0A%09%09%09%09%09iLeuchtdauer%20%3D%205*60*4%3B%20%2F%2F%20etwa%205%20Minuten%20Leuchtzeit%0A%09%09%09%09%09%0A%09%09%09%09%7D%0A%09%09%09%09else%20if%20(iTimer%3D%3D10)%0A%09%09%09%09%7B%0A%09%09%09%09%09for%20(i%3D0%3Bi%3C%3D14%3B%20i%2B%2B)%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09PORTB%20%5E%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2FToggl%0A%09%09%09%09%09%09_delay_ms(150)%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09%2F%2FNach%20Toggle%20die%20LED%20einschalten%20und%20die%20Leuchtdauer%20setzen%0A%09%09%09%09%09PORTB%20%7C%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2F%20LED%20einschalten%0A%09%09%09%09%09iLeuchtdauer%20%3D%2010*60*4%3B%20%2F%2F%20etwa%2010%20Minuten%20Leuchtzeit%0A%09%09%09%09%09%0A%09%09%09%09%7D%0A%09%09%09%09else%20if%20(iTimer%3D%3D15)%0A%09%09%09%09%7B%0A%09%09%09%09%09for%20(i%3D0%3Bi%3C%3D18%3B%20i%2B%2B)%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09PORTB%20%5E%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2FToggl%0A%09%09%09%09%09%09_delay_ms(100)%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09%2F%2FNach%20Toggle%20die%20LED%20einschalten%20und%20die%20Leuchtdauer%20setzen%0A%09%09%09%09%09PORTB%20%7C%3D%20(1%3C%3CLED_PIN)%3B%20%2F%2F%20LED%20einschalten%0A%09%09%09%09%09iLeuchtdauer%20%3D%2015*60*4%3B%20%2F%2F%20etwa%2015%20Minuten%20Leuchtzeit%0A%09%09%09%09%09%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09else%0A%09%09%09%7B%0A%09%09%09%09PORTB%20%5E%3D%20(1%3C%3CLED_PIN)%3B%09%2F%2FToggl%0A%09%09%09%09iLeuchtdauer%3D80%3B%20%2F%2F%20Leuchtdauer%20wieder%20auf%20Default%20setzen%0A%09%09%09%09_delay_ms(500)%3B%0A%09%09%09%7D%0A%09%0A%09%09%7D%20%0A%09%09else%20%0A%09%09%7B%0A%09%09%09iTimer%3D0%3B%20%2F%2F%20Z%C3%A4hler%20f%C3%BCr%20Auswahl%20auf%20Null%20setzen%20-Nicht%20sch%C3%B6n%20hier%0A%09%09%09%0A%09%09%09%2F%2F%20Taste%20wurde%20nicht%20gedr%C3%BCckt%20counter%20wird%20weiter%20herunter%20gerechnet%0A%09%09%09%2F%2F%20bis%200%20dann%20wird%20geschlafen%0A%09%09%09if%20(iLeuchtdauer%20%3E%3D%200)%20%0A%09%09%09%7B%0A%09%09%09%09iLeuchtdauer–%3B%0A%09%09%09%09_delay_ms(250)%3B%0A%09%09%09%7D%0A%09%09%09else%0A%09%09%09%7B%0A%09%09%09%09PORTB%20%26%3D%20~(1%3C%3CLED_PIN)%3B%20%2F%2F%20LED%20aus%0A%09%09%09%09%2F%2F%0A%09%09%09%09%2F%2F%20Schlafen%20%0A%09%09%09%09%2F%2F%0A%09%09%09%09%2F%2F%0A%09%09%09%09%2F%2F%20Den%20ADC%20deaktivieren%2C%20brauchen%20wir%20nicht%20m%C3%BCsste%20aber%20pre%20Default%20aus%20sein.%0A%09%09%09%09power_adc_disable()%3B%0A%09%09%09%09%0A%09%09%09%09%2F%2F%20Pin-Change%20Interrupt%20f%C3%BCr%20die%204%20Taster%20erlauben%0A%09%09%09%09GIMSK%20%3D%20(1%3C%3CPCIE)%3B%0A%09%09%09%09PCMSK%20%7C%3D%20(1%3C%3CPB1)%3B%0A%09%09%09%09%0A%09%09%09%09sei()%3B%0A%09%09%09%09%0A%09%09%09%09set_sleep_mode(SLEEP_MODE_PWR_DOWN)%3B%0A%09%09%09%09sleep_mode()%3B%0A%09%09%09%09%0A%09%09%09%09%2F%2F%20iLeuchtdauer%3D80%3B%20%2F%2F%20Unn%C3%B6tig%20wurde%20nur%20zum%20Test%20ohne%20Watchdog%20ben%C3%B6tigt%0A%09%09%09%09%0A%09%09%09%09%2F%2F%20****************%20Aufwachen%20und%20alles%20f%C3%BCr%20den%20Reset%20%C3%BCber%20Watchdog%20vorbereiten%20******%0A%09%09%09%09wdt_enable(WDTO_1S)%3B%20%2F%2F%201s%20Sekunden%09Watchdog%20einstellen%0A%09%09%09%09wdt_enable(WDTO_30MS)%3B%20%2F%2F%2030ms%20Sekunden%09Watchdog%20einstellen%0A%09%09%09%09%0A%09%09%09%09%2F%2Ftu%20nix%20und%20warte%20auf%20den%20Biss%20des%20Wachhundes%0A%09%09%09%09_delay_ms(5000)%3B%20%2F%2F%20Der%20Wachhund%20ist%20auf%20eine%20Sek%20gestellt.%20Im%20Delay%20sind%20es%205%20Sekunden.%20-%20Also%20Reset%0A%09%09%09%09%2F%2F%20wdt_reset()%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%0A%09%7D%0A%7D%0A%09%09%09%09%0A%0A%0A%09%09%09%2F%2FPORTB%20%5E%3D%20(1%3C%3CLED_PIN)%3B%09%2F%2FToggl%0A%09%09%09%2F%2FPORTB%20%26%3D%20~(1%3C%3CLED_PIN)%3B%09%2F%2F%20LED%20aus%0A%09%09%09%2F%2FPORTB%20%7C%3D%20(1%3C%3CLED_PIN)%3B%09%2F%2F%20LED%20einschalten“ message=“Attiny13_Einschlaflampe_v01_06_final.c“ highlight=““ provider=“manual“/]

Hier die akuellen Bilder zum Prototyp der Einschlaflampe. Die verfeinerungen am Code habe ich noch nicht in Angriff genommen.

Dieser Beitrag wurde unter Allgemein veröffentlicht. Setze ein Lesezeichen auf den Permalink.