Hallo, ich bastle derzeit ein bisschen für ein Projekt das ich dämnächst in Angriff nehmen will und brauche dafür ein paar Funktionen u.A. auch ein RGB Farbwechsel nun habe ich mich mit meinem Wissen an µC Programmierung mal hingesetzt und was programmiert. Muss sagen es funktioniert gut aber es ist sicherlich nicht der beste Weg das umzusetzten :) Ich hoffe auf eure Kritik und Verbesserungsvorschläge zu meinem Code. MFG Daniel L.
Wenn dir 8 Bit pro Farbe reichen und der eingesetzte AVR genug Timer und PWM Kanäle bietet lässt sich ein Großteil per Hardware-PWM erledigen. Du brauchst dann nur noch bei Bedarf neue Werte für R,G,B in die Register laden und der Rest läuft im Hintergrund.
Ich weiss zwar nicht welchen AVR du benutzt aber vielleicht wäre es eine Möglichkeit für dich per Hardware zu lösen. Du musst dann nur noch die richtigen Timer Einstellungen machen und kannst die RGB-Werte direkt ins Register schreiben.
Achso hm das hätte ich in das C-File vielleicht rein schreiben können ist ein ATmega8 :) Meins Wissens hat der nur 2 Hardware PWM Ausgänge?
Hi, hab mich heute mal an Hardware PWM gewagt, doch irgendwie kommm ich da nicht weiter. Allerdings funktioniert das so wie ich mir das gedacht hatte nicht und mir ist aufgefallen das der Timer 2 bei OCR2 = 0 immer noch glimmt obwohl er auf 0 ist. Ich hab im Anhang mal mein Ansatz gepostet, der jedoch nicht funktioniert hoffe ihr könnt mir sagen wo mein Denkfehler dabei ist :)
Der zählt in jedem Durchlauf von 0 bis 255 und unterteilt damit eine Periode in 256 Zeitabschnitte. Das OCR kann ebenfalls 256 Werte annehmen, was ausreicht, um die Zustände von "Ein Takt ist an" bis "alle 256 Takte sind an" abzubilden. Für den Zustand "alle Takte sind aus" wäre aber noch ein 257. Zustand nötig. Es ist auch in den AVR-Datenblättern dokumentiert, daß bei positiver Logik am OCR-Ausgang (einschalten bei Überlauf, ausschalten bei OCR-Match), der OCR-Wert 0 zu einem kurzen Impuls am Ausgang führt. Abhilfe kannst Du z.B. dadurch schaffen, daß Du den OCR mit negativer Logik arbeiten läßt, also aus bei Überlauf, ein bei OCR-Match. Den OCR-Wert mußt DU dann natürlich auch umdrehen, statt x also 255-x. Dadurch verschiebst Du den Spike ans helle Ende der Skala, an dem das menschliche Auge weit weniger empfindlich ist.
Ok hab meine Fehler gefunden und hab auch das PWM Invertiert damit OCR2 bei 0 nicht glimmt :) Achja und die IF abfragen hatten alle ein = zu wenig deswegen gings auch nicht :) Allerdings stellt sich mir die frage ob das wirklich besser ist als die Software Lösung :)
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.