Elektronik und Roboterbau
AVR, avr-gcc, CAN, CPLD, Elektronik, Mikrocontroller, MSP430, PIC, Roboter, Schaltungen, Sensoren, Software, Testboards
Tags: Elektronik,
AVR,
Schaltungen
Stand: 23. September 2006, 01:33
14 Kommentar(e)
Es geht hier um die AVR-Grundschaltungen (in diesem Fall exemplarisch am ATMega8 gezeigt, aber natürlich auch auf fast alle anderen Typen übertragbar), also die Schaltungen die man braucht um den AVR betreiben zu können.
Der ATmega8 bzw. dessen Nachfolger ATMega48/88/168 eignen sich sehr gut für den Einstieg in die Mikrocontroller-Welt. Sie bieten bis zu 22 I/O Leitungen, 4 bis 16 kByte Programmspeicher und bis zu 1 kByte RAM. Viele der I/O-Pins lassen sich mit speziellen Funktionen wie einem Analog/Digtal Wandler oder asynchronen/synchronen serielle Schnittstellen wie SPI, I2C (bzw. TWI) oder USART belegen. Mit bis zu 16 MIPS bei 16 MHz ist er ausreichend schnell, so dass man auch aufwendigere Aufgaben damit bewältigen kann.
Um einen AVR zu betreiben ist erst einmal nicht viel Zubehör nötig. Die minimale Beschaltung besteht nur aus einer stabilen Versorgungsspannung (2,7 bis 5 Volt, je nach AVR und Taktfrequenz), einen Stützkondensator (ca. 100nF) der möglichst nahe am AVR angebracht werden sollte und einem Pull-Up Widerstand für den Reset-Pin. Dieser Pull-Up kann im Prinzip sogar weggelassen werden, allerdings wird dadurch der Reset sehr anfällig für Störungen, da der interne Widerstand sehr hochohmig (30-60 kOhm) ist.
Selbst wenn man den Analog/Digital Wandler nicht nutzt muss man, bei den AVR Typen die ihn integriert haben, die Pins AVCC und AGND anschließen, da es sonst zu Fehlfunktionen der entsprechenden Ports kommen kann.
Die beiden Bilder zeigen die einfachste Beschaltung eines ATMega8 mit internen Oszillator bzw. externem Quarz. Im Normalfall reicht der interne Oszillator für den Betrieb vollkommen aus, lediglich wenn man eine höhere Taktfrequenz als die normalerweise verfügbaren 8 MHz oder eine größere Genauigkeit (zum Beispiel wenn man den UART verwenden will) benötigt lohnt es sich einen externen Quarz anzuschließen.
Die Kondensatoren C2 und C3 sind abhängig von der verwendeten Taktfrequenz. Bei den normalerweise verwendeten Quarzen im Bereich bis 16 MHz sind 22pF ein guter Ausgangswert.
Die Taktfrequenz von Q1 darf maximal 16 MHz (teilweise auch 20 MHz bei einigen neueren Typen) bei 5 Volt betragen. Wird eine geringere Spannung verwendet muss eventuell auch eine geringere Taktfrequenz benutzt werden. Am besten nochmal im Datenblatt nach schauen, dort gibt es meist gleich auf der ersten Seite einige Richtwerte dazu.
Die dritte Schaltung zeigt den Anschluss einer externen Taktquelle, in diesem Fall einen Quarzoszillator. Dabei wird das Taktsignal nur an XTAL1 angelegt, XTAL2 bleibt unbeschaltet (bei manchen AVRs kann der Pin dann sogar als I/O-Pin verwendet werden).
Die verwendete Taktquelle muss dann noch per Fusebits aktiviert werden (meistens CKSELx).
Einige der AVRs habe einen 10-Bit Analog/Digital Wandler integriert. Dies erkennt man immer an den AGND, AREF, AVCC und ADCn Pins. Um den Analog/Digital Wandler zu benutzten sollte man die Schaltung folgendermaßen abändern:
Die meisten neueren AVRs wie die ATMegas oder ATTinys bieten eine interne Referenzspannung von 2,56 Volt oder 5 Volt. Diese lässt sich dann über die entsprechenden ADC Register aktivieren. In diesem Modus sollte man einfach einen Kondensator von AREF nach GND legen um die Referenzspannung nochmals zu stabilisieren.
Weiterhin kann man als Referenzspannung eine beliebige, externe Spannung zwischen VCC und ca. 2 Volt wählen. Wird eine Referenzspannung geringer als 2 Volt verwendet kann es sein das die Analog/Digital-Wandlung keine korrekten Ergebnisse liefert. Im zweiten Bild oben ist die Spannung über ein Poti einstellbar. Genauso gut kann man einen Spannungsteiler aus zwei Widerständen oder ähnliches benutzten. Auch hier sollte die Spannung über einen Kondensator stabilisiert werden.
Um die Genauigkeit der Messung weiter zu erhöhen kann man noch zusätzlich die Spule L1 zwischen ACC und VCC schalten. Dies stabilisiert die Versorgung des ADC zusätzlich, so dass sich Störungen der Versorgungsspannung nicht so stark auf den Messwert auswirken. Weitere Techniken sind in den jeweiligen Datenblatt in dem Kapitel: “Analog Noise Canceling Techniques” beschrieben.
An den ADCn Pins kann man jetzt die anliegende Spannung messen. Allerdings muss man aufpassen, dass diese nicht höher als die Spannung an AREF wird.
Die AVRs lassen sich sehr einfach in der Schaltung über die ISP-Schnittstelle programmieren. Dazu benötigt man lediglich 4 Pins.
Die 10-poligen Stecker haben sich als quasi Standard etabliert (siehe den Artikel zu AVR Programmieradaptern). Wenn man bei seinen Schaltungen wenig Platz hat kann man natürlich auch einen 6-poligen Stecker verwenden. Das funktioniert genauso, allerdings besitzen die meisten Programmieradapter diesen 10-poligen Stecker. Die Belegung sieht dabei folgendermaßen aus:
Pin | Funktion | Pin | Funktion |
---|---|---|---|
1. | MOSI | 2. | VCC |
3. | N.C. | 4. | GND |
5. | RESET | 6. | GND |
7. | SCK | 8. | GND |
9. | MISO | 10. | GND |
Die Programmierpins entsprechen fast immer, wie im oberen Bild dargestellt, den Pins der SPI Schnittstelle. Eine Ausnahme stellt hier der ATMega128 bzw. der AT90CAN128 dar. Diese werden (warum auch immer) nicht über den MISO- und MOSI-Pin programmiert, sondern über die Pins PE0 und PE1 (siehe Seite 300 im Datenblatt).
Speziell zu diesen Thema gibt es von Atmel eine Application Note: AVR Hardware Design Considerations. Dort wird dann nochmal detailliert beschrieben worauf man beim Schaltungsentwurf achten sollte.
Kommentare
# johnny.m meinte am 22. Januar 2007, 09:38 dazu:
In den Schaltbildern im Abschnitt Grundschaltung ist der Pin AREF mit AVCC bzw. VCC verbunden, was unsinnig ist. Im nächsten Abschnitt steht es zwar richtig, aber das führt nur zur Verwirrung. Das Verbinden von AREF und AVCC war nur bei den alten AT90Sxxxx-AVRs erforderlich, wenn man AVCC als Referenz verwenden wollte. Beim dargestellten ATMega8 sind ausschließlich die im Abschnitt A/D-Wandler dargestellten Beschaltungen sinnvoll.
# Max meinte am 30. Januar 2007, 23:22 dazu:
Habe einen ATmega8 wie im dritten Bild unter A/D-Wandler, also das mit der Spule beschaltet, beschaltet. Seit dem Funktioniert die Übertragung per USART nicht mehr richtig, also es kommt nur ein Haufen Müll an. Hab den Avr und den Max232 in anderen Schaltungen getestet, da funktionierte alles. Es muss also an dieser Beschaltung liegen. Kann das sein?
# Fabian Greif meinte am 31. Januar 2007, 01:05 dazu:
Nein, der Fehler muss irgendwo anders in der Schaltung liegen. Funktioniert die Übertragung den wenn du die Spule überbrückst?
# Max meinte am 1. Februar 2007, 23:17 dazu:
Nein.Auch dann funktioniert die Übertragung nicht.Woran kann es sonst noch liegen? Der atmega ist richtig programmiert[er funktioniert in einer anderen schaltung] und auch alle anderen Funktionen funktionieren.
# Fabian Greif meinte am 2. Februar 2007, 20:36 dazu:
Ich würde spontan auf kalte Lötstellen, Unterbrechungen in den Leitungen oder ähnliches tippen. Die Beschaltung des ADCs sollte mit der UART Übertragung überhaupt nichts zu tun haben!
# Alois meinte am 30. März 2007, 16:35 dazu:
Die Spule zwischen AVcc und Vcc ist unbedingt notwendig. Das Messergebnis vom ADC wird dadurch erheblich verbessert! Der Aref Pin sollte Grundsätzlich über einen C an Masse liegen wie es bei Punkt 2 gezeigt wurde. Die Beschaltung des ADCs und des UART stehen in keinen Zusammenhang.
# Peppe meinte am 25. September 2007, 02:12 dazu:
Hallo,
ersteinmal ein Lob dafür, dass du dein wissen weitergibst. Kleine Anmerkung, die 100nF zwischen vcc und gnd, dass ist kein Stützelko. Dieser Kondensator ist dazu da, um Hf kurz zu schliesen. Deshalb soll dieser auch so nah wie möglich an den µc. 100nF wirst du an fast jedem IC wieder finden und die dienen alle dazu um Hf ?kalt? zu machen.
Mal eine Frage: Wo finde ich denn dein Archiv?
# Fabian Greif meinte am 25. September 2007, 12:58 dazu:
Welches Archiv den?
# hans-johann meinte am 1. Mai 2008, 23:17 dazu:
hallo,
nette site.
im abschnitt A/D-Wandler wird im 3. bild beim LC netzwerk der AVCC beschaltung ein 10nF kondensator verwendet. im atmega32 datenblatt (s.210) wird jedoch ein wert von 100nF genannt. warum?
# Simon meinte am 7. Juni 2008, 13:05 dazu:
beim dritten Bild AD-Wandler ( Bild mit L1 10 uH ) habe ich zwei Fragen:
1) ich will die Spannung messen ( an einem ADCn Pin ) am Abgriff eines 4.7K Poti, welches zwischen GND und ca. 5V haengt ( jedoch stabilere Spannung als VCC ), d.h. es fliesst ueber das Poti ca. 1 mA. Ist es nun richtig, wenn ich AVCC via Spule NICHT an VCC haenge, sondern an meine stabilisierten 5V ? Und dass ich auch mein Poti NICHT an VCC haenge sondern an meine stabilisierten 5V ? Anmerkung: eigentlich moechte ich lieber AREF verwenden, darf aber AREF offenbar NICHT mit ca. 1 - 5 mA belasten … und ich kann mein Poti leider auch nicht hochohmiger auslegen.
2) ich will die Spannung messen ( an einem ADCn Pin ) am Abgriff eines 4.7K Poti, welches zwischen GND und ca. 3V haengt, d.h. es fliesst ueber das Poti ca. 0.6 mA. Ist es nun richtig, wenn ich AVCC via Spule NICHT an VCC haenge, sondern an meine stabilisierten 3V ? Und dass ich auch mein Poti NICHT an VCC haenge sondern an meine stabilisierten 3V ?
Alles andere wuerde ich ansonsten belassen wie im dritten Bild, insbesondere auch die AREF-Beschaltung ( d.h. ich verwende AREF eigentlich gar nicht )
# Simon meinte am 7. Juni 2008, 13:35 dazu:
meine Anfrage von soeben … ev. ist das alles ganz anders gedacht ?
Ich frage mich nun, ob AVCC eigentlich IMMER gleich sein MUSS wie VCC … nur bei Moeglichkeit etwas “gesaeubert”. Und dass ich an AREF nun aber MEINE stabilisierte Spannung ( 5V resp. 3V ) anlege … und daher mein Poti nun eben DOCH an AREF haengen kann ( trotz Last von 1-5 mA !!! ) ?
Sooooo wuerde ich es eigentlich als logisch empfinden, aber die maximale Belastbarkeit von AREF im uA-Bereich gemaess Datenblatt haelt mich von diesem Unterfangen ab !
# Fabian Greif meinte am 14. Juni 2008, 02:04 dazu:
Zitat aus dem Datenblatt des ATMega644:
?AVCC must not differ more than ±0.3 V from VCC?
AVcc und Vcc müssen also immer irgendwie zusammenhängen, sei es direkt oder über einen RC/LC-Filter.
Deine Referenzspannung (in dem Fall also deine 5V bzw. 3V legst du dann an AREF Pin an und stellst den ADC auf externe Referenzspannung.
Die Belastbarkeit von AREF bezieht sich nur auf das verwenden der internen Referenzspannungsquellen von 1,1V oder 2,56V (je nach AVR). Da du aber schon eine belastbare Spannung zur Verfügung stellst brauchst du die interne nicht.
Zu Beachten ist allerdings noch der Spannungsbereich von AREF, der liegt bei 1V (2V bei älteren AVRs) bis AVcc, höher oder niedriger darf die Referenzspannung nicht werden.
Zu finden sind diese Werte unter ?Electrical Characteristics > ADC Characteristics? im Datenblatt des AVRs.
Grüße Fabian
# Max meinte am 20. August 2008, 17:04 dazu:
klasse
# Basil meinte am 24. Februar 2012, 18:17 dazu:
Danke viel Mal fürs Teilen deines Wissens!
Hat mir viel weiter geholfen MERCI :)
Deine Meinung: