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.
Die Beobachtungen kann ich nur bestätigen. Wenn ich das mit einen SAB80C515 vergleiche, sind die AVR ADCs super.
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?
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.
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
@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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.