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
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.
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
Hallo,
nein, kommt weder am Anfang noch am Ende ein einheitliches Zeichen.
Trotzdem Danke für den Tipp
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.
Bist Du schon weiter gekommen ?
Ich habe das gleiche Problem zu lösen.
Danke
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! \/
Lesezeichen