PWM in Bascom lässt mich verzweifeln

Gast #1667044
Lesenswert?

Hallo,

ich habe ein kleines Problem mit einem Tiny 2313 und einem PWM Programm.
Es soll eine Innenlichtdimmung fürs KFZ werden.
Ich habe Programm 1 geschrieben und in den Chip geladen. Es funktioniert 
ohne Probleme.
Jetzt habe ich das Programm 1 etwas erweitert. Ihr findet es als 
Programm 2 im Anhang.

Ich möchte mit 2 Tastern, zwei unterschiedliche Dimmgeschwindigkeiten 
erreichen.
Wenn ich jetzt aber Programm 2 in den Controller lade, geht nur das 
andimmen über Taster 1. Beim Drücken des zweiten Tasters, springt die 
LED sofort auf 100% Helligkeit, und dimmt dann mit der Geschwindigkeit 
runter, mit der sie eigentlich dimmen sollte, wenn der Taster 1 
losgelassen wurde. Ich weiß aber nicht was ich da falsch gemacht habe.

Könntet ihr bitte mal mit drüber schauen und mir sagen was ich falsch 
gemacht habe? Ich bin mit meinem Latein so ziemlich am Ende.

Vielen Dank
Angehängte Dateien:
#1668653
Lesenswert?

Hallo,

Deine Programmlogik ist etwas seltsam.
Dank des Kopierens ohne Änderung der Kommentare, kann man sich die 
Arbeit auch schwieriger machen.
Du hast zwei Taster die nacheinander abgefragt werden, aber beide auf 
eine Variable wirken,wobei jede Taste auch eine entweder/oder 
Entscheidung hat.
Entweder aufdimmen oder abdimmen, unabhängig von der anderen Taste.
Es passiert also immer was, egal ob Taste gedrückt(=0)oder nicht.

wiederhole:

Falls Taster1 an PinD.5(0) aufdimmen + 5 sonst (1)abdimmen -1
Falls Taster2 an PinD.4(0) aufdimmen +10 sonst (1)abdimmen -10

Also ergibt sich auch sowas>
Keine Taste  gedrückt -> abdimmen mit -11
Beide Tasten gedrückt -> aufdimmen mit 15

Du sollest beide Tasten gleichzeitig verarbeiten, um Fehleingaben zu 
unterbinden
Gast #1669326
Lesenswert?

Hallo,

danke für deine Antwort. Ja das mit dem kiopieren un einfügen ohne 
Kommentare zu ändern ist mir auch aufgefallen, aber ich stecke zur Zeit 
recht tief in der ganzen Sache drin, deswegen weiß ich mittlerweile im 
Schalf welche Taster was bedeuten :-).

Ich habe es jetzt so probiert, das ich die beiden Programme als 
Subroutinen laufen lasse. Aber mit mäßigem bis keinem Erfolg.

Beide Tasten gleichzeitig verabrbeiten, das klingt zwar einfach, aber 
wie hast du dir das genau gedacht? Ich bin damit echt überfordert. Bei 
mir blockieren sich die Programme immernnoch gegenseitig.
#1669432
Lesenswert?

Hallo,

..wie habe ich mir das gedacht..

Was sollen Deine Tasten bewirken:
Wenn Taste1 gedrückt wird soll, solange sie gedrückt wird, aufgedimmt 
werden mit +5 beim loslassen automatisch mit -1 abgedimmt werden.
Wenn Taste2 gedrückt wird soll, solange sie gedrückt wird, aufgedimmt 
werden mit +10 beim loslassen automatisch mit -10 abgedimmt werden.

Wenn also eine TasteX gedrückt wird, dann dimme auf mit einem Wert z.B. 
DimmUp.Wenn diese losgelassen wird abdimmen mit einem Wert DimmDown.

Du erstellst Dir zwei Sub's
1
const UpperLimit = 1023
2
const LowerLimit = 0
3
....
4
DIM DimmUp as Byte,DimmDown as Byte,LetzteTaste as Byte
5

6
Declare Sub Aufdimmen
7
Declare Sub Abdimmen
8
...
9

10
sub Aufdimmen
11
A = A+DimmUp
12
IF A > UpperLimit then
13
  A = UpperLimit
14
end sub
15

16
sub Abdimmen
17
A = A-DimmDown
18
IF A < LowerLimit then
19
  A = LowerLimit
20
end sub
LetzteTaste speichert nun, ob keine (0) oder Taste1 (1) oder Taste2 (2) 
gedrückt gewesen war.
Zu Beginn ist LetzteTase = 0
1
Wiederhole diesen Kram:
2
Wenn letzteTaste <> 0 dann 
3
  Wenn Gedrückte Taste = LetzteTaste dann
4
    Aufdimmen 
5
  sonst 
6
    'Egal ob die andere Taste jetzt gedrückt wird, wird nichts gemacht
7
    'Erst wieder im nächsten Durchgang
8
    ' sonst abdimmen
9
    letzteTaste = 0
10
sonst
11
  Wenn Taste1 gedrückt dann
12
    ' Dimmwerte festlegen
13
    DimmUp = 5
14
    DimmDown =1
15
    'Taste merken
16
    LetzteTaste = 1
17
    Aufdimmen ' kann man auch weglassen dann fehlen 20 ms....
18
  sonst
19
    Wenn Taste2 gedrückt dann
20
      DimmUp = 10
21
      DimmDown = 10
22
      LetzteTaste = 2
23
      Aufdimmen
24
    sonst ' keine Taste gedrückt
25
      Abdimmen ' mit dem Wert , der vorher festgelegt war
26
Führe den PWM aus 
27
'und wieder von vorne

Damit wird auch bei gleichzeitigem drücken beider Tasten immer nur die 
erste das Rennen machen.Solange diese gedrückt bleibt ist die andere 
egal.Erst nach dem loslassen, kommen die andere zum Zug.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren