Hi Leute, ich bin auf der Suche nach einem (am besten in Assembler geschriebenem) Beispielprogramm, woran ich mich endlich mal in PWM einfinden kann. Mit kleinen erklärungen etc. Ich habe das AVR Tutorial durchgemacht, aber ich tue mich an PWM sehr schwer. Die Sache an sich verstehe ich, nur ich weiß nicht wie ich es eintippen muss :( Ein kleines Programm, welches nur eine LED durchfadet, oder sowas in der Art, wäre total nett. Tut mir leid wenn ich in der Beziehung so begriffsstutzig bin :) An µCs habe ich hier Attiny13/85/2313 und Atmega8 rumliegen. Ist also recht Wurst wofür das Prog ist =) Danke im Vorraus mfg Adrian
adrian schrieb: > [...] Ich habe das AVR Tutorial durchgemacht, aber > ich tue mich an PWM sehr schwer. Die Sache an sich verstehe ich, nur ich > weiß nicht wie ich es eintippen muss :( > Ein kleines Programm, welches nur eine LED durchfadet, oder sowas in der > Art, wäre total nett. Aber genau das steht doch im AVR-Tutorial inkl. ASM-Code.... •PWM: Ein Timer dimmt eine LED http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM Woran fehlt's denn? Volker
Ja die beiden Programmierungen habe ich schon draufgespielt gehabt. Wie beschrieben sieht man da ja nur wie 6 Dimmstufen aussehen und bei dem anderen ist die LED relativ lagnweilig nur am Blinken. Suche ne Mischung aus beidem xD Ja das Datenblatt habe ich bereits gelesen. Aber nicht das ganze ^^
adrian schrieb: > Wie beschrieben sieht man da ja nur wie 6 Dimmstufen aussehen und bei > dem anderen ist die LED relativ lagnweilig nur am Blinken. Und drunter steht: Nachdem die Funktion und das Zusammenspiel der einzelnen Register jetzt klar ist, ist es Zeit aus dem Blinken ein echtes Dimmen zu machen. Dazu genügt es den Vorteiler des Timers auf 1 zu setzen: [CODE-Schnipsel] Werden wieder die beiden OCR1A Werte 0x6DFF und 0x10FF ausprobiert, so ist deutlich zu sehen, dass die LED scheinbar unterschiedlich hell leuchtet. Volker
Hi Du willst wahrscheinlich, das die Led z.B. langsam heller wird? MfG Spess
spess53 schrieb: > Hi > > Du willst wahrscheinlich, das die Led z.B. langsam heller wird? > > MfG Spess Nein, er will ein "Allround-Programm", steht doch im Betreff! ;) Volker
Hi
>Nein, er will ein "Allround-Programm", steht doch im Betreff! ;)
Von Dunkel bis ganz hell ist doch 'Allround'. Mehr geht nicht.
MfG Spess
Genau spess53 :) Mit Allround, meinte ich doch nur, das ich den Code auch für andere Dimmprogrammierungen nutzen könnte ;)
Hi >Mit Allround, meinte ich doch nur, das ich den Code auch für andere >Dimmprogrammierungen nutzen könnte ;) Das ist nicht so einfach. Es gibt 8- und 16-Bit-Timer und es gibt verschiedene PWM-Modi. Aber wenn du das Prinzip einmal richtig verstanden hast, brauchst du auch kein 'Allround Programm' mehr. Denn das reduziert sich eigentlich auf die Initialisierung des Timers. Das Dimmen erreichst du durch die Veränderung des OCR-Werts. MfG Spess
@adrian hast du PWM verstanden oder suchst du auch noch Erklärungen für PWM ?
So hoffe ich es auch, spess53 :) Nur ich brauche iwie wohl einen kleinen Anstupser damit ich einmal reinkomme. Wie gesagt, das Tutorial habe ich auch schon durchgelesen und was möglich war simuliert und auf den µC geladen. Nur diese riesigen Zusammenspiel aus Stackpointer, Timer und hastenichgesehn ist mir iwie zu viel für den Anfang. Ich habe das Prinzip verstanden. Durch kleine 1 Signale in einer Frequenz wird die LED dunkler. Das macht man mit Timern und durch die Vorteiler kann man dies einstellen. Nur mein wirkliches Problem ist es, es passend im Code zu formatieren. ldi temp1, 1<<COM1A1 | 1<<WGM11 out TCCR1A, temp1 ldi temp1, 1<<WGM13 | 1<<WGM12 | 1<<CS12 out TCCR1B, temp1 Ist so ein Codeschnipsel sozusagen eine "Mustereinstellung" bei der ich nur die für mein Programm spezifischen Einstellungen ändern muss? Danke für eure Hilfe :)
Ich kann euch ja mal ein Projekt zeigen welches ich auf µC umbauen möchte. Es geht um ein LED Herz was ich für meine Freundin gebaut habe. Die "Intelligenz" dabei ist bisher noch ein Dekadenzähler und ein NE555 als Takt (per Poti einzustellen). Hier der Link: http://www.youtube.com/watch?v=XVzBbxJkVvI Wie ihr seht sind die Übergänge etwas ruppig. Daher möchte ich die LEDs faden. Mir würds aber für den Anfang genügen wenn ich EINE LED zum faden bringen würde :D
Ein einfaches BASCOM-Programm habe ich beigelegt. === Code ================================================= $regfile = "m8def.dat" $crystal = 10001666 'Mini-Atmega 4-Platine $hwstack = 32 'default use 32 for the hardware stack $swstack = 10 'default use 10 for the SW stack $framesize = 40 'default use 40 for the frame space Dim A As Integer , Da As Integer , I As Word , Full As Word , Full2 As Word A = 100 'muss nur >10 sein Da = 1 'Additionswert für die Fade-Schritte Full = 500 'Maximalzahl der PWM-Schritte oder -Stufen Full2 = Full / 2 'entspricht 50% Config PortB= Output Do A = A + Da 'PWM-Wert erhöhen Portb.1 = 1 'LED einschalten For I = 1 To Full 'PWM-Laufschleife für ein on/off If I = A Then Portb.1 = 0 'LED bei I=A ausschalten Next I 'und Restzeit ausgeschaltet lassen If A = Full2 Or A = 10 Then Da = -da 'Fade-Richtung umdrehen Loop
Hi Ist so ein Codeschnipsel sozusagen eine "Mustereinstellung" bei der ich nur die für mein Programm spezifischen Einstellungen ändern muss? Jein. Das trifft für 16-Bit-Timer zu, ist aber nicht ganz vollständig. Da hilft dir das Datenblatt. Du solltest dir über die Funktion der COM-, WGM- und CS-Bits im klaren sein. Versuche einfach mal, die Einstellungen, die hiermit gemacht werden: > ldi temp1, 1<<COM1A1 | 1<<WGM11 > out TCCR1A, temp1 > ldi temp1, 1<<WGM13 | 1<<WGM12 | 1<<CS12 > out TCCR1B, temp1 an Hand des Datenblattes vom ATMega8 nachzuvollziehen. Wenn du es heraus hast, melde dich wieder. MfG Spess
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.