vklaffehn
05.06.2010, 16:02
//edit: Tja, manchmal muß man es nur hier posten und nach dem Fischfilet gucken.... Habe mal auf beiden Seiten stdint.h min eingebaut und alle beteiligten Variablen als INT16_T deklariert....
Moin, hab irgendwie grad ein Brett vor dem Kopf :
Ich übertrage 2 16bit signed integer seriell von einem Mega8 auf einen Tiny2313, zerlege sie auf der einen Seite in Low und Highbyte und baue sie auf der anderen wieder zusammen, gleichzeitig werde die beiden Werte beim Mega8 auf einem LCD angezeigt. Sobald jetzt aber ein Wert negativ wird, geht etwas schief, mein seriell übertragenes Highbyte wechselt dann von 0x00 zu 0xff, und nicht, wie ich geplant hatte, zu 0x80, aber auf dem LCD wird der selbe integer brav als z.B. -1 angezeigt?
hier mal ein Codeschnipsel, xpos und ypos sind 'volatile int', x und y gehen von -180 bis 180, die 1 ist quasi ein Startkennzeichen
void gotoxy(signed int x,signed int y)
{
unsigned char c;
if ((xpos-x)>180)
{
x=(360-x);
}
//update absolute direction
xpos = x;
ypos = y;
char buffer[16];
itoa(xpos,buffer,10);
lcd_gotoxy(0,1);
lcd_puts_P(" ");
lcd_gotoxy(0,1);
lcd_puts(buffer);
itoa(ypos,buffer,10);
lcd_gotoxy(5,1);
lcd_puts(buffer);
//move
uart_putc(1);
uart_putc(xpos & 255);
uart_putc(xpos >> 8);
uart_putc(ypos & 255);
uart_putc(ypos >> 8);
c = serialin();
}
und hiermit wird, nachdem erst eine 1 empfangen wurde, das ganze auf dem Tiny2313 wieder zusammengebaut und am Ende eine 0 zurückgeschickt :
void remote_move()
{
int16_t x,y;
x=serialin()+(serialin()<<8);
y=serialin()+(serialin()<<8);
turn_deg_x(x-(xpos));
turn_deg_y(y-(ypos));
xpos = x;
ypos = y;
uart_putc(0);
}
Kann mir jemand evtl. das Brett vorm Kopf wegnehmen??
Danke :-)
P.S. : ist dringend, ist mein Panoramakopf, der morgen mit in Urlaub muß ;-)
MfG
Volker
Moin, hab irgendwie grad ein Brett vor dem Kopf :
Ich übertrage 2 16bit signed integer seriell von einem Mega8 auf einen Tiny2313, zerlege sie auf der einen Seite in Low und Highbyte und baue sie auf der anderen wieder zusammen, gleichzeitig werde die beiden Werte beim Mega8 auf einem LCD angezeigt. Sobald jetzt aber ein Wert negativ wird, geht etwas schief, mein seriell übertragenes Highbyte wechselt dann von 0x00 zu 0xff, und nicht, wie ich geplant hatte, zu 0x80, aber auf dem LCD wird der selbe integer brav als z.B. -1 angezeigt?
hier mal ein Codeschnipsel, xpos und ypos sind 'volatile int', x und y gehen von -180 bis 180, die 1 ist quasi ein Startkennzeichen
void gotoxy(signed int x,signed int y)
{
unsigned char c;
if ((xpos-x)>180)
{
x=(360-x);
}
//update absolute direction
xpos = x;
ypos = y;
char buffer[16];
itoa(xpos,buffer,10);
lcd_gotoxy(0,1);
lcd_puts_P(" ");
lcd_gotoxy(0,1);
lcd_puts(buffer);
itoa(ypos,buffer,10);
lcd_gotoxy(5,1);
lcd_puts(buffer);
//move
uart_putc(1);
uart_putc(xpos & 255);
uart_putc(xpos >> 8);
uart_putc(ypos & 255);
uart_putc(ypos >> 8);
c = serialin();
}
und hiermit wird, nachdem erst eine 1 empfangen wurde, das ganze auf dem Tiny2313 wieder zusammengebaut und am Ende eine 0 zurückgeschickt :
void remote_move()
{
int16_t x,y;
x=serialin()+(serialin()<<8);
y=serialin()+(serialin()<<8);
turn_deg_x(x-(xpos));
turn_deg_y(y-(ypos));
xpos = x;
ypos = y;
uart_putc(0);
}
Kann mir jemand evtl. das Brett vorm Kopf wegnehmen??
Danke :-)
P.S. : ist dringend, ist mein Panoramakopf, der morgen mit in Urlaub muß ;-)
MfG
Volker