Bascom alte PWM Werte zurücksetzen und erneuern - BASCOM

elektronix00

Mitglied
02. Okt. 2008
30
0
6
62
Saarland
Sprachen
Hi,

leider ist mir kein besserer Titel eingefallen.

Es geht um die Ansteuerung eines RGB LED Stripes. Als µC habe ich den ATMEGA 88 gewählt. Mit 4 Jumpern möchte ich 12 verschiedene Festfarben einstellen können, das funktioniert auch soweit.
Die Jumpereingänge liegen vom Programm her auf high und der Jumper verbindet gegen GND.
Die Festfarben werden von Timer0, Timer1 sowie Timer2 per PWM erzeugt und über Transistoren an den RGB LED Stripe geschaltet. Es wird also immer eine Festfarbe dargestellt.
Nun habe ich aber an einem anderen Port ebenfalls Eingänge, die low aktiv sind und über ein externes Ereignis auf high gelegt werden. Es sind 8 Eingänge und je nachdem welcher Eingang auf high geschaltet wird, soll die gejumperte Festfarbe auf eine andere Festfarbe (8 verschiedene Farben im Programm hinterlegt) umgeschaltet werden und zwar so lange, wie der Eingang high bleibt.

Die Jumper frage ich in der Do ... Loop Schleife per Select Case ab, die anderen Eingänge befinden sich in einer Unterroutine, die am Ende der Select case, also hinter End Select aufgerufen wird.

Z.B.: ich stelle als gejumperte Festfarbe ROT ein. Wird nun einer der Eingänge an dem anderen Port auf high gesetzt (z. B. für einen Farbwechsel auf BLAU), dann wird der alte Wert also ROT nicht im Timer zurückgesetzt sondern es werden einfach die neuen Werte dazugenommen. Die abgestrahlte Farbe ist nun eine Mischung aus ROT und BLAU.

Was muss ich tun, dass die alte Farbe zuerst gelöscht wird und wirklich nur die neue Farbe erscheint?

Gruß und schönen Sonntag

Michael
 
Hi,

wer sich den Thread aus dem anderen Forum durchliest wird feststellen, dass meine aktuelle Frage hier mit dem anderen Thema nichts zu tun hat.
Auch der Code wurde von mir zwischenzeitlich geändert und erweitert. Das alte Thema war somit eigentlich abgeschlossen. Es sollte also kein Crossposting werden.
Sollte das jemand anders sehen, dann muss ich mich leider dafür entschuldigen. Crossposting ist für mich immer noch, wenn man die gleiche Frage in mehreren Foren stellt.

Falls nun jemand doch noch helfen möchte, hier mal ein Auszug meines aktuellen Programms:

Code:
'*** Pinbelegung aller Ein- und Ausgänge ***

'*** PWM Ausgänge für Transistoren ***

'OC0A = PD.6 = Pin 12 - RGB LED_1 Rot
'OC1A = PB.1 = Pin 15 - RGB LED_1 Grün
'OC2A = PB.3 = Pin 17 - RGB LED_1 Blau

'*** Jumper für Festfarben ***

'PC.2 - PIN 25
'PC.3 - PIN 26
'PC.4 - PIN 27
'PC.5 - PIN 28


'* Flasher - Eingänge ***
'Flasher 1 - PD.0 - PIN 2
'Flasher 2 - PD.1 - PIN 3
'Flasher 3 - PD.2 - PIN 4
'Flasher 4 - PD.3 - PIN 5
'Flasher 5 - PD.4 - PIN 6
'Flasher 6 - PD.5 - PIN 11
'Flasher 7 - PD.7 - PIN 13
'Flasher 8 - Pb.0 - PIN 14

'*******************

$regfile = "m88adef.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

'$PROG &HFF,&HE2,&HDF,&HF9' generated. Take care that the chip supports all fuse bytes.

Ddrb = &B00001010                                           'PortB.1 und PB.3 = Ausgänge für Transistoren / PB.5 = Jumper für Farbentest / Rest = Eingang
Portb = &B00101010                                          'PWM Ausgänge sowie Jumper auf High gesetzt

