Ansteuerung einer RGB LED mittels PWM in Bascom und Atmega 8

OP #491133
Lesenswert?
• ▲
▼
Hallo,

Ich habe folgendes ungelöstes Problem,

Ich habe einen BCD Schalter 0-9 mit dem möchte ich 10 Unterprogramme 
ansteuern.

Ziel ist:

0 Alle Farben an
1 Rot
2 Gruen
3 Blau
4 Rot und Gruen
5 Gruen und Blau
6 Blau und Rot
7 Lauflicht
8 der Reihe nach durchdimmen

9 Geschwindigkeitsabhängig von Blau nach Rot übers Tachosignal dimmen


Ich habe das Problem bisher so gelöst das über eine IF Abfrage der 
Zustand des BCD Schalters abgefragt wird und Anhand dessen Zustandes in 
ein Unterprogramm gesprungen wird.

Dort Angekommen wird dieses Ausgeführt und am Ende wieder hoch zum 
Anfang gesprungen.

Wie Kann ich jetzt Punkt 8 also die Farbkombinationen durchdimmen und 
Punkt  9 von Blau nach Rot Frequenzabhängig dimmen realisieren.

Gibt es für die Abfrage des BCD Schalters noch eine elegantere 
Möglichkeit.

Sorry habe gerade erst mit Microproz angefangen.



$regfile = "m8def.dat"

$crystal = 8000000

Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output



Rot Alias Portb.0
Gruen Alias Portb.1
Blau Alias Portb.2




Do
Anfang:



If Pinc.0 = 0 And Pinc.1 = 0 And Pinc.2 = 0 And Pinc.3 = 0 Then
Do
jmp Prog0
Loop
End If

If Pinc.0 = 1 And Pinc.1 = 0 And Pinc.2 = 0 And Pinc.3 = 0 Then
Do
jmp Prog1
Loop
End If

If Pinc.0 = 0 And Pinc.1 = 1 And Pinc.2 = 0 And Pinc.3 = 0 Then
Do
jmp Prog2
Loop
End If

If Pinc.0 = 1 And Pinc.1 = 1 And Pinc.2 = 0 And Pinc.3 = 0 Then
Do
JMP Prog3
Loop
End If

If Pinc.0 = 0 And Pinc.1 = 0 And Pinc.2 = 1 And Pinc.3 = 0 Then
Do
jmp Prog4
Loop
End If

If Pinc.0 = 1 And Pinc.1 = 0 And Pinc.2 = 1 And Pinc.3 = 0 Then
Do
jmp Prog5
Loop
End If

If Pinc.0 = 0 And Pinc.1 = 1 And Pinc.2 = 1 And Pinc.3 = 0 Then
Do
jmp Prog6
Loop
End If

If Pinc.0 = 1 And Pinc.1 = 1 And Pinc.2 = 1 And Pinc.3 = 0 Then
Do
jmp Prog7
Loop
End If

If Pinc.0 = 0 And Pinc.1 = 0 And Pinc.2 = 0 And Pinc.3 = 1 Then
Do
jmp Prog8
Loop
End If

If Pinc.0 = 1 And Pinc.1 = 0 And Pinc.2 = 0 And Pinc.3 = 1 Then
Do
jmp Prog9
Loop
End If


Prog0:
Rot = 1
Gruen = 1
Blau = 1
jmp Anfang


Prog1:
Rot = 1
Gruen = 0
Blau = 0
jmp Anfang

Prog2:
Rot = 0
Gruen = 1
Blau = 0
jmp Anfang

Prog3:
Rot = 0
Gruen = 0
Blau = 1
jmp Anfang

Prog4:
Rot = 1
Gruen = 1
Blau = 0
jmp Anfang

Prog5:
Rot = 0
Gruen = 1
Blau = 1
jmp Anfang

Prog6:
Rot = 1
Gruen = 0
Blau = 1
jmp Anfang


Prog7:

jmp Anfang


Prog8:

jmp Anfang


Prog9:

jmp Anfang




Loop

Return

MfG,

neostrider

Gast #491154
Lesenswert?
• ▲
▼
Hallo ROBERT;

> Wie Kann ich jetzt Punkt 8 also die Farbkombinationen durchdimmen

zähle einen Zähler hoch und übertrage den Inhalt an Port B.

also:

a=a+1

000
001
010
011
.
.
.
111

> Geschwindigkeitsabhängig von Blau nach Rot übers Tachosignal dimmen

welches Tachosignal ?

Otto
Gast #491197
Lesenswert?
• ▲
▼
Hallo Robert,

Tja, aller Anfang ist im Nebel ....

Ich programmiere auch mit Bascom. Gerade weil es für normale Lösungen 
super geeignet ist.

Zum BCD Schalter: Bascom kennt den Befehl

SELECT CASE <Variable>
 CASE 0 (alle Bits o)
  Code
 CASE 1 (Bit 0 ein)
  Code
 CASE 2 (bit 1 on)
  Code
 CASE 3

 ....

 CASE ELSE
  Code für wenn nichts zutrifft
 END SELECT


Das durchdimmen kannst Du auf verschiedene Arten realisieren. Es hängt 
aber von der Feinheit des Übergangs der Farben ab. Mit PWM geht das am 
besten. PWM heisst, dass ein im AVR enthaltener Zähler (meistens) ein 
PWM Signal erzeugen kann. Dazu übergibt man dem Zähler ein 
Pulsverhältnis irgendwo zwischen 0/100 und 100/0 Prozent. Der Zähler 
kann damit den Zählerausgang selbständig, das heisst ohne Software, 
dauerhaft mit dieser Impulssequenz ansteuern.

In Bascom sieht das folgerndermassen aus:

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm 
= Clear Up , Prescale = 1

Compare1a = 128
Compare1b = 128

Damit wird ein Tastverhältnis von 50% ein und 50% aus erziehlt.
Mehr Info bekommst Du bei Bascom, oder bei ATMEL in den entsprechenden 
Dokus.

Gruss
Uwe







Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.