www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Hilfe bitte


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag !

Ich programmiere in C und bekomme da eine Sache nicht hin und zwar würde 
ich gerne vom PC zum µC Atmega8 ein Befehl schicken der in etwa so 
aussieht:
200:1 oder 200:0.. Wie muss ich das zum Uart schicken und wie kann ich 
das in C splitten ?

Ich benutze die UART Library von P Fleury.

Dort wird die Funktion uart_getc benutzt,um die Daten vom UART 
Ringbuffer zu bekommen, welche vom Typ unsigned int ist.

Wie kann ich das jetzt splitten, das in einer Variable die linke und in 
der anderen Variable die rechte Seite des Befehls steht ?

Komm da nicht weiter, hatt zuvor nie solche Split Funktionen benutzt.

Bedank mich schonmal !

Peter.

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

ich kenne die UARD Lib zwar nicht jedoch funktioniert die immer auf die 
gleiche weisse.

Du schickst mit dem PC 200:1 --> dies wird in einzelne Zeichen zerlegt
2(0x32) 0(0x30)  0 (0x30) :(0x3A)  1(0x31).

Ich habe die UARD per Interrupt überwacht, sobald ein Zeichen empfangen 
wurde musst du dieses sofort in ein Array speichern, das ganze machst Du 
5 Mal dann stehen die Zeichen im Array und Du kannst diese auswerten was 
immer Du willst.
Wartest Du zulange mit dem auslesen UDRx kann das Zeichen durch das 
nächste überschrieben werden.

TOM

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tom !

Wie kann ich denn diese Daten in ein Array packen ?

Meine Vermutung:

int buffer[5]

buffer[1].......
buffer[2].....

wie kann ich dieses Array nach dem ":" splitten ? Einige Ansätze wären 
nett.

Ich habe mal ein Testfile von der UART Lib in den Anhang gepackt,würde 
eventuell etwas hilfreich sein.

Danke !

Peter.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mir das so mal vorgestellt:

int i;
int buffer[5];
while(1)
{
.......
.........
c = uart_getc();
if (i<=5)
{
i=i+1;
buffer[1] = c;
uart_puts_P("give");
}
else
{
uart_puts_P("stop");
 // Hier splitten...
i = 0;
}

Man schickt dem UART die Daten einzelt rüber, und man "darf" solange 
Daten schicken bis das i kleiner oder gleich 5 ist, d.h. UART sagt dem 
PC "give" und dann überprüfe ich ob "give" beim PC ankommt, wenn das der 
Fall ist dann kann man weitere Daten (mein Terminalprogramm) schicken. 
Wenn beim µC i größer  als 5 ist, dann sendet UART dem PC "stop" und der 
PC schickt keine Daten, damit da nix überschrieben wird, und die Daten 
werden gesplitted, i = 0 und weiter gehts....

Ist das so gut ?

Danke

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.