-
PWM Problem AtMega64
Hallo
Ich möchte den Timer1 beim AtMega 64 als PWM-Generator nutzen. Dazu habe ich folgendes Programm geschrieben:
Code:
include <avr/io.h>
#include <avr/iom64.h>
int main(void)
{
TCCR1A = 0xFD; //Timer1 mit PWM Initialisieren
TCCR1B = 0x43; // invertierte PWM, Teiler/64
OCR1AL = 0xff;
OCR1BL = 0x80;
while (1);
}
Aber die Pins PB5 und PB6 sind immer low. mit dem Oszilloskop kann ich nichts messen. Ist das Programm fehlerhaft?
Danke und gruss
panda...
-
Hi,
auf Ausgang müssen die Ports aber nomalerweise auch gestellt werden, sonst geht nix raus aus dem Ausgang. ;-)
Und dann grober Fehler, bei einem 16-Bit Register müssen immer beide Teile beschrieben werden, sonst gibts Chaos,
wichtig ist auch die Reihenfolge, oder man Spricht gleich den 16Bit-Namen an (zB. OCR1A), dann macht der Compiler das für einen das aufteilen in 2 Bytes (High- LowRegister) und die richtige Reihenfolge !
-
Wie konnte ich das mit dem Ausgang nur vergessen.... logisch, jetzt funktionierts. Danke!
Aber es reicht doch, wenn ich nur die tieferen 8 Bits des Registers beschreibe, denn zu Beginn wird das Register laut Datenblatt mit 0 initialisiert.
-
Reicht eben nicht, egal mit was es initialisiert wird, denn der Controller will beide Bytes haben !
Deswegen ist es auch wichtig wierum man das High- und Low-Register anspricht beim lesen und beim beschreiben !
Nachzulesen hier:
http://www.atmel.com/dyn/resources/p...ts/DOC1493.PDF
-
Ach so, beim Schreiben des Low-Register beschreibt er gleichzeitig auch das High-Register aus einem Zwischenspeicher. Alles klar, Danke!