Ddrc = &B00000011                                           'PinC.2 ... PinC.5 = Jumper - Eingänge für Farbauswahl - Rest Ausgänge
Portc = &B11111100                                          'und auf High gesetzt

Ddrd = &B01000000                                           'PinD.0 - D.5 sowie D.7 = Flasher - Eingänge auf low gesetzt
Portd = &B01000000                                          'PortD.6 = PWM Ausgang auf High gesetzt


Rot_pwm1 Alias Ocr0a                                        'PWM-Output: Pin 12
Gruen_pwm1 Alias Ocr1al                                     'PWM-Output: Pin 15
Blau_pwm1 Alias Ocr2a                                       'PWM-Output: Pin 17

Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim Jumper As Byte

Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
On Timer0 Timer0_pwm
Enable Timer0

Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
On Timer1 Timer1_pwm
Enable Timer1

Config Timer2 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
On Timer2 Timer2_pwm
Enable Timer2

Enable Interrupts


'*** Flasher Eingänge für Farbwechsel ***

Flasher1 Alias Pind.0                                       'Pin 2
Flasher2 Alias Pind.1                                       'Pin 3
Flasher3 Alias Pind.2                                       'Pin 4
Flasher4 Alias Pind.3                                       'Pin 5
Flasher5 Alias Pind.4                                       'Pin 6
Flasher6 Alias Pind.5                                       'Pin 11
Flasher7 Alias Pind.7                                       'Pin 13
Flasher8 Alias Pinb.0                                       'Pin 14


' *** Alle Farben dunkel schalten ***
R = 0
G = 0
B = 0

Do

Jumper = Pinc And &B11111100

Select Case Jumper

Case &B00111000:                                            'rot
R = 255
G = 0
B = 0

Case &B00110100:                                            'grün
R = 0
G = 255
B = 0

Case &B00110000:                                            'blau
R = 0
G = 0
B = 255

'*** usw.

Case Else:                                                  ' alle LEDs dunkel schalten
R = 0
G = 0
B = 0

End Select

Gosub Flasher

Loop
End

Flasher:

If Flasher1 = 1 Then                                        'rot
R = 255
G = 0
B = 0
End If

If Flasher2 = 1 Then                                        'grün
R = 0
G = 255
B = 0
End If

If Flasher3 = 1 Then                                        'blau
R = 0
G = 0
B = 255
End If
Return

'*** usw.

'**********************************************************************

Timer0_pwm:
Rot_pwm1 = R
Return

Timer1_pwm:
Gruen_pwm1 = G
Return

Timer2_pwm:
Blau_pwm1 = B
Return
 
Hallo,

probier mal das hier ...

Code:
'*** Pinbelegung aller Ein- und Ausgänge ***

'*** PWM Ausgänge für Transistoren ***

'OC0A = PD.6 = Pin 12 - RGB LED_1 Rot
'OC1A = PB.1 = Pin 15 - RGB LED_1 Grün
'OC2A = PB.3 = Pin 17 - RGB LED_1 Blau

'*** Jumper für Festfarben ***

'PC.2 - PIN 25
'PC.3 - PIN 26
'PC.4 - PIN 27
'PC.5 - PIN 28


'* Flasher - Eingänge ***
'Flasher 1 - PD.0 - PIN 2
'Flasher 2 - PD.1 - PIN 3
'Flasher 3 - PD.2 - PIN 4
'Flasher 4 - PD.3 - PIN 5
'Flasher 5 - PD.4 - PIN 6
'Flasher 6 - PD.5 - PIN 11
'Flasher 7 - PD.7 - PIN 13
'Flasher 8 - Pb.0 - PIN 14

'*******************

$regfile = "m88adef.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

'$PROG &HFF,&HE2,&HDF,&HF9' generated. Take care that the chip supports all fuse bytes.

Ddrb = &B00001010                                           'PortB.1 und PB.3 = Ausgänge für Transistoren / PB.5 = Jumper für Farbentest / Rest = Eingang
Portb = &B00101010                                          'PWM Ausgänge sowie Jumper auf High gesetzt

Ddrc = &B00000011                                           'PinC.2 ... PinC.5 = Jumper - Eingänge für Farbauswahl - Rest Ausgänge
Portc = &B11111100                                          'und auf High gesetzt

