Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleiner Fehler im Prog, aber wo?
Hallo Leute,
kann mir jemand sagen was an dier Schreibweise nich richtig ist?
PortC ist bei mir als Output und PortAC als Input konfiguriert.
Do
If Porta = &B00000000 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Porta = &B00000001 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
End If
If Porta = &B00000010 Then
Portc.0 = 0
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Porta = &B00000011 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
Loop
Ich vermute, dass hiermit "Porta = &B00000011" etwas nicht stimmt.
Was meint ihr?
Danke schon mal im voraus.
Was daran falsch ist, ist ziemlich schwierig zu sagen, wenn man nicht weiss, was das Programm machen soll.
Kompilieren lässt es sich in Bascom problemlos.
Du muss dem Compiler vorher allerdings entweder über die Menüs oder durch einfügen der Zeile $regfile = "xxxxx.dat" mitteilen, für welchen Controller das Programm sein soll.
Wenn du das nicht machst, bekommst du massenhaft "Ivalid Datatype" Fehlermeldungen.
Ich glaube wenn man nichts anderes angibt, geht Bascom immer von einem AT90S2313 aus und der hat nicht alle Ports und Pins die dein Programm verwendet.
Sorry mein Fehler,
hab gedacht es ist nur ein Syntaxfehler oder etwas ähnlich einfaches.
also hier nochmal der gesmmte Code:
Rem Portc.0 = 1 --> Motor links vor
Rem Portc.1 = 1 --> Motor links rück
Rem Portc.2 = 1 --> Motor rechts vor
Rem Portc.3 = 1 --> Motor rechts rück
Rem Sensor links --> Porta.0 (sw =1)
Rem Sensor rechts --> Porta.1 (sw =1)
$regfile = "m32def.dat"
$crystal = 4000000
$baud = 9600
Config Portc = Output
Config Porta = Input
Do
If Porta = &B00000000 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Pina = &B00000001 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
End If
If Pina = &B00000010 Then
Portc.0 = 0
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Pina = &B00000011 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
Loop
Also dass Programm soll einfach zwei Sensoren auswerten und und die Motorschaltung damit füttern. Einfach damit mein Bot ner schwarzen Linie nachfahren kann.
Hoffe es ist jetzt etwas verständlicher geworden.
Hi, Kollege !
Weiche allen syntaktischen Feinheiten einfach mal aus und schreib (von oben nach unten)
if Pina = 0
if Pina = 1
if Pina = 2
if Pina = 3
Gleich nach dem "do" solltest du auch lieber "PINA" statt "porta" schreiben.
sonst seh ich aber nix falsches
EDIT du fragst die Pins digital ab. Oder sind das analog-eingänge vom CNY70 oder sowas ?
(das ging dann anders)
So, Danke mal für die Antwort.
Jetzt schaut mein Code so aus:
Rem Portc.0 = 1 --> Motor links vor
Rem Portc.1 = 1 --> Motor links rück
Rem Portc.2 = 1 --> Motor rechts vor
Rem Portc.3 = 1 --> Motor rechts rück
Rem Sensor links --> Porta.0 (sw =1)
Rem Sensor rechts --> Porta.1 (sw =1)
$regfile = "m32def.dat"
$crystal = 4000000
$baud = 9600
Config Portc = Output
Config Porta = Input
Do
If Pina = 0 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Pina = 1 Then
Portc.0 = 0
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Pina = 2 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
End If
If Pina = 3 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
Loop
Aber fahren tut er trotzdem nicht.
Wenn ich die Pins aber einzeln abfrage, also so:
Do
If Pina.0 = 0 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Pina.0 = 1 Then
Portc.0 = 0
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
If Pina.1 = 2 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
End If
If Pina.1 = 3 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
End If
Loop
Dann gehts. Nur kann ich dann logischerweise den Portc nicht in Abhängigkeit von zwei Pins vom PortA ansteuern.
Verstehst du?
Nur kann ich dann logischerweise den Portc nicht in Abhängigkeit von zwei Pins vom PortA ansteuern.
Doch:
If pina.0=0 AND pina.1=0 then
'mach was
end if
Gruß
Christopher
Aaaach, logo, alles klar !
Wenn du mit = abfragst, vergleichst du natürlich ALLE pins ab, auch die, wo nix draufhängt
Mach einen Zwischenschritt
DIM Ctl as byte
Ctl = 0
DO
Ctl.0 = Pina.0
Ctl.1 = Pina.1
if Ctl = 0 then ...
if Ctl = 1 then ...
if Ctl = 2 then ...
if Ctl = 3 then ...
Geht auch anders, egal.
Jawohl, es funktioniert.
Danke vielmals.
Aber kann mir vielleicht jemand trotzdem erklären, warum es in der Binären schreibweis nicht gefuntzt hat?
Alles klar, PicNick war schneller.
THX.
Mit binär hat's nix zu tun , es geht darum, ob du einzelne Bits abfragst oder das ganze Byte. Man müßte die zwei fraglichen Bits maskieren und dann ginge es auch. Ich hab aber gehört, daß sich dabei schon mal einer die Finger gebrochen hat.
EDIT: um was zu lernen, kannst du ruhig das Ctl-byte auch binär abfragen
Ok, vielen Dank an alle für die raschen Antworten.
Bis zum nächsten mal:-)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.