Bascom PWM - Aufblitzen beim Initialisieren

  • HI Leute,


    ich hab ein Problem mit der Hardware PWM-Funktion in Bascom für den Atxmega32A4.
    Wobei ich glaube, dass das ein grundsätzliches Bascom Problem ist, da Benkly auch schon mal danach gefragt hatte.


    Die Bascom PWM-Funktion schalte beim Initialisieren, ganz kurz alle PWM-Ausgänge auf High.


    Das ergibt ein hässliches Aufblitzen beim Einschalten. Die von Benkly empfohlene Beschaltung mit einem Widerstand von GND am PWM-Pin bringt bei mir gar nichts.


    Hat jemand eine andere Idee?? Am liebsten wäre mir eine Software-Lösung. Kann doch nicht sein, dass da die Ausgänge einfach auf High geschalten werden.


    Vielen Dank für eure Hilfe und viele Grüße
    Philipp

  • Ob das in Bascom geht, weiß ich nicht. Ich hatte das beim Mega168 auch, allerdings in C. Es gibt irgendwo eine Beschreibung (entweder Datenblatt oder auch µC.net), wo steht, dass die Reihenfolge der Initialisierung wichtig ist.


    Habs gefunden im AVG-GCC Tutorial:


    Falls der Anfangszustand von Ausgängen kritisch ist, muss die
    Reihenfolge beachtet werden, mit der die Datenrichtung (DDRx)
    eingestellt und der Ausgabewert (PORTx) gesetzt wird:


    Für Ausgangspins, die mit Anfangswert "high" initialisiert werden sollen:



    • zuerst die Bits im PORTx-Register setzen
    • anschließend die Datenrichtung auf Ausgang stellen


    Daraus ergibt sich die Abfolge für einen Pin, der bisher als Eingang mit abgeschaltetem Pull-Up konfiguriert war:



    • setze PORTx: interner Pull-Up aktiv
    • setze DDRx: Ausgang ("high")


    Bei der Reihenfolge erst DDRx und dann PORTx kann es zu einem kurzen
    "low-Puls" kommen, der auch externe Pull-Up-Widerstände "überstimmt".
    Die (ungünstige) Abfolge: Eingang -> setze DDRx: Ausgang (auf "low",
    da PORTx nach Reset 0) -> setze PORTx: Ausgang auf high. Vergleiche
    dazu auch das Datenblatt Abschnitt Configuring the Pin.




    Normal sollte es also gar nichts mit der PWM zu tun haben.

  • Hi,


    also bei mir liegt es ganz bestimmt am Widerstand der die PWM Leitung vom µC Pin gegen GND zieht. Entnehme ich diesen beim Eiwomisa 2.1 oder beim Mini-Dimmer, dann hab ich das Aufblitzen. Setze ich diesen wieder ein, dann kein Aufblitzen mehr. Ich glaub das dürfte eindeutig sein.


    Nach Turis Annahme dürfte es bei mir gar nicht funktionieren. Ich setze zuerst die Datenrichtung, dann die Pull-Ups, dann die Timer und irgendwann später starte ich die Timer.
    Macht auch irgendwie keinen Sinn. Im Datenblatt steht recht genau was nach einem Brown-Out / Reset bzw. nach dem Einschalten des µC in welcher Reihenfolge passiert. Soweit ich mich noch erinnern kann (hab eben nochmals nachgeschaut) sind die Pins alle auf "Eingang" und "0" gesetzt sowie die Pull-Ups deaktiviert. Ebenso wird hier der interne Aufbau des Reset-Pins auf Seite 39 gezeigt:


    http://www.atmel.com/images/doc8246.pdf


    Aso, ich verwende keine externe Reset-Pin Beschaltung. Nur den Taster gegen VCC, alles andere ist unnötig.


    Gruß, Benny.

  • Hey Danke ihr beiden für die Infos.


    Hab einiges ausprobiert und auch mit der Reihenfolge der Initialisierung gespielt.


    Es lief aber alles darauf hinaus, das genau bei der Initialisierungszeile:


    Code
    Config Tcc0 = Pwm , Comparea = Enabled , Compareb = Enabled , Comparec = Enabled , Compared = Enabled , Resolution = 16 , Prescale = 1


    das Aufblitzen kommt. Egal bei welcher Reihenfolge. Auch wenn diese Zeile einzeln im Code steht.


    Durch weiteres probieren kam ich darauf, dass sobald ich den Prescaler auf 8 stelle, es zu keinem Aufblitzen mehr kommt.
    Dann wird mir aber die PWM-Frequenz zu gering.



    Was bisher funktioniert ist, dass ich erst die PWM mit Prescaler 8 konfiguriere und danach noch mal mit Prescaler 1


    Code
    Config Tcc0 = Pwm , Comparea = Enabled , Compareb = Enabled , Comparec = Enabled , Compared = Enabled , Resolution = 16 , Prescale = 8 
    Config Tcc0 = Pwm , Comparea = Enabled , Compareb = Enabled , Comparec = Enabled , Compared = Enabled , Resolution = 16 , Prescale = 1


    Das Aufblitzen ist jetzt weg. Hab aber noch nicht mit nem Oszi nachgemessen, was jetzt letztendlich als Frequenz raus kommt.

  • Hi,


    ist eigentlich keine Lösung und wir sind hier ja in einer digitalen Welt, also wenn es bei mir geht dann sollte es auch bei Dir gehen. Allerdings sieht Deine Timer-Config-Zeile seltsam aus, da fehlt doch was. Meine sehen beim Eiwomisa z.B. so aus (Bascom Version 2.0.7.6):


    Code
    Config Timer0 = Timer , Prescale = 64
    Config Timer1 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
    Config Timer2 = Pwm , Pwm = On , Prescale = 64 , Compare A Pwm = Clear Down       ', Compare B Pwm = Disconnect
    Config Timer3 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
  • Hmm ja so hab ich die PWM auch immer initialisiert.


    Ich benutze jetzt aber nen Xmega. Bin jetzt auch nicht sooo fit in Sachen µC. Ich hab den Code ausm Roboternetz Forum.
    Aber bin inzwischen auch auf eine andere initialisierung gestoßen. Mit der werde ich es dann auch mal probieren.


    Mal sehen was bei raus kommt.


    Aber die Bascom Hilfe gibt das auch so vor.