PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mega32 und GP2D12 am adc mit krummen zahlen



mki
11.10.2007, 11:31
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.



#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;
}

linux_80
11.10.2007, 21:57
Hallo,

evtl. solltest Du den Port noch auf Eingang stellen, damit da auch was am ADC ankommt von deinem Signal ;-)

mki
12.10.2007, 12:30
so was dummes #-o

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.

linux_80
12.10.2007, 19:10
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.

CsT
12.10.2007, 20:41
Zudem wenn die Werte sehr schwanken noch Kondensatoren anbringen .. hat bei mir sehr geholfen!

mki
15.10.2007, 09:15
okay, das werde ich dann mal testen heute abend....

Jon
15.10.2007, 09:54
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

roboterheld
16.10.2007, 19:10
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.

mki
17.10.2007, 09:48
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???

Jon
17.10.2007, 10:44
Da der gp2d12 nur punktuell misst, kann das schnell passieren, dass der dünnere Gegenstände nicht erfasst.

jon

mki
17.10.2007, 14:34
wie macht ihr denn das so mit den sensoren damit der robs nicht so oft bumsen :-) muss??

Jon
17.10.2007, 16:09
Ich verwende für Gegenstände Ultraschall. Da kann man auch Stuhlbeine in einer Entfernung von 3m gut erkennen.
Sonst den IR Sensor auf einen Servo montieren und den Servo die ganze Zeit hin und her schwenken.

jon

mki
17.10.2007, 16:35
die idee mit dem servo zum schwenken mit nem micro servo hatte ich auch schon, bin aber davon ab wegen strom und so....?!

Jon
17.10.2007, 16:44
Hast du Angst, dass der Servo zu viel Strom zieht? Es sind normalerweise um die 200mA. Also nicht all zu viel.
Eigentlich spricht nichts dagegen einen Servo zu verwenden.

jon

roboterheld
17.10.2007, 18:27
.....robs nicht so oft bumsen :-k muss??.....


v.i.a.g.r.a wegnehmen.

mki
18.10.2007, 08:22
@roboterheld
der weis leider wo die tabs liegen

@jon
na ja 200 mah sind auch fahrminuten, eigentlich soll der robs ja ca. 8h durch halten.

Jon
18.10.2007, 08:36
Die Angabe der 200mA sind ein Durchschnittswert bei maximaler Belastung. Da der Servo mit einem IR-Sensor aber nicht wirklich belastet ist kannst du mit 50mA maximum rechnen.

jon

mki
18.10.2007, 08:49
na dann teste ich das mal....

mki
21.10.2007, 18:17
so, habe das jetzt getestet und geht super...
servo schwenkt den sensor immer hin und her und das mit dem ausweichen funktioniert auch super.

so noch was zum lachen oder heulen kommt auf den betrachter drauf an...
habe gerade meinen fahrtregler abgeraucht (habe ein stop vor dem ausweichen vergessen) und da sag noch mal einer das software keine hardware beschädigen kann.
:-(

roboterheld
24.10.2007, 09:14
...habe gerade meinen fahrtregler abgeraucht (habe ein stop vor dem ausweichen vergessen) und da sag noch mal einer das software keine hardware beschädigen kann. ......

dumm gelaufen, ein wechseln ist eigentlich bei einer richtigen dimension des fahrtreglers auch ohne stop möglich. das einzige was dann passieren kann, das die mechanik darunter leidet .

ich habe ein selbstgebaute platine auf meinem rp6 mit einem einfachen l293d. dieser steuert die beiden motoren . plötzlich anfahren, ausweichen usw. nichts passiert.

also , dein fahrtregler ist falsch.

mki
24.10.2007, 18:09
na ja habe noch nen zweiten abgefackelt und dann was anderes gemacht:

war:
-dualer fahrtregler von "big C" für den rp5 gesteuert über zwei servo ports

ist:
-zwei fahrtregler auch von "big C" aber pro fahrtregler bis 2 A belastbar

und nicht zu vergessen eine sicherung zum schtz der schaltung ;-)