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.....
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
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.