PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit dip schalter PORTD 0-1-2-3 Abfragen



Der bastler
15.06.2020, 11:10
Hallo Forum gemeinde
Ich habe ein kleines problem, ich mochte an PORTD.0-1-2-3 einen dip schalter für programm auswahl einstellen...
für 3 Ports habe ich hinbekommen aber komme leider nicht weiter oder habe einen denkfehler...

Bitte um rat

Dim Kodierschalter As Byte

Declare Sub Prog0
Declare Sub Prog1
Declare Sub Prog2
Declare Sub Prog3
Declare Sub Prog4
Declare Sub Prog5
Declare Sub Prog6
Declare Sub Prog7
Declare Sub Prog8
Declare Sub Prog9
Declare Sub Prog10
Declare Sub Prog11
Declare Sub Prog12
Declare Sub Prog13
Declare Sub Prog14
Declare Sub Kein_prog


Do
Kodierschalter = Pind And &B00001111
Select Case Kodierschalter
Case 0 : Gosub Prog0 '
Case 1 : Gosub Prog1 '
Case 2 : Gosub Prog2 '
Case 3 : Gosub Prog3 '
Case 4 : Gosub Prog4 '
Case 5 : Gosub Prog5 '
Case 6 : Gosub Prog6 '
Case 7 : Gosub Prog7 '
Case 8 : Gosub Prog8 '
Case 9 : Gosub Prog9
Case 10 : Gosub Prog10
Case 11 : Gosub Prog11
Case 12 : Gosub Prog12
Case 13 : Gosub Prog13
Case 14 : Gosub Prog14
Case Else : Gosub Kein_prog
End Select
Loop

Sub Prog0
Portb.0 = 1
Wait 1
Portb.0 = 0
End Sub

Sub Prog1
End Sub

Sub Prog2
End Sub

Sub Prog3
End Sub

Sub Prog4
End Sub

Sub Prog5
End Sub

Sub Prog6
Portb.6 = 1
Wait 1
Portb.6 = 0
Wait 1
End Sub

Sub Prog7
Portb.7 = 1
Wait 1
Portb.7 = 0
Wait 1
End Sub

Sub Prog8
Portb = &B10000001
Wait 1
Portb = &B00000000
Wait 1
End Sub

Sub Prog9
Portb = &B11000001
Wait 1
Portb = &B00000000
Wait 1
End Sub

Sub Prog10
End Sub

Sub Prog11
Portb = &B11110001
Wait 1
Portb = &B00000000
Wait 1
End Sub

Sub Prog12
End Sub

Sub Prog13
Portb = &B11111101
Wait 1
Portb = &B00000000
Wait 1
End Sub

Sub Prog14
End Sub

Sub Kein_prog
Portd.6 = 0
Wait 1
Portd.6 = 1
Wait 1
End Sub

Return

Wo habe ich ein denk fehler oder ist da was falsch.....

Moppi
15.06.2020, 11:42
Hallo,

ich glaube, da müsste man noch einen Schaltplan sehen könne, bzw. und/oder was ist PORTD - PORTD wovon?



MfG

Der bastler
15.06.2020, 12:05
Einen ATtiny2313

Searcher
15.06.2020, 12:56
für 3 Ports habe ich hinbekommen aber komme leider nicht weiter oder habe einen denkfehler...


Program sieht doch erst mal gut aus. Scheint BASCOM zu sein.

Wie ist der Header, also die Zeilen für zB.
$regfile =
$crystal =
$hwstack =
$swstack =
$framesize =

Was geht denn nicht bzw was soll denn noch gehen?
Ist das das komplette Programm?

Gruß
Searcher

Der bastler
15.06.2020, 17:50
Program sieht doch erst mal gut aus. Scheint BASCOM zu sein.

Wie ist der Header, also die Zeilen für zB.
$regfile =
$crystal =
$hwstack =
$swstack =
$framesize =

Was geht denn nicht bzw was soll denn noch gehen?
Ist das das komplette Programm?

Gruß
Searcher

Nein es ist ein teil eines Programmes. es geht ja auch nur um die Case einstellungen wie wann und wie viel man da so braucht......

Der bastler
18.06.2020, 12:29
Ja kann mir jemand da helfen?
liege ich mit den Case einstellungen richtig????
danke

Moppi
18.06.2020, 13:58
es geht ja auch nur um die Case einstellungen wie wann und wie viel man da so braucht......

Klingt, als ob Du nach einer Schätzung suchst, vielleicht ist das verhandelbar - ich denke nicht, es geht grundsätzlich nur um Fakten und Tatsachen.

Leider kenne ich die Programmiersprache nicht, deshalb kann ich dazu nichts sagen. Ich weiß nicht ob die Syntax stimmt oder ob die Befehle richtig angewendet werden.

Searcher wirft indirekt eine Frage auf, er vermutet dass es Bascom ist.

