Atmels AVR-ADC

Das Projekt ist als Grundlagentest der Fähigkeiten der MikroController der Firma Atmel Corporation entstanden.

Es ist als Einstieg in weiterführende Projekte gedacht. So kann zum Beispiel ein Messgerät zur Spannungsmessung entstehen.

Die Spannungsmessung erfolgt durch den eingebauten Analog-Digital-Wandler. Es wird hierzu beim AT90S4433/AtMega8 mit einem Poti eine Spannung an den Pin PC5(beim AtMega16 Pin PA5) gelegt. Um das Messergebnis sichtbar zu machen, wird das UART(USART) mit 9600 Baud initialisiert und der Messwert darüber zum PC gesendet. Nun kann man sich über ein Terminalprogramm oder das von mir geschriebene Windows-Programm die Messwerte anzeigen lassen. Die Messung startet durch Eingabe von ENTER und stoppt durch Eingabe eines beliebigen Zeichens(beim Windows-Programm durch den Button "Messung starten" bzw. "Messung stoppen").

Nachfolgend nun der Messaufbau: Es ist darauf zu achten, dass der Pin AGND mit GND sowie AREF und AVCC mit VCC verbunden werden müssen. ACHTUNG!!!! Ich habe nur die zusätzliche Beschaltung des MikroControllers skizziert. Für den Betrieb sind noch einige Dinge mehr nötig. Infos gibts hier: www.mikrocontroller.net im Bereich Tutorial. Zusätzlich ist darauf zu achten, dass für einen Wirkbetrieb noch eine LC-Kombination gegen das Rauschen einzubauen ist (siehe Datenblatt).

Spannungsmessung_AVR.gif
Abb. 1 - Testaufbau

 

Als letztes möchte ich nun noch kurz das C++-Programm vorstellen. Es ist als visuelle Ergänzung zum Terminalprogramm gedacht. Eine kleine Spielerei meinerseits, um zu testen, was machbar ist. Es steht unten zum Download bereit.

Spannungsmessung_Screenshot.jpg
Abb. 2 - Windowsprogramm

 

Dateien zum Projekt:
Quellcode AT90S4433 in Assembler (.zip 7 kB) nicht sehr schön :-)
Quellcode AT90S4433 in C (.zip 3,5 kB)
Quellcode AtMega8 in C (.zip 3,7 kB)
Quellcode AtMega16 in C (.zip 3,7 kB)
Quellcode AtMega32 in C - erstellt durch Raphaël Antoine(.zip 14 kB)
Windows-Programm Quellcode (.zip 980 kB)
Windows-Programm (.zip 307 kB)

Diese Seite präsentiert euch SWOD
Letzte Änderung 30.06.2007 :: SWOD

Kommentare:

Swod am 25.04.2011 - 22:01
Hallo Nadine,
da wären einige Dinge abzuklopfen:
1. Die Sache mit den FUSE-Bits in der AtMega-Reihe - kannst Du diese auslesen bzw. setzen? default interner Takt

2. Welche WinAVR Version nutzt Du gerade. Meine aktuellste ist die 20071221 (ist schon ein paar Tage her)

3. Bekommst Du Fehlermeldungen oder funktioniert der geflashte Code einfach nur nicht?

Das wars erst einmal von meiner Seite

Gruß Swod

Nadine am 20.04.2011 - 15:35
Hallo,

sehr schön das du dein Programm hier online stellst. Aber leider habe ich das Problem das ich eine ziemliche Anfängerin bin und es bei mir leider nicht funktioniert. Muss man etwas bestimmtes ändern damit das Programm mit der neuesten WinAVR Version und dem Atmega16 funtkioniert?

Vielen Dank schon mal für die Hilfe.

Nadine am 20.04.2011 - 15:34
Hallo,

sehr schön das du dein Programm hier online stellst. Aber leider habe ich das Problem das ich eine ziemliche Anfängerin bin und es bei mir leider nicht funktioniert. Muss man etwas bestimmtes ändern damit das Programm mit der neuesten WinAVR Version und dem Atmega16 funtkioniert?

Vielen Dank schon mal für die Hilfe.

Swod am 01.04.2006 - 10:03
Hallo Mathias,

das Projekt wurde mit WinAVR 20040720 erstellt. Die Entwicklung geht immer weiter und so werden bestimmte Variablen dann auch mal umbenannt (sihe ADCSR). Du musst diese dann einfach im Quellcode anpassen. Es kann sein, dass der Befehl "sbi" nicht mehr implementiert ist. Musst dazu mal die WinAVR-Seite befragen. Solltest Du gar nicht weiter kommen kann ich Dir auch meine WinAVR-Version zumailen.

