Forum: Mikrocontroller und Digitale Elektronik AtMega128 PWM Signal Timer1


von Maria Waldner (Gast)


Lesenswert?

Hallo, bin am Verzweifeln, hat von euch jemadn vieleicht eine Ahnung 
wieso von meinen ins OCR1B+C Register geschriebenen Werten nur das High 
Byte(OCR1BH) durchgeschoben wird und im Simulator des AVR Studius dan 
aber im OCR1BL ankommt. Die Reihenfolge müsste laut Manual eh so 
stimmen.
Ich bin für jede Hilfe dankbar.

1
 
2
// WGM13:0 = 15  => FAST PWM mit OCR1x als TOP
3
// COM1B1:0 + COM1C1:0 = 3 => Clear OCnA/OCnB/OCnC on compare match, set OCnA/OCnB/OCnC at TOP
4
// CS12:0  = 2  => clkI/O/8 (From prescaler)
5
    TCCR1A |=  (1<<COM1B1) |(1<<COM1B0) |(1<<COM1C1)|(1<<COM1C0) | (1<<WGM11) | (1<<WGM10);
6
7
  TCCR1B |=  (1<<WGM13) | (1<<WGM12) |(1<<CS11);
8
9
  OCR1BH = 0xA3;   
10
  OCR1BL = 0xF1;
11
12
  OCR1C = 0xF0A2;
13
14
  TIMSK |= (1<<OCIE1B) | (1<<TOIE1);
15
16
  ETIMSK |= (1<<OCIE1C);

von Karl H. (kbuchegg)


Lesenswert?

Bei 16 Bit Regsitern, die aus einem Low und einem High
Byte bestehen, sollte man immer die Reihenfolge: zuerst
Low Byte, dann High Byte beschreiben einhalten. Einige
dieser Register (alle?) sind gepuffert. Erst das schreiben
des High-Bytes führt den tatsächlichen Datentransfer
des Lowbytes aus.

von Maria Waldner (Gast)


Lesenswert?

Das Problem ist komischerweise wenn ich
1
 OCR1BL = 0xF1;
2
 OCR1BH = 0xA3;

mache dann funktioniert noch weniger, da gelangen nämlich keine Daten in 
die Register.

von Thomas (Gast)


Lesenswert?

mach einfach so! der compiler sollte sich um alles weitere kümmern!

OCR1B = 0xA3F1;

von Maria Waldner (Gast)


Lesenswert?

Bei
1
OCR1B = 0xA3F1;

wird komischerweise das Register OCR1BL mit 0xA3 gefüllt.. OCR1BL bleibt 
auf 0x00.

von Maria Waldner (Gast)


Lesenswert?

"OCR1BH bleibt auf 0x00. "
Sollte das heissen.

von Thomas (Gast)


Lesenswert?

das ist nur im simulator so! funktioniert nicht richtig (sogennanter 
bug)! wenn du das auf den uC programmierstst sollte es gehen!

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
Noch kein Account? Hier anmelden.