Hi Ich weiß einfach nicht was ich noch machen soll. Ich versuche ein Programm in Bascom zu schreiben, wenn ich an den Microcontroller ATMEGA32 von einen Terminal Programm (HTerm) An sende dann soll eine LED, die an PORTD.6 ist aufleuchten und bei Aus ausgehen. Hier ist mal der Code: $regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 $hwstack = 32 $swstack = 10 $framesize = 40 Config Serialin = Buffered , Size = 20 Dim Na As String * 10 Print "Start" Enable Interrupts Main: Do If Ischarwaiting() = 1 Then Input Na If Na = "An" Then Portd.6 = 1 End If If Na = "Aus" Then Portd.6 = 0 End If End If Wait 1 Loop Es passiert absolut nichts mit der LED. Nur der PC empfängt, das was ich gesendet habe. Wär nett, wenn ihr mir helfen könntet.
> If Ischarwaiting() = 1 Then
Das heisst doch, die If-Bedingung ist "wahr", wenn EIN Zeichen da ist.
--> Kann also nicht "An" (=2 Zeichen) oder "Aus" (=3 Zeichen) sein.
Versuch das mal z. B. mit
If Ischarwaiting() = 1 Then
Input Na
If Na = "A" Then
Portd.6 = 1
End If
If Na = "X" Then
Portd.6 = 0
End If
End If
Hmm funktioniert leider immer noch net, aber kann ISCHARWAITING() nicht nur 1 und 0 annehmen, weil in der Bascom Referenz steht: If there is no character waiting, a zero will be returned. If there is a character waiting, a one (1) will be returned. The character is not retrieved or altered by the function.
1/ Ich sehe im Moment nicht, dass du die Datenrichtung des Portd.6 Pins auf Ausgabe gestellt hast (DDR). Direkt nach dem Reset ist die Datenrichtung Eingang! Daher gehört für mich z.B. vor das DO die Zeile DDRD6 = 1 Eine Skizze wie die LED angeschlossen ist, wäre auch nicht schlecht, da es heir auch Fehler geben kann. Oder kannst du das ausschliessen? 2/ In der Doku von Bascom sehe ich nicht, wie die Eingabe von INPUT abgeschlossen werden muss. Ich denke die Eingabe ist mit \r\n oder \r abzuschliessen, d.h. du musst im Terminalprogramm eine Zeile eingeben, die dann ohne das Zeilenendezeichen in der Variablen na landet. http://avrhelp.mcselec.com/index.html?input.htm Wenn du nur einen Buchstaben haben willst, kannst du mit INKEY() arbeiten http://avrhelp.mcselec.com/index.html?inkey.htm 3/ Du kannst dem INPUT einen weiteren Parameter mitgeben, der dir auf dem Terminalprogramm anzeigt, ob du im Eingabemodus bist. Das ist fürs Debuggen ziemlich hilfreich. If Ischarwaiting() = 1 Then Input "Eingabe -> ", Na Print "Eingabe = ["; na; "]" If Na = "An" Then Portd.6 = 1 End If If Na = "Aus" Then Portd.6 = 0 End If End If
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.