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)
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 }
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?
ganz was anderes. Im code oben steht OdometryData, in diesem programm z.b. steht OdometrieData
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;
}
wie passt das zusammen?
Lesezeichen