Forum: Mikrocontroller und Digitale Elektronik UART Problem


von Steven B. (steven1992)


Lesenswert?

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.

von tastendrücker (Gast)


Lesenswert?

>   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

von Steven B. (steven1992)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.