www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String einlesen und ausgeben (Fleury, mega64)


Autor: pauerpaul123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte mit meinem Ultraschallsenor die Entfernung messen und 
anschließend auf mein Touchscreen (DG16080) ausgeben.

Das klappte mit einem mega32 und einer anderen uart-bibliothek bereits, 
doch mit dem neuen µC bin ich auch die Fleury library umgestiegen und 
jetzt mags nichtmehr :)

Der Sensor funktioniert ganz einfach.

"Der Sensor sendet immer 9 ASCII-Bytes. Jede Sendung beginnt mit den 
ASCII Steuercodes 0x0d (LF) und 0x0a (CR). Dann folgen die 5 ASCII-Bytes 
mit den Daten und am Ende der Übertragung kommen noch einmal 0x0d (LF) 
und 0x0a (CR)."

Ein Beispiel für die Ausgabe wäre dann:

„12000“ Sensor 1 soll die Entfernung messen und ausgeben
Ausgabe 1, leer, 1, 0, 7 107cm

Also ich sende ihm den String "12000" und er liefert dann eben den Wert 
zurück. Soweit sogut. Hier mal die Sende und Empfangsfunktion:
void Supersonic(void)  //ultrasonic distance measuring
{
//Senden
  uart1_puts("12000");
  
//Empfangen & Auswerten
  received=uart1_getc();
  while (i<=9)//Solange Empfangen bis die 9 Bytes angekommen sind
  { 
      rec[i++]=received; 
      received=uart1_getc();
  }  
  
  wert=(rec[5]-'0')*10+(rec[6]-'0')+((rec[4]!=0x20)?(rec[4]-'0'):0)*100;  // Empfangene Daten in Entfernung umrechnen

  char Buffer[20],f;

  itoa(wert,Buffer,10);
  f=g_draw_string(0,60,Buffer);
  g_draw_char(f,60,' ');
    
}

Das Problem ist, dass ich bei der Ausgabe immer -5328 als Entfernung 
angezeigt bekommen.
Ich hab versucht einzelne Zeichen auszugeben, jedoch bekam ich da immer 
nur [ auf dem Display angezeigt.

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

Bewertung
0 lesenswert
nicht lesenswert
Das uart getc vom Peter FLeury ist ein nicht wartendes getc.
Wenn noch kein Zeichen an der UART empfangen wurde, dann kommt die 
Funktion trotzdem zurück und meldet pflichtbewusst: keine Daten 
vorhanden.

 received=uart1_getc();

Du musst daher im received nachsehen, ob da überhaupt ein Zeichen 
empfangen wurde.
Im Demo-Beispiel, welches Peter mit ausliefert ist das alles sehr schön 
ausgeführt, wie man den Return-Wert seiner getc Funktion auswertet.

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.