mikrocontroller.net

Forum: Compiler & IDEs uart senden und empfangen Problem


Autor: Christoph G. (booty3009)
Datum:
Angehängte Dateien:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://homepage.hispeed.ch/peterfleury/avr-softwar...

Warum immer alles neu erfinden...

Autor: Christoph G. (booty3009)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
void uart_senden_c( char c )
{
  while (!(UCSRA & (1<<UDRE)))
    ;
 
  UDR = c;  
}

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

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-Tu...

Autor: Christoph G. (booty3009)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.