Hallo,
ich wollte einfach mal die Funktion der Fast - PWM Funktion probieren,
jedoch funktioniert das so nicht. Laut meinem Verständnis sollte nun der
PIN ca. zur Hälfte eingeschaltet sein und dann wieder auf low gehen.
#include <avr/io.h>
int main(void)
{
TCCR1B=(1<<CS11); //Vorteiler 8
TCCR1B=(1<<WGM12); //Fast PWM Modus(8 bit)
TCCR1A=(1<<WGM10); //Fast PWM Modus(8 bit)
TCCR1A=(1<<COM1A1)|(1<<COM1A0); //Einschalten bei Compare match
OCR1AH=0;
OCR1AL=127;
DDRB=0xff;
while(1)
{
;
}
}
freue mich über den gefundenen Fehler
igor.h schrieb: > TCCR1B=(1<<CS11); //Vorteiler 8 > TCCR1B=(1<<WGM12); //Fast PWM Modus(8 bit) Was passiert hier mit TCCR1B? > TCCR1A=(1<<WGM10); //Fast PWM Modus(8 bit) > TCCR1A=(1<<COM1A1)|(1<<COM1A0); //Einschalten bei Compare match Was passiert hier mit TCCR1A?
laut meinem Verständnis wäre dann TCCR1B=00001010 durch die Verschiebung der Bits auf die Position oder? und TCCR1A=11000001 hm, aber so wies aussieht weißt du das Problem =)
ouh, das heißt ja ich schiebe das zuerst gesetzte Bit CS11 viel weiter.... wohl das ODER vergessen^^ vielen Dank, jetzt tuts
Nein: TCCR1B = (1<<CS11) Was passiert? TCCR1B wird der Wert 0000_1000 zugewiesen. Danach kommt TCCR1B = (1<<WGM12) Und hier wird dem Register der Wert 0000_0010 zugewiesen. Dabei nimmt es dann auch wirklich den Wert 0000_0010 an - und dein vorher gesetztes Bit ist wieder gelöscht. Mit "=" weist man nämlich einem Register einen Wert zu - und der vorherige Wert wird vollständig überschrieben. Les' dir mal den Artikel über Bitmanipulation durch. ODER (OR, als Operator "|" oder "|=") ist das Stichwort. Gruß Jonathan
ok also z.B TCCR1B=(1<<CS11)|(1<<WGM12); Damit weise ich praktisch den Verknüpften Wert direkt zu TCCR1B= 0000_1010 hab das jetzt einfach direkt reingeschrieben TCCR1B=0b00001010; auf jeden Fall nochmals vielen Dank :)
igor.h schrieb: > laut meinem Verständnis wäre dann > > TCCR1B=00001010 durch die Verschiebung der Bits auf die Position > oder? Nein. > hm, aber so wies aussieht weißt du das Problem =) Tut er mit Sicherheit. Aber du sollst selbst drauf kommen. Dröseln wir's doch noch weiter auf: Was passiert hier mit TCCR1B: > TCCR1B=(1<<CS11); //Vorteiler 8 und was hier: > TCCR1B=(1<<WGM12); //Fast PWM Modus(8 bit) ?
Ja. Ich hatte nur zu lange gebraucht, meine Antwort abzuschicken und hab vorher nicht geschaut, ob schon andere Antworten da waren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.