Absolute Beginner-AVR Steckbrettprojekte: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
 
(34 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Als einfacher Anfang ist ein Steckbrett und ein USB Programmer erst mal ausreichend. Dazu ein [[ATMega88‎| Atmel Mega 88]] und ein bisschen Hühnerfutter und los geht es.
Als einfacher Anfang ist ein [[Steckbrett|Steckbrett]] und ein [[AVR_In_System_Programmer|USB Programmer]] erst mal ausreichend. Dazu ein [[AVR| Atmel Mega 88]] und ein bisschen Hühnerfutter und los geht es.
 
Auf dem PC muss das [[AVR-Studio]], [[AVR-GCC‎|WinAvr]] und ggf. [[Ponyprog]] zum Übertragen der Hex-Files installiert sein. Die Beispielprogramme sind in '''C''' geschrieben. <br>
Die Programme können und sollen mit dem AVR Studio simuliert werden, um etwas Gefühl für die Abarbeitungszeit der Programme zu bekommen. (Es muss nicht immer ein 20 MHz Quarz sein).


Auf dem PC muss das [[AVR-Studio]], [[AVR-GCC‎|WinAvr]] und ggf. [[Pony-Prog_Tutorial|Ponyprog]] zum Übertragen der Hex-Files installiert sein. Die Beispielprogramme sind in '''C''' geschrieben. <br>
Die Programme können und sollen mit dem [[AVR-Simulation#AVR_Studio|AVR Studio simuliert]] werden, um etwas Gefühl für die Abarbeitungszeit der Programme zu bekommen. (Es muss nicht immer ein 20 MHz Quarz sein).




Zeile 11: Zeile 10:
Die [[AVR_Fuses| Fuse Bits]] bleiben auf Auslieferungszustand.  
Die [[AVR_Fuses| Fuse Bits]] bleiben auf Auslieferungszustand.  


Der [[Mega 88]] wird aus einer 9V Block-Batterie und dem [[7805]] mit 5V Spannung versorgt.
Der [[AVR| AtMega88]] wird aus einer 9V Block-Batterie und dem [[Standardbauelemente#Spannungsregler|7805]] mit 5V Spannung versorgt.
Eine [[LED]] wird nach GND geschaltet, diese leuchtet wenn der Portpin auf 1 oder High liegt.
Eine [[LED]] wird nach GND geschaltet, diese leuchtet wenn der Portpin auf 1 oder High liegt.
Die andere [[LED]] wird nach Vcc geschaltet, diese leuchtet wenn der Portpin auf 0 oder Low liegt.
Die andere [[LED]] wird nach Vcc geschaltet, diese leuchtet wenn der Portpin auf 0 oder Low liegt.
Zeile 20: Zeile 19:
(Der Taster im Bild wird erst später gebraucht)
(Der Taster im Bild wird erst später gebraucht)


Im Programm wird im [[AVR-GCC-Tutorial#Datenrichtung_bestimmen|DDRD]] festgelegt, dass der alle Pin´s des Port D Ausgänge sind. Durch den unterschiedlichen Anschluss der LED muss der Port D0 auf 1 und der Port D2 auf 0 gesetzt werden, damit beide LED leuchten.
Im Programm wird im [[AVR-GCC-Tutorial#Datenrichtung_bestimmen|DDRD]]-Register festgelegt, dass alle Pins des Port D Ausgänge sind. Durch den unterschiedlichen Anschluss der LED muss der Port D0 auf 1 und der Port D2 auf 0 gesetzt werden, damit beide LED leuchten.


Download Software:  [[Media:Absolute_Beginner_01.c‎| C Programm]]
Download Software:  [[Media:Absolute_Beginner_01.c‎| C Programm]]
Zeile 26: Zeile 25:


'''Aufgaben:'''  <br>
'''Aufgaben:'''  <br>
Hex-File in Controller laden. <br>
Hex-File in den Controller laden.<br>
Das Programm im AVR Studio simulieren und die Zustände von PortD im Einzelschrittmodus (F10) betrachten. <br>
Das Programm im [[AVR-Simulation#AVR_Studio|AVR Studio simulieren]] und die Zustände von Port D im Einzelschrittmodus (F10) betrachten.<br>
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden <br>
C-Programm kompilieren und dann die neue Hex-Datei in den Controller laden.<br>
C Programm so ändern, dass die LEDs an einem anderen Port angeschlossen werden. <br>
C Programm so ändern, dass die LEDs an einem anderen Port angeschlossen werden.<br>


==Eingang abfragen==
==Eingang abfragen==
[[Bild:Absolute_Beginner_01.png|320px]][[Bild:Absolute_Beginner_01.JPG|290px]]
[[Bild:Absolute_Beginner_01.png|320px]][[Bild:Absolute_Beginner_01.JPG|290px]]


In der Initialisierung wird mit dem [[AVR-GCC-Tutorial#Datenrichtung_bestimmen|DDRD] festgelegt, dass Port D0bis3 Ausgänge und D4bis7 Eingänge sind. Der interne Pull Up Widerstand Port D7 wird eingeschaltet.  
In der Initialisierung wird mit dem [[AVR-GCC-Tutorial#Datenrichtung_bestimmen|DDRD]] festgelegt, dass Port D0 bis 3 Ausgänge und D4 bis 7 Eingänge sind. Der interne Pull Up Widerstand Port D7 wird eingeschaltet.  


Der Taster ist an Pin D7 angeschlossen. Der Taster schaltet nach Masse, daher ist der Pin D7 bei unbetätigtem Taster durch den internen Pull Up Widerstand (nach Vcc) auf High.
Der Taster ist an Pin D7 angeschlossen. Der Taster schaltet nach Masse, daher ist der Pin D7 bei unbetätigtem Taster durch den internen Pull Up Widerstand (nach Vcc) auf High.
Zeile 46: Zeile 45:
'''Aufgaben:'''  <br>
'''Aufgaben:'''  <br>
Hex-File in Controller laden. <br>
Hex-File in Controller laden. <br>
Das Programm im AVR Studio simulieren und die Abarbeitungszeit für das Hauptprogramm ermitteln. <br>
Das Programm im [[AVR-Simulation#AVR_Studio|AVR Studio simulieren]] und die Abarbeitungszeit für das Hauptprogramm ermitteln. <br>
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden. <br>
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden. <br>


==LED blinken lassen==
==LED blinken lassen==
Zeile 56: Zeile 53:
Die [[AVR_Fuses| Fuse Bits]] bleiben auf Auslieferungszustand. Dadurch läuft der Controller auf 1Mhz internen Takt. Genutzt wird der Timer 1 . Der Takt-Vorteiler (pre-scaler ) wird auf 1024 eingestellt.
Die [[AVR_Fuses| Fuse Bits]] bleiben auf Auslieferungszustand. Dadurch läuft der Controller auf 1Mhz internen Takt. Genutzt wird der Timer 1 . Der Takt-Vorteiler (pre-scaler ) wird auf 1024 eingestellt.


Zeit = 1 / (1.000.000/(1024*488) = 0,4997sec.
Zeit = 1 / (1.000.000/(1024*488)) = 0,4997sec.


Das heißt: die Timerinterrupt-Routine 1 wird alle 0,5 Sekunden aufgerufen, die LED blinken mit 1Hz.
Das heißt: die Timerinterrupt-Routine 1 wird alle 0,5 Sekunden aufgerufen, die LED blinken mit 1Hz.
Zeile 68: Zeile 65:
'''Aufgaben:'''  <br>
'''Aufgaben:'''  <br>
Hex-File in Controller laden. <br>
Hex-File in Controller laden. <br>
Das Programm im AVR Studio simulieren und die Zeitabstände in der die Interruptroutine Timer 1 aufgerufen wird überprüfen, dann die Abarbeitungszeit für diese Routine ermitteln. <br>
Das Programm im [[AVR-Simulation#AVR_Studio|AVR Studio simulieren]] und die Zeitabstände in der die Interruptroutine Timer 1 aufgerufen wird überprüfen, dann die Abarbeitungszeit für diese Routine ermitteln. <br>
Sich über die Vorgänge klar werden, wie ein Timer funktioniert ([[FAQ#Timer]]). <br>
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden. <br>
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden. <br>
C Programm so ändern, dass andere Blinkzeiten entstehen. <br>
C Programm so ändern, dass andere Blinkzeiten entstehen. <br>
CLK/8 Fuse ändern, sodass der Controller 8-mal schneller läuft und die LED schnell blinken. <br>
CLK/8 Fuse ändern, sodass der Controller 8-mal schneller läuft und die LED schnell blinken. <br>
Timer 0 konfigurieren und die LED an Port D0 mit ca. 4 Hz blinken lassen. Dazu das Programm um eine Variable '''blinkmerker2''' erweitern und damit den Port D0 im '''Hauptprogramm''' steuern  <br>
Timer 0 konfigurieren und die LED an Port D0 mit ca. 4 Hz blinken lassen. Dazu das Programm um eine Variable '''blinkmerker2''' erweitern und damit den Port D0 im '''Hauptprogramm''' steuern  <br>


==LCD ansteuern==
==LCD ansteuern==
Man mag sich fragen, warum die Ansteuerung eines LCD so weit am Anfang kommt. Ich halte die Vorteile für eine einfache Fehlersuche recht groß. Oft sag man nach in paar Stunden Fehlersuche: „kaum macht man es richtig, schon funktioniert es“. Einfach ein paar Variablen aufs Display und schon gibt es ein Ahhaaa.  
Man mag sich fragen, warum die Ansteuerung eines LCD so weit am Anfang kommt. Ich halte die Vorteile für eine einfache Fehlersuche für recht groß. Oft sagt man nach ein paar Stunden Fehlersuche: „kaum macht man es richtig, schon funktioniert es“. Einfach ein paar Variablen im Display anzeigen lassen und schon gibt es ein Ahhaaa.  


[[Bild:Absolute_Beginner_LCD_01.png|320px]][[Bild:Absolute_Beginner_LCD_01.JPG|290px]]
[[Bild:Absolute_Beginner_LCD_01.png|320px]][[Bild:Absolute_Beginner_04_LCD.JPG|320px]]


Da man ein LCD häufig braucht und die benötigten Programmblöcke immer gleich sind, werden sie sinnvoller Weise in separate Programme ausgelagert. Die Bibliothek ist dann einmal getestet und kann wieder verwendet werden. In diesem Fall sind es die: [[AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h| lcd-routines.h]] und [[LCD-Ansteuerung#Programmierung| lcd-routines.c]].  
Da man ein LCD häufig braucht und die benötigten Programmblöcke immer gleich sind, werden sie sinnvoller Weise in separate Programme ausgelagert. Die Bibliothek ist dann einmal getestet und kann wieder verwendet werden. In diesem Fall sind es die: [[AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h| lcd-routines.h]] und [[AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.c:| lcd-routines.c]].  


Das LCD wird im 4Bit Modus betrieben. Es kommt das Programm und der Anschluss hier aus dem Forum unter [[AVR-GCC-Tutorial/LCD-Ansteuerung]] zum Einsatz.
Das LCD wird im 4Bit Modus betrieben. Es kommt das Programm und der Anschluss hier aus dem Forum unter [[AVR-GCC-Tutorial/LCD-Ansteuerung]] zum Einsatz.
Download Software:  [[Media:Absolute Beginner 4.zip| Programm als ZIP]]




'''Aufgaben:'''  <br>
'''Aufgaben:'''  <br>
Das Programm im AVR Studio simulieren und die Abarbeitungszeit für das Hauptprogramm ermitteln. <br>
Das Programm im [[AVR-Simulation#AVR_Studio|AVR Studio simulieren]] und die Abarbeitungszeit für das Hauptprogramm ermitteln. <br>
Das LCD an PortB anschließen und das Programm entsprechend ändern. <br>
Das LCD an PortB anschließen und das Programm entsprechend ändern. <br>
===Taster abfragen===
[[Bild:Absolute_Beginner_4_1.png|320px]][[Bild:Absolute_Beginner_04_1.JPG|320px]]
Um für Programmerweiterungen Ports frei zu bekommen wird das LCD nun auf Port B angeschlossen. In der Datei [[AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h| lcd-routines.h]] werden die entsprechenden Änderungen vorgenommen.<br>
Wenn man ein LCD im Einsatz hat, sind schon 6 Pin´s „verbraucht“. Da die vier Leitungen für die Datenbits des LCD nur dann das LCD interessieren, wenn auch die RW (Read/Write) oder E (Enable) Leitung geschaltet wird, werden diese vier Pin´s doppelt belegt und mittels eines weiten Pins abfragt. Hierzu werden die vier Taster mit 470Ω Widerständen mit den Datenleitungen verbunden. Durch die Widerstände werden Kurzschlüsse verhindert, falls die Taster betätigt werden, wenn gerade auf das LCD geschrieben wird. <br>
Der PinX.6 (in diesem Fall PinB.6)  ist als Eingang definiert und der zugehörige interne Pull-Up Widerstand ist aktiviert. Nun werden die vier Datenleitungen der Reihe nach auf Low gesetzt und geschaut, ob sich der PinX.6 ändert. Dies geschieht, wenn ein betätigter Taster eine Verbindung von der jeweiligen Datenleitung nach PinX.6 geschaltet hat.
Download Software:  [[Media:Absolute Beginner 4_1.zip| Programm als ZIP]]


==Analogeingang einlesen==
==Analogeingang einlesen==
Es kommt das Programm und der Anschluss hier aus dem Forum unter [[AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29]] zum Einsatz.
Es kommt das Programm und der Anschluss hier aus dem Forum unter [[AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29]] zum Einsatz.
[[Bild:Absolute_Beginner_05.png|320px]]
Das LCD ist jetzt am '''PortB''' angeschlossen.<br>
Zwischen Vcc und Gnd liegt ein Poti als Spannungsteiler. Der Mittelabgriff liegt am Analogeingang 1 (PortC0)
Download Software:  [[Media:Absolute_Beginner_5.zip| Programm als ZIP]]


'''Aufgaben:'''  <br>
'''Aufgaben:'''  <br>
Analogwert auf dem LCD anzeigen. <br>
zweiten Analogwert ebenfalls auf dem LCD anzeigen. <br>
 
 
 
==PWM  Pulsweitenmodulation==
 
[[Bild:Absolute_Beginner_06.png|320px]] [[Bild:Absolute_Beginner_06.jpg|320px]]
 
 
Einlesen des Analogeingangs 0 (PinC0). Ausgabe des Analogwertes auf dem LCD. Erzeugung eines PWM Signals auf dem PortD6 mit Timer0. <br>
Der Wert des Analogeingangs wird durch 4 geteilt und als Sollwert für die [[AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Die_PWM-Betriebsart|PWM]] genutzt. Durch das [[LED-Fading|LED fading]] ist der Helligkeitsanstieg an der LED nicht linear.
 
Durch den [[AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR|Timer Vor-Teiler]] von 256 (TCCR0B =(1<<CS02);) ist die PWM Frequenz sehr niedrig, sodass man mit dem Auge ein Flackern an der LED erkennen kann.
 
'''fOCnxPWM=( fclk_I/O)/(Pre-Teiler * 256) ''' <br>
'''fOCnxPWM= 1.000.000Hz/(256*256)=15,26Hz'''
 
 
Download Software:  [[Media:Absolute_Beginner_6.zip| Programm als ZIP]]
 
 
'''Aufgaben:'''  <br>
Hex-File in Controller laden. <br>
Eine Simulation der PWM ist mit meinem AVR Studio nicht gelungen siehe[[AVR-Studio_Bugs| AVR-Studio_Bugs]]<br>
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden. <br>
Im Programm den Pre-Teiler heruntersetzen (TCCR0B =(1<<CS01|1<<CS00);), sodass das Flacken verschwindet. (fOCnxPWM =122,1Hz)<br>
 
==Interrupt==





Aktuelle Version vom 27. Oktober 2020, 14:48 Uhr

Als einfacher Anfang ist ein Steckbrett und ein USB Programmer erst mal ausreichend. Dazu ein Atmel Mega 88 und ein bisschen Hühnerfutter und los geht es.

Auf dem PC muss das AVR-Studio, WinAvr und ggf. Ponyprog zum Übertragen der Hex-Files installiert sein. Die Beispielprogramme sind in C geschrieben.
Die Programme können und sollen mit dem AVR Studio simuliert werden, um etwas Gefühl für die Abarbeitungszeit der Programme zu bekommen. (Es muss nicht immer ein 20 MHz Quarz sein).


LED einschalten

Siehe auch: AVR-GCC-Tutorial

Die Fuse Bits bleiben auf Auslieferungszustand.

Der AtMega88 wird aus einer 9V Block-Batterie und dem 7805 mit 5V Spannung versorgt. Eine LED wird nach GND geschaltet, diese leuchtet wenn der Portpin auf 1 oder High liegt. Die andere LED wird nach Vcc geschaltet, diese leuchtet wenn der Portpin auf 0 oder Low liegt.


Absolute Beginner 01.pngAbsolute Beginner 01.JPG

(Der Taster im Bild wird erst später gebraucht)

Im Programm wird im DDRD-Register festgelegt, dass alle Pins des Port D Ausgänge sind. Durch den unterschiedlichen Anschluss der LED muss der Port D0 auf 1 und der Port D2 auf 0 gesetzt werden, damit beide LED leuchten.

Download Software: C Programm Download Software: Hex-File

Aufgaben:
Hex-File in den Controller laden.
Das Programm im AVR Studio simulieren und die Zustände von Port D im Einzelschrittmodus (F10) betrachten.
C-Programm kompilieren und dann die neue Hex-Datei in den Controller laden.
C Programm so ändern, dass die LEDs an einem anderen Port angeschlossen werden.

Eingang abfragen

Absolute Beginner 01.pngAbsolute Beginner 01.JPG

In der Initialisierung wird mit dem DDRD festgelegt, dass Port D0 bis 3 Ausgänge und D4 bis 7 Eingänge sind. Der interne Pull Up Widerstand Port D7 wird eingeschaltet.

Der Taster ist an Pin D7 angeschlossen. Der Taster schaltet nach Masse, daher ist der Pin D7 bei unbetätigtem Taster durch den internen Pull Up Widerstand (nach Vcc) auf High.


Download Software: C Programm Download Software: Hex-File


Aufgaben:
Hex-File in Controller laden.
Das Programm im AVR Studio simulieren und die Abarbeitungszeit für das Hauptprogramm ermitteln.
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden.

LED blinken lassen

Absolute Beginner 01.pngAbsolute Beginner 01.JPG

Die Fuse Bits bleiben auf Auslieferungszustand. Dadurch läuft der Controller auf 1Mhz internen Takt. Genutzt wird der Timer 1 . Der Takt-Vorteiler (pre-scaler ) wird auf 1024 eingestellt.

Zeit = 1 / (1.000.000/(1024*488)) = 0,4997sec.

Das heißt: die Timerinterrupt-Routine 1 wird alle 0,5 Sekunden aufgerufen, die LED blinken mit 1Hz.

Download Software: C Programm Download Software: Hex-File

Download Software: C Programm mit Timer 0 und 1


Aufgaben:
Hex-File in Controller laden.
Das Programm im AVR Studio simulieren und die Zeitabstände in der die Interruptroutine Timer 1 aufgerufen wird überprüfen, dann die Abarbeitungszeit für diese Routine ermitteln.
Sich über die Vorgänge klar werden, wie ein Timer funktioniert (FAQ#Timer).
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden.
C Programm so ändern, dass andere Blinkzeiten entstehen.
CLK/8 Fuse ändern, sodass der Controller 8-mal schneller läuft und die LED schnell blinken.
Timer 0 konfigurieren und die LED an Port D0 mit ca. 4 Hz blinken lassen. Dazu das Programm um eine Variable blinkmerker2 erweitern und damit den Port D0 im Hauptprogramm steuern

LCD ansteuern

Man mag sich fragen, warum die Ansteuerung eines LCD so weit am Anfang kommt. Ich halte die Vorteile für eine einfache Fehlersuche für recht groß. Oft sagt man nach ein paar Stunden Fehlersuche: „kaum macht man es richtig, schon funktioniert es“. Einfach ein paar Variablen im Display anzeigen lassen und schon gibt es ein Ahhaaa.

Absolute Beginner LCD 01.pngAbsolute Beginner 04 LCD.JPG

Da man ein LCD häufig braucht und die benötigten Programmblöcke immer gleich sind, werden sie sinnvoller Weise in separate Programme ausgelagert. Die Bibliothek ist dann einmal getestet und kann wieder verwendet werden. In diesem Fall sind es die: lcd-routines.h und lcd-routines.c.

Das LCD wird im 4Bit Modus betrieben. Es kommt das Programm und der Anschluss hier aus dem Forum unter AVR-GCC-Tutorial/LCD-Ansteuerung zum Einsatz.


Download Software: Programm als ZIP


Aufgaben:
Das Programm im AVR Studio simulieren und die Abarbeitungszeit für das Hauptprogramm ermitteln.
Das LCD an PortB anschließen und das Programm entsprechend ändern.

Taster abfragen

Absolute Beginner 4 1.pngDatei:Absolute Beginner 04 1.JPG

Um für Programmerweiterungen Ports frei zu bekommen wird das LCD nun auf Port B angeschlossen. In der Datei lcd-routines.h werden die entsprechenden Änderungen vorgenommen.
Wenn man ein LCD im Einsatz hat, sind schon 6 Pin´s „verbraucht“. Da die vier Leitungen für die Datenbits des LCD nur dann das LCD interessieren, wenn auch die RW (Read/Write) oder E (Enable) Leitung geschaltet wird, werden diese vier Pin´s doppelt belegt und mittels eines weiten Pins abfragt. Hierzu werden die vier Taster mit 470Ω Widerständen mit den Datenleitungen verbunden. Durch die Widerstände werden Kurzschlüsse verhindert, falls die Taster betätigt werden, wenn gerade auf das LCD geschrieben wird.
Der PinX.6 (in diesem Fall PinB.6) ist als Eingang definiert und der zugehörige interne Pull-Up Widerstand ist aktiviert. Nun werden die vier Datenleitungen der Reihe nach auf Low gesetzt und geschaut, ob sich der PinX.6 ändert. Dies geschieht, wenn ein betätigter Taster eine Verbindung von der jeweiligen Datenleitung nach PinX.6 geschaltet hat.


Download Software: Programm als ZIP

Analogeingang einlesen

Es kommt das Programm und der Anschluss hier aus dem Forum unter AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29 zum Einsatz.

Absolute Beginner 05.png

Das LCD ist jetzt am PortB angeschlossen.
Zwischen Vcc und Gnd liegt ein Poti als Spannungsteiler. Der Mittelabgriff liegt am Analogeingang 1 (PortC0)


Download Software: Programm als ZIP


Aufgaben:
zweiten Analogwert ebenfalls auf dem LCD anzeigen.


PWM Pulsweitenmodulation

Absolute Beginner 06.png Absolute Beginner 06.jpg


Einlesen des Analogeingangs 0 (PinC0). Ausgabe des Analogwertes auf dem LCD. Erzeugung eines PWM Signals auf dem PortD6 mit Timer0.
Der Wert des Analogeingangs wird durch 4 geteilt und als Sollwert für die PWM genutzt. Durch das LED fading ist der Helligkeitsanstieg an der LED nicht linear.

Durch den Timer Vor-Teiler von 256 (TCCR0B =(1<<CS02);) ist die PWM Frequenz sehr niedrig, sodass man mit dem Auge ein Flackern an der LED erkennen kann.

fOCnxPWM=( fclk_I/O)/(Pre-Teiler * 256)
fOCnxPWM= 1.000.000Hz/(256*256)=15,26Hz


Download Software: Programm als ZIP


Aufgaben:
Hex-File in Controller laden.
Eine Simulation der PWM ist mit meinem AVR Studio nicht gelungen siehe AVR-Studio_Bugs
C-Programm kompilieren und dann den neuen Hex-File in den Controller laden.
Im Programm den Pre-Teiler heruntersetzen (TCCR0B =(1<<CS01|1<<CS00);), sodass das Flacken verschwindet. (fOCnxPWM =122,1Hz)

Interrupt