Ddrd = &B01000000                                           'PinD.0 - D.5 sowie D.7 = Flasher - Eingänge auf low gesetzt
Portd = &B01000000                                          'PortD.6 = PWM Ausgang auf High gesetzt


Rot_pwm1 Alias Ocr0a                                        'PWM-Output: Pin 12
Gruen_pwm1 Alias Ocr1al                                     'PWM-Output: Pin 15
Blau_pwm1 Alias Ocr2a                                       'PWM-Output: Pin 17

Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim Jumper As Byte
Dim Flasher_in1 As Byte                                     ' Mal erweitert ###################
Dim Flasher_in2 As Byte                                     ' Mal erweitert ###################


Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
On Timer0 Timer0_pwm
Enable Timer0

Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
On Timer1 Timer1_pwm
Enable Timer1

Config Timer2 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
On Timer2 Timer2_pwm
Enable Timer2

Enable Interrupts


'*** Flasher Eingänge für Farbwechsel ***

Flasher1 Alias Pind.0                                       'Pin 2
Flasher2 Alias Pind.1                                       'Pin 3
Flasher3 Alias Pind.2                                       'Pin 4
Flasher4 Alias Pind.3                                       'Pin 5
Flasher5 Alias Pind.4                                       'Pin 6
Flasher6 Alias Pind.5                                       'Pin 11
Flasher7 Alias Pind.7                                       'Pin 13
Flasher_p1 Alias Pind                                       ' Mal erweitert ###################

Flasher8 Alias Pinb.0                                       'Pin 14
Flasher_p2 Alias Pinb                                       ' Mal erweitert ###################

' *** Alle Farben dunkel schalten ***
R = 0
G = 0
B = 0



' ##########################################
' ###### Hauptschleife #####################
' ##########################################
Do

  Jumper = Pinc And &B11111100

  ' Nun habe ich aber an einem anderen Port ebenfalls Eingänge, die low aktiv sind
  ' und über ein externes Ereignis auf high gelegt werden. Es sind 8 Eingänge und
  ' je nachdem welcher Eingang auf high geschaltet wird, soll die gejumperte Festfarbe
  ' auf eine andere Festfarbe (8 verschiedene Farben im Programm hinterlegt) umgeschaltet
  ' werden und zwar ___ so lange, wie der Eingang high bleibt ___.
  Flasher_in1 = Flasher_p1 And &B10111111                   ' PD6 ausmaskiert #############
  Flasher_in2 = Flasher_p2 And &B00000001                   ' nur PB0 durchlassen #############
  Flasher_in1 = Flasher_in1 + Flasher_in2                   ' Bits zusammenfuegen
  ' ### wenn jetzt ein Bit auf 1 liegt, dann sollte in Flasher_in1 kein Wert von 0 mehr existieren

  If Flasher_in1 = 0 Then                                   ' Kein Flasher-Eingang auf High #########

    Select Case Jumper

    Case &B00111000:                                        'rot
      R = 255
      G = 0
      B = 0

    Case &B00110100:                                        'grün
      R = 0
      G = 255
      B = 0

    Case &B00110000:                                        'blau
      R = 0
      G = 0
      B = 255

  '*** usw.

    Case Else:                                              ' alle LEDs dunkel schalten
      R = 0
      G = 0
      B = 0

    End Select

  Else                                                      ' also wenn doch ein Flasher-Eingang auf 1 liegt ... #######

    Gosub Flasher

  End If                                                    ' Ende vom Vergleich ########

Loop
' ##########################################
' ###### Hauptschleife ENDE ################
' ##########################################
End




' ###### Flasher ###########################
Flasher:

  If Flasher1 = 1 Then                                      'rot
    R = 255
    G = 0
    B = 0
  End If

  If Flasher2 = 1 Then                                      'grün
    R = 0
    G = 255
    B = 0
  End If

  If Flasher3 = 1 Then                                      'blau
    R = 0
    G = 0
    B = 255
  End If
Return

'*** usw.

'**********************************************************************

' ###### PWM ###########################

Timer0_pwm:
  Rot_pwm1 = R
Return

Timer1_pwm:
  Gruen_pwm1 = G
Return

Timer2_pwm:
  Blau_pwm1 = B
Return

Alternativ könnte man das Flasher-Bit vom PortB auch noch in die fehlende Bit-Position vom PortD einfügen (also auf Bit6). Das kann man dann mit SHIFT und OR machen. Damit hätte man alle Pins vom Flasher zu einem kompletten Byte zusammengefaßt.

Ich hab auch mal ein paar Einzüge und Trennlblöcke gemacht damit es übersichtlicher wird.

Gruß
Dino
 
Es wäre hilfreich wenn du den kompletten Code posten würdest. Grade den relevanten Teil (die ISR's) hast du verschluckt.
Hab mir den Code aus dem anderen Forum mal angesehen.
Code:
Timer1_pwm:
Rot_pwm1 = R
Gruen_pwm1 = G

Return

Timer2_pwm:
Blau_pwm1 = B

Return
Ok, ich bin kein Bascom Experte, aber irgendwie kommt mir das spanisch vor. Vielleicht aber auch nur weil der Code schon älter ist wie du sagtest und somit nicht mehr zu der Beschreibung passt.
 
@ Tommy,

ich habe nichts relevantes weggelassen, lediglich ein paar Cases, weil für ein Beispiel drei Cases ausreichen, der Rest geht aus der Jumperung hervor und wird einfach weiter fortgesetzt. Ebenso habe ich bei den Flashereingängen auch nur 3 Stück gepostet, die anderen Flashereingängen mit den If ... Then Abfragen habe ich mir aus Gründen der Übersichtlichkeit erspart. Trotzdem Danke für das Lesen meines Threads.

@ Dino,

ich habe nun deine Ergänzungen in mein Programm eingefügt, und siehe da ... es funktioniert. :smile:
Jetzt will ich mich noch ein wenig reinlesen damit ich deine Zeilen auch verstehe, dann kann ich für die anderen Flashereingänge die Erweiterungen selbst schreiben.
Wenns Programm läuft möchte ich noch die ein oder andere Farbe etwas schöner machen.

Nochmals vielen Dank

Gruß Michael
 
Oh stimmt 0.0
Ich könnte schwören dass mir das erst nicht angezeigt worden ist. Aber ok, Opera crasht hier auch gern mal oder verfälscht Scrollbalken, vielleicht lag da das Problem. Oder ich werde alt :rolleyes: Sorry
 
@ Dino,

natürlich reicht deine Erweiterung vollkommen aus, ich hatte nur vor dem Testen vergessen die restlichen Flasherzeilen erneut ins Programm einzusetzen.
Das Programm funktioniert nun 100 %. :flowers:

Nochmals Danke für deine Hilfe

Michael
 
Hallo Michael,
ist es eigentlich notwendig, dass deine PWMs mit über 15KHz laufen? Wenn du LEDs betreibst, wären doch sicherlich auch 250Hz oder zumindest 2KHz ausreichend. Dann wäre ein Prescale von 8 bzw. 64 sinnvoll.
Und warum werden die PWM Werte in der ISR des Timers gesetzt? Das kann doch auch im Hauptprogramm ablaufen. Die Werte ändern sich doch eh nur, wenn ein Taster gedrückt oder ein Jumper umgesteckt wurde. Da kommt es doch auf ein paar tausendstel Sekunden nicht an.
Im Moment verarbeitet dein Programm zu 99% die ISRs der drei Timer, alles andere kommt nur ganz kurz zwischendrin an die Reihe.
Dadurch werden die Tasten auch nur sehr langsam abgefragt.
Wenn du die PWM Werte im Hauptprogramm setzt nachdem erkannt wurde, dass sich ein Taster geändert hat, wären die ISRs überflüssig und dein Programm würde wesentlich kontrollierter ablaufen. Und du hättest die Möglichkeit, in Zukunft auch noch etwas anderes zu tun als in ISRs rein und raus zu springen.
 
Hallo Rolf,

Prescale habe ich auf 64 geändert, ich finde, dass die Farben nun auch schöner sind. Vielleicht nur Einbildung. :confused:

Die PWM Werte habe ich nun auch ins Hauptprogramm gesetzt. Zusätzlich habe ich noch einen kleinen Testdurchlauf ins Programm eingebaut, der ebenfalls durch einen Jumper aktiviert wird.
Somit kann man sich schon vor dem Jumpern der Festfarben alle Farben anschauen und hat es leichter sich zu entscheiden, was man einstellen möchte. Statt 18% werden nun auch nur noch 14 % Speicher belegt.

Was mir noch so beim Testen auf meiner Entwicklungsumgebung aufgefallen ist: Die Eingänge für die Flasher sind recht empfindlich gegen Störungen. Komme ich mit den Fingern in die Nähe der Eingänge so "flackern" die Farben. Kann man das nicht per Code lösen? Als Gegentest habe ich 100 kOhm Widerstände genommen und diese an die Eingänge und gegen GND geklemmt. Dann funktioniert es störungsfrei.
Aber später sollen ja an die Eingänge für die Flasher ohnehin Spannungsteiler, ich denke, dann wäre das Problem ebenfalls gelöst.

Der aktuelle Code und diesmal komplett:

Code:
'*** Pinbelegung aller Ein- und Ausgänge ***

'*** PWM Ausgänge für Transistoren ***

'OC0A = PD.6 = Pin 12 - RGB LED_1 Rot
'OC1A = PB.1 = Pin 15 - RGB LED_1 Grün
'OC2A = PB.3 = Pin 17 - RGB LED_1 Blau

'*** Jumper für Festfarben ***

'PC.2 - PIN 25
'PC.3 - PIN 26
'PC.4 - PIN 27
'PC.5 - PIN 28


'* Flasher - Eingänge ***
'Flasher 1 - PD.0 - PIN 2
'Flasher 2 - PD.1 - PIN 3
'Flasher 3 - PD.2 - PIN 4
'Flasher 4 - PD.3 - PIN 5
'Flasher 5 - PD.4 - PIN 6
'Flasher 6 - PD.5 - PIN 11
'Flasher 7 - PD.7 - PIN 13
'Flasher 8 - Pb.0 - PIN 14

'*******************

$regfile = "m88adef.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

'$PROG &HFF,&HE2,&HDF,&HF9' generated. Take care that the chip supports all fuse bytes.

Ddrb = &B00001010                                           'PortB.1 und PB.3 = Ausgänge für Transistoren / PB.5 = Jumper für Farbentest / Rest = Eingang
Portb = &B00101010                                          'PWM Ausgänge sowie Jumper auf High gesetzt

Ddrc = &B00000011                                           'PinC.2 ... PinC.5 = Jumper - Eingänge für Farbauswahl - Rest Ausgänge
Portc = &B11111100                                          'und auf High gesetzt

Ddrd = &B01000000                                           'PinD.0 - D.5 sowie D.7 = Flasher - Eingänge auf low gesetzt
Portd = &B01000000                                          'PortD.6 = PWM Ausgang auf High gesetzt


Rot_pwm1 Alias Ocr0a                                        'PWM-Output: Pin 12
Gruen_pwm1 Alias Ocr1al                                     'PWM-Output: Pin 15
Blau_pwm1 Alias Ocr2a                                       'PWM-Output: Pin 17

Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim Jumper As Byte

Dim Flasher_in1 As Byte                                     ' Mal erweitert ###################
Dim Flasher_in2 As Byte                                     ' Mal erweitert ###################

Dim A As Byte

A = 2

'*** Jumper für Farbentest ***
Farbentest Alias Pinb.5

Config Timer0 = Pwm , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
'On Timer0 Timer0_pwm
Enable Timer0

Config Timer1 = Pwm , Prescale = 64 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
'On Timer1 Timer1_pwm
Enable Timer1

Config Timer2 = Pwm , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
'On Timer2 Timer2_pwm
Enable Timer2

Enable Interrupts

'*** Flasher Eingänge für Farbwechsel ***

Flasher1 Alias Pind.0                                       'Pin 2
Flasher2 Alias Pind.1                                       'Pin 3
Flasher3 Alias Pind.2                                       'Pin 4
Flasher4 Alias Pind.3                                       'Pin 5
Flasher5 Alias Pind.4                                       'Pin 6
Flasher6 Alias Pind.5                                       'Pin 11
Flasher7 Alias Pind.7                                       'Pin 13
Flasher8 Alias Pinb.0                                       'Pin 14

Flasher_p1 Alias Pind                                       ' Mal erweitert ###################
Flasher_p2 Alias Pinb                                       ' Mal erweitert ###################

' *** Alle Farben dunkel schalten ***
Rot_pwm1 = 0
Gruen_pwm1 = 0
Blau_pwm1 = 0

Do

If Farbentest = 0 Then
Gosub Testdurchlauf
End If

Jumper = Pinc And &B11111100

  Flasher_in1 = Flasher_p1 And &B10111111                   ' PD6 ausmaskiert #############
  Flasher_in2 = Flasher_p2 And &B00000001                   ' nur PB0 durchlassen #############
  Flasher_in1 = Flasher_in1 + Flasher_in2                   ' Bits zusammenfuegen
  ' ### wenn jetzt ein Bit auf 1 liegt, dann sollte in Flasher_in1 kein Wert von 0 mehr existieren

  If Flasher_in1 = 0 Then                                   ' Kein Flasher-Eingang auf High #########

Select Case Jumper

Case &B00111000:                                            'rot
Rot_pwm1 = 255
Gruen_pwm1 = 0
Blau_pwm1 = 0

Case &B00110100:                                            'grün
Rot_pwm1 = 0
Gruen_pwm1 = 255
Blau_pwm1 = 0

Case &B00110000:                                            'blau
Rot_pwm1 = 0
Gruen_pwm1 = 0
Blau_pwm1 = 255

Case &B00101100:                                            'weiss
Rot_pwm1 = 255
Gruen_pwm1 = 255
Blau_pwm1 = 255

Case &B00101000:                                            'orange
Rot_pwm1 = 255
Gruen_pwm1 = 29
Blau_pwm1 = 0

Case &B00100100:                                            'gelb
Rot_pwm1 = 255
Gruen_pwm1 = 128
Blau_pwm1 = 0

Case &B00100000:                                            'purple
Rot_pwm1 = 140
Gruen_pwm1 = 0
Blau_pwm1 = 255

Case &B00011100:                                            'pink
Rot_pwm1 = 255
Gruen_pwm1 = 0
Blau_pwm1 = 28

Case &B00011000:                                            'hellblau (heller)
Rot_pwm1 = 0
Gruen_pwm1 = 200
Blau_pwm1 = 255

Case &B00010100:                                            'türkis
Rot_pwm1 = 0
Gruen_pwm1 = 190
Blau_pwm1 = 75

Case &B00010000:                                            'pink (heller)
Rot_pwm1 = 255
Gruen_pwm1 = 40
Blau_pwm1 = 128

Case &B00101100:                                            'hellgrün
Rot_pwm1 = 85
Gruen_pwm1 = 150
Blau_pwm1 = 0

Case Else:                                                  ' alle LEDs dunkel schalten
Rot_pwm1 = 0
Gruen_pwm1 = 0
Blau_pwm1 = 0

End Select

Else                                                        ' also wenn doch ein Flasher-Eingang auf 1 liegt ... #######

Gosub Flasher

End If                                                      ' Ende vom Vergleich ########

Loop
End

Flasher:

If Flasher1 = 1 Then                                        'rot
Rot_pwm1 = 255
Gruen_pwm1 = 0
Blau_pwm1 = 0
End If

If Flasher2 = 1 Then                                        'grün
Rot_pwm1 = 0
Gruen_pwm1 = 255
Blau_pwm1 = 0
End If

If Flasher3 = 1 Then                                        'blau
Rot_pwm1 = 0
Gruen_pwm1 = 0
Blau_pwm1 = 255
End If

If Flasher4 = 1 Then                                        'orange
Rot_pwm1 = 255
Gruen_pwm1 = 29
Blau_pwm1 = 0
End If

If Flasher5 = 1 Then                                        'purple
Rot_pwm1 = 140
Gruen_pwm1 = 0
Blau_pwm1 = 255
End If

If Flasher6 = 1 Then                                        'pink
Rot_pwm1 = 255
Gruen_pwm1 = 0
Blau_pwm1 = 28
End If

If Flasher7 = 1 Then                                        'türkis
Rot_pwm1 = 0
Gruen_pwm1 = 190
Blau_pwm1 = 75
End If

If Flasher8 = 1 Then                                        'hellgrün
Rot_pwm1 = 85
Gruen_pwm1 = 150
Blau_pwm1 = 0
End If

Return

'*** Testdurchlauf zum Darstellen der Farben ***

Testdurchlauf:

Rot_pwm1 = 0
Gruen_pwm1 = 0
Blau_pwm1 = 0
Wait A

Rot_pwm1 = 255                                              'rot
Gruen_pwm1 = 0
Blau_pwm1 = 0
Wait A

Rot_pwm1 = 0                                                'grün
Gruen_pwm1 = 255
Blau_pwm1 = 0
Wait A

Rot_pwm1 = 0                                                'blau
Gruen_pwm1 = 0
Blau_pwm1 = 255
Wait A

Rot_pwm1 = 255                                              'weiss
Gruen_pwm1 = 255
Blau_pwm1 = 255
Wait A

Rot_pwm1 = 255                                              'orange
Gruen_pwm1 = 29
Blau_pwm1 = 0
Wait A

Rot_pwm1 = 255                                              'gelb
Gruen_pwm1 = 128
Blau_pwm1 = 0
Wait A

Rot_pwm1 = 140                                              'purple
Gruen_pwm1 = 0
Blau_pwm1 = 255
Wait A

Rot_pwm1 = 255                                              'pink
Gruen_pwm1 = 0
Blau_pwm1 = 28
Wait A

Rot_pwm1 = 0                                                'hellblau (heller)
Gruen_pwm1 = 200
Blau_pwm1 = 255
Wait A

Rot_pwm1 = 0                                                'türkis
Gruen_pwm1 = 190
Blau_pwm1 = 75
Wait A

Rot_pwm1 = 255                                              'pink (heller)
Gruen_pwm1 = 40
Blau_pwm1 = 128
Wait A

Rot_pwm1 = 85                                               'hellgrün
Gruen_pwm1 = 150
Blau_pwm1 = 0
Wait A:

Return

'**********************************************************************

'Timer0_pwm:
'Rot_pwm1 = R
'Return

'Timer1_pwm:
'Gruen_pwm1 = G
'Return

'Timer2_pwm:
'Blau_pwm1 = B
'Return
 
Kann man das nicht per Code lösen?
Leider nicht so einfach, weil deine Flasher falsch herum schalten. Die AVRs haben nur PullUps eingebaut, keine PullDowns. Kannst du das noch ändern? Dann könntest du einfach im Programm die AVR internen PullUps einschalten, ohne zusätzliche Widerstände.
Wenn nicht, musst du PullDowns (10k) nach GND an jeden Pin anschließen.
Warum willst du an die Eingänge Spannungsteiler machen?
 
Hallo Rolf,

die Eingänge kann ich leider nicht ändern. An die Eingänge kommen Signale aus einer anderen Schaltung. Diese Schaltung liefert an den Ausgängen 24 Volt, so dass ich per Spannungsteiler eine Pegelanpassung vornehmen muss. Die Spannungsteiler sehen folgendermaßen aus: 24 Volt IN --> Widerstand 8.2 kOhm --> Widerstand 1.8 kOhm --> GND. Parallel zum 1.8 kOhm Widerstand eine Z-Diode mit 4.7 Volt. Abgriff zum ATMEGA erfolgt zwischen 8.2 kOhm und 1.8 kOhm (mit Z-Diode). Somit habe ich einen sauberen HIGH Pegel.

Ich denke, dass somit die Eingänge vom ATMEGA ausreichend auf Masse liegen wegen dem 1.8 k Ohm Widerstand und "flatterfrei" werden. Die Platine habe ich gestern noch schnell geätzt, heute will ich noch bohren und bestücken, dann kann ich testen.

Gruß Michael
 
Hallo Michael,
mit dem 1,8k Widerstand gegen Masse wird es dann sicher kein "Gezappel" an den Eingängen mehr geben.
Hoffentlich passt auch sonst alles auf der Platine.
 
Hallo Rolf,

ich habe gestern die Platine zusammengelötet und geteset, alles funktioniert wie erwünscht.

Nochmals ein dickes Danke für alle, die mir geholfen haben.

Gruß Michael
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)