Forum: Mikrocontroller und Digitale Elektronik Mehrfachantwort über UART


von P. F. (pfuhsy)


Lesenswert?

Hallo,

ich benutze das myAVR MK2 Board über USB. Über die UART-Schnittstelle 
des µC  habe ich ein GSM-Modul angeschlossen. Der Code sieht so aus, 
dass der µC einfach nur zu Testzwecken erstmal den String "Angekommen" 
sendet. Über ein Pegelwandler habe ich mich einfach an die 
Tramitter-Leitung des µC gehangen, um sehen ob was passiert. 
Komischerweise bekomme ich "Angekommen" duzende mal, also 
"AngekommenAngekommenAngekommenAngekommen...".  Jetzt ist die Frage, 
warum kommt die so oft ??? Ich denke, dass es nicht an der Software 
liegt. Wenn ich den Pegelwandler anstelle des µC an der 
Transmitter-Leitung des GSM-Modul hänge, bekomme ich seine gesendetetn 
Strings auch mehrfach, obwohl das Geräte nur einmal sendet.

Woran kann das liegen ?


1
#define F_CPU 3686400      //Taktfrquenz
2
#define BAUD 19200        //einstellte Baudrate
3
//------------------------
4
#include <avr\io.h>        //zur Deklaration der Ports
5
#include <ctype.h>        //zur Verwendung von toupper
6
#include "D:\Programmieren\Mikrocontroller\AVR\Header\uart.h"
7
#include "D:\Programmieren\Mikrocontroller\AVR\Header\interrupt.h"
8
//----------------------------------------------------------------------
9
void initPorts();
10
//----------------------------------------------------------------------
11
void initPorts() 
12
{
13
  //Ausgänge PORT B deklarien
14
  DDRB = (1<< PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6); 
15
}
16
17
ISR(USART_RXC_vect)             //UART-Receive Interrupt-Routine
18
{
19
  PORTB |= (1 << PB0);          //zu Testzwecken
20
  char data = 0;
21
  data = getChar();            //Zeichen holen
22
  data = toupper(data);          //in große Zeichen umwandeln
23
  //putChar(data);             //zu Testzwecken        
24
  putString("Angekommen");         //zu Testzwecken  
25
}
26
//----------------------------------------------------------------------
27
main()                    //Hauptschleife
28
{
29
  initPorts();
30
  initUART();
31
  initInterrupt();
32
33
  do
34
  {
35
    //putString("Hallo AVR ");
36
  }
37
  while (true);
38
}

von Peter II (Gast)


Lesenswert?

Es kann eigentlich nur einen Grund dafür geben.

ISR(USART_RXC_vect)     wird mehrfach aufgerufen, kann es sein das du RX 
und TX verbunden hast?

von Matthias L. (Gast)


Lesenswert?

>ISR(USART_RXC_vect)
>...

Natürlich. Ich interpretiere deinen Code so, dass mit jedem empfangenen 
Zeichen der String "Angekommen" versendet wird.

von P. F. (pfuhsy)


Lesenswert?

Och man... Na sicher. Er sendet, "Angekommen"  weil der GSM was gesendet 
hat. Und auf das "Angekommen" reagiert der GSM auch und sendet wieder 
irgendwas, villeicht "Error". Eine Endlosschleife.


Danke für die schnelle Hilfe.

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
Noch kein Account? Hier anmelden.