Gruss Swod

Mathias am 30.03.2006 - 23:35
Hallo,
Ich versuche gerade Quellcode AtMega16 in C (.zip 3,7 kB) zu compilieren und bekomme mit WinAVR 20060125 Fehler wie:
undefined reference to sbi
ADCSR undeclared

iom16.h hat bei mir auch nicht ADCSR sondern ADCSRA.

Hast Du eine Idee was los ist?

Grüße
Mathias

b2b am 09.02.2006 - 17:42
Hi SWOD,
die oben gestellten Fragen von meinem letzten Kommentar kannst du getrost überlesen. Habe durch Probieren und Lesen das schon alleine hinbekommen. Brauchte nur einen Standardquarz OHNE Kondensatoren an XTAL1 (Pin9) und XTAL2 (Pin10) hängen, und schon konnte ich wieder auf den ATmega8 zugreifen. Man muss schon wissen, wie man mit PonyProg umzugehen hat! Ist aber ein SUPER Programm! Genau so wie deine Visualisierung! Kompliment! Alles funktioniert so wie du es beschrieben hast!
Gruß, b2

b2b am 08.02.2006 - 15:05
Hallo SWOD!
Ich benutze nicht das STK500 sondern die Schaltung ist noch auf einem Steckboard aufgebaut. Auf mikrocontroller.net ist im Tutorial der externe Takt wirklich an XTAL1 angeschlossen, kann ich auch einen Standardquarz mit zwei Pins nehmen? Wird er dann an XTAL1 und XTAL2 angeschlossen (inkl. Kondensatoren)? Welche Fuses hast du beim Atmega8 dafür eingestellt? Hatte den Fehler gemacht die Fuses leer zu lassen und bekomme keine Verbindung mehr zum Atmega8 (PonyProg).
Gruß, b2b

SWOD am 08.02.2006 - 12:56
Hallo b2b,
der Quellcode ist fürs STK500 geschrieben und wird somit extern mit 3,6864 MHz getaktet. Wenn Du einen anderen Takt verwenden willst, musst Du im Quellcode an folgender Stelle den Takt anpassen --> #define CLK 3686400.
Die RS232-UART-Schnittstelle funktioniert. Zum Anschluss des externen Taktes den PIN (XTAL1) aus dem Datenblatt suchen und ihn wie im Tutorial auf mikrocontroller.net beschrieben anschliessen.Bei AtMegaXX ist eine Fuse gesetzt gegen externen Takt, die man lösen muss.

b2b am 07.02.2006 - 00:45
Hallo.
Ich finde diese Seite sehr informativ! Habe aus Neugierde mal deine Schaltung nachgebaut und mit dem internen Oszillator des MCs getestet. Ich bekam nur Wirrwarr angezeigt (Baud 9600 / Clock int. 1MHz). Habe die RS232-UART-Schnittstelle auf www.mikrocontroller.net nachgebaut. Klappt das damit überhaupt?
Na gut, nun will ich einen externen Takt verwenden, wie schließe ich den denn am MC an? Muss ich da etwas beachten?
Gruß,
b2b

SWOD am 17.01.2005 - 18:01
Hallo Ferdinand,
Die Schaltung wird mittels UART/USART(serielles Kabel) an den COM-Port des PC's angeschlossen. Entweder nutzt man das Programmierboard STK500 von Atmel oder liest sich unter www.mikrocontroller.net unter Tutorial den Abschnitt UART genauer durch. Und schon sollte es mit der oben abgebildeten Aussenbeschaltung funktionieren. Um Abweichungen im Messergebnis durch Rauschen zu verhindern, kann man noch ein LC-Glied(steht im Datenblatt des MikroControlllers) einbauen.
Gruss SWOD

Ferdinand am 16.01.2005 - 01:19
Hi kanst du eine beschreibung wie man das an den pc anschlist und wie die schaltung perfekt im dauer betrib aus shehen müsste noch dazustelen oder mir als email schiken

ferdinand_haug@gmx.de

Danke

(p.s. deine seite ist nicht! schlecht gemacht (-; )

by Ferdinand

 Kommentieren Sie diesen Artikel 
Ihr Name:
Ihre E-Mail-Adresse:
   optional
Ihr Kommentar:
 
This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)