Hallo,
evtl. solltest Du den Port noch auf Eingang stellen, damit da auch was am ADC ankommt von deinem Signal
Hi,
ich habe nen problem mit dem adc, auslesen funktioniert aber die ergebnisse sind merkwürdig ==> 20, 21 wenn ich meine hand dierekt vor den sensor halte, bei ca. 30 cm ist es dann immer hin noch eine 19 die ich zurück bekomme.
Code:#define F_CPU 14745600UL void main(void) { char buffer[16]; // int adc = (50 * ReadChannel(0)) / 1023; adc = ReadChannel(0); uart_puts_P("ch0:"); itoa(adc,buffer,10); uart_puts(buffer); uart_puts_P("\r\n"); } uint16_t ReadChannel(uint8_t mux) { uint8_t i; uint16_t result = 0; //Initialisieren wichtig, da lokale Variablen uint8_t temp; //ADCSRA |= (1<<ADEN); ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); // requenzvorteiler // setzen auf 8 (1) und ADC aktivieren (1) // ADMUX = 0; ADMUX = mux; // Kanal waehlen ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen // ADMUX |= (1<<REFS0); /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while ( ADCSRA & (1<<ADSC) ) { //konvertierung abwarten } /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */ for(i=0;i<4;i++) { ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result += ADCL; // Wandlungsergebnisse aufaddieren temp = ADCH; } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) result /= 4; // Summe durch vier teilen = arithm. Mittelwert return result; }
Hallo,
evtl. solltest Du den Port noch auf Eingang stellen, damit da auch was am ADC ankommt von deinem Signal
so was dummes
habe das gleich mal gemacht,
aber die zahlen liegen jetzt trotz dem nur bei ca. 240 wenn meine hand vor dem sensor ist und "zappeln" tut es auch dolle.
Hallo,
der max. Wert sollte beim Abstand von 8 cm erreicht werden.
Wenn der Abstand geringer wird, wird der Wert auch wieder kleiner !
Mit der Hand wirds immer "zappeln", weil das ja IR ist, und von der Hand reflektiert werden muss, und je nachdem wie es zum Sensor zurückkommt, kommt ein anderer Wert raus, auch wenn scheinbar der Abstand gleich bleibt. Am besten mal gegen die Wand o.ä. halten, damit sich der Abstand nicht ändert.
Zudem wenn die Werte sehr schwanken noch Kondensatoren anbringen .. hat bei mir sehr geholfen!
okay, das werde ich dann mal testen heute abend....
Hast du den Sensor senkrecht oder waagrecht montiert? Wenn man den waagrecht montiert, kann es zu Fehlern kommen.
Als Kondensatoren sind 100µF Elko, 100nF Keramik und 10µF Tantal empfehlenswert.
jon
Nice to be back after two years
www.roboterfreak.de
kondensatoren brauchst du nur, wenn du eine kranke schwache stromversorgung hast. viele bastler nehmen ein 2 euro netzteil oder ein akku mit 3.5 mah. das geht natürlich nicht.
hier muss man schon schön reinhauen, ein gesundes netzteil, welches auch gutes geld kostet oder ein akku mit 2,5 - 3,0 ah.
so, hat nen bischen gedauert.
habe grad noch nen wlan modul von ezTCP und nen ordentlichen accu drauf gebastelt
jetzt aber zurück zum sensor, habe es mal mit wänden und papier getestet, da scheint es zu klappen und das mit dem accu, na ja s.o.
kann das sein das der gp2d12 sehr träge ist und dünne gegenstände (hocker beine) nicht erfassen kann???
Da der gp2d12 nur punktuell misst, kann das schnell passieren, dass der dünnere Gegenstände nicht erfasst.
jon
Nice to be back after two years
www.roboterfreak.de
Lesezeichen