-         

Ergebnis 1 bis 5 von 5

Thema: FAST-PWM - 8 Bit Timer Atmega644 - kein Signal?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.11.2008
    Alter
    26
    Beiträge
    60

    FAST-PWM - 8 Bit Timer Atmega644 - kein Signal?

    Anzeige

    Hallo zusammen
    Ich habe ein kleines Problemchen bei der Erzeugung eines PWM Signals...
    Ich habe mich in den letzen 2 Tagen viel mit PWM-Tutorials und dem Datenblatt meines Atmega644 auseinandergesetzt und mir ein gewisses Grundverständnis der Register und Bits erarbeitet, bin allerdings noch nicht ganz so sicher im Umgang mit den Timern, was sich darin äußert, dass an den Pins OC2B und OC2A (welche zu den Enables des Motortreibers führen) absolut nichts tut.
    Auch Messungen mit dem Oszilloskop haben nichts ergeben.

    Es liegt offenbar an meinem Code...
    Ich poste hier erstmal die Funktion, in der alle PWM-spezifischen Einstellungen getroffen werden (Richtungsregister werden in "main()" eingestellt):
    Code:
    //In dieser Funktion werden alle PWM-spezifischen Einstellungen getroffen
    void initPwm()
    {
    	//---------Timer2-Settings------------//
    	//Mode: Fast PWM                      //
    	//Prescaler: F_CPU / 32 (ca. 2,4kHz)  //
    	//Ausgangsport: Clear at CompareMatch //
    	//------------------------------------//
    	TCCR2A = (1<<COM1A1) | (1<<WGM20) | (1<<WGM21);
    	TCCR2B = (1<<CS20) | (1<<CS21) | (1);
    	//Vergleichswert einstellen
    	//Linker Motor:
    	OCR2A = 200;
    	//Rechter Motor:
    	OCR2B = 50;
    }
    und hier nochmal mein gesamter bisheriger Code, um die Funktion im Gesamtkontext zu betrachten:

    klick mich klick mich

    Ich bin sowiso ein "Neueinsteiger" was µCs angeht und mit den Timer-Funktionen, wie erwähnt, noch unsicher und im Moment leider nicht in der Lage den Fehler zu finden, fände es also Klasse wenn mir hier jemand auf die Sprünge helfen würde.

    Vielen Dank schonmal im Vorraus an alle die mir helfen und einen schönen Abend noch euch allen

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    24.11.2008
    Alter
    26
    Beiträge
    60
    Ich erwarte jetzt nicht, dass jemand meinen kompletten Code studiert um mir den exakten Fehler zu schildern, ich würde mich jedoch freuen, wenn mir jemand Tipps geben könnte, wo ich vielleicht in erster Linie nach Fehlern suchen sollte und was, abgesehen vom Code, evtl. noch für das Problem verantwortlich sein könnte

    Danke

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    hatte mir schon deinen Code angeschaut aber keine gravierenden Sachen entdeckt.

    TCCR2A = (1<<COM1A1) | (1<<WGM20) | (1<<WGM21);
    Hier fehlt COM2B1 und du solltest COM2A1 nehmen, auch wenn der Wert der gleiche ist.
    TCCR2B = (1<<CS20) | (1<<CS21) | (1);
    Mit der letzten 1 änderst du noch einmal den Prescaler.
    Das ist aber alles keine Erklärung dafür, das gar nichts funktioniert.
    Du probierst das Programm aber schon auf einem Chip aus und nicht nur im Simulator? So wie ich gelesen habe, gibt es da Probleme mit dem Timer2 PWM beim AtMega644.
    Was mir mal einen üblen Streich gespielt hat, war das WDTON Fusbit. Am Ausgang konnte ich mit dem Oszi ganz klar ein PWM Signal sehen. Nur das Tastverhältnis passte nicht. Irgendwann ist mir dann mal aufgefallen, dass mir immer ein Reset das Signal versaut.
    Ich würde jetzt hergehen, die Ausgängse statisch setzen. Dann über das TCNT Register prüfen, ob der Timer läuft. Mal mit CTC einen Takt ausgeben und hoffen das mich der Fehler irgendwann anspringt

    Gruß

    Jens

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    24.11.2008
    Alter
    26
    Beiträge
    60
    Erstmal viele Dank für deine Hilfestellungen

    ^^ ja ehhm dass ich mit (1) in TCCR2B den Wert des Prescalers wieder ändere, ist mir bewusst, die Änderung diente auch lediglich zu "Testzwecken" und ich vergaß sie rückgängig zu machen - aber trotzdem danke für den Hinweis! das hätte wahrscheinlich auch wieder einen Bug verursacht, den ich nicht auf Anhieb gefunden hätte

    Ja ich probiere das Programm auf dem Chip aus und die "normalen" IOs funktionieren auch.

    Die Fusebits überprüfe ich jetzt erstmal!
    Gleich melde ich mich, ob ich der Lösung für das Problem näher gekommen bin

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    24.11.2008
    Alter
    26
    Beiträge
    60
    Hallo ich bins wieder

    JENS, der Fehler hat mich gerade ANGESPRUNGEN!

    eigentlich peinlich aber nungut... Anfängerfehler ^^
    Wegen einer kleinen Umstrukturierung meines Projektordners habe ich den Output-Pfad für die hex-File ändern müssen, im Programmdialog war aber noch der alte eingestellt, somit wurde der µC jedesmal mit einer alten version des Programms geflasht

    naja - aus Fehlern lernt man ^^ jetzt funktioniert jedenfalls alles!

    Danke nochmal für die Tipps!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •