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
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.
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.
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 :-(
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.
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.