mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel, CPU_clock geändert, ADC läuft nun nicht mehr richtig


Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende den Atmega3290p. Default-mäßig läuft er mit internen clk 
bei 1MHz. Mit diesem Takt konnte ich die Spannungen am ADC ohne Probleme 
messen.
Der zugehörende code (falls er hilfreich ist):
void adc_init(void)
{
    // PRR - Power Reduction Register
    // Bit 0 - PRADC: Power Reduction ADC
    PRR &= ~(1<<PRADC);         // dont shut down the ADC power
    
    // ADMUX - ADC Multiplexer Selection Register
    // Bit 7:6 - REFS1:0: Reference Selection Bits
    ADMUX &= ~(1<<REFS1);       // AVCC with external capacitor at AREF pin
    ADMUX |=  (1<<REFS0);       // AVCC with external capacitor at AREF pin
    // Bits 4:0 - MUX4:0: Analog Channel Selection Bits
    ADMUX &= ~(1<<MUX4);
    ADMUX &= ~(1<<MUX3);
    ADMUX &= ~(1<<MUX2);
    ADMUX &= ~(1<<MUX1);
    ADMUX |=  (1<<MUX0);
    
    // ADCSRA - ADC Control and Status Register A
    // Bit 7 - ADEN: ADC Enable
    ADCSRA |=  (1<<ADEN);
    // Bit 6 - ADSC: ADC Start Conversion
    ADCSRA |=  (1<<ADSC);

    // Bit 5 - ADATE: ADC Auto Trigger Enable
    // ADCSRA |=  (1<<ADATE);
    // Bits 2:0 - ADPS2:0: ADC Prescaler Select Bits
    ADMUX &= ~(1<<ADPS2);
    ADMUX &= ~(1<<ADPS1);
    ADMUX &= ~(1<<ADPS0);
}
void get_ADC(int adc_channel)
{
    // Bits 4:0 - MUX4:0: Analog Channel Selection Bits
    ADMUX = adc_channel;

    // Bit 6 - ADSC: ADC Start Conversion
    ADCSRA |=  (1<<ADSC);
    while ((ADCSRA & ( 1 << ADSC )));// stays high as long as is in progress
    // Werte stehen nun im ADCL und ADCH
}

Wenn ich den Takt nun aber auf 8 MHz (intern) erhöhe, bekomme ich nur 
noch falsche Werte geliefert. Kann mir jemand sagen was ich falsch 
mache?

Auch wenn ich den ADC Prescaler (ADMUX) ändere, stimmen meine Werte 
trotzdem nicht (So wie ich es verstanden habe, dürfte sich dies eh nicht 
auf die Richtigkeit der Messwerte auswirken).
Danke schon mal für die Antworten.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   Atmega3290p

meinst du Atmega3250p ?

Hans Wurst wrote:

>     // Bit 5 - ADATE: ADC Auto Trigger Enable
>     // ADCSRA |=  (1<<ADATE);
>     // Bits 2:0 - ADPS2:0: ADC Prescaler Select Bits
>     ADMUX &= ~(1<<ADPS2);
>     ADMUX &= ~(1<<ADPS1);
>     ADMUX &= ~(1<<ADPS0);

??..die ADPSX Bits sind doch im ADCSRA

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Davon abgesehen ist der Teilerfaktor 2 bei 8MHz zu klein. Atmel 
garantiert 50-200kHz, sagt aber, dass es bis 1MHz mit etwas verringerter 
Auflösung auch noch geht. Darüber misst man nur noch Mist.

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Justus Skorps wrote:
> meinst du Atmega3250p ?

Nein, er nennt sich zwar schon Atmega3290p, jedoch sind die 
Eigenschaften zwischen den meisten Atmels recht ähnlich (so wie ich das 
sehe).

> ??..die ADPSX Bits sind doch im ADCSRA

Ich Depp, was hatte ich denn da nur für einen Mist programmiert ;)

Jetzt funktioniert es wieder. Ich danke euch beiden.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans Wurst wrote:

> Nein, er nennt sich zwar schon Atmega3290p, jedoch sind die
> Eigenschaften zwischen den meisten Atmels recht ähnlich (so wie ich das
> sehe).

ah shit, ich hatte nur bei 'normalen' Megas geschaur

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.