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
Hallo, Du hast Dim A as Word ' deklariert das ist keine gute Idee, wenn man auf kleiner 0 vergleicht, weil dies nie vorkommen kann. Dim A as integer ' muesste es tuen
Danke, das werde ich gleich mal versuchen. Klingt auch ziemlich logisch wenn du das jetzt so sagst.
Habe es gerade in den Chip geladen mit A als Integer statt Word, leider kein Erfolg. Das Problem ist immer noch das gleiche. Woran könnte es denn noch liegen?
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
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.
Franz schrieb: > 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. Nur mal so zum Querlesen: http://www.mikrocontroller.net/attachment/74026/Seilbahn_Tn13_1.bas ...
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.
WOW, großes Danke für die sehr kompetente Hilfe. Ich werde das morgen gleich mal in die Tat umsetzen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.