Hallo
Der E_INT kann beim RP6 als Interupteingang für I2C genutzt werden und ist in der Library schon integriert. Diese Funktion kann man ausschalten, dabei wird der E_INT zu einem normalen Eingang:
extIntOFF();
So mache ich es auch in meinem Setup:
Code:
void ADC_Init(void)
{
extIntOFF(); // schaltet den E_INT1-Port auf Eingang für den ADC
// ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR) | 4;
// setze free running triggern
SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// kein Interupt, Wandler einschalten, prescaler /2, ADC läuft nun mit 4MHz!
ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
// Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen
ADCSRA |= (1<<ADATE) | (1<<ADIF);
// Initialisierung starten
ADCSRA |= (1<<ADSC);
// und noch die empfohlene Initiallesung
while (!(ADCSRA & (1<<ADIF)));
ADCSRA |= (1<<ADIF);
}
(Aus https://www.roboternetz.de/community...l=1#post457514)
Nach dem Initialisieren und dem Init des ADC steht dann immer der aktuelle Wert im ADCH-Register:
Code:
initRobotBase();
ADC_Init();
while(1)
{
writeInteger(ADCH, 10);
writeString_P("\n");
}
Gruß
mic
Lesezeichen