{"id":691,"date":"2018-05-05T10:44:32","date_gmt":"2018-05-05T09:44:32","guid":{"rendered":"http:\/\/www.weise-bernd.de\/?p=691"},"modified":"2018-05-05T10:47:04","modified_gmt":"2018-05-05T09:47:04","slug":"wuerfel-finale","status":"publish","type":"post","link":"https:\/\/www.weise-bernd.de\/?p=691","title":{"rendered":"Wochenend-Projekt: elektronischer W\u00fcrfel v1.06"},"content":{"rendered":"<p>Die Firmware vom W\u00fcrfel habe ich optimiert. Nun f\u00e4llt er in den Schlafmodus wenn er nicht gebraucht wird und verbraucht dann nur noch 0.06 \u00b5A. Nach dem Tastendruck wacht er wieder auf und wird vom Watchdog resetet.<\/p>\n<div class=\"code-embed-wrapper\"> <pre class=\"language-c code-embed-pre\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-c code-embed-code\">\/*<br\/> * Wuerfel_V01_06.c<br\/> *<br\/> * Created: 15.04.2018 20:57:00<br\/> * Author : Bernd<br\/> *<br\/> *<br\/> * Chip type: Attiny13a<br\/> * Clock frequency: SUT_CKSEL auf INTRCoSC_128KHZ_14CK_64MS (128kHz \/ 8 = 16kHz)<br\/> *<br\/> *\t\t\t\t\t\t\t\t\t\t\t\t\t  +--------+<br\/> *        [ rest (leer)\t\t\t\t\t\t\t(PB5) |1*     8| (VCC)  Power\t\t\t\t\t\t\t\t]<br\/> *        [ Taster\t\t\t\t\t\t\t\t(PB3) |2      7| (PB2)  LEDs - links unten | rechts oben\t]<br\/> *        [ LEDs - rechts unten | links oben\t(PB4) |3      6| (PB1)  LEDs - mitte links | mitte rechts\t]<br\/> *        [ Ground\t\t\t\t\t\t\t\t(GND) |4      5| (PB0)  LED1\t\t\t\t\t\t\t\t]<br\/> *\t\t\t\t\t\t\t\t\t\t\t\t\t  +--------+<br\/> *<br\/> *\/ <br\/><br\/>#define F_CPU 12800UL \/\/Dalay anpassen wegen Fusebit<br\/>\/\/#define F_CPU 960000UL \/\/Dalay anpassen wegen Fusebit<br\/><br\/>#define LED1_PIN        PB0<br\/>#define Taster\t\t\tPB3<br\/>#define DELAY_MAX       (512)<br\/>#define DELAY_MIN       (0)<br\/><br\/>#include &lt;avr\/wdt.h&gt;<br\/>#include &lt;stdint.h&gt; <br\/>#include &lt;util\/delay.h&gt; <br\/>#include &lt;avr\/io.h&gt; <br\/>#include &lt;avr\/interrupt.h&gt; <br\/>#include &lt;avr\/power.h&gt; <br\/>#include &lt;avr\/sleep.h&gt;<br\/><br\/>int Augenanzahl = 0; \/\/ einfacher Z\u00e4hler f\u00fcr W\u00fcrfel Augenanzahl<br\/>uint16_t min, sek;<br\/><br\/>int StartStopAni(int AnzahlBlinken);<br\/><br\/>\/\/ Leere Interrupt-Routine<br\/>ISR(PCINT0_vect)<br\/>{<br\/>}<br\/><br\/>\t<br\/><br\/>int main(void)<br\/>{<br\/><br\/>\t\/\/Watchdog ausschalten!<br\/>\tMCUSR &amp;= ~(1&lt;&lt;WDRF);<br\/>\tWDTCR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE);<br\/>\tWDTCR = 0x00;<br\/>\t\t<br\/>\tDDRB =((1&lt;&lt;LED1_PIN) | (1&lt;&lt;PB1) | (1&lt;&lt;PB2) | (1&lt;&lt;PB4)); \/\/ Ports auf Ausgang<br\/>\tDDRB= ~(1&lt;&lt;Taster);\t\t\t\t\t\t\t\t\t\t\/\/ Port auf Eingang<br\/>\tPORTB |= (1&lt;&lt;Taster);\t\t\t\t\t\t\t\t\t\/\/ Pullup f\u00fcr Eingang<br\/>\t<br\/>\tStartStopAni(30);<br\/>\t<br\/>\tPORTB =0b00001000;<br\/>\t<br\/>\twhile (1) \/\/ Endlos Schleife<br\/>\t{ <br\/>\t\tfor (min=10; min&gt;=1; min--)  \/\/Schleifen-konstruckt, wegen Zeit bis zum einschlafen<br\/>\t\t{<br\/>\t\t\tfor (sek=1500; sek&gt;=1; sek--)<br\/>\t\t\t{<br\/>\t\t\t\t_delay_ms(50);<br\/>\t\t\t\t\t\t\t\t<br\/>\t\t\t\tif (!(PINB &amp; (1&lt;&lt;Taster)))\t\/\/ Abfrage ob Switch gedr\u00fcckt<br\/>\t\t\t\t{<br\/>\t\t\t\t\t\/\/ Schleifenwerte nach bet\u00e4tigen der Taste wieder hoch setzen<br\/>\t\t\t\t\tmin=10; <br\/>\t\t\t\t\tsek=1500; <br\/>\t\t\t\t\t<br\/>\t\t\t\t\tPORTB =0b00001000;<br\/>\t\t\t\t\t_delay_ms(500);\t \/\/ kurze Pause - alle LEDs kurz aus, damit man sieht der W\u00fcrfel w\u00fcrfelt.<br\/>\t\t\t\t\t<br\/>\t\t\t\t\tswitch(Augenanzahl)\t\/\/ i Auswerten<br\/>\t\t\t\t\t{<br\/>\t\t\t\t\t\tcase 0:<br\/>\t\t\t\t\t\t{<br\/>\t\t\t\t\t\t\t\/\/ Zahl 1 --&gt; i=0<br\/>\t\t\t\t\t\t\tPORTB =0b00000001;<br\/>\t\t\t\t\t\t\tbreak;<br\/>\t\t\t\t\t\t}<br\/>\t\t\t\t\t\tcase 1:<br\/>\t\t\t\t\t\t{<br\/>\t\t\t\t\t\t\t\/\/ Zahl 2 --&gt; i=1<br\/>\t\t\t\t\t\t\tPORTB =0b00000100;<br\/>\t\t\t\t\t\t\tbreak;<br\/>\t\t\t\t\t\t}<br\/>\t\t\t\t\t\tcase 2:<br\/>\t\t\t\t\t\t{<br\/>\t\t\t\t\t\t\t\/\/ Zahl 3 --&gt; i=2<br\/>\t\t\t\t\t\t\tPORTB =0b00000101;<br\/>\t\t\t\t\t\t\tbreak;<br\/>\t\t\t\t\t\t}<br\/>\t\t\t\t\t\tcase 3:<br\/>\t\t\t\t\t\t{<br\/>\t\t\t\t\t\t\t\/\/ Zahl 4 --&gt; i=3<br\/>\t\t\t\t\t\t\tPORTB =0b00010100;<br\/>\t\t\t\t\t\t\tbreak;<br\/>\t\t\t\t\t\t}<br\/>\t\t\t\t\t\tcase 4:<br\/>\t\t\t\t\t\t{<br\/>\t\t\t\t\t\t\t\/\/ Zahl 5 --&gt; i=4<br\/>\t\t\t\t\t\t\tPORTB =0b00010101;<br\/>\t\t\t\t\t\t\tbreak;<br\/>\t\t\t\t\t\t}<br\/>\t\t\t\t\t\tcase 5:<br\/>\t\t\t\t\t\t{<br\/>\t\t\t\t\t\t\t\/\/Zahl 6 --&gt; i=5<br\/>\t\t\t\t\t\t\tPORTB =0b00010110;<br\/>\t\t\t\t\t\t\tbreak;<br\/>\t\t\t\t\t\t}<br\/>\t\t\t\t\t}<br\/>\t\t\t\t\t<br\/>\t\t\t\t\t\/\/ Port wieder auf Eingang setzen (Pullup)<br\/>\t\t\t\t    PORTB |= (1&lt;&lt;Taster);<br\/><br\/>\t\t\t\t}<br\/>\t\t\t\tAugenanzahl++;\t\/\/ bei jedem Schleifendurchlauf i Erh\u00f6hen<br\/>\t\t\t\tif (Augenanzahl==6) \/\/ Wenn i = 6 dann i wieder auf 0 setzen<br\/>\t\t\t\t{<br\/>\t\t\t\t\tAugenanzahl=0;<br\/>\t\t\t\t}<br\/>\t\t\t}<br\/>\t\t\t<br\/>\t\t\tStartStopAni(30);<br\/><br\/>\t\t\t\/\/ Den ADC deaktivieren, brauchen wir nicht m\u00fcsste aber pre Default aus sein.<br\/>\t\t\tpower_adc_disable();<br\/>\t\t\t\t<br\/>\t\t\t\/\/ Pin-Change Interrupt f\u00fcr die 4 Taster erlauben<br\/>\t\t\tGIMSK = (1&lt;&lt;PCIE);<br\/>\t\t\tPCMSK |= (1&lt;&lt;PB3);<br\/>\t\t<br\/>\t\t\tsei();<br\/>\t\t\t<br\/>\t\t\tPORTB =0b00001000; \/\/ Sollten LEDs noch Leuchten vor Schlafen ausschalten.<br\/>\t\t\t\t<br\/>\t\t\tset_sleep_mode(SLEEP_MODE_PWR_DOWN);<br\/>\t\t\tsleep_mode();<br\/>\t\t\t\t<br\/>\t\t\t\/\/ **************** Aufwachen und alles f\u00fcr den Reset \u00fcber Watchdog vorbereiten ******<br\/>\t\t\twdt_enable(WDTO_1S); \/\/ 1s Sekunden\tWatchdog einstellen\t<br\/>\t\t\twdt_enable(WDTO_30MS); \/\/ 30ms Sekunden\tWatchdog einstellen\t\t\t\t<br\/>\t\t\t\t\t\t\t\t\t\t<br\/>\t\t\t\t\/\/tu nix und warte auf den Biss des Wachhundes<br\/>\t\t\t\t_delay_ms(5000); \/\/ Der Wachhund ist auf eine Sek gestellt. Im Delay sind es 5 Sekunden. - Also Reset<br\/>\t\t\t\t\/\/ wdt_reset();<br\/>\t\t}<br\/>\t\t<br\/>\t}<br\/>\treturn (0);<br\/>}<br\/><br\/><br\/><br\/><br\/>int StartStopAni(int AnzahlBlinken)<br\/>{<br\/>\tfor (int blink=0; blink!=AnzahlBlinken; blink++) \/\/ Blinken bis der Watchdog dem Spuk ein Ende macht oder die AnzahlBlinken erreicht ist<br\/>\t{<br\/>\t\tPORTB ^= (1&lt;&lt;LED1_PIN); \/\/Toogle (Ein-, Ausschalten der LED<br\/>\t\t_delay_ms(50); \/\/ Warten damit LED eine Change hat zu blinken<br\/>\t}<br\/>return (0);\t<br\/>}<br\/><br\/><br\/><br\/><br\/>\t\t\/\/ wdt_reset();<\/code><\/pre> <div class=\"code-embed-infos\"> <\/div> <\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Firmware vom W\u00fcrfel habe ich optimiert. Nun f\u00e4llt er in den Schlafmodus wenn er nicht gebraucht wird und verbraucht dann nur noch 0.06 \u00b5A. Nach dem Tastendruck wacht er wieder auf und wird vom Watchdog resetet. &nbsp; &nbsp;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,6,9],"tags":[],"class_list":["post-691","post","type-post","status-publish","format-standard","hentry","category-elektronik","category-microcontroller","category-wochenend-projekte"],"_links":{"self":[{"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=\/wp\/v2\/posts\/691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=691"}],"version-history":[{"count":4,"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=\/wp\/v2\/posts\/691\/revisions"}],"predecessor-version":[{"id":695,"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=\/wp\/v2\/posts\/691\/revisions\/695"}],"wp:attachment":[{"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.weise-bernd.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}