cyberFreak
25.01.2010, 19:37
Hallo zusammen,
habt ein Tolles Forum hab schon einige Fragen beantworten können.
Aber dazu hab ich nichts gefunden, vlt. habt ihr eine Idee.
Ich arbeite mit einem PIC18f4680 und der C18 Library.
Ich möchte mittels Funkchip RT868F5 einen analogen Spannungswert
einlesen und diesen versenden und auf der Empfängerseite in einer
Variablen ablegen.
Nun, das einlesen des Wertes funktioniert ´, auch die A/D-Wandlung geht
es wird richtig über USART gesendet und empfangen.
Aus der A/D-Wandlung kommt eine int-Wert raus und wird mittel
WriteUSART versendet und mittels ReadUSART wieder ausgelesen.
Jedoch passt mir das Format der empfangenen und gesendeten Daten nicht.
Angenommen ich möchte eine 4,2V versenden, dann verschickt mir mein Code
z.zt. "42", auf der Empfängerseite kommt 42 an und ich verschieben das
komma um eine Position. Funktioniert.
Jedoch, die Werte sind teils ziemlich ungenau bei kleineren
Spannungswerten kommt es sogar vor das statt einer 0,8 eine 0,6
versendet wird. nehme an dies hängt jedoch mit der internen Vref
zusammen.
Jetz kam die Idee mittels Long-Wert zu arbeiten.
Jedoch kann der Funkchip nur 8-Bit, hat jedoch angeblich einen Puffer von 240Byte welchen er erst sendet wenn nach dem konstanten senden von Daten eine Pause eingelegt wird. Das funktioniert jedoch nicht, er sendet nur die letzten 8 Bit.
Kennt ihr eine Möglichkeit die Daten zu splitten, d.h. als erstes 8-Bit
zusenden und dann nochmals 8-Bit?
Dies funktioniert zwar, jedoch kommt es vor das die 2 Zahlen vertauscht
sind auf der Empfängerseite, da er ja irgendwann anfängt zu empfangen.
Ich dachte ursprünglich so:
Version 1 - SENDER
x=conv_AD(0,1,1);
x1=x<<8;
x2=x;
while (1)
{
WriteUSART(x1);
for (i=0;i<10000;i++);
WriteUSART(x2);
for (i=0;i<10000;i++);
}
oder diese Version2
wobei hier aus der AD-Wandlung ein Long-Wert kommt
x=conv_AD(0,1,1);
while (1)
{
WriteUSART(x);
for (i=0;i<10000;i++);
}
Bie Version 2 empfängt er nur die letzten 8 Bit, und bei Version1 weiß er nicht welcher Wert zuerst kommt. Sondern würfelt mit das am Empfänger wild durcheinander.
Hat jemand eine Idee wie ich 2 getrennte Zahlen übertragen kann und diese eindeutig auseinander halten kann???
Zusammenfassung: Zahl aufteilen in 2x8-Bit und in der richtigen
Reihenfolge empfangen.
Ich hab vieles versucht, nichts funktioniert :(
DANKE !
habt ein Tolles Forum hab schon einige Fragen beantworten können.
Aber dazu hab ich nichts gefunden, vlt. habt ihr eine Idee.
Ich arbeite mit einem PIC18f4680 und der C18 Library.
Ich möchte mittels Funkchip RT868F5 einen analogen Spannungswert
einlesen und diesen versenden und auf der Empfängerseite in einer
Variablen ablegen.
Nun, das einlesen des Wertes funktioniert ´, auch die A/D-Wandlung geht
es wird richtig über USART gesendet und empfangen.
Aus der A/D-Wandlung kommt eine int-Wert raus und wird mittel
WriteUSART versendet und mittels ReadUSART wieder ausgelesen.
Jedoch passt mir das Format der empfangenen und gesendeten Daten nicht.
Angenommen ich möchte eine 4,2V versenden, dann verschickt mir mein Code
z.zt. "42", auf der Empfängerseite kommt 42 an und ich verschieben das
komma um eine Position. Funktioniert.
Jedoch, die Werte sind teils ziemlich ungenau bei kleineren
Spannungswerten kommt es sogar vor das statt einer 0,8 eine 0,6
versendet wird. nehme an dies hängt jedoch mit der internen Vref
zusammen.
Jetz kam die Idee mittels Long-Wert zu arbeiten.
Jedoch kann der Funkchip nur 8-Bit, hat jedoch angeblich einen Puffer von 240Byte welchen er erst sendet wenn nach dem konstanten senden von Daten eine Pause eingelegt wird. Das funktioniert jedoch nicht, er sendet nur die letzten 8 Bit.
Kennt ihr eine Möglichkeit die Daten zu splitten, d.h. als erstes 8-Bit
zusenden und dann nochmals 8-Bit?
Dies funktioniert zwar, jedoch kommt es vor das die 2 Zahlen vertauscht
sind auf der Empfängerseite, da er ja irgendwann anfängt zu empfangen.
Ich dachte ursprünglich so:
Version 1 - SENDER
x=conv_AD(0,1,1);
x1=x<<8;
x2=x;
while (1)
{
WriteUSART(x1);
for (i=0;i<10000;i++);
WriteUSART(x2);
for (i=0;i<10000;i++);
}
oder diese Version2
wobei hier aus der AD-Wandlung ein Long-Wert kommt
x=conv_AD(0,1,1);
while (1)
{
WriteUSART(x);
for (i=0;i<10000;i++);
}
Bie Version 2 empfängt er nur die letzten 8 Bit, und bei Version1 weiß er nicht welcher Wert zuerst kommt. Sondern würfelt mit das am Empfänger wild durcheinander.
Hat jemand eine Idee wie ich 2 getrennte Zahlen übertragen kann und diese eindeutig auseinander halten kann???
Zusammenfassung: Zahl aufteilen in 2x8-Bit und in der richtigen
Reihenfolge empfangen.
Ich hab vieles versucht, nichts funktioniert :(
DANKE !