Forum: Mikrocontroller und Digitale Elektronik Interrupt UART mit Bluetooth wir zu oft ausgelößt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas M. (burns)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

von Thomas Beck (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Andreas M. (burns)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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]).

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Woher weisst Du dass Dein Terminal nicht auch noch ein \r\n als 
Zeilenende anhängt?

von Andreas M. (burns)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das wars!
Das Terminal hat den Zeillenumbruch mit ausgegeben.
In den Setting vom Terminal konnte man es einstellen. Ohne den 
funktioniert es. Danke

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]
  • [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.