ATmega8: AD-Wandler geht nicht

Gast #156162
Hallo,

beim meinem Versuch, (auf dem ATmega16 funktionierenden) Code für den
AD-Wandler vom ATmega16 auf den ATmega8 zu übertragen, ist was
schiefgegangen.

Der untenstehende Code funktioniert für den ATmega16 kompiliert im
Simulator einwandfrei. Für den ATmega8 kompiliert hängt er sich beim
zweiten "while(ADCSRA & (1 << ADSC));" auf. Das ADSC Flag wird nicht
zurückgesetzt. Als Simulator verwende ich AVRStudio 4.10 Build 356.

Was habe ich falsch gemacht???

MfG
- cl

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <inttypes.h>

int main(void)
{
        int i;

        ADCSRA = (1 << ADEN) | 0x06;
        ADMUX = 0x00;
        for (i = 0; i < 16; i++)
        {
                while(ADCSRA & (1 << ADSC));
                ADCSRA |= (1 << ADSC);
                while(ADCSRA & (1 << ADSC));
        }

        return(0);
}
Gast
Hat leider keine Veränderung gebracht. Hängt sich immer noch auf.

Durch die erste while-Schleife der ursprünglichen Version läuft er
durch und gelangt dann zur zweiten while-Schleife. Dort hängt er sich
auf.

gruebel
Gast
@A.K.: Der ADC-Takt war außerhalb. Teiler jetzt auf 128 geändert, geht
allerdings "genausogut" wie vorher, nämlich garnicht :-((((

In echter Hardware tut sich auch nix.

Mein Code sieht jetzt so aus:


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <inttypes.h>

volatile uint8_t x = 0;


int main(void)
{
        uint8_t x;

        DDRD = 0xff;

        ADCSRA = (1 << ADEN) | 0x07;
        ADMUX = 0x40;
        while(1)
        {
                ADCSRA |= (1 << ADSC);
                while(ADCSRA & (1 << ADSC));

                x++;
                if (x & 0x01)
                        PORTD = 0x00;
                else
                        PORTD = 0xff;
        }

        return(0);
}
Gast
Du hast DDRD=0xff und somit den gesamten PORTD auf Output initialisiert.
 Die Spannung die du an den ADC von außen anlegst die er Digitalisieren
soll ist aber INPUT :)

Versuch mal den endsprechenden Pin wo du die Spannung anlegst als Input
zu initialisieren. :)

mfg Christian
Gast
Wollte nicht das Datenblatt bemühen ^^ , war nur ein gedanke der mir
durch den Kopf ging als ich das gesehen habe :) und nu geh ich schlafen
g

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.