Forum: Mikrocontroller und Digitale Elektronik UART Hilfe bitte


von Peter (Gast)


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.

von TOM (Gast)


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

von Peter (Gast)


Angehängte Dateien:

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.

von Peter (Gast)


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

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.