Hallo an alle,
ich möchte einen Kanal des ADCs eines ATmega2560 gerne so schnell wie
möglich umwandeln lassen. Laut Datenblatt sind 1000kHz möglich, die
Auflösung beträgt dann allerdings nur noch 7 oder 8 (?) bit (ist für
mich ok). Leider verstehe ich nicht ganz, welche Register man dazu
setzen muss. Anscheinend reicht es nicht aus, einfach nur den Prescaler
hochzusetzen (Anscheinend steht die Auflösung immer noch bei 10bit), auf
jeden Fall kommt nichts brauchbares dabei raus.
Momentan sieht mein C-Code so aus (die Wandlung bezieht sich nur auf
Kanal 13):
1 | ADCSRA |= (1<<ADPS2); //Prescaler 16: 16MHz/16 = 1000kHz
|
2 | ADMUX |= (1<<REFS0); //AVCC als Referenz
|
3 | ADMUX &= 0xE0; //ADMUX 0-4 löschen
|
4 | ADMUX |= (13&0x07); //Kanal 13
|
5 | ADCSRB = (13&(1<<3) //" (MUX5)
|
6 | ADCSRA |= (1<<ADSC); //Wandlung starten
|
7 | while(ADCSRA & (1<<ADSC));
|
8 | uint8_t result = ADCW;
|
Vielleicht wäre Assembler da noch besser, aber damit habe ich gar keine
Erfahrung...
Was meint ihr?
Vielen Dank schon mal und
Grüße
Jan