www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 3xPWM Mega32


Autor: Phil J. (sunflower_seed)
Datum:

Bewertung
0 lesenswert
nicht 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.
//Ziel: 8-bit PWM, Prescaler = 256, Ausgabe: nicht-invertierend

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

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Phil J. (sunflower_seed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autsch, ja!
Aber ich vermute mal das wird nicht der einzige Fehler sein....

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

...

Autor: Phil J. (sunflower_seed)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)
DDRD = 0xff;         
DDRA = 0xff;
DDRB = 0xff;
  
TCCR1A = (1<<COM1A1)|(1<<WGM12)|(1<<WGM10)|(1<<COM1B1);
TCCR1B = (1<<WGM12)|(1<<WGM10);
TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|(1<<CS22)|(1<<CS21);

OCR1AL = 0;
OCR1BL = 0;
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.