-
3 ports binär auslesen?
Hi leute, ich hab nen drehschalter hier an meinem AVR , er liefert mir ein 3 bit signal...
Das auslesen selber erscheint mir nicht so schwierig, nur die schreibform stört mich..kann man das irgendwie verkürzen, hab echt mit der suche nix gefunden...
Code:
If Pinb.2 = 0 And Pinb.1 = 0 And Pinb.0 = 0 Then
D = 4
End If
If Pinb.2 = 1 And Pinb.1 = 0 And Pinb.0 = 0 Then
D = 6
End If
If Pinb.2 = 0 And Pinb.1 = 1 And Pinb.0 = 0 Then
D = 8
End If
If Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 0 Then
D = 10
End If
If Pinb.2 = 0 And Pinb.1 = 0 And Pinb.0 = 1 Then
D = 12
End If
If Pinb.2 = 1 And Pinb.1 = 0 And Pinb.0 = 1 Then
D = 14
End If
If Pinb.2 = 0 And Pinb.1 = 1 And Pinb.0 = 1 Then
D = 16
End If
If Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 1 Then
D = 18
End If
Das problem ist aber dass der rest von portb als ausgang deklariert ist, also kann ich auch nicht einfach den ganzen port irgendwie in ein byte schreiben oder so..
Vll. könnt ihr mir ja helfen..
Gruss Stefan
-
So:
.......................................
Result = 0
Result.0 = Dip_1
Result.1 = Dip_2
Result.2 = Dip_3
Select Case Result
Case 0 : S = 5
Case 1 : S = 10
Case 2 : S = 15
Case 3 : S = 20
Case 4 : S = 25
Case 5 : S = 30
Case 6 : S = 40
Case 7 : S = 50
End Select
..........................................
Gento
-
Gensauso. Wenn die Input-Pins aber so liegen, wie du es beschreibst, kannst du auch
Result = PINB AND 7 ' gibt dann die Zahl 0-7
....usw.
-
Hi Gento...
Das sieht ja mal nicht schlecht, aus, aber das überprüft doch dann nur ob das ergebnis 0 ist...?
PicNick, das hier versteh ich nicht ganz.
Result = PINB AND 7 ' gibt dann die Zahl 0-7
heisst dass die letzten 3 ports werden sozusagen in "Results gespeichert" und ich kann abfragen zb. mit case 7 oder so?
Gruss Stefan
-
Na ja, die hast als Input dir Pins 0, 1 u.2 von PINB, die anderen sind Output.
durch das AND fallen die Output-Pins weg und es bleiben in "result" nur die 3 Input-Bits übrig.
Und diese Bit ergeben eine Zahl von 0 bis 7, die du eben mit select case abfragen kannst.
-
Jo, genau so dachte ich das...es reicht ja dann results als byte zu deklarieren, oder?
Supi.... :)
Gruss Stefan
-
Ja, logo. das spart code.
aufpassen mit der abfrage. Dein Beispiel wäre dann so:
n.....results........ aktion
0 = 00000000 D = 4
2 = 00000010 D = 8
4 = 00000100 D = 6
6 = 00000110 D = 10
1 = 00000001 D = 12
5 = 00000101 D = 14
3 = 00000011 D = 16
7 = 00000111 D = 18
-
Na suuuper, klappt prima, vielen dank :)
Code:
Result = Pinb And 7
Select Case Result
Case 0 : D = 4
Case 1 : D = 12
Case 2 : D = 8
Case 3 : D = 16
Case 4 : D = 6
Case 5 : D = 14
Case 6 : D = 10
Case 7 : D = 18
End Select
Gruss Stefan
-
Dem Inschenöör is nix zu schwöör :-)
-
Falls es euch interessiert wofür ich das brauche...
Ich hab 2 mini servo module vom rn shop...
Jetzt kann ich insgesamt 16servos ansteuern und hab 2 Modi für den drehbereich, einmal fest 180° und einmal einstellbar mit dem Dip Drehschalter von 20-160°ca.
Gruss Stefan