Forum: Mikrocontroller und Digitale Elektronik uart_puts funktioniert nur sporadisch (zusammen mit IRMP)


von Karl (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein kleines oder auch großen Problem mit der Uart Library von 
Peter Fleury und IRMP von Frank M.

Folgenden Ablauf des Programmes war geplant:
Sobald ein IR-Signal empfangen wurde, soll dieses über Uart an den PC 
gesendet werden.
Im großen und ganzen hab ich mich an die jeweiligen Anleitungen gehalten 
und bin in der Main zum testen wie folgt vorgegangen.
1
IRMP_DATA irmp_data;
2
irmp_init();
3
timer1_init();
4
sei ();
5
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
6
uart_puts("Testprogramm\r\n");
7
8
while(1)
9
{
10
    if (irmp_get_data (&irmp_data))
11
    {
12
        uart_puts('Empfangstest');  
13
    }    
14
}

Von Prinzip her funktioniert alles. Das "Testprogramm" wird korrekt 
gesendet und kommt auch korrekt am PC an. Das "Empfangstest" wird aber 
nur sehr sporadisch beim drücken einer Fernbedienungstaste gesendet bzw. 
kommt es nur sporadisch am PC an.
Ich hab auch mal einen Breakpoint bei uart_puts gesetzt und dann mit 
einem Debugger debuggt. Ergebnis: Die uart_puts wird jedesmal beim 
drücken einer Taste auf der Fernbedienung aufgerufen. Auch die IR-Codes 
wurden richtig erkannt.
Warum er trotz korrekten Aufruf nichts sendet, ist mir schleierhaft.

Ich habe auch mal in der while versucht zyklisch über uart was zu 
senden.
1
_delay_ms(100);
2
uart_puts("Test");

Das hat auch tadellos funktioniert, sprich es kamen am PC alle 100ms ein 
"Test" an.

Da ich noch ein großer Anfänger in Sachen Mikrocontrollerprogrammierung 
bin, weiß ich mir nicht anders zu helfen als um Rat zu fragen.

Vielen Dank im Voraus
Mfg Karl

von Sebastian H. (technik_freak)


Lesenswert?

Dein Fehler liegt in deinem String, den Du versuchst zu senden:

Dein Testprogramm ist als Zeichenkette (also "") übergeben, in der While 
wird aber nur ein einzelnes Zeichen (wegen der einfachen '')übergeben.

Ändere '' in "" und es geht. BTW: in deinem Test mit dem Delay hast Du 
ja auch "" verwendet

von Karl (Gast)


Lesenswert?

In der while nutze ich auch uart_putc statt uart_puts. Es funktioniert 
leider auch mit uart_puts und "" nicht.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Karl schrieb:
> In der while nutze ich auch uart_putc statt uart_puts. Es funktioniert
> leider auch mit uart_puts und "" nicht.

Nö, oben in der while-Schleife steht auch uart_puts. Und das will einen 
String. Strings werden in C mit Geänsefüßchen und nicht mit Hochkommata 
eingeschlossen.

Du musst doch zumindest eine Warnung vom C-Compiler bekommen haben?

Bitte alle Warnungen vom Compiler ernst nehmen und beheben. Dann bist Du 
schon mal ein gehöriges Stück weiter.

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.