-
        

Ergebnis 1 bis 6 von 6

Thema: Probleme mit der serielle Kommunikation

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.12.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    136

    Probleme mit der serielle Kommunikation

    Anzeige

    Hallo,

    ich habe vor mit meinem Mega32 ein GSM Modem per RS232 anzusteuern. Die Verbindung funktioniert soweit auch, das Problem liegt viel mehr an meinen schlechten Kenntnissen was Programmierung und Bascom angeht.
    Vom Atmel zum Modem ist kein Problem, einfach print. Funktioniert auch alles. Nur die andere Richtung beschäftigt mich jetzt schon seit einer Woche mit kleinen Erfolgen, allerdings läuft es noch nicht so wie ich es mir vorstelle.

    Schicke ich mit print einen AT-Befehl ans Modem, so antwortet dieses darauf. Als Variable für die Antwort kommt eigentlich nur ein String in Frage dessen Länge variiert. Je nachdem welchen Befehl das Modem erhalten hat. Allerdings weiss ich auch nicht wie lange das Modem für die Verarbeitung des Befehls braucht und somit müsste der Atmel auf den Befehl warten, also immer empfangsbereit sein.

    Ich bin mir nicht sicher, aber glaube mit dem urxc Interrupt arbeiten zu müssen. Nur wie sieht der Code innerhalb der ISR aus? Muss ich dort dann mit dem Input Befehl arbeiten?

    Über eine Beispiel ISR wäre ich sehr dankbar

    Gruss

    Florian.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo,
    da kommt nicht am Ende immer das gleiche Zeichen vom Modem als Abschluss der Übertragung, oder?
    Dann könntest du einen Interrupt auslösen lassen, wenn dieses Zeichen im Input Buffer ist.

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.12.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    136
    Hallo,

    nein, kommt weder am Anfang noch am Ende ein einheitliches Zeichen.

    Trotzdem Danke für den Tipp

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.12.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    136
    Vielleicht habe ich mich einfach nur undeutlich ausgedrückt. Wie wird es in Bascom denn normalerweise umgesetzt wenn man auf Zeichen von der seriellen Schnittstelle wartet um dieses anschließend auf einem LCD auszugeben?

    Gruss Florian.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2011
    Beiträge
    29
    Bist Du schon weiter gekommen ?
    Ich habe das gleiche Problem zu lösen.

    Danke

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    In knapp 4 Jahren sollte ihm eine Lösung eingefallen sein.

    Ich nutze gern die ischarwaiting() Methode. Funktioniert bisher immer zuverlässig. Siehe meine Antwort in dem Thread . Statt auf 37 wird normal auf 13 geprüft. Die 37 ist nur Topic Spezifisch. Ich ignoriere normal auch die 10.


    Hier ein Kurzbeispiel:
    Code:
    $regfile = "m32def.dat"                                     ' specify the used micro
    $crystal = 8000000                                          ' used crystal frequency
    $baud = 19200
    
    
    $hwstack = 42                                               ' default use 32 for the hardware stack
    $swstack = 40                                               ' default use 10 for the SW stack
    $framesize = 40                                             ' default use 40 for the frame space
    Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 6 , Mode = 8
    Enable Interrupts
    
    
    Dim Sbuffer As String * 30                                  '
    Dim Seingang As String * 30
    Dim B As Byte
    
    
    Do
    
       If Ischarwaiting() = 1 Then
            Gosub Empfangen
       End If
    
    Loop
    
    End
    
    Empfangen:
    
       B = Inkey()
       If B >= 13 Then
             If B = 13 Then
                Seingang = Sbuffer
                Sbuffer = ""
                Gosub Auswerten
             Else
                If Len(sbuffer) < 30 Then
                   Sbuffer = Sbuffer + Chr(b)
                Else
                   Sbuffer = ""
                  ' Print "...Fehler..."
                End If
             End If
       End If
    
    Return
    
    Auswerten:
       Locate 1 , 1
       Lcd Seingang
    
    
    Return
    Geändert von peterfido (30.11.2011 um 19:03 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

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