{"id":5348,"date":"2025-07-06T16:33:51","date_gmt":"2025-07-06T15:33:51","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=5348"},"modified":"2025-07-06T16:33:51","modified_gmt":"2025-07-06T15:33:51","slug":"avr-1","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=5348","title":{"rendered":"AVR #1"},"content":{"rendered":"<p>RGB LED im Wechsel leuchten lassen mit Software PWM.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\n#include &lt;avr\/io.h&gt;\r\n#include &lt;avr\/interrupt.h&gt;\r\n\r\nuint8_t pwmRed = 10;\r\nuint8_t pwmGreen = 10;\r\nuint8_t pwmBlue = 10;\r\n\r\n\/\/ Overflow Interrupt Routine von Timer 0\r\nISR(TIMER0_OVF_vect) {\r\n  static uint8_t inc = 0;\r\n  static uint8_t state = 0;\r\n\r\n  inc++;\r\n  if(inc == 25) {\r\n    inc = 0;\r\n\r\n    if(state == 0) {\r\n      state = 1;\r\n\r\n      \/\/ Red\r\n      pwmRed = 100;\r\n      pwmGreen = 0;\r\n      pwmBlue = 0;\r\n    } else if(state == 1) {\r\n      state = 2;\r\n\r\n      \/\/ Blue\r\n      pwmRed = 0;\r\n      pwmGreen = 100;\r\n      pwmBlue = 0;\r\n    } else if(state == 2) {\r\n      state = 3;\r\n\r\n      \/\/ Green\r\n      pwmRed = 0;\r\n      pwmGreen = 0;\r\n      pwmBlue = 100;\r\n    }\r\n    else if(state == 3) {\r\n      state = 4;\r\n      pwmRed = 0;\r\n\r\n      \/\/ Cyan\r\n      pwmGreen = 100;\r\n      pwmBlue = 100;\r\n    }\r\n    else if(state == 4) {\r\n      state = 0;\r\n\r\n      \/\/ Magenta\r\n      pwmRed = 100;\r\n      pwmGreen = 0;\r\n      pwmBlue = 100;\r\n    }\r\n  }\r\n}\r\n\r\nint main() {\r\n  \/\/ PORTB als Ausgang schalten\r\n  DDRB  = 0xFF;\r\n  \/\/ Alle Ausgaenge auf 0 schalten\r\n  PORTB = 0x00;\r\n\r\n  \/\/ Prescaler von Timer0 auf 1024 stellen\r\n  TCCR0B |= (1 &lt;&lt; CS02) | (1 &lt;&lt; CS00);\r\n  \/\/ Timer 0 Overflow Interrupt aktivieren\r\n  TIMSK0  |= (1 &lt;&lt; TOIE0);\r\n\r\n  \/\/ Interrupts einschalten\r\n  sei();\r\n\r\n  uint8_t inc = 0;\r\n  for(;;) {\r\n    \/\/ Alle Lampen einschalter\r\n    if(inc == 0) {\r\n       PORTB |= (1 &lt;&lt; PB0);\r\n       PORTB |= (1 &lt;&lt; PB1);\r\n       PORTB |= (1 &lt;&lt; PB2);\r\n    }\r\n\r\n    \/\/ Lampen entsprechend dem PWM Wert ausschalten\r\n    if(inc == pwmRed) {\r\n      PORTB &amp;= ~(1 &lt;&lt; PB0);\r\n    }\r\n\r\n    if(inc == pwmGreen) {\r\n      PORTB &amp;= ~(1 &lt;&lt; PB1);\r\n    }\r\n\r\n    if(inc == pwmBlue) {\r\n      PORTB &amp;= ~(1 &lt;&lt; PB2);\r\n    }\r\n\r\n    inc++;\r\n  }\r\n}\r\n\r\n<\/pre>\n<p>F\u00fcr AVR UNO und avrdude als Programmer \"arduino\" und als MCU \"m328p\"<\/p>\n<p>Makefile<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nall:\r\n        avr-g++ -O1 -Wall -Wextra -Wconversion blink.cpp -mmcu=atmega328p -o blink.elf\r\n        avr-objcopy -O ihex blink.elf blink.hex\r\n\r\n\r\nload:\r\n        avrdude -v -p m328p -c arduino -P \/dev\/ttyACM0 -U flash:w:blink.hex:i -i 11\r\n\r\nclean:\r\n        rm -f *.o *.hex *.elf\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>RGB LED im Wechsel leuchten lassen mit Software PWM. #include &lt;avr\/io.h&gt; #include &lt;avr\/interrupt.h&gt; uint8_t pwmRed = 10; uint8_t pwmGreen = 10; uint8_t pwmBlue = 10; \/\/ Overflow Interrupt Routine von Timer 0 ISR(TIMER0_OVF_vect) { static uint8_t inc = 0; static uint8_t state = 0; inc++; if(inc == 25) { inc = 0; if(state == 0) [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-5348","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/5348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5348"}],"version-history":[{"count":1,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/5348\/revisions"}],"predecessor-version":[{"id":5349,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/5348\/revisions\/5349"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5348"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}