www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuerung einer RGB LED mittels PWM in Bascom und Atmega 8


Autor: Robert Avr (neostrider)
Datum:

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


Autor: Otto (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 für die Abfrage des BCD Schalters noch eine elegantere
Möglichkeit....

CASE...
unter der annahme das basic sowas kann..
hoho

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Robert,

die "BCD-Abfrage" kannst Du auch in einer Schleife
realisieren - ungefähr so (ich kenne BASCOM nicht):

for bcd = 1 to 16
   if pinc = bcd
   call bcd
next

Gruss Otto

Autor: Gromit (Gast)
Datum:

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








Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm
= Clear Up , Prescale = 1

hilfe...

Wäre es nicht sinnvoller C zu nehmen..

Autor: Robert Avr (neostrider)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mmh also so langsam dimmts mir aber wie bekomm ich den BCD Schalter in 
die Case Variable ?

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.