Forum: Mikrocontroller und Digitale Elektronik RGB Farbwechsel Verbesserungsvorschläge


von Daniel L. (grorkef)


Angehängte Dateien:

Lesenswert?

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.

von guest (Gast)


Lesenswert?

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.

von Peter N. (Gast)


Lesenswert?

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.

von Daniel L. (grorkef)


Lesenswert?

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?

von G4st (Gast)


Lesenswert?

Nein, der hat 3.

von Daniel L. (grorkef)


Angehängte Dateien:

Lesenswert?

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 :)

von R. M. (rmax)


Lesenswert?

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.

von Daniel L. (grorkef)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.