Timer/PWM Problem mit Mega48

  • Hallo liebe Community,


    habe hier ein Problem, das eure Hilfe erfordert.
    Ich verwende einen Atmega 48-20AU um ein DMX-Signal auszuwerten und daraus 2 RGB-Kanäle per Hardwarepwm auszugeben.
    Probleme dabei macht der Timer2: übertrage ich das Programm wie unten beschrieben, so spinnt der Controller. (Die RGB LEDs beginnen zu flackern bis entweder Timer2, also rot bei beiden LEDs gar nicht mehr tut oder sich der rote Kanal von LED2 (untere LED im Video) durchgesetzt hat)


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Klammere ich jetzt allerdings einen der beiden PWM- Kanäle von Timer2 aus, so funktioniert alles einwandfrei. Beie Kanäle faden ohne zu stocken die Farben durch, bei einem fehlt dann allerdings rot.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Aber woran liegt's??




    edit:
    nach Neuauflage des Platinenlayouts flackern die LEDs nur noch wenn die Werte für rot (ocr2) ansteigen. ???
    Die Fusebits sind auf externen Quarz gesetzt, ich verwende einen mit 16MHz. Löte ich statt dessen einen mit 8MHz ein, kann ich mit PonyProg nicht mehr auf den Controller zugreifen; aber warum???

  • Ich hätte mal ne kleine frage zu deinem code.


    Du schreibst.


    Code
    Ocr2b = Puffer(sollkanal) ; 1                               'roter Kanal LED1
    Ocr0b = Puffer(sollkanal + 1) ; 1                           'grüner Kanal LED1
    Ocr0a = Puffer(sollkanal + 2) ; 1                           'blauer Kanal LED1
    Ocr2a = Puffer(sollkanal + 3) ; 1                           'roter Kanal LED2
    Ocr1bl = Puffer(sollkanal + 4) ; 1                          'grüner Kanal LED2
    Ocr1al = Puffer(sollkanal + 5) ; 1                          'blauer Kanal LED2


    für was ist denn die ;1 darin verantwortlich?


    Das semikolon hab ich bis jetzt noch nicht gesehen.


    Was ich mich schon länger frage, warum manche leute die werte immer in hex form angeben? das ist doch immer ein umgerechne. Oder kann man damit irgent wie leichter a werte setzten?


    Danke

  • Elite


    Hast du schon versucht die Timer so zu konfigurieren?


    Code
    Config Timer0 = Pwm , Pwm = On , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    Config Timer2 = Pwm , Pwm = On , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
  • Danke erstmal für eure Antworten!


    @NobodyKB
    joa, das wäre ein Grund. So wie ich das sehe ist aber leider keine doppelt belegt. Das Programm ist auf einem Mega8 super gelaufen; ich habe es dann um die Zeilen 35,36,37 und die Konfig erweitert um mit dem Mega48 zwei LEDs anzusteuern. Doch leider flackerts.


    Freaky91
    Mit ; 1 wird die Anzahl der Bytes angegeben, die ausgelesen werden soll. Habe ich zumindest irgendwo so aufgeschnappt. Aber ohne gehts auch (nicht) also lass ichs jetzt weg.


    Hab mir das Gesendete mit Free Serial Port Monitor angesehen und der steht seit Installation auf hex; damit braucht man dann nix mehr umrechnen. Hat bei mir keinen bestimmten Grund.


    mike99
    habe die betroffenen Zeilen gerade mal überschrieben und draufgebrannt, macht leider keinen Unterschied. In PonyProg hat sich nicht einmal die Checksumme verändert, sollte also das Selbe sein.


    ___________________________________________________________________________________________________________________________________________________


    kanns nicht auch an der externen Beschaltung liegen?
    ich hoffe auf weitere Vorschläge von euch. Das muss doch zu schaffen sein bis die Ferien rum sind. So läufts gerade:


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    was mir gerade noch aufgefallen ist: klammere ich in der Hauptschleife timer 0 und 1 aus, so ist Timer 2 nur noch am flackern (sind alle aktiv so siehts aus wie im Video, funktioniert also zeitweise richtig)


    auf einem Mega88-20PU läuft es wie es soll


    edit:
    nachdem es mit dem Mega88 auf dem Pollinboard funktioniert, hab ich nen Adapter für den Mega48-AU gebastelt und mit dem tuts auch. Es muss also an der Beschaltung liegen.


    edit: Fall gelöst
    so, nun funktioniert's. War ein böser Fehler, weil die Fehlerursache für mich nichts mit der Ursache gemein hat:
    Ich nutze für die Programmierung und Ansteuerung der Platine mit dem Mega48 mein Pollinboard. Da die anzusteuernde Platine eine Versorgungsspannung von 3,1V erfordert habe ich diese getrennt mit Spannung versorgt. Diese Spannungsdifferenz des Programmierboards und der anzusteuernden Platine hat dann den Fehler verursacht. Komisch dabei ist allerdings, dass nur Timer2 davon betroffen war bzw. nur rot geflackert hat. ?(


    Ich erstelle hier nur Threads, die ich später selbst beantworte :S