3xPWM Mega32

OP #1206858
Lesenswert?
• ▲
▼
Hallo,
ich versuche seit einiger Zeit drei 8-bit Hardware-PWMs mit nem AVR 
hinzubekommen.
Angesteuert werden sollen LEDs, später am besten noch per UART, aber das 
ist im Moment unwichtig.
Viel wichtiger ist für mich die Frage, wie ich diese bescheuerten 
Register setzten muss um die drei PWMs (Timer1A, Timer1B und Timer2) zum 
laufen zu kriegen und mit welchem Befehl ich die Compare-Werte zuweisen 
muss.
Meine Versuche sehen bis jetzt so aus:

Das ganze soll für einen MEGA32 sein.
1
//Ziel: 8-bit PWM, Prescaler = 256, Ausgabe: nicht-invertierend
2

3
TCCR1A = (0<<WGM13)|(1<<WGM12)|(0<<WGM11)|(1<<WGM10); //8-bit, fast-pwm
4
//TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<WGM11)|(1<<WGM10);
5

6
TCCR1A = (1<<COM1A1)|(0<<COM1A0); //nicht-invertierend
7
TCCR1A = (1<<COM1B1)|(0<<COM1B0); //nicht-invertierend
8

9

10
TCCR2 = (1<<WGM20)|(1<<WGM21); //fast-pwm
11
TCCR2 = (1<<COM21)|(0<<COM20); //nicht-invertierend
12
TCCR2 = (1<<CS22)|(1<<CS21)|(0<<CS20); //prescaler: 256
#1206979
Lesenswert?
• ▲
▼
Phil J. wrote:
> TCCR1A = (0<<WGM13)|(1<<WGM12)|(0<<WGM11)|(1<<WGM10); //8-bit, fast-pwm
>> TCCR1A = (1<<COM1A1)|(0<<COM1A0); //nicht-invertierend
>> TCCR1A = (1<<COM1B1)|(0<<COM1B0); //nicht-invertierend
>
> TCCR2 = (1<<WGM20)|(1<<WGM21); //fast-pwm
>> TCCR2 = (1<<COM21)|(0<<COM20); //nicht-invertierend
>> TCCR2 = (1<<CS22)|(1<<CS21)|(0<<CS20); //prescaler: 256
Was glaubst Du, was in den blau hervorgehobenen Zeilen mit dem passiert, 
was Du vorher (in den grünen Zeilen) in das jeweilige Register 
geschrieben hast?

Schau mal ins AVR-GCC-Tutorial und in den Artikel 
Bitmanipulation
#1207213
Lesenswert?
• ▲
▼
Phil J. wrote:
> Autsch, ja!
> Aber ich vermute mal das wird nicht der einzige Fehler sein....
Denke ich auch.

Dir ist möglicherweise auch nicht klar, dass man eine 0 soviel durch die 
Gegend schieben kann, wie man will, es bleibt eine 0. Die ganzen "0 << 
IRGENDWAS" machen gar nichts bzw. sind schlicht und ergreifend 0.

Und wenn ein Wert mit einer Null verODERt, dann passiert tatsächlich gar 
nichts.

x | 0 == x

...
OP #1209533
Lesenswert?
• ▲
▼
Sooo, das mit dem 0 Schubsen hab ich nur gemacht, weil ich nach dem 
Datenblatt gegangen bin.
Hab das ganze jetzt aufgeräumt, funktioniert perfekt :-)
1
DDRD = 0xff;         
2
DDRA = 0xff;
3
DDRB = 0xff;
4
  
5
TCCR1A = (1<<COM1A1)|(1<<WGM12)|(1<<WGM10)|(1<<COM1B1);
6
TCCR1B = (1<<WGM12)|(1<<WGM10);
7
TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|(1<<CS22)|(1<<CS21);
8

9
OCR1AL = 0;
10
OCR1BL = 0;
11
OCR 2 = 0;

Jetzt habe ich aber noch ein anderes Problem, ich versuche via UART zu 
schreiben und zu lesen.
Schreiben klappt auch schon ohne große Probleme.
Ich möchte jetzt aber auch ganz gerne Werte einlesen.
Jetzt würd ich gerne wissen, wie das am intelligentesten geht.
Im Prinzip brauch ich die Möglichkeit 3 Werte zu übertragen.
Erste Experimente mit dem Empfangen eines Zeichens aus dem avr-gcc 
Tutorial waren auch schon mehr oder weniger erfolgreich:
Irgendwas kommt definitiv an, aber ich kann nicht wirklich was steuern.
Jetzt stelle ich mir die Frage, was überhaupt passiert, wenn ich in 
Hyptererm (...) eine Taste drücke - kommt dann der ASCII-Wert am AVR an?
Wie würde eine intelligente Auswerteschleife aussehen?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.