www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega/BASCOM: SMS über UART aus Handy auslesen?


Autor: Phillip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab die verwandten Themen hier im Forum gelesen.
Trotzdem komme ich nicht weiter:

Ich möchte mit einem Atmega über die UART aus einem Handy SMSen im 
Textmodus auslesen. Es gelingt es mir nicht, zu erkennen, ob die UART 
ein Zeichen empfangen hat, obwohl die Kommunikation mit dem Handy an 
sich funktioniert (siehe Listing Teil 1 und 2)

Bin für jeden Tip dankbar

Phillip

$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4


Dim S As String * 10

On URXC OnRxD
Enable URXC
Enable Interrupts





'  ---------------------------------------------------------------
'  ---------------- 1. Teil: Rufaufbau. funktioniert -------------
'  ---------------------------------------------------------------

'Locate 1 , 1
'Lcd "Sende ATZ"
'Print "atz"
'Waitms 200


'Locate 1 , 1
'Lcd "Sende ATDT 0172xxxxxxx"
'Print "atdt 0172xxxxxxx"
'Waitms 200


'  ---------------------------------------------------------------
'  ---------------- 2. Teil: SMS senden. funktioniert ------------
'  ---------------------------------------------------------------

'Locate 1 , 1
'Lcd "SMS senden...    "
'Waitms 2000

'Locate 1 , 1
'Lcd "Textmodus...     "
'Print "at+cmgf=1" ; Chr(13)
'Waitms 200

'Locate 1 , 1
'Lcd "Rufnummer...     "
'Print "at+cmgs=" ; Chr(34) ; "0172xxxxxxx" ; Chr(34) ; Chr(13)
'Waitms 200

'Locate 1 , 1
'Lcd "SMS-Text...      "
'Print "Hier steht der Text der SMS" ; Chr(13)
'Waitms 200
'Print Chr(26) ; Chr(13)
'Wait 10


'  ---------------------------------------------------------------
'  ---------------- 3. Teil: SMS empfangen: klappt nicht ---------
'  ---------------------------------------------------------------


Cls
Locate 1 , 1
Lcd "SMS empfangen... "
Waitms 2000


Locate 1 , 1
Lcd "Echo ein         "
Print "ate1"
Waitms 2000


Locate 1 , 1
Lcd "Textmodus ein    "
Print "at+cmgf=1"
Waitms 2000


Abfragesms:

Locate 1 , 1
Lcd "Abfrage SMS      "
Print "at+cmgl"
Waitms 5000


Goto Abfragesms


Onrxd:
Sms:
Locate 1 , 1
Lcd "SMS gefunden      "
Goto Sms
Return


End 

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lcd "SMS gefunden      " in ner Interruptroutine ist böse.
Es wird doch sicher nicht nur 1 Zeichen kommen, d.h. der Interrupt wird 
ausgelöst noch bevor er beendet ist => Chaos.
Ausserdem ist diese ISR ja ne Endlosschleife in sich.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem liest Du UDR nicht aus, solange Du das nicht machst wird die 
ISR immer wieder aufgerufen.

>> When interrupt-driven data reception is used, the receive complete
>> routine must read the received data from UDR in order to clear the
>> RXC Flag, otherwise a new interrupt will occur once the interrupt
>> routine terminates.

Autor: Phillip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für Eure Tips.
Jetzt lese ich das Byte aus der UART aus und steuere das Display 
ausserhalb der ISR an. Trotzdem bleibt der String S leer :-(

$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4

Dim S As String * 10 , I As Byte

On Urxc Onrxd:
Enable Urxc
Enable Interrupts

'  ---------------------------------------------------------------
'  ---------------- 3. Teil: SMS empfangen: klappt nicht ---------
'  ---------------------------------------------------------------

Cls
Locate 1 , 1
Lcd "SMS empfangen... "
Waitms 2000

Locate 1 , 1
Lcd "Echo ein         "
Print "ate1"
Waitms 2000

Locate 1 , 1
Lcd "Textmodus ein    "
Print "at+cmgf=1"
Waitms 2000

S = ""

Abfragesms:
Locate 1 , 1
Lcd "Abfrage SMS      "
Print "at+cmgl=0"
Waitms 5000
S = S + Chr (I)
Locate 2 , 1
Lcd ">" ; S ; "<"
Goto Abfragesms

Onrxd:
I = Udr
Return

End


Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier hast du das Problem, dass Zeichen verloren gehen, wenn die 
Übertragungsgeschwindigkeit grösser als 1 Zeichen / 5 Sekunden ist.
Du wartest 5 Sekunden und schreibst dann das letzte empfangene Zeichen 
zu S dazu. Alle Zeichen, die innerhalb dieser 5 Sekunden davor kamen, 
sind weg.

Bascom kann selbst mit einem Puffer arbeiten.
"Config Serialin" o.ä. müsste das gewesen sein.

Autor: Joachim R. (bastelbaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers doch mal mit
Config Serialin = Buffered , Size = 50
Enable Interrupts

und

If Ischarwaiting() = 1 Then
  Sms_rec_char = Waitkey()
  ' tu was damit

Damit liest der Atmel im Hintergrund interruptgesteuert die serielle ein 
und legt die Zeichen in einen Puffer den du dann mit Waitkey auslesen 
kannst. Wenn Size gross genug ist, dann klappt das mit der kompletten 
SMS. Braucht natürlich RAM, klappt aber gut.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.