-         

Ergebnis 1 bis 9 von 9

Thema: ADC Ports am RNMega2560

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123

    ADC Ports am RNMega2560

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123
    Ok sorry sehe gerade das die Bauteile ja bereits auf der SMD Platine bestückt sind

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Poste doch mal dein Programm!

    jon
    Nice to be back after two years
    www.roboterfreak.de

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    22.09.2006
    Ort
    Nürnberg
    Alter
    27
    Beiträge
    66
    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
    Wer Visionen hat, sollte zum Arzt gehen.
    Helmut Schmidt

    Unsere Webseite: GMG Robotik

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    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
    Nice to be back after two years
    www.roboterfreak.de

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123
    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;
    }

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123
    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

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    *g* Da kann ich dir nicht mehr weiterhelfen, da ich kein C kann.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123
    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ß

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •