PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom Mauseklavier 3 Wahlschalter aber 5 Programme



Der bastler
12.06.2018, 17:46
Hallo ist es möglich mit bascom einen mausklavier der 3 schalter hat 5 programme auszuführen?

mein beispiel:


Do
If Dip1 = 0 Then Gosub Prog_1 'Lauflicht1
If Dip2 = 0 Then Gosub Prog_2 'Lauflicht2
If Dip3 = 0 Then Gosub Prog_3 'Lauflicht3
Dip1 = 1 : Dip2 = 1 : Dip3 = 1 Then Gosub Testlauf 'Ausgang TEST
Loop


Würde mich sehr freuen Vielen dank schonmal
Mit Freundtlichen Grüßen
Thorsten Sch.

Searcher
12.06.2018, 19:28
Hallo bastler,

mit drei Dipschaltern, kann man 2^3=8 binäre Kombinationen einstellen.
1. 000
2. 001
3. 010
4. 011
5. 100
6. 101
7. 110
8. 111

Dezimal sind das die Zahlen von 0 bis 7. Deshalb würde ich die Dipschalter an einen Port des µCs, beginnend mit Portpin 0, anschließen. Durch kann man die Schalter recht einfach abfragen und mit der SELECT-CASE Anweisung weiterverarbeiten.

Im Code werden durch "and &B0000_0111" nur die Zustände der Dipschalter an PINB.0, PINB.1 und PINB.2 in die Variable Kodierschalter übernommen und Bit 3 bis Bit 7 in Kodierschalter auf 0 gesetzt.

Danach einfach mit SELECT-CASE die Unterprogramme anspringen.




Dim Kodierschalter As Byte

Kodierschalter = PINB And &B0000_0111

Select Case Kodierschalter
Case 0 : Gosub Prog_0
Case 1 : Gosub Prog_1
Case 2 : Gosub Prog_2
' Case 3 : Gosub Prog_3
' Case 4 : Gosub Prog_4
Case 7 : Gosub Testlauf
' Case Else: gosub xy
End Select




Gruß
Searcher

Der bastler
12.06.2018, 19:59
Hallo Searcher
wenn ich richtig verstehe kommt das was in der do loop schleife nichts rein richtig?

Searcher
12.06.2018, 20:09
wenn ich richtig verstehe kommt das was in der do loop schleife nichts rein richtig?

Das hängt von Deinem Programm ab. Wenn die Schalter ständig abgefragt werden müssen bzw sollen, sähe es so aus:



do

Kodierschalter = PINB And &B0000_0111

Select Case Kodierschalter
Case 0 : Gosub Prog_0
Case 1 : Gosub Prog_1
Case 2 : Gosub Prog_2
' Case 3 : Gosub Prog_3
' Case 4 : Gosub Prog_4
Case 7 : Gosub Testlauf
' Case Else: gosub xy
End Select

Loop



Das SELECT-CASE ist der Ersatz für Dein IF THEN und müßte Deinem Beispiel nach auch in die DO LOOP Schleife zusammen mit der PIN Abfrage. Wie gesagt, hängt von Deinem übrigen Programm ab.

Gruß
Searcher

Der bastler
12.06.2018, 23:21
Juhu Searcher
werde es morgen mal propieren vielen dank

i_make_it
13.06.2018, 06:33
Zu den 3 Dipschaltern, sollte man noch einen Taster für Übernehme vorsehen. (Ist bei meinem alten 8048 so, bei dem man das S-RAM, komplett über Schalter binär programmieren muß).

Sinn des ganzen, ist daß wenn der µC läuft und man grade dabei ist die Schalterstellungen zu ändern, nicht die Schalterstellungen eingelesen werden, wärend man den ersten Schalter schon richtig eingestellt hat, aber die beiden anderen noch falsch stehen.
Dadurch würde das falsche Programm angesprungen werden.
Im Extremfall wenn alle drei Schalterstellungen verändert werden müssen, würden beim Wechseln des Programms dann folgendes passieren.
Ausführen der Programme.
altes Programm
falsches Programm 1
falsches Programm 2
neues Programm

Wenn es egal ist, das beim Programm wechsel bis zu zwei falsche Programme kurzzeitig ausgeführt werden, oder wenn die Programmwahl nur erfolgt wenn der µC stromlos (ausgeschaltet) ist, dann braucht man keinen Übernahmentaster.

Sonst würde man nur den Taster überwachen und nur wenn dieser gedückt ist in das CASE verzweigen und die Programmwahl durchführen.

Der bastler
13.06.2018, 10:23
Hallo i_make_it
die programme sollen nur einmal eingestellt werden und sollen das immer wieder durchlaufen, es ist für die Modeleisenbahn gedacht.
als beleuchtungen, aber danke

Der bastler
13.06.2018, 13:12
So mal zurück melden, wenn man es so macht wie
1. 000
2. 001
3. 010
4. 011
5. 100
6. 101
7. 110
8. 111
dann sollte es ja so aussehen sehe bild Richtig?

und wenn ich nur 4 haben möchte mache ich das so oder?

000 steht kein programm
001 ist dann programm 1
011 ist dann programm 2
111 ist dann programm 3
101 ist dann led test programm

ach ja der Dip schalter ist gegen GND geschaltet.

ist denn die reihen folge so richtig?

Searcher
13.06.2018, 18:29
So mal zurück melden, wenn man es so macht wie
1. 000
2. 001
3. 010
4. 011
5. 100
6. 101
7. 110
8. 111


Das war von mir nur die Auflistung aller möglichen binären Kombinationen.



dann sollte es ja so aussehen sehe bild Richtig?
Besser wäre ein Schaltplan. Die drei Schalter sind anscheinend jeweils mit einem Portpin verbunden. Ist richtig aber ob die Anschlußbelegung der Schalter so stimmt, kannst nur Du wissen.



und wenn ich nur 4 haben möchte mache ich das so oder?

000 steht kein programm
001 ist dann programm 1
011 ist dann programm 2
111 ist dann programm 3
101 ist dann led test programm

Das kannst Du Dir frei aussuchen. Mit den Dip Schaltern stellst Du dann die zugehörige Bit Kombination ein um das jeweilige Programm auszuführen. Nach dem CASE ELSE : kann man ein Programm aufrufen, das keiner aufgeführten Kombination entspricht. zB eine Anzeige, daß man keine gültige Kombination eingestellt hat oder den CASE ELSE Zweig und nicht benötigte Kombinationen einfach weglassen.



ach ja der Dip schalter ist gegen GND geschaltet.
Dem Layout nach sieht es aber so aus, als wenn der Schalter zwischen Plus und GND wechseln kann und dementsprechend GND (0) oder Plus 5V (1) zum µC geben kann. Wenn er nur gegen GND schaltet müssen noch Pullup Widerstände vorgesehen werden. Entweder die internen einschalten oder externe dazu löten.



ist denn die reihen folge so richtig?
Du hast PD0, PD1 und PD2 belegt. Das ist schon so wie ich es mir vorgestellt habe. Die Reihenfolge in der die Schalter an den Portpins angeschlossen sind legst Du fest und wenn sie Dir so gefällt ist es OK. Ich hatte PORTB in meinem Beispiel vorgesehen. Nicht vergessen, das auf PORTD bei Dir umzustellen.


Gruß
Searcher

Der bastler
13.06.2018, 18:35
Hi Searcher
das letzte bild wahr nur ein beispiel
angeschlossen ist das mauseklavier so
PD0 - DIP1 - GND
PD1 - DIP2 - GND
PD2 - DIP3 - GND

wie mach man das das auch 4 programme gehen?

Mit Freundtlichen Grüßen
Der bastler

Searcher
13.06.2018, 18:47
Du brauchst Pullup Widerstände. Bitte lesen:
https://rn-wissen.de/wiki/index.php/Pullup_Pulldown_Widerstand

Dann kannst Du mit den drei DIP eine von den acht oben aufgeführten Kombinationen einstellen. Schalter nach GND bedeutet ein logische 0. Schalter offen bedeutet, daß der Pullup Widerstand eine logische 1 auf den Portpin legt.

Somit kannst Du immer eines der vier Programme einstellen, das dann auch immer ausgeführt wird bis Du eben eine andere Kombination an den DIP Schaltern einstellst.

Gruß
Searcher

Der bastler
14.06.2018, 15:39
Hallo Searcher
ja vielen dank hab es soweit am laufen vielen Dank.

Mit Freundtlichen Grüßen
Der bastler

Searcher
14.06.2018, 20:57
👍

Gruß
Searcher