- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: klassse für adc

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2006
    Ort
    Salzgitter
    Alter
    35
    Beiträge
    25

    klassse für adc

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo,

    ich hab n problem mit meiner klasse für den adc.
    beim debuggen scheint das ganze zu funktioniern, und man kann damit arbeitn, nur dummerweise aufm controller dann nich.

    ich hab die klasse zusammen mit den methoden mal in ne datei verpackt und hochgeladen.

    freu mich über jede hilfe.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Du wartest auf den Interrupt, aber der ist gar nicht enabled.

    Statt dessen ist folgendes besser:
    Code:
    inline uint8_t readADC0( void )
    {
    	ADCSRA |= (1<<ADSC); //start conversion
    	// wait until conversion complete
    	while ( ADCSRA & (1<<ADSC) )
    	{
    		;
    	}
    
    	return ADCH; // 8 bit read
    }
    
    
    void initADC( uint8_t adcPrescaler )
    {
    	// External VRef (2.5V), ADC Pin0, Left adjusted result (we use only 8 bits)
    	// hence ADCSRB doesn't need modification
    	ADMUX = (1<<ADLAR);
    	DIDR0 = (1<<ADC0D);
    	// prescaler 64 ( =288KHz at 18.432MHz CPU clock)
    	// prescaler 128( =144KHz at 18.432MHz CPU clock)--> | (1<<ADPS0)
    	ADCSRA = (1<<ADEN) | adcPrescaler;
    }

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Ich weiß zwar nicht, was bei Dir da nicht klappt, aber das hier ist misst
    Code:
     m_AnalogData[Channel] =  ADCL;   // gelesenes Signal in vor-
     m_AnalogData[Channel] += ADCH;
    Du mußt die zwei Bits von ADCH an die richtige Stelle schieben und nicht addieren, etwa so
    Code:
     m_AnalogData[Channel] =  ADCL;   // gelesenes Signal in vor-
        m_AnalogData[Channel] += (ADCH<<8);
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    soweit ich weiß kann ma mit ADC beide register gleichzeitig auslesen, da muss ma sich dann keine sorgen machen

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Wenn Du beide register willst:

    Code:
    uint16_t result = ADC;
    Den Rest macht der Compiler.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    ich lieber compiler ASM is irgendwie nicht meine welt :P

    naja und noch ein kleiner tipp am rande, ich weiß jetzt net ob das der compiler macht, aber maskier die obersten 6 bit aus (wenn du 10bit ADC) hast

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2006
    Ort
    Salzgitter
    Alter
    35
    Beiträge
    25
    hm. danke erstmal.

    also auf meim stk500 funktioniert das ganze jetzt jedenfalls.
    muss ich wohl n fehler auf meiner platine haben.

    danke nochmal.

Berechtigungen

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

Solar Speicher und Akkus Tests