Hallo LEDStyles Gemeinde,
aufbauend auf diesen Beitrag folgt nun eine erste Anwendung.
Ich wollte schon seit längerem diese Anwendung mal realisieren
(musste mich aber erstmal mit Atmel µC und Bascom beschäftigen 8-[ ).
Zuerst habe ich es mittels eines Atmel ATtiny2313 versucht - bis ich dann doch irgendwann merkte das es nicht so trivial war.
Problem: die Funktion RC5 (Getrc5) benutzt den Timer0 und den INT0. Somit ist natürlich der Timer0 anderweitig beschäftigt und kann nicht mehr für PWM verwendet werden. Bleiben aber noch Anwendungen die mit 2 Farben und IR Fernbedienung realisiert werden sollen - das nur mal für den Hinterkopf.
Ich habe mir dann den ATmega8 etwas näher angeschaut und siehe da:
- 3x Timer
- 3x PWM
genau das richtige für diese Anwendung.
Ein Eagle Schema habe ich erstmal nicht erstellt, aber im Quellcode habe ich mir mal eine, wie ich finde, recht gute Idee der Dokumentation abgeschaut :-% .
Im Code ist noch ein LCD vorhanden - finde ich ganz praktisch.
Auf dem Display zu erkennen ist der RC5 Code "Address", "Command" und die Werte der einzelnen PWM Register
für die einzelnen Farben.
Aufgabe:
3 LED's (Rot, Blau, Grün) unabhängig voneinander mittels IR Universal Fernbedienung (RC5 fähig) und PWM hoch oder runter "faden". Voreingestellte Farben auf Knopfdruck einschalten.
Benötigte Teile:
- Atmel Atmega8 (Pollin)
- Festspannungswandler - 5V - z.B. 7805 (Pollin)
- Bauteile lt. Datenblatt für 78xx
- IR Empfänger Diode TSOP 1136 (Pollin)
- optional: LCD 16*2 Goldentek GC-1602G0 (Pollin)
- Kondensator 4,7µF (lt. Datenblatt IR Diode)
- Widerstand 100 Ohm (lt. Datenblatt IR Diode)
- IR Universal Fernbedienung RC5 fähig
- RGB LED's (in meinem Fall erstmal Superflux für einen Funktionstest)
danach ein Test mit 0.5W 5mm LED's an 3xKSQ (100mA) LED-Tech
- Bauteile für KSQ's
KSQ's sind modifiziert und auf 100mA ausgelegt - für die 0.5Watt LED's.
Bascom Quell Code:
[code:1]'******************************************************************************
'*
'* Programm Titel rgb_ir_fader_ATmega8.bas
'* Start Datum: 2007/07/06
'* Letzte Änderung: 2007/07/08
'* Compiler: BASCOM-AVR v1.11.8.3
'* Processor: Atmel ATmega8
'* Programm Funktion: RGB Fader mittels IR RC5 Fernbedienung
'* mittels RC5 Fernbedienung RGB hoch und runter faden
'* Vorbelegte Farben mittels FB einschalten
'*
'*
'******************************************************************************
'*
'* by amron für LEDStyles Community
'*
'* Komponenten: ATmega8,
'* TSOP 1136 IR Empfangsdiode
'* IR Universal Fernbedienung RC5 fähig (Medion)
'* 5V Festspannungswandler 78xx
'* (optional LCD Goldentek 16*2)
'* RGB LED's (in meinem Fall erstmal Superflux für einen Funktionstest)
'* danach ein Test mit 0.5W 5mm LED's an 3xKSQ (100mA)
'*
'* ------ -------
'* | |
'* ISP (Reset) PC6 --| 1 28 |-- PC5 (ADC5/SCL)
'* | |
'* (RXD) PD0 --| 2 27 |-- PC4 (ADC4/SDA)
'* | |
'* (TXD) PD1 --| 3 26 |-- PC3 (ADC3)
'* | |
'* TSOP1136 (INT0) PD2 --| 4 25 |-- PC2 (ADC2)
'* | |
'* LCD E (INT1) PD3 --| 5 24 |-- PC1 (ADC1)
'* | |
'* LCD RS (XCK/TO) PD4 --| 6 23 |-- PC0 (ADC0)
'* | |
'* +5V VDC (78xx) VCC --| 7 22 |-- GND
'* | |
'* ISP/Ground GND --| 8 21 |-- AREF
'* | |
'* (XTAL1/TOSC1) PB6 --| 9 20 |-- AVCC
'* | |
'* (XTAL2/TOSC2) PB7 --| 10 19 |-- PB5 (SCK) ISP
'* | |
'* LCD D4 (T1) PD5 --| 11 18 |-- PB4 (MISO) ISP
'* | |
'* LCD D5 (AIN0) PD6 --| 12 17 |-- PB3 (MOSI/OC2) PWM Rot/ISP
'* | |
'* LCD D6 (AIN1) PD7 --| 13 16 |-- PB2 (SS/OC1B) PWM Grün
'* | |
'* LCD D7 (ICP1) PB0 --| 14 15 |-- PB1 (OC1A) PWM Blau
'* --------------
'*
'* benutzt wird ein serieller Programmer (ISP - In-System-Programmer)
'*
'*
'***************************************************************************************
$regfile = "m8def.dat"
$lib "mcsbyte.lbx"
$crystal = 4000000 'interner Quarz 4 MHz
Declare Sub Check_input()
' optional LCD einbinden - hier Goldentek 16 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.4
Config Lcd = 16 * 2
' RC5 (TSOP1136) auf PIN D2 (INT0) festlegen - Timer0 und INT0 haben damit gut zu tun
Config Rc5 = Pind.2
Enable Interrupts
' Timer1 und Timer2 für PWM Betrieb initialisieren
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Compare Pwm = Clear Up , Prescale = 1
Dim Address As Byte , Command As Byte
Dim Rgb As Byte 'Hilfsvariable
Config Pinb.3 = Output 'PWM Output rot Timer2
Config Pinb.2 = Output 'PWM Output grün Timer1
Config Pinb.1 = Output 'PWM Output blau Timer1
Out_red Alias Ocr2 'PIN 17 PB3
Out_blue Alias Ocr1al 'PIN 16 PB2
Out_green Alias Ocr1bl 'PIN 15 PB1
Out_red = 0 'rot dunkel
Out_green = 0 'grün dunkel
Out_blue = 0 'blau dunkel
Cursor Off Noblink
Cls
Do
Getrc5(address , Command)
If Address = 0 Then
Command = Command And &B01111111
Locate 1 , 2
Lcd "A:" ; Address ; " C:" ; Command ; " "
Check_input
Locate 1 , 11
Lcd "R:" ; Out_red ; " "
Locate 2 , 2
Lcd "G:" ; Out_green ; " "
Locate 2 , 9
Lcd "B:" ; Out_blue ; " "
End If
Waitms 15
Loop
End
Sub Check_input()
Select Case Command
Case 55 : Rgb = 1 ' rot eingeschaltet
Case 54 : Rgb = 2 ' grün eingeschaltet
Case 52 : Rgb = 3 ' blau eingeschaltet
End Select
If Command = 12 Then ' Power Taste - alles auf 0
Out_red = 0
Out_blue = 0
Out_green = 0
Rgb = 0
End If
If Command = 50 Then ' Gelbe Taste (Farbe gelb mischen)
Out_red = 255
Out_blue = 0
Out_green = 255
Rgb = 0
End If
If Command = 14 Then ' Rosa Taste (Farbe rosa mischen)
Out_red = 255
Out_blue = 128
Out_green = 0
Rgb = 0
End If
If Command = 59 Then ' Taste OK auf der Fernbedienung
If Rgb = 1 Then ' rote LED einschalten
Out_red = 255
Out_blue = 0
Out_green = 0
Rgb = 0
End If
If Rgb = 2 Then
Out_red = 0 ' grüne LED einschalten
Out_blue = 0
Out_green = 255
Rgb = 0
End If
If Rgb = 3 Then ' blaue LED einschalten
Out_red = 0
Out_blue = 255
Out_green = 0
Rgb = 0
End If
End If
If Command = 16 Then ' Vol.+ Taste gedrückt
If Rgb = 1 And Out_red < 255 Then ' je nach Farbvorauswahl Farbe hoch
Out_red = Out_red + 5
End If
If Rgb = 2 And Out_green < 255 Then
Out_green = Out_green + 5
End If
If Rgb = 3 And Out_blue < 255 Then
Out_blue = Out_blue + 5
End If
Waitms 15
End If
If Command = 17 Then ' Vol.- Taste gedrückt
If Rgb = 1 And Out_red > 0 Then ' je nach Farbvorauswahl Farbe runter
Out_red = Out_red - 5
End If
If Rgb = 2 And Out_green > 0 Then
Out_green = Out_green - 5
End If
If Rgb = 3 And Out_blue > 0 Then
Out_blue = Out_blue - 5
End If
Waitms 15
End If
End Sub[/code:1]