Hallo Leute,
ich hoffe das ist das richtige Forum dafür, ich schreibs einfach mal.
Vorab ein paar Infos:
ich baue gerade an einem Fußballroboter für den Robocup.
Dort wird ein IR-Ball eingesetzt, weshalb ich auch IR-Sensoren brauche.
Board: atmega2560
ADC: boardeigen
Das Spiel ist sehr auf Geschwindigkeit ausgelegt, weshalb ich die
Methoden, die Sensoren auslesen und die Motoren steuern, in Interrupts
legen wollte.
Mein Problem ist:
ich habe eine funktionierende ADC-Methode von einem Freund bekommen.
1 | uint8_t readAnalogSensor(uint8_t num)
|
2 | {
|
3 | if(num>15)
|
4 | {
|
5 | return 0;
|
6 | }
|
7 | ADMUX=(num & 0x7)|(1<<ADLAR);
|
8 | ADCSRB = (ADCSRB & ~(1<<MUX5))|(num & (1<<MUX5));
|
9 | ADCSRA|=(1<<ADIF)|(1<<ADSC);
|
10 | while(!(ADCSRA&(1<<ADIF)));
|
11 | ADCSRA|=(1<<ADIF)|(1<<ADSC);
|
12 | while(!(ADCSRA&(1<<ADIF)));
|
13 | return ADCH;
|
14 | }
|
ADC-Config:
1 | ADCSRA = (1<<ADEN)|(1<<ADPS2);
|
2 | ADCSRA |= (1<<ADIE);
|
3 | ADCSRA |= (1<<ADATE);
|
4 | ADCSRB &= ~(1<<ADTS0);
|
5 | ADCSRB &= ~(1<<ADTS1);
|
6 | ADCSRB &= ~(1<<ADTS2);
|
7 | ADCSRA |= (1<<ADSC);
|
ich würde aber lieber den free-running-Mode(für alle 15 Sensoren)
einsetzen und dann beim Interrupt den Wert in ein Array schreiben.
Deswegen: wie geht das Mit dem Multiplexer und Interrupts?
Stimmt überhaupt meine Config?
in welche Register wird der Wert der einzelnen Kanäle geschrieben?
hoffe ich habe keine Infos vergessen
Wäre für Hilfe dankbar