Vielleicht könnten wir uns einigen, dass es Bascom ist.
Dann muss jetzt jemand schauen, der sich mit Bascom auskennt, ob das alles richtig ist.

Ich für meinen Teil weiß auch nicht, was nicht funktionieren soll. Es sind keine Fehlermeldungen zu sehen.
Dazu wäre es gut, einen Programmablaufplan zu haben und hier rein zu stellen, damit man sieht, was Du vor hast und ob das Programm das von der Logik her auch tut oder ob da Fehler sind.

Da die gesamte Doku fehlt und der gesamte Quellcode, scheint das hier in Open Source Software Projekte falsch zu sein.


MfG

hasta
18.06.2020, 18:13
Also
1. ist das wirklich Bascom.
2. Glaube ich nicht, das da schon irgentwas geht. Die Syntax ist völlig falsch. Was willst Du mit den Subs. Normale Unterprogramme werden mit
Gosub Label aufgerufen, Subs werden mit Call Sub() aufgerufen.
UP, die mit Gosub verlassen werden enden mit Return
3. Zu Bascomfragen solltest Du nach Bascomforum.de gehen aber sinnvollerweise erstmal in ein Buch gucken Z.B. "Stefan Hoffmann- Einfacher Einstieg in die Elektronik mit AVR-Mikrocontroller und Bascom"
4. Irgentwelche Programmschnipsel animieren niemanden sich mit "Deinem" Problem zu befassen. Und fehlende Basics, die ja mangels Programmcode keiner sieht, sind gerade bei Einsteigern die häufigsten Ursachen warum etwas nicht läuft.

Harald

Searcher
18.06.2020, 19:19
Ja kann mir jemand da helfen?
Wenn man wüßte, wo genau Dein Problem liegt ... Im BASCOM Simulator läuft das Programm. Bei welchen DIP Schalter Einstellungen soll denn welches Unterprogramm angesprungen werden?


liege ich mit den Case einstellungen richtig????
Wie gesagt, es würde funktionieren so wie es dort steht. Ob die Einstellungen richtig sind, kannst doch nur Du entscheiden.

Gruß
Searcher


PS Es gibt hier im Roboternetz auch ein Unterforum für BASCOM

Robzilla
18.09.2020, 15:17
Ich stehe gerade vor einem ähnlichen Problem. Gibt es schon eine Lösung Der Bastler?

Der bastler
19.09.2020, 17:10
Ich stehe gerade vor einem ähnlichen Problem. Gibt es schon eine Lösung Der Bastler?

Ja Moin Robzilla

Ich habe es Ausprobiert mit einen ATtin2313 und 4 eingänge
PORTD0 bis 3 als eingang genommen
PORTB0 Bis 7 Led als ausgänge genommen

Hier ein ausschnitt von mein programm


im Kodierschalter As Byte
Dim B As Byte

Declare Sub Prog_0
Declare Sub Prog_1
Declare Sub Prog_2
Declare Sub Prog_3
Declare Sub Prog_4
Declare Sub Prog_5
Declare Sub Prog_6
Declare Sub Prog_7
Declare Sub Prog_8
Declare Sub Prog_9
Declare Sub Prog_10
Declare Sub Prog_11
Declare Sub Prog_12
Declare Sub Prog_13
Declare Sub Prog_14
Declare Sub Fehler


Do
Kodierschalter = Pind And &B0000_1111
Select Case Kodierschalter
Case 0 : Gosub Prog_0 'LEER
Case 1 : Gosub Prog_1 'LEER
Case 2 : Gosub Prog_2 'LEER
Case 3 : Gosub Prog_3 'PORTD.0 und PORTD.1 = LICHT
Case 4 : Gosub Prog_4 'LEER
Case 5 : Gosub Prog_5 'LEER
Case 6 : Gosub Prog_6 'PORTD.0 und PORTD.3 = LED TEST
Case 7 : Gosub Prog_7 'PORTD.3 = FEIL LINKS
Case 8 : Gosub Prog_8 'LEER
Case 9 : Gosub Prog_9 'LEER
Case 10 : Gosub Prog_10 'LEER
Case 11 : Gosub Prog_11 'PORTD.2 = FEIL RECHTS
Case 12 : Gosub Prog_12 'LEER
Case 13 : Gosub Prog_13 'PORTD.1 = KTEUTZ
Case 14 : Gosub Prog_14 'PORTD.0 = LEER LASSEN Weil Platine keine led hat
Case Else : Gosub Fehler 'Ohne Funktion
End Select
Loop


Hier werden wenn ich richtig liege, 15 Programme gebraucht und wenn du siehst welchen
Prog_xx Welcher Port liegt. wenn ich richtig erklärt habe...

Den es wird nicht nur Portd >Taster< Gnd
Sondern auch
Portd > Taster< 5V+ ausgwertet

Hier kannst du es auch noch mal lesen--->
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.

Code:

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