Hallo Gemeinde,
ich möchte einen AVR mit meinem Linux-PC per RS232 kommunizieren lassen.
Mit ASCII-Daten hat das auch halbwegs funktioniert, ich möchte aber
Messwerte direkt als INT versenden/lesen und da hakt es irgendwie!
folgendes sendet der AVR:
1 | void uart_putint (uint32_t data)
|
2 | {
|
3 | while (data >= 0)
|
4 | {
|
5 | while (!(UCSRA & (1<<UDRE)))
|
6 | {
|
7 | }
|
8 | UDR = data;
|
9 | data = data >> 8;
|
10 | }
|
11 | }
|
12 | /********************/
|
13 |
|
14 | uart_putint(0x01234567);
|
So empfängt der PC:
1 | int res,tr;
|
2 | char BufferRX[16];
|
3 | while(1)
|
4 | {
|
5 | res=read(fd232,BufferRX,4);
|
6 | printf("Read:%i %s\n",res,BufferRX);
|
7 | sscanf(BufferRX,"%04c",&tr);
|
8 | printf("ITP: %04x\n",tr);
|
9 | sleep(1);
|
10 | }
|
Starte ich das Programm auf dem PC bekomme ich folgende Ausgabe:
Read:4 gE#
ITP: 1234567
Aber nur beim 1. starten des Programms. Beim 2. mal nur noch dies:
Read:4
ITP: 0000
Um wieder richtige Werte zu bekommen muss ich erst den AVR neu starten,
wobei dieser doch immer das selbe sendet.
Wie kann ich dies eleganter Lösen, was mache ich falsch?
Noch andere Ideen?
Vielen Dank und Gruß,
Thomas