Hallo, ich möchte mit einem ATmega 16 einer LED und zwei Tastern die LED ansimmen bzw ausdimmen. Ich weiß das es über PWM geht, aber ich hab leider nicht den nötigen Plan um das alleine umzusetzen. Am liebsten hätte ich es so, das wenn ich den ATmega starte die LED eine standardhelligkeit hat und wnen ich auf Taster_plus drücke dann wir ed heller bis maximale Helligkeit und wenn ich auf Taster_minus drücke die Helligkeit abnimmt, bis die LED aus ist. Also, im gleich folgenden Code funktioniert zwar das Dimmen, nicht so wie gewünscht... Hier der Code: $regfile = "m16def.dat" $framesize = 100 $swstack = 100 $hwstack = 100 $crystal = 16000000 Config Portd.5 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1 Config Pinc.1 = Input Portc.1 = 1 Taster_plus Alias Pinc.1 Config Pinc.2 = Input Portc.2 = 1 Taster_minus Alias Pinc.2 Do Debounce Taster_plus , 0 , Led_plus , Sub Debounce Taster_minus , 0 , Led_minus , Sub Loop End Led_plus: Pwm1a = Pwm1a + 50 Return Led_minus: Pwm1a = Pwm1a - 50 Return
Machst du vor die Do...Loop Mainloop eben ein Pwm1a = 32000 Was du auch machen könntest: eine Wertetabelle mit sagen wir mal 100 Werten, die eine logarithmische Kennlinie enthält, weil das "für das Auge logischer erscheint". Dann einfach die Eingangswerte der Wertetabelle verändern und die Ausgangswerte eben in die PWM-Register schieben. Was mir so noch an deinem Programm auffällt: Da gibt es keinen Unter-/Überlaufschutz bei den Stellprozeduren. Wenn du unter die 0 kommst, gibts plötzlich wieder "Vollgas". Vielleicht sowas wie das da: Led_plus: If Pwm1a < 65500 Then Pwm1a = Pwm1a + 50 End If Return Led_minus: If Pwm1a > 49 Then Pwm1a = Pwm1a - 50 End If Return mfg mf PS: Ich kann kein Bascom, komme eher aus der C-Ecke und hab letztes Jahr VHDL "gelernt". Von daher syntaktische Fehler bitte verzeihen...
Genau, der Überlauf... Und ja in der Tat, wenn ich auf TAster_plus drücke, dann wird die LED stufenweise dunkler und dann wieder auf volle Helligkeit. Ok Überlauf scheint das Zauberwort zu sein, aber wie realisiere ich das? In Pwm1a ist ja immer eine Zahl drinne, zwischen 0 und (nach dem was du angebene hast) 65500, richtig?
PWM ist bis 255. Ok, aber wie programmiere ich den Überlauf? Hab jetzt erstmal an folgendes gedacht: Led_plus: Pwm1a = Pwm1a - 17 If Pwm1a < 1 Then Pwm1a = 0 End If Return Led_minus: Pwm1a = Pwm1a + 17 If Pwm1a > 255 Then Pwm1a = 255 End If Return Aber das funktioniert nicht... Hat jemand für mich den heißen Tip?
Ich kenne bascom gar nicht. Aber ich denke, dass es nicht größer als 255 geht, da nur 8 bit. Wenn du eh in 10er Schritten vorgehen willst, definiere dir eben eine neue variable, die du um 1 inkrementierst bzw. Dekrementierst und überprüfst (wenn > 25 dann = 25 und wenn < 1 dann = 1) und dann setzt du dein pwm register eben auf 10• den Wert.
Ja geht nur bis 255. Hab mir den Wert von Pwm1a auf ein LCD ausgeben lassen und da konnte ich sehen, das es nur bis 255 geht. Wegen 8 Bit... Also der Folgende Code funktioniert einwandfrei: ---------------------------------- Config Portd.5 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1 Config Pinc.1 = Input Portc.1 = 1 Taster_plus Alias Pinc.1 Config Pinc.2 = Input Portc.2 = 1 Taster_minus Alias Pinc.2 Pwm1a = 1 Do Debounce Taster_plus , 0 , Led_plus , Sub Debounce Taster_minus , 0 , Led_minus , Sub Loop End Led_plus: Pwm1a = Pwm1a - 1 If Pwm1a < 1 Then Pwm1a = 1 End If Return Led_minus: Pwm1a = Pwm1a + 1 If Pwm1a < 1 Then Pwm1a = 255 End If Return ---------------------------------- So das Problem hier, weil ich "Pwm1a = Pwm1a + 1" geschrieben habe, steigt der Wert von Pwm1a bei jedem Tastendruck um eins... Also muss ich 255 mal auf die Taste drücken um die LED vollständig zu dimmen. Erhöhe ich die Addition sagen wir wie folgt: "Pwm1a = Pwm1a + 25" dann wirkt der überlauf aufeinmal nicht mehr! Die Led wird also dunlker, dunkler und dunkler, dann wieder vollle Helligkeit und wieder dunkler, dunkler und dunkler... Das mir der Variable klingt nicht schlecht, aber du müsstest mir die vorgehensweise etwas genauer erklären, ich verstehe es so nicht bzw, ich kanns nicht umsetzen... Vielen Dank aber für deine Hilfe...
D. S. schrieb: > Wenn du eh in 10er Schritten vorgehen willst, Das ist eher unpraktisch, weil z.B. beim Schritt von 10 auf 20 die Helligkeit um 100% zunimmt, aber beim Schritt von 240 auf 250 nur um 4%. Mini Float hat schon Recht Mini Float schrieb: > eine logarithmische Kennlinie enthält, weil das "für das Auge > logischer erscheint".
Ja stimmt... Dieses Phänomen ist mir auch aufgefallen. Die Led dimmt nicht gleichmäßig, nicht linear... Erst dachte ich auch, das bei 1 die Led superdunkel ist und bei 255 superhell und bei der Hälfte 127 halbhell ist, aber so ist es nicht! Hmmm, wie funktioniert das mit der Wertetabelle? Hast du mal einen Beispielcode in Bascom?
Musst schon selber googeln. Such mal nach array und bascom, da wird schon was kommen.
Ich wollte ja nicht den komplett fertigen Code! Ich wollte nur so eine Art Grundgerüst haben, also wie die Struktur ist... Aber ich werd mal mein Glück mit google und array versuchen. Danke...
Im Artikel http://www.mikrocontroller.net/articles/LED-Fading solltest du einiges zum Thema Dimmen von LEDs finden.
mohi schrieb: > Erst dachte ich auch, das bei 1 die Led superdunkel ist und bei 255 > superhell und bei der Hälfte 127 halbhell ist, aber so ist es nicht! Nun ja, 127 ist schon halb so hell wie 255. Aber die Stufe davor müßte dann 63 (=127/2) sein und nicht 1. Verdoppelungsstufen sind allerdings oft schon zu grob, weil das Auge das meist noch als Sprung wahr nimmt.
Gerald *. schrieb: > Im Artikel http://www.mikrocontroller.net/articles/LED-Fading solltest > du einiges zum Thema Dimmen von LEDs finden. Ist leider nicht in Bascom... Also eigentlich brauche ich kein stufenloses dimmen, obwohl es schöner wäre, aber dann wäre es sinnvoller, wenn das dimmen so lange andauert wie man die Taste gedrückt hält, onst wäre das zuviel Tastendrückerei. Ich hab ne Uhr gebastelt mit nem LCD-Display und da würde ich gerne die Hintergrundbeleuchtung regulieren... 5 oder 7 Helligkeitsstufen würden eigentlich langen... Ich würde auch ganz gerne den Code klein halten, weil ich noch nicht so fit bin und deswegn ich schnell die Übersicht verlieren könnte... Eigentlich würde mir ja mein obengeposteten Code nutzen, funktioniert ja auch, nur hab ich Probleme mit dem Überlauf. Wenn ich Pwm1a + 1 schreibe funktioniert der Üebrlauf. Schreibe ich Pwm1a + 15, dann funktioniert der über lauf nicht... Problem bei Pwm1a, ich müsste 255 mal auf den Taster drücken um von 0 bis 255 zu kommen... Wurscht wäre das allerdings, wenn die Pwm1a immer plus 1 macht, solange man den Taster derückt hält. Also das bei gedrücktem Taster der pwm1a wert 1, dann 2, dann 3, .... dann 255, Ende. Na ja muss mal gucken wie ich das hinkriege! Aber sooo einfach ist das alles nicht... Vielen Dank für eure Tips!
mohi schrieb: > Wenn ich Pwm1a + 1 schreibe funktioniert der Üebrlauf. > Schreibe ich Pwm1a + 15, dann funktioniert der über lauf nicht... Original: Led_minus: Pwm1a = Pwm1a + 1 If Pwm1a < 1 Then Pwm1a = 255 End If Do meintest wohl if Pwm1a > 255 then und in die andere Richtung, beim kleiner werden, musst du aufpassen. pwm1a kann nicht negativ werden, weil es unsigned (also ohne Vorzeichen) ist. In diesem Fall gilt dann 0 minus 1 ergibt 255 D.h. den Überlauf erkennst du daran, dass das Ergebnis größer als die Ausgangszahl geworden ist. Bestes Beispiel aus deiner Umgebung ist eine Uhr. Steht der Sekundenzeiger auf 5 und rückst du ihn um 10 Sekunden zurück, dann steht er danach auf 55. einfacher ist es allerdings, wenn du so vorgehst Wann wird denn ein Unterlauf entstehen? Genau dann, wenn die Ausgangszahl kleiner ist, als die Zahl die du abziehst. Rechnest du 8 - 5 dann wird es keinen Unterlauf geben, denn 8 ist größer als 5. Kommt es aber zur Rechnung 4 - 17, dann wird es einen Unterlauf geben, denn 4 ist kleiner als 17. if Pwm1a < 15 then Pwm1a = 0 else Pwm1a = Pwm1a - 15 endif in die andere Richtung (beim größer werden) macht man dann genau das gleiche, nur eben für den positiven Fall. Als Übung für den Programmierer hier nicht ausgeführt. > Na ja muss mal gucken wie ich das hinkriege! Aber sooo einfach > ist das alles nicht... Programmieren ist nun mal etwas mehr als "Och da schreib ich einfach irgendwas hin, und dann klappt das auch". Sonst könnte das ja jeder. Willkommen im Club.
Karl Heinz Buchegger schrieb: > Programmieren ist nun mal etwas mehr als "Och da schreib ich einfach > irgendwas hin, und dann klappt das auch". Sonst könnte das ja jeder. > Willkommen im Club. Der war gut :-) Ja da haste recht programmieren ist halt nicht eben mal so einen Eintrag ins Tagebuch ;-) Also in meinem Fall ist das so, das wenn Pwm1a 255 ist, die LED dunkel ist und wenn pwm1a 1 ist, dann volle Helligkeit. Deswegen muss ich umgekehrt denken und deswegen funktioniert der Überlauf so wie hier korrekt: # Led_plus: # Pwm1a = Pwm1a - 1 # If Pwm1a < 1 Then # Pwm1a = 1 # End If # Return # # Led_minus: # Pwm1a = Pwm1a + 1 # If Pwm1a < 1 Then # Pwm1a = 255 # End If # Return Folgender code funktioniert einwandfrei, bis auf die wilder Drückerei auf den Tastern... # $regfile = "m16def.dat" # $framesize = 100 # $swstack = 100 # $hwstack = 100 # $crystal = 16000000 # # Lcd_db4 Alias Porta.2 # Lcd_db5 Alias Porta.3 # Lcd_db6 Alias Porta.4 # Lcd_db7 Alias Porta.5 # Lcd_e Alias Porta.1 # Lcd_rs Alias Porta.0 # # Config Lcd = 16 * 2 # Config Lcdmode = Port # Config Lcdbus = 4 # Config Lcdpin = Pin , Db4 = Lcd_db4 , Db5 = Lcd_db5 , Db6 = Lcd_db6 , Db7 = Lcd_db7 , E = Lcd_e , Rs = Lcd_rs # Initlcd # Display On # Waitms 400 # Cursor Off # Cls # # Config Portd.5 = Output # Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1 # # Config Pinc.1 = Input # Portc.1 = 1 # Taster_plus Alias Pinc.1 # Config Pinc.2 = Input # Portc.2 = 1 # Taster_minus Alias Pinc.2 # # Pwm1a = 1 # # Do # Debounce Taster_plus , 0 , Led_plus , Sub # Debounce Taster_minus , 0 , Led_minus , Sub # # Locate 1 , 1 # Lcd Pwm1a # Lcd " " # Locate 2 , 1 # Lcd Compare1a # Lcd " " # # Loop # End # # Led_plus: # Pwm1a = Pwm1a - 1 # If Pwm1a < 1 Then # Pwm1a = 1 # End If # Return # # Led_minus: # Pwm1a = Pwm1a + 1 # If Pwm1a < 1 Then # Pwm1a = 255 # End If # Return Ich muss mir deine Erklärung nochmal etwas genauer durchlesen. Meld mioch dann nochmal...
Ohh man... Ich glaube, Hintergrundbeleuchtung mit PWM kann ich vergessen... Kann es sein, das man nicht "Config DCF77" und "Config Timer1" gleichzeitig nutzen kann?? Hab eben den Code (den ich oben gepostet habe) in mein LCD-Uhr-Code eingebunden, die Uhr hat verückt gespielt, also die Uhr hat zwar funktioniert, aber viel zu schnell, auf einmal wurde aus dem Sekundentakt eine Hunderstelsekundentakt, oder so... Also ich glaube mit Hardware-PWM siht das ganz ziemlich schlecht aus... Ist Software-PWM ne brauchbare alternative? Muss man dafür viel Code schreiben? Schade echt... Da war ich soo dich dran und jetzt aufeinmal meilenweit davon entfernt... :-(
mohi schrieb: > Schade echt... Da war ich soo dich dran und jetzt aufeinmal meilenweit > davon entfernt... :-( That's life! Lesen bildet. Studier mal die Bascom Hilfe und Dir geht vielleicht ein Licht auf. Gewisses Untalent bringst Du ja mit: http://www.avr-praxis.de/forum/showthread.php?2238-Probleme-mit-Bascom-Wecker-mit-LCD-Display-mit-einem-ATmega8/page12 MfG
Gerhard K. schrieb: > Gewisses Untalent bringst Du ja mit: > http://www.avr-praxis.de/forum/showthread.php?2238... Ja genau und jetzt kannst du auch bestimmt wieder mal gut schlafen... Statt nach anderen Posts von mir zu suchen, wäre ein brauchbarer Hinweiß besser! Denk mal drüber nach ;-)
mohi schrieb: > Ja genau und jetzt kannst du auch bestimmt wieder mal gut schlafen... Danke, habe sehr gut geschlafen. mohi schrieb: > Statt nach anderen Posts von mir zu suchen Ich suche nicht, ich finde. mohi schrieb: > wäre ein brauchbarer Hinweiß > besser! Habe ich doch getan. MfG
Ich habe sowas auch schon mal gemacht aber so "etwa" : Led_plus: Incr Pwm1a If Pwm1a < 255 Pwm1a = 1 End If Return Led_minus: Decr Pwm1a If Pwm1a < 1 Then Pwm1a = 255 End If Return
Gerhard K. schrieb: > mohi schrieb: >> Statt nach anderen Posts von mir zu suchen > > Ich suche nicht, ich finde. Wer finden will, muss erst suchen, aber macht ja nix, du Naseweis ;-) Spaß :-) > mohi schrieb: >> wäre ein brauchbarer Hinweiß besser! > > Habe ich doch getan. Eben nicht, du hast nix brauchbares geliefert, im Gegensatz zu den anderen die hier gentwortet haben! Also bitte, entweder hilf mir oder beschäftige dich mit was anderem als alte Posts von mir zu suchen, eehm, sorry, ich meinte finden ;-) Wie dem auch sei, also das mit der Datentabelle fand ich nicht schlecht die Idee. Nur wie gesagt, ich weis nicht wie ich das umzusetzen kann.. Außerdem würd mich mal interessieren, welchen/wieviele Timer die Config Dcf77 nutzt. Ich hoffe ich liege nicht völlig falsch mit meiner Vermutung!? In meinem Code steht ja: # Config Dcf77 = Pinc.3 , Inverted = 0 , Timer = 1 , Debug = 0 , Check = 1 # , Gosub = Sectic Um PWM zu nutzen, brauch ja ja auch einen Timer, es sei den ich nutze SoftPWM... Es wurden ja hier mehrere Möglichkeiten genannt. Ich müsste mich mal auf eine festlegen und mich dann da ordentlich durchlesen. Aber welche Möglichkeit wäre denn die einfachste? Frohen Ostersonntag euch..
Gerhard K. schrieb: > Studier mal die Bascom Hilfe und Dir geht vielleicht ein > Licht > auf. mohi schrieb: > Eben nicht, du hast nix brauchbares geliefert, im Gegensatz zu den > anderen die hier gentwortet haben! Der Hinweis zur Doku passt doch. Also RTFM. Oder sollen wir das für dich tun? Gruß Oliver
mohi schrieb: > Außerdem würd mich mal interessieren, welchen/wieviele Timer die Config > Dcf77 nutzt. Schau doch mal in die BASCOM-Hilfe: Timer 1, steht ganz eindeutig drin. mohi schrieb: > Wie dem auch sei, also das mit der Datentabelle fand ich nicht schlecht > die Idee. > Nur wie gesagt, ich weis nicht wie ich das umzusetzen kann.. BASCOM-Hilfe sagt: DATA-Befehl, READ-Befehl und RESTORE-Befehl und/oder Arrays. Beispiel-Quälcode:
1 | Dim Array(256) As Byte |
2 | Dim Tempword As Word |
3 | |
4 | Restore Tabelle |
5 | For Tempbyte = 1 To 256 |
6 | Read Array(Tempword) |
7 | Next Tempbyte |
8 | |
9 | Tabelle: |
10 | Data 123, 75, 37, 204, 3, 48 |
11 | Data 27, 43, 245, 123, 7, 98 |
12 | ... |
mohi schrieb: > Um PWM zu nutzen, brauch ja ja auch einen Timer, es sei den ich nutze > SoftPWM... Dann nimm doch z.B. Timer 0. Der ATMega16 hat doch 3 Timer. mohi schrieb: > Aber welche Möglichkeit wäre denn die einfachste? Timer 0 für PWM, Timer 1 für DCF77, Array und Data-Zeilen für die Wertetabelle. Gruß Jonathan
Oliver J. schrieb: > Gerhard K. schrieb: >> Studier mal die Bascom Hilfe und Dir geht vielleicht ein >> Licht >> auf. > > mohi schrieb: >> Eben nicht, du hast nix brauchbares geliefert, im Gegensatz zu den >> anderen die hier gentwortet haben! > > Der Hinweis zur Doku passt doch. Also RTFM. Oder sollen wir das für dich > tun? > > Gruß Oliver Ich verstehe jetzt gar nicht, warum du dich da einmischst? Hast nicht einen einzigen Post geschrieben, aber hauptsache mal meckern... Määähh määähh :-) Spaß ;-) Auch für dich, wenn du was postest, dann bitte was sinnvolles!! Nimm dir mal ein Beispiel an andere! Und was "RTFM" und "Programmmieren" betrifft, ist es genau, wie wenn man Fliegen lernen will, da sagt der Aubilder auch nicht "read the f_cking manual", sondern "Hör mal zu..."! (gelesen werden muss natürlich auch!) Sowas kann man nicht an einer Fernuni lernen, denk mal drüber nach ;-) Ok kommen wir wieder auf was sinnvolleres zurück. Danke für deine Tipps, Jonathan! Ich kam erst mal nicht auf den Timer0, weil Bascom mir bei Timer0 immer eine Fehlermeldung ausgegeben hat. Also: "Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1" funktioniert ab wenn ich Timer0 oder Timer2 eingebe, dann sagt Bascom: Error 86: Invalid Parameter; Unkwon config parameter Was funktioniert ist, wenn ich nur folgenden schreibe: "Config Timer0 = Pwm , Prescale = 1" Aber da hat Pwm1a auf einmal einen Wert bis zu 65363.. Und die LED bleibt auch aus, also dimmen geht nicht mehr. Mit Array und Data-Zeilen muss ich mich erst reinlesen, bevor ich da halbwegs losglegen kann... Meld mich nochmal... Vielen Dank und viele Grüße mohi
BASCOM scheint Timer 0 nicht für PWM konfigurieren zu können - also musst Du das per Hand machen. Dazu siehst Du ins Datenblatt vom ATMega16 unter Timer 0, Register Description und suchst dir die passenden Konfigurationsbits zusammen. Da würdest Du dann auf "TCCR0 = &B00100001" kommen, dann ist dein Timer passend konfiguriert. Und nein, Timer 1 bedienst und konfigurierst Du ganz anders als Timer 0 - Du kannst Code für Timer 0 nicht einfach für Timer 1 benutzen, so wie Du es mit deiner BASCOM Config-Zeile tun wolltest. Z.B. ist Timer 0 nur ein 8-Bit-Timer und hat auch nur einen PWM-Ausgang. Diesen bedienst Du dann mit "OCR0 = Wert". Nunja, les doch einfach mal die Hilfedatei und vorallem das Datenblatt - RTFM ;) Gruß Jonathan P.S.: Das mit dem "RTFM" ist nicht ernst gemeint - das mit Hilfe und Datenblatt aber schon.
Wirst es mir nicht glauben, ich hab mir das Datenblatt von dem ATmega16 von Seite 71 bis 134 ausgedruckt, da gehts nur um Timer... Hammmer, wieviel das ist!!! Gott sei dank sind viele Bilder zwischen 71 und 134 :-) Und da ist noch nicht mal Bascom dabei, wie ich das dann umsetzen kann, muss ich mir auch noch geben... Dies zum Thema RTFM ;-) Schade, das es das Datasheet nicht auf deutsch gibt... Sag mal, wie ist den das wenn Softclock in Bascom aktiv ist über "Config Dcf77", da kann ich doch in der Hauptschleife kein If/Then für PWM reinschreiben, weil da die sectic wirkt, gell? Ich muss das glaube ich über eine Routine irgendwie managen... Und PWM über Timer0 ist auch ne krasse Sache, ich finde kaum etwas im Net darüber... Meistens nur bei einem ATtiny aber diese sind etwas anders aufgebaut als ein ATmega... Bei Attiny kann man z.B. schreiben Timer: Config Timer0 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1 bei Atmega geht nur: Config Timer0 = Pwm , Prescale = 1 Ich komm mit TCCR noch nicht ganz klar.. Du meinst ich soll das so schreiben: Config Timer0 = Pwm , Prescale = 1 Tccr0 = &B00100001 ? Aber was ist das pendant zu compare1a?
Hi >Du meinst ich soll das so schreiben: >Config Timer0 = Pwm , Prescale = 1 >Tccr0 = &B00100001 Lass doch einfach das config-Gedödel weg und programmiere den Timer über die Register. MfG Spess
Wie geht den das? Kannst du mir ein Beispiel machen? Nur grob, nichts genaues.. Also du meinst, ich soll PWM nicht über Config Timer0 machen, sondern einen ganz anderen weg, oder wie? Sorry echt für meine Fragen!
Mit "Config-Gerödel weglassen und über Register machen" meint Spess genau das, was ich Dir schon vorgeschlagen habe.
1 | TCCR0 = &B00100001 'Das hier anstatt der Config-Zeile |
2 | OCR0 = 123 'Das ist dein PWM-Wert - wie Compare1a |
Ist es Dir jetzt klarer? Im Datenblatt brauchst Du dir auch eigentlich nur die Register Description genau anzusehen, da steht alles drin, was man braucht um den Timer zum Laufen zu bringen.
Achsooo, warte, das bedeutet "config Timer0" ist dasselbe wie "TCCR0 = &B00100001", ja? Und du meinst "Register Description" auf Seite 83 von www.atmel.com/Images/doc2466.pdf ?
Also so "TCCR0 = &B00100001" gehts nicht, aber dafür so "Tccr0 = &B01101010" ;-) Hier mal der ganze Code: $regfile = "m16def.dat" $crystal = 16000000 $framesize = 100 $swstack = 100 $hwstack = 100 Tccr0 = &B01101010 Ocr0 = 100 Config Portb.3 = Output Portb.3 = 1 Do Loop End
Ich hab son LCD mit nem HD44780-Controller drauf. Pin15 ist +VE und Pin16 ist Ground. An den beiden Pins hatte ich auch einen kleinen Elko mit 4,7µF. Pin15 war an Plus und Pin 16 an einen Widerstand dann an Minus (und halt der Elko). So jetzt hab ich Pin15 an PortB.3 gesteckt und die Hintergrundbeleuchtung ging aus. Erst als ich den Elko entfernt habe, ging die LED-Hintergrundbeleuchtung an. Kann ich keinen mehr (bipol +-) Elko nutzen, wenn der Pluspol der LCD-LED-Hintergrundbeleuchtung an dem Port des ATmegas hängt?
OK, ich hab nun endlich alles hinbekommen. Dimmen geht... Überlauf-Abfangen geht... Alles geht :-) Und das mit dem Elko: Also die LCD-Hintergrundbeleuchtung lässt sich auch ohne Elko wunderbar auf und abdimmen, es gibt keine Störungen oder flackern oder so... Hab etwas herum experimentiert, also der Wert vom Elko ist viel zu hoch. Wenn ich den Elko an die LCD-Hintergrundbeleuchtung anschließe, dann leuchtet die LCD-Hintergrundbeleuchtung erst so ab OCR0 80 (PWM-Wert)... Dieser Thread hat mir sehr viel geholfen, muss ich wirklich sagen! Hat zwar gedauert, aber ich bindann doch ans Ziel angekommen :-) Konnte tatsächlich durch den Post von Karl Heinz Buchegger den Überlauf abfangen... Vielen Dank, ehrlich!! Und Timer0 registermäßig konfigurieren für PWM hab ich erst hier durch Jonathan Strobl kennen gelernt. Auch hier vielen Dank!! Danke euch allen. Allerbeste Grüße Mohi
mohi schrieb: > Also die LCD-Hintergrundbeleuchtung lässt sich auch ohne Elko wunderbar > auf und abdimmen, es gibt keine Störungen oder flackern oder so... Der Elko schließt den AVR-Port (wechselstrommäßig) kurz - der könnte deinen AVR schrotten, also lass' ihn weg. PWM macht man mit LEDs generell ohne Glättungskondensator. mohi schrieb: > Und Timer0 registermäßig konfigurieren für PWM hab ich erst hier durch > Jonathan Strobl kennen gelernt. > Auch hier vielen Dank!! Kein Problem :) Gruß Jonathan
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.