PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichen empfangen



king-sixXx
25.05.2005, 07:04
Moin Moin!

Mein kleines Proggi funktioniert immer noch nicht so richtig:


$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600


Dim Zeichen As Byte
Zeichen = 0

Do

Zeichen = Inkey()
If Zeichen > 0 Then Print "Habe Zeichen " & Zeichen & " empfangen!"

Loop
End


Auf http://www.mikrocontroller.net/tutorial/uart hab ich etwas zu dem Thema gefunden:

beim ATmega8 gibt es für UBRR zwei Register: UBRRL (Low-Byte) und UBRRH (High-Byte). Im Normalfall steht im UBRRH 0, da der berechnete Wert kleiner als 256 ist und somit in UBRRL alleine passt.

Fehlt diese Anweisung in meinen Programm noch, oder hat das damit überhaupt nichts zu tun?
Bisher mach oben genanntes Programm folgendes: wennn ich mit dem Terminal Emulator vom Bascom auf "Send ASCII character" klicke und dann eine beliebige Zahl eintippe, wird diese gesendet und kurz darauf auch was empfangen (hab da so eine kleine Ststus LED)...
Leider wird dann im Terminal nix angezeigt!

Wo liegt der Fehler? ](*,)

PicNick
25.05.2005, 08:38
Print "Habe Zeichen " & Zeichen & " empfangen!"

Das ergibt mal nicht das, was du wahrscheinlich möchtest, sondern ganz einfach den String
Habe Zeichen " & Zeichen & " empfangen!
Daß er das syntaktisch überhaupt akzeptiert, ist erstaunlich

Mehrere Werte mit print:
PRINT "text";variable;"noch'n Text"

Mit $baud= und $crystal= hast du alles Notwendige definiert, das muß aber auch stimmen.
Mach erst mal einen einfachen Test dann siehst du, ob sich das Terminal überhaupt mit dem Controller veträgt


$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

Print "Hello, World!"

End

Wenn das nicht klappt, brauchst erst garnicht mehr ins Programm reinzuschreiben




[/fade]

Andree-HB
25.05.2005, 09:00
War fast Alles richtig, so geht es auf jeden Fall :



Dim Zeichen As Byte
Zeichen = 0

Do
Zeichen = Inkey()
If Zeichen > 0 Then Print "Habe Zeichen " ; Chr(zeichen) ; " empfangen!"
Loop
End

king-sixXx
25.05.2005, 09:39
Den Syntax hatte ich aus Visual Basic übernommen :-)... Der alleinige print Befehl funktioniert einwandfrei!
Ich probier nachher gleich mal die korrigierte Version!

king-sixXx
25.05.2005, 14:34
Es passiert leider gar nichts! Das Terminal Fenster bleibt leer ....
Muss ich sonst noch Einstellungen vornehmen?

PicNick
25.05.2005, 15:37
Eventuell "Handshake" nicht richtig im Terminal ?

soll sein "none"

king-sixXx
25.05.2005, 16:24
Handshake steht auf "none"
Was muss ich bei Emulation und RTS einstellen?
Zur Zeit steht bei Emulation "TTY" und RTS ist nicht aktiviert.

PicNick
25.05.2005, 18:45
TTY sollt' reichen.
Also
Du kannst ZUM pc schicken und siehst das richtig ?
Test, ob das terminal überhaupt was wegschickt:
Das Verbindungskabel controllerseitig abstecken. Wenn du nun das Kabel ende nimmst und von vorn auf den Stecker schaust, breitere Seite oben, hast du oben 5 und unten 4 Stift-löcher.
Mit einem stück blanken Draht verbindest du von den 5-en (breit) den zweiten und dritten von rechts (Rx u.Tx)
Wenn du nun auf dem Terminal schreibst, kriegst du deine eigenen Zeichen als Echo zurück.
Ist das nicht so, hat's was mit PC / Kabel, Controller kann nix dafür
Das geht--> steck das Kontrollerkabel wieder dran, aber vom Board ab.
verbinde hier Rx u. Tx (sollte beschriftet sein)
Geht nicht ---> das kurze Kabel hat was
Geht schon--> es wird kniffliger ohne Oszi --> rühr dich wieder

king-sixXx
25.05.2005, 21:50
Hallöchen!
Ich hab das mal ausgetestet. Wenn ich RX und TX mit einem Kabel überbrücke wird das Echo gleich zurückgeschickt und im Terminal angzeigt. Nach dem MAX funktioniert das mit dem Kabel überbrücken nicht mehr. Es wird nichts im Terminal angezeigt. Also kann ich doch davon ausgehen, dass der MAX was abbekommen hat? Werde es mal mit einem neuen versuchen.
Vielen Dank für deinen Tipp der is goldwert :-)

PicNick
26.05.2005, 07:47
Na ja, die Rx Tx Leitungen zwischen MAX und Controller kann man so nicht einfach überbrücken, da müßtest du den Controller rausnehmen.
Aber da Bascom dein (richtiges) Programm normalerweise büffelmäßig durchzieht, MUSS es was mit der Hardware
Controller-RX Pin ----> out MAX in ---> PC haben. Sooo kompliziert ist das Zeugs nun nicht. Und Baudrate etc. stimmt ja , da der Controller senden kann.

king-sixXx
26.05.2005, 16:38
Neue Schaltung neues Glück :-)
Jetzt supckt der Terminal auch was aus:
(Hier ein Auszug aus der Log-File)

Habe Zeichen A empfangen!
Habe Zeichen ↨ empfangen!
Habe Zeichen B empfangen!
Habe Zeichen ↨ empfangen!
Habe Zeichen X empfangen!
Habe Zeichen ↨ empfangen!

Sieht soweit ganz gut aus, aber warum schreibt er direkt nach der Ausgabe noch eine Zeile mit so einem komischen ☼???

PicNick
26.05.2005, 18:40
Tja, irgendwas binäres
Mach folgendes
if Zeichen >= 32 then print "habe" ; chr(zeichen);"empfangen"
else print "habe" ; str(zeichen);"empfangen"
end if
dann sehen wir weiter . Poste auf jeden Fall auch den aktuellen code

king-sixXx
26.05.2005, 18:54
Nein daran liegt es nicht. Ich hab nur ASCII Zeichen >32 verwendet. Die zweite Zeile kommt automatsich!

z.B. ich tippe 65 ein und darauf kommt:

Habe Zeichen A empfangen!
Habe Zeichen ↨ empfangen!

Mein Code sieht aus wie folgt:


$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

Dim Zeichen As Byte
Zeichen = 0

Do
Zeichen = Inkey()
If Zeichen > 0 Then Print "Habe Zeichen " ; Chr(zeichen) ; " empfangen!"

Loop
End