www.mikrocontroller.net

Forum: Codesammlung ATmega ADC Test

Autor: Branko Golubovic (Gast)
Datum: 14.11.2005 23:42
Dateianhang: ADCTEST.zip (11,7 KB, 1973 Downloads)

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: 19.12.2005 09:44

Die Beobachtungen kann ich nur bestätigen. Wenn ich das mit einen
SAB80C515 vergleiche, sind die AVR ADCs super.
Autor: Norbert Lukoski (Gast)
Datum: 19.01.2006 17:28
Dateianhang: besser.c (1,7 KB, 539 Downloads) | formatierter Code

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: 11.02.2006 22:53

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: 17.02.2006 17:45

übrigens funktioniert auch
unsigned integer bla = ADC;
Autor: Frederik (Gast)
Datum: 04.03.2006 16:51

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: 06.03.2006 19:34

@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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net