Hallo,
ich habe bei mir einen Roboter angefangen zur Linienverfolgung.
Basis bildet ein Atmega64 Controller und als Programmierplattform E-Lab PED32 - Pascaldialekt.
Dazu möchte ich den ADC verwenden und habe auch schon die Werte mit getadc(i) abgefragt. Jedoch möchte ich gerne über die Register die Werte abfragen, da dies den Prozess beschleunigt. Bis dahin alles schön und gut, jedoch bekomme ich keine / unsinnige Werte über meine Abfrage.
Folgenden Code verwende ich für die ADC-Initalisierung und den Start der Konvertierung:
Die Werte werden im Interrupt eingetragen, der folgenderweise aussieht:Code:ADCSRA:=$CC; FOR i :=0 TO 5 DO // i läuft von 0 bis 7 einmal durch sensor:=i; if i>0 then ADMUX:=$C0+Byte(potenz(2,word(i-1))); // AVCC, channel:=i else ADMUX:=$C0; endif; //Hellwert led[i]:=false; //LED einschalten ADCSRA:=$CC; // Konvertierung starten WaitSema(sema);
Die Register habe ich aus folgenden Gründen so gesetzt:Code:interrupt ADCRdy; var sensl,sensh:byte; begin sensl :=ADCL; sensh :=ADCH; if led[i] then SensorN[sensor]:=(word(sensh) SHL 8) OR (word(sensl)); else SensorL[sensor]:=(word(sensh) SHL 8) OR (word(sensl)); endif; IncSema(sema); end;
ADCSRA --> ADC einschalten, Konvertierung starten, kein Freilauf, Interrupt aktivieren und 16er Teiler
ADMUX --> interner Vergleich, rechtsjustiertes Ergebnis sowie Kanal
Als Wert bekomme ich für den 2. Sensor immer 259 und ansonsten 0 (z.T. aber auch Anzeigen wie "0 0" obwohl ich IntToStr(Sensor[i]:3) verwende).







Zitieren

Lesezeichen