-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Timer 0 Mega 16

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.05.2005
    Ort
    Buxtehude
    Alter
    26
    Beiträge
    36

    Timer 0 Mega 16

    Anzeige

    Hi Leute,

    Ich hab ein kleines Problem mit meinem Mega16, ich versuche die 4 Hardware PWM Kanäle zu Benutzen um damit LEDs anzusteuern (RGB *weiß).
    Leider bekomme ich den OCR0 noch nicht zum laufen...


    Code:
     $regfile = "m16def.dat"
     '$crystal = 12000000
     Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
     Config Lcd = 16 * 1a
     Config Adc = Single , Prescaler = Auto , Reference = Avcc
     Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
     Config Timer0 = Pwm , Pwm = On , Compare Pwm = Clear Down , Prescale = 1
     Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
    
      Start Adc
      Enable Interrupts
      Enable Timer2
      Enable Timer0
    
    
      Dim W As Word
      Dim R As Word
      Dim G As Word
      Dim B As Word
    
    Do
     R = Getadc(3) / 4
     G = Getadc(2) / 4
     B = Getadc(1) / 4
     W = Getadc(0) / 4
     Cls
     Locate 1 , 1 : Lcd G
     Cursor Off
    
     Compare1a = R
     Compare1b = G
     Ocr0 = W
     Ocr2 = B
    
    Loop
    
    
    End
    Desweiteren zeigt mein Display (161 A von Displaytech) nur 8 statt 16 Zeichen an.

    Das Signal vom ADC mit Potis funktioniert Bei allen Kanälen, das habe ich mir auf dem Display anzeigen lassen.

    Viele Grü0e Jakob Kalwar

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Leider kann ich dir bei Bascom nicht helfen, aber warum nimmst du weiße Leds? Wenn du die 3 Farben mischt kommt weiß heraus. Das funktioniert bei Fernsehern und Monitoren gleich.

    MfG Hannes

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.05.2005
    Ort
    Buxtehude
    Alter
    26
    Beiträge
    36
    Hi,

    Ich will zusätzlich noch weiße Leds einbauen, die ich bei Tag anmachen kann damit es Hell genug ist, und das weiß von RGB ist auch nicht immer gleich weiß, wenn nur eine LED heller ist als die anderen beiden passt das nicht mehr so gut.

    Grüße Jakob

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Leider bekomme ich den OCR0 noch nicht zum laufen...
    Geht´s denn mit den Timern 1 und 2?
    Und hast Du schon mal versucht, hinter die LCD-Zeilen ein "Initlcd" zu schreiben?

    Daniel

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.05.2005
    Ort
    Buxtehude
    Alter
    26
    Beiträge
    36
    Hi,

    Also Timer 1 und 2 laufen problemlos.
    Das mit dem LCD fist eine Idee, aber irgendwie hab ih fetsgestellt das es manchmal angeht und dann wieder aus
    also es blink quasi in langsamen abständen... naja das mit dem LCD ist eher weniger das Problem, der Timer ist mir wichtiger.

    Grüße Jakob

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Das ist ja alles merkwürdig...

    Ich habe zwar keinen Mega16 zur Hand, habe das aber mal mit ´nem Mega8 nachgekocht.

    Meinem (!) Display wird es definitiv zuviel, wenn es bei jedem Schleifendurchlauf einen Schreibbefehl bekommt, es flackert auch ziemlich. Displays mit einer so hohen Frequenz zu aktualisieren ist auch gar nicht nötig. Lass´ doch mal eine Variable hochzählen, und nur bei jeder 1000. oder 2000. Schleife den LCD-Befehl ausführen. Bei mir hat das die Anzeige erheblich stabilisiert.

    Die PWM-Geschichte müsste man systematisch einkreisen. Ich würde mal folgendes machen:

    1. Überprüfe mal, ob der Wert "W" ordentlich übernommen wird, indem Du Dir direkt das Register OCR0 anzeigen lässt (LCD OCR0).

    2. Lass Dir mal das TCCR0-Register "zeigen", das die Eigenschaften des Timers festlegt (LCD TCCR0). Bei Deinen Einstellungen (Prescaler=1, PWM, Compare = Clear down) müsste das Register den Wert 113 enthalten (binär 01110001).

    Vielleicht deckt das ja den Fehler schon auf.

    Grüße,

    Daniel

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    MasterMX,

    könnte es sein, dass das Verhalten mit der Priorität des Interrupts zu tun hat (siehe Seite 14 des Datenblatts (Pkt. 6.7 Reset and Interrupt Handling) ? Die höchste Priorität hat der RESET-, die niedrigste der SPM_READY-Interrupt. Die Interrupts des Counter/Timer0 haben demnach die niedrigste Priorität aller Timer-Interrupts. Kann sein, das er in Deinem Programm gegenüber den anderen immer den Kürzeren zieht .

    mare_crisium

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Grundsätzlich ein guter Hinweis, Hardware-PWM läuft aber komplett ohne Interrupts! Das ist ja das geniale daran

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    13.05.2005
    Ort
    Buxtehude
    Alter
    26
    Beiträge
    36
    Hey Sauerbruch,

    Danke für den tollen post, das werde ich alles mal probieren.

    Schön das mir jemand so eine nette Antwort schreibt.

    Grüße Jakob K.

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo MasterMX,

    Desweiteren zeigt mein Display (161 A von Displaytech) nur 8 statt 16 Zeichen an.
    das ist ein 2x8 Display, schreib einfach in Zeile 2 weiter

    Gruß, Michael

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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