-         

Ergebnis 1 bis 4 von 4

Thema: Com Problem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.08.2004
    Beiträge
    169

    Com Problem

    Anzeige

    Hallo,
    Ich hab mir mit Bascom 'nen Code zum senden vom AVR an den PC geschrieben und das funktioniert auch! Sieh im übrigen so aus:
    Code:
    $regfile = "4433def.dat"
    $crystal = 4000000
    $baud = 9600
    Do 
          Print "Hello, world!";
    Waitms 300
    Loop
    End
    In meinem Code der etwas vom PC empfängt steckt aber irgendwo der Wurm zumindest empfängt der PC keine Antwort.
    Code:
    $regfile = "4433def.dat"
    $crystal = 4000000
    $baud = 9600
    Dim i As Byte
    
    Do
      If USR.RXC = 1 Then  
        i = UDR          
        Select Case i
        Case "H"
          Print "HALLO"
        Case "h"
          Print "hallo"
        Case Else
          Print "Error!"
        End Select
      End If
    Loop
    End
    Was mache ich falsch?
    Is glaub ich nur was kleines.

    Danke schonmal
    ---

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    USR.RXC = 1 ... kann man so machen,
    ich würd aber eher auf Interrupt dann gehen
    also

    on urxc Empfangsroutine
    enable urxc
    enable interrupts

    do

    loop
    end

    Empfangsroutine:
    i = UDR
    Select Case i
    Case 104:
    Print "HALLO"
    Case 72:
    Print "hallo"
    Case Else
    Print "Error!"
    End Select
    return
    end


    das mit den "h" und "H" möcht mir auch nicht recht gefallen, weil dein I nämlich ein Byte ist und "h" ein String von der länge eines Bytes. Ich glaub das mag Bascom so nicht haben ... versucht mal mit den ASCII-Codes

    h = 104
    H = 72
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.08.2004
    Beiträge
    169
    Hm irgendwie will die ganze Sach noch nicht so ganz
    Im Wiki hab ich folgenden Code gefunden:
    Code:
    Dim Outpt(24) As Byte At Anywhere Overlay
    Dim Outpnt As Byte
    
    Dim Stuff As Byte    ' das Zeichen, daß ein stuffing Byte da war
    Dim Messg As Byte    ' das Zeichen, daß eine Message gestartet wurde
    
    receive_one_char:
      if ischarwaiting() = 1 then 
             Temp = Inkey()
             If Stuff = 0 And Temp = "A" Then
                   Stuff = 1
             Else
                   If Stuff = 1 And Temp <> "A" Then
                      Stuff = 0               ' Message starten 
                      Messg = 1
                      Outpnt = 1
    
                      Outpt(outpnt) = Temp    ' Erstes Zeichen speichern
                      Incr Outpnt
    
                   Else
                      If Messg = 1 Then
    
                         Outpt(outpnt) = Temp   ' weiter Zeichen 
                         Incr Outpnt            ' speichern 
    
                      End If
                   End If
                   Stuff = 0
             End If
      End if
    Leider versteh ich ihn nicht so ganz, naja eigentlich versteh ich NULL .



    Gibt es auch eine Möglichkeit einen kompletten String auszulesen?

    danke schonmal
    ---

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    hmmm ... ganze Strings .... ja klar, über INPUT

    aber ... die Kiste hängt dann in der Programmzeile fest
    bis die Eingabe auch wirklich beendet ist.
    Das ist nicht gerade eleganter PRogrammierstil, aber es funktioniert.
    eleganter gehts über den sog. Ringspeicher und Interrupts.

    dim empfangstring as string * 20 ' für z.B. 20 Zeichen zu empfangen
    dim empfangbytes(20) as byte at empfangstring overlay
    dim zaehler as byte
    zaehler=1
    dim flag as byte
    flag=0

    on urxc zeichenempfang:
    enable urxc
    enable interrupts

    do ' Hauptprogrammschleife
    if flag=1 then
    ' Hier kommt dann die Stringverarbeitung rein.
    endif
    loop

    zeichenempfang:
    empfangbytes(zaehler)=udr
    if empfangbytes(zaehler) = 13 then ' Bei Enter Taste Verarbeitung starten
    flag=1
    endif
    incr zaehler
    return
    end


    Diese Methode hat den Vorteil, das ausserhalb des Zeichenempfangs der Controller noch andere Geschichten machen kann und Programmspeicher wird auch geschont damit.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •