neděle 25. října 2009

ATmega 8 ovládání RGB LED

V poslední době jsem začal zkoušet programovaní procesorů ATmega po prvních zkušenostech se jeví programovaní jednoduší. Pro progamování lze použít program BASCOM, který pracuje na bázi jazika Basic takže je vše poměrně rychlé a intuitivní. Návrhy na četné programotory lze nalézt na internetu tím nejednodušám je programátor na bázi paralerního portu.

první program je zde:
'********************************************************
'* ATmega 8 rizeni RGB led pomocí PWM *
'* *
'* Tomas Vlas *
'* ver. 2.0.0.0 *
'********************************************************

$regfile = "m8def.dat"
$crystal = 1000000

'nastavení OSC1 a OSC2 jako PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Up , Prescale = 1

'nastaveni A/D převodniku pro nastavení barvy
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config AD

'pin C5 pro vyber manualni a automatické změn barvy
Config Portc.5 = Input

'proměné pro prevod HSV do RGB
Dim R As Byte
Dim G As Byte
Dim B As Byte

Dim R1 As Single
Dim G1 As Single
Dim B1 As Single

Dim H1 As Single
Dim H2 As Single
Dim H3 As Single
Dim H As Single
Dim F As Single
Dim P As Single
Dim Q As Single
Dim T As Single
Dim V As Single
Dim S As Single

Dim Ad As Word
Dim H4 As Single
Dim H5 As Single


'smycka pro nastaveni barev RGB diody
Do
'manualni nastaveni barvy
Ad = Getadc(3)
H4 = Ad * 0.345158
H4 = Int(h4)

'automaticke nastaveni barvy
H5 = H5 + 1
If H5 = 360 Then
H5 = 0
End If

'rozhodnuti maual automatika
If Pinc.5 = 1 Then H = H4
If Pinc.5 = 0 Then H = H5

' V a S proměné pro saturaci a odstín
V = 1
S = 1

'převod na RGB
H1 = H / 60
H3 = Int(h1)

F = H / 60
H2 = F

P = 1 - S
P = V * P

Q = H2 * S
Q = 1 - Q
Q = V * Q

T = 1 - H2
T = T * S
T = 1 - T
T = V * T


Select Case H3
Case 0:
R1 = V
G1 = T
B1 = P
Case 1:
R1 = Q
G1 = V
B1 = P
Case 2:
R1 = P
G1 = V
B1 = T
Case 3:
R1 = P
G1 = Q
B1 = V
Case 4:
R1 = T
G1 = P
B1 = V
Case 5:
R1 = V
G1 = P
B1 = Q
Case 6:
R1 = V
G1 = P
B1 = Q
End Select

'nastaveni promenych pro koparatory
R1 = R1 * 255
R = Round(r1)
G1 = G1 * 255
G = Round(g1)
B1 = B1 * 255
B = Round(b1)


Compare1a = R
Compare1b = G
Ocr2 = B

Waitms 100


Loop
End
_______________________________________________

Žádné komentáře: