Ok.
Dank dir für die Antwort![]()
Ok.
Dank dir für die Antwort![]()
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Noch eine Frage...
Woran liegt es das der eine Sensor deutlich mehr anzeigt als der andere? Ich hab schon geguckt das so gut wie keine Sachen usw. in der Nähe sind.
Und kann man das Problem eventuell so lösen, dass man den Controller am Anfang des Programmes 10 Werte von jedem Sensor einlesen lässt, daraus bildet er dann einen Mittelwert und speichert den Mittelwert jedes Sensors ab und zieht diesen Mittelwert von den neuen Messergebnissen ab um dann festzustellen ob die Wärmequelle mehr links oder mehr rechts ist?
Weil ich würde damit eine Wärmeortung bauen wollen und da ist es doof wenn der eine Sensor deutlich mehr anzeigt als der andere, obwohl nichts in der Nähe ist.
Danke für die Antwort!
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Hallo
Fertigbausatz? Wenn's ein Bausatz war: Bauteile und Lötstellen kontrollieren. Testweise könntest du mal die ADCs tauschen. Hast du die Spannungen an den ADC-Pins schon mit einem Messgerät nachgemessen? Vielleicht ist es ein Problem des ADCs beim Umschalten des Kanals.
Da ich mein SnakeVision schon lange nicht mehr verwendet habe kann ich mich nicht mehr erinnern, wie sysmetrisch die Werte bei mir waren. Aber ein Blick in meine alten Programme zeigt erstaunliches:
Das sind die orginalen Kommentare. Vermutlich gibt es deshalb die Kalibrierfunktion die ich allerdings noch nie genauer untersucht habe.Code:// Teelichtlöschen mit SnakeVision 18.4.10 mic #include "asuro-probot.h" // Code für das SnakeVision stammt von hier: // ******************************************* // * Snakevision für ASURO * // * Verfolgt eine Wärmequelle * // * * // * * // * * // * * // * (c) 2007 Robin Gruber * // * Details zum Code in: * // * "Mehr Spaß mit ASURO, Band II" * // ******************************************* void SnakeData(unsigned int *data) { // ThermalData() funktioniert genauso, wie LineData(), ... // ... nur dass dabei die interne Spannungsreferenz als ... // ... AD-Wandlerreferenz verwendet wird. // Prozessorinterne Referenz verwenden // Multiplexer auf linken Sensor schalten ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT; // Wandlung starten ADCSRA |= (1 << ADSC); // Warten, bis Wandlung beendet while (!(ADCSRA & (1 << ADIF))); // ADCIF zurücksetzen ADCSRA |= (1 << ADIF); // ADC-Wert auslesen data[0] = ADCL + (ADCH << 8); // Prozessorinterne Referenz verwenden // Multiplexer auf rechten Sensor schalten ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT; // Wandlung starten ADCSRA |= (1 << ADSC); // Warten, bis Wandlung beendet while (!(ADCSRA & (1 << ADIF))); // ADCIF zurücksetzen ADCSRA |= (1 << ADIF); // ADC-Wert auslesen data[1] = ADCL + (ADCH << 8)-100; // Korrektur der Seiten! } int main(void) { unsigned int data[2]; Init(); while(1) { SnakeData(data); if(data[0]>data[1]) // Werte werden beim Einlesen korrigiert! { MotorDir(RWD,FWD); MotorSpeed(150,150); } else { MotorDir(FWD, RWD); MotorSpeed(150, 150); } PrintInt(data[0]); SerPrint("-"); PrintInt(data[1]); SerPrint("\n\r"); //Beep(300); Msleep(300); } }
Gruß
mic
Geändert von radbruch (11.01.2012 um 22:52 Uhr) Grund: Omniwheelcode entfernt
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ja es ist ein Fertigbausatz.
Ich hab da gestern direkt mal drüber geguckt und die Lötstellen sehen alle sehr gut aus. Ich denke also nicht das es daran liegt. Um Probleme beim Umschalten des ADC-Kanals zu vermeiden habe ich nach jedem auslesen eine 200ms Pause eingebaut. Aber das mit dem Nachmessen werde ich trotzdem mal machen.
Würde die Kalibrierung wie ich sie oben im groben beschrieben habe so überhaupt funktionieren bzw. Sinn machen?
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Besser als die Pause wäre ein zweimaliges Einlesen des selben Kanals und nur das zweite Ergebnisse zu verwenden. Die orginale Funktion verwendet offensichtlich die interne Spannungsreferenz zur Erhöhung der Genauigkeit und der Reproduzierbarkeit der Messungen.
Ich vermute, beim Kallibrieren wird lediglich der Unterschied zwischen den Seiten zur Kalibrierzeit ermittelt und bei allen weiteren Messungen eingerechnet.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ich hab mir gerade dein Programm angeguckt. Du hast in der Routine die den rechten Sensor ausließt eine Korrektur von -100 drin. Scheint also das bei dir auch so ein großer Unterschied zwischen den Werten vorhanden war
Was ich gerade mal gesehen habe. Wenn du dir dieses PDF mit dem Schaltplan der Platine anschaust
http://www.produktinfo.conrad.com/da...uer_ARX_03.pdf
siehst du das der OPV von Sensor 2 eine andere Verstärkung hat als der von Sensor 1. Einmal sind da 1MOhm und 15Ohm in Reihe und das andere mal 1MOhm und 10Ohm. Könnte dies das Problem mit den unterschiedlichen Werten verursachen? Und wenn ja wieso wurde das so gemacht?
Hab es mal ausgerechnet. Beim oberen OPV ist V = 100.001 und beim unteren V = 62.500,93.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Hallo
Bei Fragen zu OPV muss ich leider passen. Die unterschiedliche Beschaltung der Kanäle scheint mir auch verdächtig, aber ich mag mich eigentlich nicht tiefer einlesen:
http://www.soselectronic.de/a_info/r...in/LTC1051.pdf
Mein SnakeVision (Fertiggerät) wurde so bestückt:
R1 - 1M bnswgn (300k)
R2 - 10 bnswsw (7r5)
R3 - 1M brswgn (1M)
R4 - 100 bnswbn (10)
R5 - 1M bnswgn (1M)
R6 - 100 bnswbn (15)
R7 - 20k rtswor (20k)
R8 - 20k rtswor (20k)
http://www.dieelektronikerseite.de/T...ndsrechner.htm
Wie vermutet speichert die Kalibrierfunktion bei Tastendruck die aktuellen Werte als Offset und rechnet diese Werte bei den weiteren Messungen mit ein:
(Aus Weglaufen.c der SnakeVision-Beispielprogramme)Code:... Init(); // Port D, Pin 6 (die ehemalige Front-LED), auf Eingang ... // ... schalten und den Pullup aktivieren. DDRD&=~(1<<6); PORTD|=(1<<6); // Motoren immer auf rückwärts MotorDir(RWD,RWD); // Offset mit null initialisieren offset[0]=0; offset[1]=0; while(1) { // Messwerte einlesen ThermalData(tdata); // Wenn Knopf gedrückt, aktuellen Wert als Offset speichern if ((PIND&(1<<6))==0) { offset[0]=tdata[0]; offset[1]=tdata[1]; } // Offset abziehen, aber nur, wenn der Messwert groß ... // ... genug ist if (tdata[0]>offset[0]) tdata[0]-=offset[0]; else tdata[0]=0; if (tdata[1]>offset[1]) tdata[1]-=offset[1]; else tdata[1]=0; // Die Summe der Werte wird für die Berechnung der ... // ... Geschwindigkeit genutzt sum=tdata[0]+tdata[1]; // Signal stark genug? ...
Gruß
mic
Geändert von radbruch (12.01.2012 um 11:53 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen