www.mikrocontroller.net

Forum: Projekte & Code ATmega ADC Test


Autor: Branko Golubovic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm testet Messchwankungen bei konstanter Spannung an ADC0 und
ADC1 Eingang.
Das Programm misst 1000mal gewählte Analog Eingang und bei jeder
abgeschlossenen ADC Konversion aktuelisiert Häufigkeitstabelle.
Messresultat wird uber Serielle Schnittstelle(9600,8,N,1)an
Terminalprogramm Übertragen.
Ich habe von meiner einseitigen Platine mit ATmega32 erstaunlich
gute Ergebnisse erreicht.
Sogar bei 200-facher Verstärkung bleibt Offset in +-1LSB(50µV)
Gränzen.
Messresultat bleibt apsolut Stabil bei Single Ended und
Differential Eingag bei 1 und 10-facher Verstärkung.
Erst bei 200-facher Vestärkung sind Messschwankungen +-5LSB,was sich
mit Aufsummierung von 16 Messresultaten beseitigen kann.

Autor: jozi59 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Beobachtungen kann ich nur bestätigen. Wenn ich das mit einen
SAB80C515 vergleiche, sind die AVR ADCs super.

Autor: Norbert Lukoski (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo. Hab ein kleines Problem. Arbeite zum ersten mal mit dem AVR
Atmega8 und möchte über den ADC0 Eingang eine Spannung einlesen und
über 7-SegmentAnzeige ausgeben lassen. Spannung kommt am Eingang an und
ich denke das der ADC im frei laufenden Betrrieb läuft, aber er spuckt
komische Zahlen auf der Anzeige aus. Meine MEinung ist, dass es an der
Ergebnisroutine liegt. Wenn wir in meine VAriable "value" einen Wert
definieren rechnet er den entsprechenden Wert aus und gitb ihn auch
richtig auf der Anzeige aus. Aber wenn er sich die Werte über den
Eingang ADC0 holen soll und diese dann in ADCL und ADCH reinschreibt
kommt nur Null raus. Kannst du mir vielleicht helfen?

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch doch mal, den Wert ADCL direkt auf ein Port auszugeben.

 value=ADCL;            //Read 8 low bits first (important)
 value|=((int)ADCH << 8); //read 2 high bits and shift into top byte

 PORTD=ADCL;
 wenn Du ein zweites Port freihast, kannst Du da HighByte auch noch
ausgeben (muss nicht sein):
 PORTx=ADCH;
Jetzt siehst Du direkt, was der ADC liefert.
Was hängt denn an PortD? ein Siebensegment?
Dann kommen mir aber die "case-Tabellen"werte komisch vor.

Nebenbei, so geht es eleganter:

char
bitmuster[10]={0x00,0x01,0x10,0x11,0x08,0x09,0x18,0x19,0x02,0x03};

void ausgabe (int x)
{
  PORTD=bitmuster[x];
}

Doch wehe, wenn x nicht im Bereich 0..9 liegt, dann gibt's
random-Ergebnisse.
Wenn Sicherheit eine Rolle spielt, doch besser:
  if (x>=0 && x<=9) {PORTD=bitmuster[x];}

Wenn x statt   int   ein   unsigned int   ist, reicht auch:
  if (x<=9) {PORTD=bitmuster[x];}
da x dann nicht negativ sein kann.


Zum Debuggen immer Systematisch aufteilen. zuerst Anzeige sicherstellen
(zum Test z.B. mit einer Schleife 0..1000 anzeigen, dann ADC-Handler
angehen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übrigens funktioniert auch
unsigned integer bla = ADC;

Autor: Frederik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wollte das Programm testen. Da ich bisher nur mit Assembler programmiert
habe, weiss ich nicht, was ich mit den verschiedenen Dateien anzufangen
habe.

mein Controller: Atmega16
Software: AVR Studio 3.55
zum überspielen: PonyProg2000

Habe bisher ein neues Projekt erstellt, (c-files und h-files eingefügt,
was ist mit den anderen Dateien aus dem zip-file (ADCTEST.zip)? Geht das
alles überhaupt?)

Wäre nett, wenn mir hier jemand weiterhelfen könnte

Gruss, Frederik

Autor: Branko Golubovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Frederik

1: WinAVR-20050214 Download
http://sourceforge.net/project/showfiles.php?group_id=68108

2: WinAVR installieren

3: ADCTEST.zip auspacken in z.B. .../WinAVR/Projekte/ADCtest

4: WinAVR(PN.exe) starten

5: Dataien öffnen

6: in makefile MCU  auf MCU = ATmega16 endern

7: make all

8: main.hex überspielen

Branko

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.