Ok sorry sehe gerade das die Bauteile ja bereits auf der SMD Platine bestückt sind
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.
Diese Zeile eingefügt und die Werte stimmenCode:ADMUX = (1<<REFS0) | (1<<REFS1); // Interne 2,56V als Referenz nehmen
Danke Gruß
Lesezeichen