Mikrocontroller und Digitale Elektronik
›
Thread
RGB Fader mit Tasten Attiny2313(Bascom)
BH
Ben H.
(bendoben)
OP
08.12.2010 03:20
#1967206
*Guten Morgen,
Es ist mir nicht begreiflich, warum ich nicht den Color_delay mit
Tastern ändern kann. +-
Vielleicht ist mein Ansatz auch falsch ?*
1 $ regfile = "attiny2313.dat" ' specify the used micro
2 $ crystal = 800000 ' used crystal frequency
3 $ hwstack = 64
4 $ swstack = 16
5 $ framesize = 21
6 Config Pinb . 2 = Output ' Die PWM - Pins als Output definieren
7 Config Pinb . 3 = Output ' Die PWM - Pins als Output definieren
8 Config Pinb . 4 = Output ' Die PWM - Pins als Output definieren
9 Config Pind . 0 = Input
10 Config Pind . 1 = Input
11 Config Pind . 2 = Input
12
13 ' Die Timer auf PWM - Modus stellen
14 ' Die PWM - Register haben eine Breite von 8 Bit - also Werte von 0 bis 255
15 ' Wobei 0 = 0 % Helligkeit und 255 = 100 % Helligkeit bedeuten
16 Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
17 Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
18
19
20 ' Die Timer starten
21 Enable Timer0
22 Enable Timer1
23 ' Interessanterweise MUSS man f ü r OC2 Enable benutzen , sonst passiert nix !
24 Start Timer0
25 Start Timer1
26
27
28 ' Die PWM - Register zuweisen
29 Led1 Alias Ocr1bl ' PWM - Pin 1 - Red
30 Led2 Alias Ocr1al ' PWM - Pin 2 - Green
31 Led3 Alias Ocr0a ' PWM - Pin 3 - Blau
32 Taste1 Alias Pind . 0
33 Taste2 Alias Pind . 1
34 Taste3 Alias Pind . 2
35
36
37 ' ein Paar Variablen Deklarieren
38 Dim Color_delay As Byte
39 Dim Color_stop As Byte
40 Dim Rgb As Byte
41
42
43 ' Startwert f ü r die Schleife
44 Rgb = 0
45
46 ' Farbwechsel Geschwindigkeit pro Schritt ( empfohlen 1 - 15 ) 1 = schnell 15 = langsam
47 Color_delay = 10
48
49 ' Dauer der Pause bei der Grundfarbe ( empfohlen 1 - 10 )
50 Color_stop = 2
51
52
53 Do
54 If Taste2 = 1 Then Load Color_delay + 1 End If
55 If Taste3 = 1 Then Load Color_delay - 1 End If
56 If Taste1 = 1 Then
57
58 If Rgb = 0 Then
59 Incr Led1
60 Decr Led3
61 Waitms Color_delay
62 End If
63
64 If Led1 = 255 Then
65 Rgb = 1
66 Led3 = 0
67 Wait Color_stop
68 End If
69
70 If Rgb = 1 Then
71 Decr Led1
72 Incr Led2
73 Waitms Color_delay
74 End If
75
76 If Led2 = 255 Then
77 Rgb = 2
78 Led1 = 0
79 Wait Color_stop
80 End If
81
82 If Rgb = 2 Then
83 Decr Led2
84 Incr Led3
85 Waitms Color_delay
86 End If
87
88 If Led3 = 255 Then
89 Rgb = 0
90 Led2 = 0
91 Wait Color_stop
92 End If
93
94 Else
95
96
97 End If
98
99 Loop
100 End
TK
Thomas Kiss
Gast
08.12.2010 07:33
#1967231
Wie wäre folgendes :
Debounce Taste2 , 0 , On_taste2 , Sub
On_Taste2:
Incr color_delay
if color_delay > 15 then
color_delay=0
end if
Retrun
BH
Ben H.
(bendoben)
OP
08.12.2010 09:16
#1967312
ist es nicht auch möglich über einen Poti diesen Zahlenwert zu
verändern?
Wie würde dann der Code aussehen?
TK
Thomas Kiss
Gast
08.12.2010 09:50
#1967340
Poti wäre eine elegante Lösung !!!
Ich könnte mir folgendes vorstellen :
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Adc0 = Getadc(0)
Select Case Adc0
Case 0 To 50 :
Color_delay=10
Case 51 To 100 :
Color_delay=15
usw...
BH
Ben H.
(bendoben)
OP
08.12.2010 10:17
#1967366
Thomas Kiss
Läuft dein Code so? Kann ich ihn so übernemen?
Der poti musste ja an den Adc eingan inputiert werden oder ?
TK
Thomas Kiss
Gast
08.12.2010 10:22
#1967374
Denke schon, der ADC wert ist normal zwischen 0 und 255.
Poti ist an PC.0
Tipp : Am Anfang schliesse ich eine LCD Display an für Testzwecke un zu
sehen welche Werte gerade anstehen....es gibt mit Sicherheit auch noch
andere Möglichkeiten...
BH
Ben H.
(bendoben)
OP
08.12.2010 10:44
#1967404
Da besteht nur das Problem wie gebe ich diesen wert aufs LCD ?
Habe mir gerade eine LCD bestellt ;) & habe noch keine Erfahrungen mit
LCD's
Lg Ben
TK
Thomas Kiss
Gast
08.12.2010 10:50
#1967415
In Bascom ist recht einfach. Du definierst die Anschlüsse vom LCD wo an
Atmega angeschlossen ist . BSP :
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Cls
Cursor Off
dann kannst einfach in der Do - Loop schleife Werte anzeigen lassen :
Locate 1 , 1 ( Position )
Lcd "Wert" ( Fix Text )
Locate 2,1
Lcd Color_delay ( welche Wert soll angezeigt werden.)
So dann sieht an der Anzeige :
Wert
122 ( Bsp )
PS: LCD ist sehr günstig in Polen oder HongKong. Habe für 2 Euro 16x2
Blau/weiss bestellt )
BH
Ben H.
(bendoben)
OP
09.12.2010 01:06
#1968684
So habe nun den Code auf einen atmega32 umgeschrieben, jedoch nun
erhalte ich die Fehlermeldung:
ERROR : 269 last Line END SELECT expected.
Müsste heißen die adc messung müsste auch gestoppt werden oder?
lG Ben
1 $ regfile = "m32def.dat" ' specify the used micro
2 $ crystal = 800000 ' used crystal frequency
3 $ hwstack = 64
4 $ swstack = 16
5 $ framesize = 21
6 Config Pind . 4 = Output ' Die PWM - Pins als Output definieren
7 Config Pind . 5 = Output ' Die PWM - Pins als Output definieren
8 Config Pind . 7 = Output ' Die PWM - Pins als Output definieren
9 Config Pina . 0 = Input
10
11
12 ' Die Timer auf PWM - Modus stellen
13 ' Die PWM - Register haben eine Breite von 8 Bit - also Werte von 0 bis 255
14 ' Wobei 0 = 0 % Helligkeit und 255 = 100 % Helligkeit bedeuten
15 Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
16 Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
17 Config Adc = Single , Prescaler = Auto , Reference = Avcc
18
19
20
21 ' Die Timer starten
22 Enable Timer0
23 Enable Timer1
24 ' Interessanterweise MUSS man f ü r OC2 Enable benutzen , sonst passiert nix !
25 Start Timer0
26 Start Timer1
27
28
29 ' Die PWM - Register zuweisen
30 Led1 Alias Ocr2 ' PWM - Pin 1 - Red
31 Led2 Alias Ocr1bl ' PWM - Pin 2 - Green
32 Led3 Alias Ocr1al ' PWM - Pin 3 - Blau
33 Taste1 Alias Pind . 0
34
35
36
37 ' ein Paar Variablen Deklarieren
38 Dim Color_delay As Byte
39 Dim Color_stop As Byte
40 Dim Rgb As Byte
41 Dim Adc0 As Byte
42
43 ' Startwert f ü r die Schleife
44 Rgb = 0
45
46 ' Farbwechsel Geschwindigkeit pro Schritt ( empfohlen 1 - 15 ) 1 = schnell 15 = langsam
47 Color_delay = 10
48
49 ' Dauer der Pause bei der Grundfarbe ( empfohlen 1 - 10 )
50 Color_stop = 2
51
52
53 Do
54
55 Start Adc
56 Adc0 = Getadc ( 0 )
57 Select Case Adc0
58 Case 0 To 50 :
59 Color_delay = 10
60 Case 51 To 100 :
61 Color_delay = 15
62
63
64
65
66 If Rgb = 0 Then
67 Incr Led1
68 Decr Led3
69 Waitms Color_delay
70 End If
71
72 If Led1 = 255 Then
73 Rgb = 1
74 Led3 = 0
75 Wait Color_stop
76 End If
77
78 If Rgb = 1 Then
79 Decr Led1
80 Incr Led2
81 Waitms Color_delay
82 End If
83
84 If Led2 = 255 Then
85 Rgb = 2
86 Led1 = 0
87 Wait Color_stop
88 End If
89
90 If Rgb = 2 Then
91 Decr Led2
92 Incr Led3
93 Waitms Color_delay
94 End If
95
96 If Led3 = 255 Then
97 Rgb = 0
98 Led2 = 0
99 Wait Color_stop
100 End If
101
102 End If
103
104 Loop
105
106 End
Ben Hil schrieb:
> Läuft dein Code so? Kann ich ihn so übernemen?
Ben, pass auf, von wem dir hier "geholfen" wird.
Hier unterhalten sich Einäugiger und Blinder - und du bist dabei der mit
dem Auge.
http://www.google.de/search?q=site:mikrocontroller.net+thomaskiss
SK
Sascha K.
Gast
09.12.2010 03:29
#1968700
Im LedStyles- Forum findest Du ein sehr schönes Projekt cdazu:
http://www.ledstyles.de/ftopic11666.html
G
GerK
Gast
09.12.2010 05:11
#1968711
Hallo!
Die Case Anweisung muss mit End Selct abgeschlossen werden.
Hilfe lesen hilft.
MfG
Thomas Kiss schrieb:
> PS: LCD ist sehr günstig in Polen oder HongKong. Habe für 2 Euro 16x2
> Blau/weiss bestellt )
@thomas - ich kaufe meine lcd´s immer dort ein !
http://www.neuhold-elektronik.at/catshop/product_info.php?cPath=41_43&products_id=2297
gruss...
Thomas Kiss schrieb:
> Denke schon, der ADC wert ist normal zwischen 0 und 255.
>
> Poti ist an PC.0
@thomas - der attiny2313 hat doch keinen adc, und auch keinen C.0 ?
auserdem ist der adc doch 10bit also 1024 (z.b. beim Mega)??
oder liege ich da falsch ?
TK
Thomas Kiss
Gast
09.12.2010 07:32
#1968738
Richtig, habe mich verguckt, geht es nur mit Atmega8
↑ Nach oben
← Zurück zu Mikrocontroller und Digitale Elektronik
Antwort schreiben