-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: mega32 und GP2D12 am adc mit krummen zahlen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Potsdam
    Beiträge
    27

    mega32 und GP2D12 am adc mit krummen zahlen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi,
    ich habe nen problem mit dem adc, auslesen funktioniert aber die ergebnisse sind merkwürdig ==> 20, 21 wenn ich meine hand dierekt vor den sensor halte, bei ca. 30 cm ist es dann immer hin noch eine 19 die ich zurück bekomme.

    Code:
    #define F_CPU 14745600UL
    
    void main(void) {
    		char buffer[16];
    //		int adc = (50 * ReadChannel(0)) / 1023;
    		adc = ReadChannel(0);
    		uart_puts_P("ch0:");
    		itoa(adc,buffer,10);
    		uart_puts(buffer);
    		uart_puts_P("\r\n");
    }
    
    uint16_t ReadChannel(uint8_t mux) {
      uint8_t i;
      uint16_t result = 0; //Initialisieren wichtig, da lokale Variablen
      uint8_t temp;
    
    //ADCSRA |= (1<<ADEN);  
      ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);   // requenzvorteiler
                              // setzen auf 8 (1) und ADC aktivieren (1)
    //  ADMUX = 0;
      
      ADMUX = mux; // Kanal waehlen
      ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
    //  ADMUX |= (1<<REFS0);
      /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
      also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
      ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
    
      while ( ADCSRA & (1<<ADSC) )   {
                      //konvertierung abwarten
                      }
    
    
      /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
      for(i=0;i<4;i++)
      {
        ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
        while ( ADCSRA & (1<<ADSC) ) 
        {
        ; // auf Abschluss der Konvertierung warten
        }
    
        result += ADCL; // Wandlungsergebnisse aufaddieren
        temp = ADCH;
      }
      ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)
      result /= 4; // Summe durch vier teilen = arithm. Mittelwert
      return result;
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    evtl. solltest Du den Port noch auf Eingang stellen, damit da auch was am ADC ankommt von deinem Signal

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Potsdam
    Beiträge
    27
    so was dummes

    habe das gleich mal gemacht,
    aber die zahlen liegen jetzt trotz dem nur bei ca. 240 wenn meine hand vor dem sensor ist und "zappeln" tut es auch dolle.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    der max. Wert sollte beim Abstand von 8 cm erreicht werden.
    Wenn der Abstand geringer wird, wird der Wert auch wieder kleiner !

    Mit der Hand wirds immer "zappeln", weil das ja IR ist, und von der Hand reflektiert werden muss, und je nachdem wie es zum Sensor zurückkommt, kommt ein anderer Wert raus, auch wenn scheinbar der Abstand gleich bleibt. Am besten mal gegen die Wand o.ä. halten, damit sich der Abstand nicht ändert.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    24.09.2006
    Beiträge
    84
    Zudem wenn die Werte sehr schwanken noch Kondensatoren anbringen .. hat bei mir sehr geholfen!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Potsdam
    Beiträge
    27
    okay, das werde ich dann mal testen heute abend....

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Hast du den Sensor senkrecht oder waagrecht montiert? Wenn man den waagrecht montiert, kann es zu Fehlern kommen.
    Als Kondensatoren sind 100µF Elko, 100nF Keramik und 10µF Tantal empfehlenswert.

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

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    kondensatoren brauchst du nur, wenn du eine kranke schwache stromversorgung hast. viele bastler nehmen ein 2 euro netzteil oder ein akku mit 3.5 mah. das geht natürlich nicht.

    hier muss man schon schön reinhauen, ein gesundes netzteil, welches auch gutes geld kostet oder ein akku mit 2,5 - 3,0 ah.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Potsdam
    Beiträge
    27
    so, hat nen bischen gedauert.
    habe grad noch nen wlan modul von ezTCP und nen ordentlichen accu drauf gebastelt
    jetzt aber zurück zum sensor, habe es mal mit wänden und papier getestet, da scheint es zu klappen und das mit dem accu, na ja s.o.

    kann das sein das der gp2d12 sehr träge ist und dünne gegenstände (hocker beine) nicht erfassen kann???

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Da der gp2d12 nur punktuell misst, kann das schnell passieren, dass der dünnere Gegenstände nicht erfasst.

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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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