Hallo, ich habe ein Problem mit meinem Bluetoothmodul und dem UART (RX) Interrupt. Ich möchte von meinem BT Modul einzelne Zeichen empfangen und diese in einen Puffer schreiben. Leider funktioniert das nicht richtig. Hier mein Programmcode: ISR(USART_RXC_vect) { int8_t Recive_Sign,i=0; Recive_Sign=UDR; // uart_putc(Recive_Sign); // test für direkte Rückgabe //******************** speichern der Daten in Puffer********************* while (i<4) { Telegramm[i]=Telegramm[i+1]; i++; } Telegramm[4]=Recive_Sign; ......hier geht mein Code weiter der zu Testzwecken mit "UART_putc" alle Telegrammvariablen des Array ausgegeben hat. Das Verhalten sieht so aus, dass ich einen Buchstaben an den Controller sende und nach meiner Erwartung sollte der in Telegramm[4] zu finden sein. Sende ich noch eines sollte der erste Buchstabe in Telegramm[3] rutschen und in Telegramm[4] der neu empfangene stehen. Mein Verhalten ist nun so ich sende einen Buchstaben und der tauscht sofort auf allen Telegrammvariablen auf. Scheinbar wird der Interrupt mehrfach aufgerufen. Auf Grund dessen hatte ich eine einfache Zählvariabe im interrupt angelegt und diese wurde scheinbar bei einem gesendeten Zeichen auch mehrfach gezählt. Kann ich sicherstellen das der Inerrupt nur 1 mal abgearbeitet wird?
deklariere Telegramm[] als volatile int8_t Telegramm[5]; das hilft auf jeden Fall einen Schritt weiter oder ist schon die ganze Lösung. Den Rest vom Code habe ich nicht weiter angeschaut.
Hallo, schon mal danke für die Antwort. Leider brachte es noch nicht den Erfolg. Ich habe aber das System erkannt, nun hängt es nur noch an der Lösung :-). Ich habe mal einen Screenshot von meinem Handy welches als Sender der daten genutzt wird. Die blauen Zahlen sind die Signale die ich gesendet habe die grünen sind die Antworten vom Controller = der Inhalt meiner Telegramm Variable. Ich habe eine 1 gesendet und diese bekomme ich auch in meinem Antworttelegramm zuerst (Telegramm[4]- Variable) zurück. Als zweites habe ich eine 2 gesendet. Die 1 rutscht eine Stelle weiter (Telegramm[3]) und die 2 kommt in Telegramm[4]. Aber wie mann sieht bekomme ich nun als letzte 3 Werte immer 2 und 1 im wechsel. Normalerweise sollten da noch die 5 und 1 aus dem oberen Pufferinhalt stehen. Dieses Verhalten ist immer gleich. Bei jedem 2 Durchlauf überschriebt er mir den Inhalt des Puffer an den letzten 3 Stellen (Telegramm[2..0]).
Woher weisst Du dass Dein Terminal nicht auch noch ein \r\n als Zeilenende anhängt?
Hallo, das wars! Das Terminal hat den Zeillenumbruch mit ausgegeben. In den Setting vom Terminal konnte man es einstellen. Ohne den funktioniert es. Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.