ok, heist also die pull-ups sind standarmässig abgeschaltet. Ich müsste also zusätzlich, VOR der verwendung der OdometrieData() funktion (der code stammt aus der adc.c)irgendwo eine anweisung unterbringen die in das Register PORT 0 bzw. PORT 1 eine 1 reinschreibt und damit den eingang PC0 bzw PC1 hochohmig macht? Passiert aber nicht so etwas schon in der codezeile 233?Code:00221 void OdometryData ( 00222 unsigned int *data) 00223 { 00224 int ec_bak = autoencode; // Sichert aktuellen Zustand 00225 00226 /* 00227 Autoencode-Betrieb vom ADC-Wandler unterbinden. 00228 */ 00229 autoencode = FALSE; 00230 /* 00231 Vorbereitung zum lesen der Odometrie-Sensoren. 00232 */ 00233 DDRC &= ~((1 << PC0) | (1 << PC1)); // Port auf Input=>Back-LEDs gehen aus 00234 ODOMETRIE_LED_ON; // Odometrie-LED's einschalten 00235 00236 /* 00237 Linken Odometrie-Sensor lesen 00238 */ 00239 ADMUX = (1 << REFS0) | WHEEL_LEFT; // Referenz mit externer Kapazitaet 00240 ADCSRA |= (1 << ADSC); // Starte AD-Wandlung 00241 while (!(ADCSRA & (1 << ADIF))) // Ende der AD-Wandlung abwarten 00242 ; 00243 ADCSRA |= (1 << ADIF); // AD-Interupt-Flag zuruecksetzen 00244 data [0] = ADCL + (ADCH << 8); // Ergebnis als 16-Bit-Wert 00245 00246 /* 00247 Rechten Odometrie-Sensor lesen 00248 */ 00249 ADMUX = (1 << REFS0) | WHEEL_RIGHT; // Referenz mit externer Kapazitaet 00250 ADCSRA |= (1 << ADSC); // Starte AD-Wandlung 00251 while (!(ADCSRA & (1 << ADIF))) // Ende der AD-Wandlung abwarten 00252 ; 00253 ADCSRA |= (1 << ADIF); // AD-Interupt-Flag zuruecksetzen 00254 data [1] = ADCL + (ADCH << 8); // Ergebnis als 16-Bit-Wert 00255 00256 /* 00257 Autoencode-Betrieb vom ADC-Wandler wiederherstellen. 00258 */ 00259 autoencode = ec_bak; 00260 }
ganz was anderes. Im code oben steht OdometryData, in diesem programm z.b. steht OdometrieData
wie passt das zusammen?Code://* -------- Programm zum Loggen der Odometriedaten ----*/ #include "asuro.h" #include "inka.h" #include <string.h> #include<stdio.h> int main(void) { unsigned int data[200][2]; char c[12]; int i; Init(); WaitforStart(); //motoren vorwärts MotorDir(FWD,FWD); MotorSpeed(160,160); //warten bis motoren drehzahl erreicht haben Msleep (1000); //odo-werte einlesen for (i=0; i<200;i++) { OdometrieData(data[i]); } //motoren stop MotorSpeed(0,0); //formatiert ausgabe odo-werte for (i=0;i<200;i++){ sprintf(c,"%4d\t%4d\n\r",data[i][0],data[i][1]); SerWrite(c,12); } while(1); return 0; }







Zitieren

Lesezeichen