-
ADC Ports am RNMega2560
Hallo,
versuche vergeblich die ADC Ports mit angeschlossenen Sharp-Sensoren des RNMega2560 moduls auszulesen, so langsam denke ich jedoch es liegt nicht an meiner Programmierung sondern an einer Schaltungssache.
Ich habe die Signalkabel der Sensoren einfach aufs modul gesteckt, muss da nirgendwo noch ein Kondensator oder so rein, für die Referenzwerte.
Im Datenblatt auf der Seite 276 sieht das nämlich so aus...?!?! Ich meine die Anschlüsse AREF und AVC0
Danke im Voraus
-
Ok sorry sehe gerade das die Bauteile ja bereits auf der SMD Platine bestückt sind
-
Poste doch mal dein Programm!
jon
-
Hi
du brauchst doch insgesamt die Ports
- Signal
- AREF
- 0V
hast du die alle?
ich nimm für AREF 5V von der Board-Versorgungsspannung, habs aber an meinem Board noch net getestet, aber an der C-Control hats funktioniert. Ich glaub das es bei jedem Board vom Grundsatz her so geht.
Bene
-
Als AREF würde ich die internen 2,56Volt nehmen, da beim Sharp Sensor nicht mehr raus kommt.
Das analoge Signal kommt an einen ADC, GND vom Sensor an GND vom Board, VCC vom Sensor an 5,0Volt vom Board. Mehr ist da nicht falsch zu machen.
jon
-
Danke für die schnellen Antworten, das ist die Auslesefunktion
Code:
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
DIDR0=0x00;
DIDR2=0x00;
uint8_t i;
uint16_t result;
uint16_t ergebnis;
ergebnis = 0;
// +------------ Dummy-Check ------------+
i = 1; // 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;
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 / 10 ;
return ergebnis;
}
-
Beschaltet habe ich es so wie Jon beschrieben hat, funktioniert auf jeden fall, weil wenn ich das signalkabel an mein RNBFRA stecke funktioniert das auslesen mit dieser funktion problemlos.
Liegt dann doch wohl daran das ich irgendwelche Register in der Funktion falsch setze, weil der Atmega2560 ja mehrere hat als der ATmega32 :-(
-
*g* Da kann ich dir nicht mehr weiterhelfen, da ich kein C kann.
jon
-
Jon hattest Recht, es lag tatsächlich an der internen Referenzspannung.
Code:
ADMUX = (1<<REFS0) | (1<<REFS1); // Interne 2,56V als Referenz nehmen
Diese Zeile eingefügt und die Werte stimmen ;-)
Danke Gruß