Forum: Compiler & IDEs uart senden und empfangen Problem


von Christoph G. (booty3009)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe ein Problem mit dem Senden vom Mikrocontroller auf dem PC.
Mit dem empfangen habe ich kein Problem. In meinem Programm das im 
Anhang beiliegt schicke ich zum Controller CP001011 oder CP001010. Je 
nachdem was ankommt soll die LED aus oder an gehen. Das funktioniert 
auch super. Jetzt möchte ich, wenn ich eine Taste auf dem STK500 drücke, 
das der Befehl CP001010 zurück zum Computer geschickt wird. Das 
funktioniert aber nicht so richtig. Er gibt mir bloß ein "t" auf dem 
Computer aus. Im Anhang findet ihr den Quelltext. Was muss ich noch 
verbesser damit es funktioniert?

Danke!

von Gast (Gast)


Lesenswert?


von Christoph G. (booty3009)


Lesenswert?

Ist ja schön und gut, aber ich habe schon gehört das damit auch Probleme 
geben soll.
Mein Programm funktioniert ja schon soweit, bis auf diese Sache. Ich 
bitte um Hilfe!

von Karl H. (kbuchegg)


Lesenswert?

Dieses gepostete Programm hast du nie und nimmer durch
den Compiler gebracht.

Abgesehen davon:
Warum darf uart_senden nur dann etwas wegschicken, wenn ein
Zeichen empfangen wurde?

Du brauchst als aller erstes mal eine Funktion, die 1 (!) Zeichen
korrekt verschickt. Zb die hier
1
void uart_senden_c( char c )
2
{
3
  while (!(UCSRA & (1<<UDRE)))
4
    ;
5
 
6
  UDR = c;  
7
}

Darauf aufbauend wird dann eine Routine geschrieben, die
einen kompletten String versenden kann. Zb die hier
1
void uart_senden( char* string )
2
{
3
  while( *string != '\0' ) {
4
    uart_senden_c( *string );
5
    string++;
6
  }
7
}

Aber das alles steht eigentlich auch im AVR-gcc Tutorial. Das
Tutorial gibt es, damit hier nicht immer die gleichen Fragen
auftauchen.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Senden_einzelner_Zeichen

von Christoph G. (booty3009)


Lesenswert?

Doch der Compiler hat nur eine Warnung ausgegeben:

avr-gcc.exe  -mmcu=atmega8535 -Wall -gdwarf-2 -O0 -MD -MP -MT 
senden_empfangen.o -MF dep/senden_empfangen.o.d  -c 
../senden_empfangen.c
../senden_empfangen.c: In function `uart_send':
../senden_empfangen.c:51: warning: assignment makes integer from pointer 
without a cast
Build succeeded with 1 Warnings...

Wenn ich den String vom Computer auf den Controller schicke dann geht, 
je nachdem was ich schicke, die LED an oder aus. Jetzt soll er den 
String aber wieder zum Computer zurückschicken.

Später will ich dann, das er einen gewünschten String nur nach 
Tastendruck zurückschickt.

von Karl H. (kbuchegg)


Lesenswert?

Christoph G. wrote:
> Doch der Compiler hat nur eine Warnung ausgegeben:
>
> avr-gcc.exe  -mmcu=atmega8535 -Wall -gdwarf-2 -O0 -MD -MP -MT
> senden_empfangen.o -MF dep/senden_empfangen.o.d  -c
> ../senden_empfangen.c
> ../senden_empfangen.c: In function `uart_send':
> ../senden_empfangen.c:51: warning: assignment makes integer from pointer
> without a cast
> Build succeeded with 1 Warnings...

Dann muss dein Compiler einen Stich haben, wenn er nicht
....
oh Mist, da bin ich reingefallen.
Fehler ist es trotzdem.
deine uart_senden Funktion nimmt keine Argumente an.
Trotzdem übergibts du beim Aufruf eines.

Gewöhn dir an, Funktion die keine Argumente haben, so zu
schreiben:

void foo( void )
{
  ...
}

Also mit einem 'void' in der Argumentliste.

PS: Deine Warnung ist eine Warnung die man Ernst nehmen sollte.
In vielen Fällen ist diese Warnung nämlich als Fehler zu sehen.

Was du mit deinem Problem machen sollst, hab ich ja schon weiter
oben geschrieben.

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.