PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neigungswinkelsensor



Der Ire
08.12.2008, 00:55
Hallo,

ich habe seit kurzem einen ASURO und komme auch mit den sensoren im großen und ganzen gut klar.

Im Rahmen eines Kurses an der TUHH habe ich jetzt einen Neigungswinkelsensor angebaut. Klick mich für infos (http://schule.tu-harburg.de/wettbewerbe/ddp/alt/ddp7/pdf/neigungswinkelsensor.pdf)

Der Trick ist: Solange die Front LED an ist, kann man ganz normal die Liniensensoren auslesen, sobald die Front LED aus ist, überlagert der Neigungswinkelsensor die Signale der Liniensensoren.

Mein Problem ist nun folgendes:
Die Linienverfolgung funktionierte einwandfrei, bevor ich die zusätzliche Platineinstallierte. Nun sind a) die Werte von den Liniensensoren sehr viel geringer als vorher (vorher lag die Grenze von weiß zu schwarz bei hellem Licht bei ca 200, nun bei ca 50)
und b) spielt nun der ASURO irgendwie verrückt.

Er fährt jetzt Rückwärts statt forwäts und umgekehrt, und bei folgendem Quelltext spielt er total verrückt:


#include "asuro.h"
#include "Funktionen.h"

int main(void)
{
unsigned int data[2],a,b;
char text1,text2;
Init();

StatusLED(GREEN);
FrontLED(ON);
WaitS(1);


while(1)
{
LineData(data);
a=data[0];
b=data[1];
itoa(a,text1,4);
itoa(b,text2,4);
SerWrite(text1,4);
SerWrite(text2,4);
SerWrite("\r\n",2);
WaitM(500);
}

while(1);
return 0;
}

Er soll eigentlich "einfach" die Zahlenwerte an das Hyperterminal senden, aber er schaltet die Status LED ein, kurz danach die Front LED aus (welche vorher lief) und danach die Status LED hintereinander immer wieder an und aus.

Das Hyperterminal zeigt nur einmal das Symbol eines Dreieckes an :(

Ich bin mir ziehmlich sicher, dass ich alles richtig zusammengebaut habe, vorher ging er ja auch und auch der Anschluss der zusatzplatine ist eigentlich in ordnung


Hat einer von euch ne idee, woran das liegt und wie ich das ändern kann?
Würde mich über schnelle hilfe sehr freuen.

MfG

hai1991
08.12.2008, 11:59
hallo Der Ire

du willst doch eien 4stellige zahl in einen string (char-array) speichern/umwandlen. jedoch haben deine variablen text1 und text2 nur 1 element zur verfügung.
um einen "text" mit 4 zeichen abspeichern zu können, musst du aber einen string mit 5 elementen zur verfügung stellen (am ende wird immer eine 0 angehängt, um das ferst zu legen, wo der text aufhört)

also müsstes du deinen code etwas umändern:


#include "asuro.h"
#include "Funktionen.h"

int main(void)
{
unsigned int data[2],a,b;
char text1[5],text2[5]; //5 elemente pro text (4 zeichen + 0)
Init();

StatusLED(GREEN);
FrontLED(ON);
WaitS(1);


while(1)
{
LineData(data);
a=data[0];
b=data[1];
itoa(a,text1,4);
itoa(b,text2,4);
SerWrite(text1,4);
SerWrite(text2,4);
SerWrite("\r\n",2);
WaitM(500);
}

while(1);
return 0;
}


versuch es einmal mit dieser variante

sloti
08.12.2008, 12:54
Hi,

also die Werte deiner Liniensensoren erscheinen mir normal. Das eigenartige ist finde ich, dass sie vorher so hoch waren ^^. Aber als ich mit dem Neigungswinkelsensoren den Berg erklommen habe, hatte ich auch nur so Werte um die 50 rum für Weiß und ich habs trotzdem geschaft ;) . Als eine Erklärung für den "Einbruch" deiner Lichtwerte könnte aber vielleicht der höhere Stromverbrauch der Zusatzplatine sein, da sie für einen Spannungsabfall an der Referenzspannung des A/D Wandlers sorgt. Aber dass das so eine große Differenz hervorbringt find ich ein wenig eigenartig.

mfg und bis Freitag ;)
Erik

Der Ire
08.12.2008, 15:34
Hey, vielen Dank. Mit der kleinen Änderung läufts jetzt.

Wenn ich die FrontLED aus hab, habe ich ja die Werte der Neigungswinkelplatine an meinen Liniensensoren. Angeblich sollen die Werte bei ca. 500 liegen, wenn er gerade steht. Bei mir liegen die bei ca 2000^^
Irgendwas mach ich falsch.



Auch zum arbeiten mit chars hätte ich da nochmal ne frage:



#include "asuro.h"
#include "Funktionen.h"

int main(void)
{
char a[5],b[5],c[5];
Init();
a="A";
b="B";
c=a+b;

SerWrite(a,5);
SerWrite("\r\n",2);
SerWrite(b,5);
SerWrite("\r\n",2);
SerWrite(c,5);
SerWrite("\r\n",2);


while(1);
return 0;
}

in der Variable c möchte ich halt "AB" haben, also die beiden verknüpft.

Aber WinAVR sagt mir, das bei a="A" und das auch bei b "incompatible types" sind.

Wie mache ich das richtig?

@Erik, mal gucken ob ich das bis Freitag gepackt hab^^

sloti
08.12.2008, 16:16
Hi,


Als eine Erklärung für den "Einbruch" deiner Lichtwerte könnte aber vielleicht der höhere Stromverbrauch der Zusatzplatine sein, da sie für einen Spannungsabfall an der Referenzspannung des A/D Wandlers sorgt. Aber dass das so eine große Differenz hervorbringt find ich ein wenig eigenartig.

Vergiss das mal... Wenn die Referenzspannung sinkt steigt der AD-Wandler wert natürlich ](*,) .

nil.at
09.12.2008, 14:01
Der Ire,

Gänsefüsschen (Doppelte Anführungszeichen) repräsentieren Strings. Die Variable c ist bei dir aber ein character, also nur ein Zeichen, welche mit ' angegeben werden müssen.
Desweiteren, warum machst du ein Array mit 5 Zeichen, wenn du nur eines speicherst? Das verbraucht unnötig Ressourcen.

Probiere mal folgendes:
char a,b,c[2];
Init();
a='A';
b='B';
c[0]=a;
c[1]=b;

Gruß

Der Ire
09.12.2008, 14:11
@nil.at:

Danke für den Tipp werde das gleich mal ausprobieren.
Wegen den 5 Zeichen: ich wollte sichergehen dass genug platz ist^^ und bei diesem Testprogram war mir resourcensparung relativ egal.


@ all:
Hab dsa Programm mit der abänderung von hai1991 ausprobiert udn bekamm auch Werte, allerdings lagen die laut HyperTerminal so bei 2020...

Anhand der LED's und nen paar while und if schleifen habe cih aber werte um und bei 570 ermittelt, die irgendwie der realität näher kommen.
Woran liegt das, dass ich so total andere Werte erlange.

und Zweite frage: ich hab nen kleines prog geschrieben mit dem er halt immer in richtung höchsten Punkt fahren soll. Mit den LED's habe ich dann die Grenzwerte eingestellt, und daran findet er auch den höchsten punkt, allerdings sobald ich die Motoren aktiviere habe ich das gefühl, dass sich die Grenzen für den Neigungswinkelsensor verändern.
Kann es sein, dass die Spannung an den Motoren meine Werte vom Sensor versaut?

MfG
Der Ire

sloti
09.12.2008, 15:04
Kann es sein, dass die Spannung an den Motoren meine Werte vom Sensor versaut?


Ja... Ein früherer Kursteilnehmer hat das mal in einer Grafik ausgewertet und die Abweichungen bestimmt. Ich weiß nicht mehr wie viel das war, aber es gab schon eine Abweichung. Er hat dann immer angehalten, um die Neigungswerte auszulesen.

mfg
Erik