mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RGB Fader mit Tasten Attiny2313(Bascom)


Autor: Ben Hil (bendoben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*Guten Morgen,
Es ist mir nicht begreiflich, warum ich nicht den Color_delay mit 
Tastern ändern kann. +-
Vielleicht ist mein Ansatz auch falsch ?*


$regfile = "attiny2313.dat"                                 ' specify the used micro
$crystal = 800000                                        ' used crystal frequency
$hwstack = 64
$swstack = 16
$framesize = 21
Config Pinb.2 = Output                                      'Die PWM-Pins als Output definieren
Config Pinb.3 = Output                                  'Die PWM-Pins als Output definieren
Config Pinb.4 = Output                                      'Die PWM-Pins als Output definieren
Config Pind.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input

'Die Timer auf PWM-Modus stellen
'Die PWM-Register haben eine Breite von 8 Bit - also Werte von 0 bis 255
'Wobei 0 = 0% Helligkeit und 255 = 100% Helligkeit bedeuten
Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down


'Die Timer starten
Enable Timer0
Enable Timer1
                                            ' Interessanterweise MUSS man für OC2 Enable benutzen, sonst passiert nix!
Start Timer0
Start Timer1


'Die PWM-Register zuweisen
Led1 Alias Ocr1bl                                       'PWM-Pin 1 - Red
Led2 Alias Ocr1al                                       'PWM-Pin 2 - Green
Led3 Alias Ocr0a                                            'PWM-Pin 3 - Blau
Taste1 Alias Pind.0
Taste2 Alias Pind.1
Taste3 Alias Pind.2


'ein Paar Variablen Deklarieren
Dim Color_delay As Byte
Dim Color_stop As Byte
Dim Rgb As Byte


'Startwert für die Schleife
Rgb = 0

'Farbwechsel Geschwindigkeit pro Schritt (empfohlen 1-15)  1=schnell  15=langsam
Color_delay = 10

'Dauer der Pause bei der Grundfarbe (empfohlen 1-10)
Color_stop = 2


Do
If Taste2 = 1 Then Load Color_delay + 1 End If
If Taste3 = 1 Then Load Color_delay - 1 End If
If Taste1 = 1 Then

   If Rgb = 0 Then
   Incr Led1
   Decr Led3
   Waitms Color_delay
   End If

   If Led1 = 255 Then
   Rgb = 1
   Led3 = 0
   Wait Color_stop
   End If

   If Rgb = 1 Then
   Decr Led1
   Incr Led2
   Waitms Color_delay
   End If

   If Led2 = 255 Then
   Rgb = 2
   Led1 = 0
   Wait Color_stop
   End If

   If Rgb = 2 Then
   Decr Led2
   Incr Led3
   Waitms Color_delay
   End If

   If Led3 = 255 Then
   Rgb = 0
   Led2 = 0
   Wait Color_stop
   End If

 Else


End If

Loop
End

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ben Hil (bendoben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist es nicht auch möglich über einen Poti diesen Zahlenwert zu 
verändern?
Wie würde dann der Code aussehen?

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Ben Hil (bendoben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Kiss
Läuft dein Code so? Kann ich ihn so übernemen?
Der poti musste ja an den Adc eingan inputiert werden oder ?

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Ben Hil (bendoben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 )

Autor: Ben Hil (bendoben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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



$regfile = "m32def.dat"                                     ' specify the used micro
$crystal = 800000                                        ' used crystal frequency
$hwstack = 64
$swstack = 16
$framesize = 21
Config Pind.4 = Output                                      'Die PWM-Pins als Output definieren
Config Pind.5 = Output                                      'Die PWM-Pins als Output definieren
Config Pind.7 = Output                                      'Die PWM-Pins als Output definieren
Config Pina.0 = Input


'Die Timer auf PWM-Modus stellen
'Die PWM-Register haben eine Breite von 8 Bit - also Werte von 0 bis 255
'Wobei 0 = 0% Helligkeit und 255 = 100% Helligkeit bedeuten
Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Adc = Single , Prescaler = Auto , Reference = Avcc



'Die Timer starten
Enable Timer0
Enable Timer1
                                            ' Interessanterweise MUSS man für OC2 Enable benutzen, sonst passiert nix!
Start Timer0
Start Timer1


'Die PWM-Register zuweisen
Led1 Alias Ocr2                                             'PWM-Pin 1 - Red
Led2 Alias Ocr1bl                                           'PWM-Pin 2 - Green
Led3 Alias Ocr1al                                           'PWM-Pin 3 - Blau
Taste1 Alias Pind.0



'ein Paar Variablen Deklarieren
Dim Color_delay As Byte
Dim Color_stop As Byte
Dim Rgb As Byte
Dim Adc0 As Byte

'Startwert für die Schleife
Rgb = 0

'Farbwechsel Geschwindigkeit pro Schritt (empfohlen 1-15)  1=schnell  15=langsam
Color_delay = 10

'Dauer der Pause bei der Grundfarbe (empfohlen 1-10)
Color_stop = 2


Do

Start Adc
Adc0 = Getadc(0)
Select Case Adc0
Case 0 To 50 :
Color_delay = 10
Case 51 To 100 :
Color_delay = 15




   If Rgb = 0 Then
   Incr Led1
   Decr Led3
   Waitms Color_delay
   End If

   If Led1 = 255 Then
   Rgb = 1
   Led3 = 0
   Wait Color_stop
   End If

   If Rgb = 1 Then
   Decr Led1
   Incr Led2
   Waitms Color_delay
   End If

   If Led2 = 255 Then
   Rgb = 2
   Led1 = 0
   Wait Color_stop
   End If

   If Rgb = 2 Then
   Decr Led2
   Incr Led3
   Waitms Color_delay
   End If

   If Led3 = 255 Then
   Rgb = 0
   Led2 = 0
   Wait Color_stop
   End If

End If

Loop

End

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Sascha K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im LedStyles- Forum findest Du ein sehr schönes Projekt cdazu: 
http://www.ledstyles.de/ftopic11666.html

Autor: GerK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Die Case Anweisung muss mit End Selct abgeschlossen werden.

Hilfe lesen hilft.

MfG

Autor: Reinhard Schopf (schopfi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_i...

gruss...

Autor: Reinhard Schopf (schopfi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, habe mich verguckt, geht es nur mit Atmega8

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.