Hallo an Alle, ich wollte mit einem Atmega128 acht analog Spannungen von Sharp IR-Sensoren in einen digitalen Wert erfassen. Jetzt habe ich das Problem das ich nicht alle Kanäle sampeln kann. Bin verwirrt und hoffe wirklich auf eure Hilfe. - F_CPU von 14.7456 Mhz - ADC Prescalor von 128 - ARev = AVCC mit einem 100nF Kondensator auf Masse _________________________________________ void adcInit( ) { ADMUX = (0 << REFS1) | (1 << REFS0) | (1 << ADLAR); ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); adcRead( 0 ); } uint16_t adcRead( uint8_t mux ) { ADMUX = mux | (0 << REFS1) | (1 << REFS0) ; //| (1 << ADLAR); ADCSRA |= (1 << ADSC); while ( ADCSRA & (1 << ADSC) ) { ; } return ADCW; } __________________________________________________________ Der Aufruf sieht in etwa wie folgt aus uint16_t inf0 = adcRead(0); _delay_ms(5); uint16_t inf1 = adcRead(1); ... Wenn ich nun alle acht Kanäle hintereinander Aufrufe (Verzögerung von 5ms) bekomme ich folgende verwirrende Werte. Vor allem wenn ich kein IR-Sensor angeschlossen habe, sollte auf dem AD-Pin eigentlich 0 V liegen. inf0:inf1:inf2:inf3:inf4:inf5:inf6:inf7 975 : 0 : 954 : 0 : 937 : 0 : 927 : 0 976 : 0 : 959 : 0 : 938 : 0 : 922 : 0 975 : 0 : 955 : 0 : 931 : 0 : 919 : 0 977 : 0 : 950 : 0 : 931 : 0 : 923 : 0 … sollte ein Sensor am Pin 0 angeschlossen sein wird folgendes gesampled 467 : 0 : 457 : 0 : 447 : 0 : 447 : 0 464 : 0 : 457 : 0 : 446 : 0 : 443 : 0 456 : 0 : 451 : 0 : 452 : 0 : 452 : 0 454 : 0 : 446 : 0 : 438 : 0 : 442 : 0 … Der erste Wert passt, ich versteh nur nicht warum der dritte, fünfte und siebte sich auch verändert. Wenn der Sensor am Pin 1 angeschlossen ist, ändert sich inf2 und nicht inf1. Evt könnt ihr mir ja weiterhelfen. Soweit Gruß Alex
Hi spess53 öhm.. nö.. stört das den ADC oder sind es die selben pins?
Hi
>öhm.. nö.. stört das den ADC oder sind es die selben pins?
Dann sieh mal nach, wo die Pins liegen.
MfG Spess
Hallo Flo Es sind Infrarot Sensoren von Sharp gp2d120 mit einer analogen Spannung von ca 0 bis 3.2 V Gruß
Wenn du nichts angeschlossen hast an den Pins und weder Pullup noch Pulldown eingebaut hast, verhalten sich ADC-Eingänge fast wie Antennen. Teilweise reichts schon mit dem Finger an die Analogsensorbuchse deines Boards(?) zu fassen, um die Werte zu ändern. Was für ein Board verwendest du? Wie sieht das Layout aus?
@Flo Stimmt eigentlich schon, nur hätte ich gedacht das der Wert um die 0 V schwankt. Ich benutze ein Crumb128 auf einem Steckplatine, an dem habe ich die Pins raus geführt. @spess53 Hab den JTAG nun bei den Fuses ausgemacht. Hat am verhalten des Mikrocontrollers leider nichts verändert. Keine Ahnung was da nicht stimmt :-/ Gruß Alex
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.