PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 Übertragung



elkokiller
14.08.2006, 22:18
Hallo,

ich habe zum Testen folgendes Programm geschrieben:

$crystal = 7372800

$baud = 9600


Dim A As Integer

Do
Input "Input Number: " , A
Print " Number was " ; A
Loop

End

Es läuft auf einem Mega 8.

Mein Problem:
Es werden maximal 6 Zeichen, so wie ich sie auf der Tastatur eingebe, im Terminalfenster wiedergegeben, dann ist Schluss.

Woran liegt das?

Tobias

linux_80
15.08.2006, 01:50
Hallo,

evtl. liegts daran, das in ein Integer eingelesen werden soll, und da geht nicht mehr rein.
Kann sein das Bascom das hier schon eingrenzt. :-k

Klaus W. H.
15.08.2006, 05:03
Laut Bascom - Hilfe ist integer ein 2-Byte Wert, so wie auch Word. Allerdings mit Vorzeichen. Wertebereich also -32,768 bis +32,767.
Also wird's, meiner Meinung nach, nicht an der Größe des Typs integer liegen.
Ich hatte ähnliche Probleme und hab es dann mit
If IsCharWaiting() = 1 Then
usw. hinbkommen.
Versuch doch mal


$crystal = 7372800
$baud = 9600
Dim A As Byte
Do
If IsCharWaiting() = 1 Then 'serielle Schnittstelle nur auslesen, wenn auch was drin steht
Input "Input Number: " , A
Print " Number was " ; A
end if
Loop

elkokiller
15.08.2006, 08:28
Ja, das wars!
Danke

Tobias

Omnikron
20.08.2006, 16:05
Hallo
ich habe nun ein ähnliches Problem.

Ich sende nacheinander kurze Zahlenwerte an meinen Avr. Die ersten 3 Zahlen (zb. 14 "lange Pause" 85 "lange Pause" ...) werden dabei auch einwandfrei erkannt und zurückgegeben. Ab der vierten Zahl passiert aber gar nichts mehr, als wenn mein AVR einfriert. Jetzt hilft nur noch ein Reset. Danach funktioniert das Programm wieder nur bis zur vierten Zahl.
Wo könnte denn hier der Fehler liegen?


mfg Omnikron





$crystal=16000000
$regfile="m32det.dat"
$baud=9600 'oder 38400

Dim A as Byte 'oder integer, string*10 , ...

do
if ischarwaiting()=1 then
input A
print A;
endif
loop

repi64
20.08.2006, 17:17
Du hast ja A als Byte deklariert also max. 255.
Der Input Befehl wird mit CR also Enter terminiert.
Aus deiner Beschreibung geht nicht ganz hervor ob und wann du bei deiner Eingabe ein CR schickst.
Desweiteren wird mit der Enter Taste nach dem CR(&H0d) noch ein LF(&H0A) geschickt.
Den LineFeed hast du dann bei der nächsten Input Abfrage noch vor der neuen Eingabe im Buffer hängen.

Omnikron
20.08.2006, 17:32
hi
danke für deine schnelle antwort.

normalerweise habe ich ein das "A" als String deklariert.
Ein CR habe ich nie geschickt. Ausschließlich meine Zahlen, bestehend aus zwei ziffern. Hab das jetzt mal im Programm geändert, nun scheint es zu funktionieren. Also ist CR unf LF unbedingt notwendig ja?

mfg
Omnikron

repi64
20.08.2006, 18:35
Ja, für den Input befehl schon und zwar nur CR.
Das LF kann, wie schon erwähnt, probleme machen, weil es am Anfang des nächsten Strings hängt.
Kann also nicht schaden, wenn man vor der Input Abfrage weiß, daß nichts ungewolltes schon im Inputbuffer steckt.