Forum: Mikrocontroller und Digitale Elektronik ATmega2560 ADC 1000kHz?


von Jan B. (diphthong)


Lesenswert?

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

von Julian B. (julinho)


Lesenswert?

Das Ergebnis der AD-Wandlung sind immer 10Bit, du must also 2 Bits 
ignorieren.

Dazu benutzt Du Left-Adjust in ADMUX, dann steht dein Ergebnis in ADCH.

Möglicherweise mußt Du ADCL noch als Dummy auslesen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.