bart
29.03.2007, 17:49
Hallo,
ich bastle gerade mit dem RN-Atmega2560 herum, bekomme es aber nicht hin die ADC Kanäle auszulesen, habe etwas Angst da einfach so was rumzuprogrammieren damit das ding nicht den Geist auf gibt.
Ich verwende folgende Funktion zum auslesen (hat bei einemATMEGA8 funktioniert).
Die Zeilen im Code wo die Fragezeichen dahinter stehen, hab ich selbst hinzugefügt. (im Datenblatt gefunden).
Die Funktion gibt jedoch immer den konstanten Wert 510 komischerweise.
Wäre toll wenn jemand hilft.
uint16_t GetAdc(uint8_t pin) {
// min Prescaler = µC Frequ / 200 KHz & max Prescaler = µC Freq. / 50 khz = min 80 & max 320
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); // Prescalar = 128
ADCSRB = (1<<ACME); //??????????
DIDR0=0x03; //?????????
uint8_t i;
uint8_t ii;
uint16_t result;
uint16_t ergebnis;
ergebnis = 0;
// +------------ Dummy-Check ------------+
i = 5; // i x Dummy-Check
while(i){
ADMUX = pin; // Kanal waehlen
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while(!(ADCSRA & (1<<ADIF))); // auf Abschluss der Konvertierung warten (ADIF-bit)
result = ADCL + (ADCH << 8); // Wandlungsergebnisse erfassen
result = 0; // Zurücksetzen
i--;
}
// +------------- Ermittlung ------------+
i = 10;
ii = i; // Schnitt aus i Ergebnissen
while(i){
ADMUX = pin; // Kanal waehlen
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while(!(ADCSRA & (1<<ADIF))); // auf Abschluss der Konvertierung warten (ADIF-bit)
result = ADCL + (ADCH << 8); // Wandlungsergebnisse erfassen
ergebnis = ergebnis + result; // Aufaddieren
i--;
}
// +-------- Umrechnung & Ausgabe -------+
ergebnis = ergebnis / ii ;
return ergebnis;
}
ich bastle gerade mit dem RN-Atmega2560 herum, bekomme es aber nicht hin die ADC Kanäle auszulesen, habe etwas Angst da einfach so was rumzuprogrammieren damit das ding nicht den Geist auf gibt.
Ich verwende folgende Funktion zum auslesen (hat bei einemATMEGA8 funktioniert).
Die Zeilen im Code wo die Fragezeichen dahinter stehen, hab ich selbst hinzugefügt. (im Datenblatt gefunden).
Die Funktion gibt jedoch immer den konstanten Wert 510 komischerweise.
Wäre toll wenn jemand hilft.
uint16_t GetAdc(uint8_t pin) {
// min Prescaler = µC Frequ / 200 KHz & max Prescaler = µC Freq. / 50 khz = min 80 & max 320
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); // Prescalar = 128
ADCSRB = (1<<ACME); //??????????
DIDR0=0x03; //?????????
uint8_t i;
uint8_t ii;
uint16_t result;
uint16_t ergebnis;
ergebnis = 0;
// +------------ Dummy-Check ------------+
i = 5; // i x Dummy-Check
while(i){
ADMUX = pin; // Kanal waehlen
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while(!(ADCSRA & (1<<ADIF))); // auf Abschluss der Konvertierung warten (ADIF-bit)
result = ADCL + (ADCH << 8); // Wandlungsergebnisse erfassen
result = 0; // Zurücksetzen
i--;
}
// +------------- Ermittlung ------------+
i = 10;
ii = i; // Schnitt aus i Ergebnissen
while(i){
ADMUX = pin; // Kanal waehlen
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while(!(ADCSRA & (1<<ADIF))); // auf Abschluss der Konvertierung warten (ADIF-bit)
result = ADCL + (ADCH << 8); // Wandlungsergebnisse erfassen
ergebnis = ergebnis + result; // Aufaddieren
i--;
}
// +-------- Umrechnung & Ausgabe -------+
ergebnis = ergebnis / ii ;
return ergebnis;
}