RS232 Übertragung

Thema: RS232 Übertragung

  1. elkokiller:

    RS232 Übertragung

    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
     
  2. linux_80:
    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.
     
  3. Klaus W. H.:
    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
    Code: [Ansicht]
    $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
     
  4. elkokiller:
    Ja, das wars!
    Danke

    Tobias
     
  5. Omnikron:
    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



    Code: [Ansicht]
    $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
     
  6. repi64:
    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.
    Gruß RePi!


    *** Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht. ***
    *** (Albert Einstein) ***
     
  7. Omnikron:
    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
     
  8. repi64:
    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.
    Gruß RePi!


    *** Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht. ***
    *** (Albert Einstein) ***