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
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...
Desweiteren zeigt mein Display (161 A von Displaytech) nur 8 statt 16 Zeichen an.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
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
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
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
Geht´s denn mit den Timern 1 und 2?Leider bekomme ich den OCR0 noch nicht zum laufen...
Und hast Du schon mal versucht, hinter die LCD-Zeilen ein "Initlcd" zu schreiben?
Daniel
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
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
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
Grundsätzlich ein guter Hinweis, Hardware-PWM läuft aber komplett ohne Interrupts! Das ist ja das geniale daran![]()
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.
Hallo MasterMX,
das ist ein 2x8 Display, schreib einfach in Zeile 2 weiterDesweiteren zeigt mein Display (161 A von Displaytech) nur 8 statt 16 Zeichen an.
Gruß, Michael
Lesezeichen