Hi
hab gerade meine indirekte Beleutung fertig bekommen. Bestehen aus 5 Mc-e Rgbws natürlich Netzteil und einem Atmega48.
Funktioniert ansich super. Bloß kann ich bisher nur einen Farbraum mit 8-Bit programmieren. ( Bin Anfänger in Bascom)
Bräuchte jetzt mal nen kleinen Denkanstoß wie ich einen tieferen Farbraum programmieren könnte z.B. 10 oder 12 Bit.
PS. Bilder poste ich später noch nach
mfg
Größerer Farbraum
Moderator: T.Hoffmann
Ich nehme mal an Du verwendest Hardware PWM?Bräuchte jetzt mal nen kleinen Denkanstoß wie ich einen tieferen Farbraum programmieren könnte z.B. 10 oder 12 Bit.
Der Atmega48 hat aber nur einen 16Bit Timer (mit zwei PWM Kanälen), so dass auch nur damit 10Bit PWM möglich ist.
Mit Hardware PWM könntest Du also nur zwei Farben mit 10Bit Farbraum ansteuern, die dritte Farbe nur mit 8Bit. Oder Du musst einen größeren Chip verwenden. Der 'kleinste' mit zwei 16Bit Timern ist der Atmega162 (3.8€ beim R)
Ansonsten geht es nur mit Soft-PWM. Ein (sehr simples) Beispiel dafür ist hier zu finden:
http://bascom-forum.de/index.php?topic=2464.0
Ja, stimmt.Ich nehme mal an Du verwendest Hardware PWM?
So erst mal danke für den Link. Aber wenns mit Software-PWM auch geht, hab ich kein Problem damit.
Wenn ich alles richtig verstanden habe, dann müsste
das doch so ungefähr funktionieren?
Code: Alles auswählen
$regfile = "m48def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Timer1 = Timer , Prescale = 1
On Timer1 Timer1_isr
Const Timervorgabe = 64511
Enable Timer1
Enable Interrupts
Dim Out_red As Word , Out_green As Word , Out_blue As Word , Out_white As Word
Dim Zaehler As Word
Dim Limit As Word
Dim A As Word
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Led_rot Alias Portb.1
Led_gruen Alias Portb.2
Led_blau Alias Portb.3
Led_white Alias Portd.3
Out_red = 1024 + a
Out_green = 1024 + A
Out_blue = 1024 + A
Out_white = 1024 + A
Limit = 1024
A = 64511
Do
Loop
End
Timer1_isr:
Timer1 = Timervorgabe
Incr Zaehler
If Zaehler < Out_red Then Led_rot = 1 Else Led_rot = 0
If Zaehler < Out_green Then Led_gruen = 1 Else Led_gruen = 0
If Zaehler < Out_blue Then Led_blau = 1 Else Led_blau = 0
If Zaehler < Out_white Then Led_white = 1 Else Led_white = 0
If Zaehler = Limit Then
Zaehler = 0
End If
Return

