Hersteller der AVR-Controllerserie ist Atmel.
Es gibt eine ganze Serie von AVR-Controllern. Sie alle werden ähnlich programmiert bieten jedoch unterschiedliche Features (I/O Leitungem, Timer, Pwm-Ports usw.) Es gibt inzwischen Entwicklungssysteme in den Sprachen Basic, C, Pascal und Assembler für diese Controller. AVR steht angeblich für Advanced Virtual RISC (in einem Paper von Alf Egin Bogen und Vegard Wollan)
- 8 Bit Architektur ist für Hochsprachen (C) optimiert
- Harvard-Architektur (getrennter Befehls- und Datenspeicher)
- 32 Register, kein Akkumulator, 3 Pointerregister
- In-System progammierbar - Das bedeutet der Controller kann sehr einfach über ein Programmierkabel (oft ISP-Kabel genannt ) das mit dem PC verbunden wird programmiert werden, auch dann wenn sich dieser in einer Schaltung befindet
- JTAG (Debugerinterface)
- AVR Typen (AT90, ATtiny, ATmega)
- Viele Entwicklungsboards erhältlich, z.B. das Roboternetzboard RN-Control
Inhaltsverzeichnis
Einige Pinbelegungen der populärsten Controller im Roboternetz
(in etwa nach Leistungsfähigkeit sortiert)
- AT90S2313
- Atmel Controller Mega8
- Atmel Controller Mega48 Mega88 Mega168
- Atmel Controller Mega16 und Mega32
- Atmel Controller Mega128 - SMD-Chip
Die AVR-Pin-Bezeichnungen und deren Funktion
Die meisten Ports sind doppelt belegt und besitzen neben der normalen Port-Funktion noch eine Sonderfunktion. Die verschiedenen Pinbezeichnungen und Sonderfunktionen werden hier beschrieben:
PA 0 – 7 | Port A - Ein 8 Bit breiter, bi-direktionaler I/O Port. Jeder Pin des Ports kann individuell als Eingang oder Ausgang konfiguriert werden. |
PB 0 – 7 | Port B - Ein 8 Bit breiter, bi-direktionaler I/O Port. Jeder Pin des Ports kann individuell als Eingang oder Ausgang konfiguriert werden. |
PC 0 – 7 | Port C - Ein 8 Bit breiter, bi-direktionaler I/O Port. Jeder Pin des Ports kann individuell als Eingang oder Ausgang konfiguriert werden. |
PD 0 – 7 | Port D - Ein 8 Bit breiter, bi-direktionaler I/O Port. Jeder Pin des Ports kann individuell als Eingang oder Ausgang konfiguriert werden. |
XCK | Externe Takt für UART. Wird nur in Sonderfällen für Baudrate benötigt.
UART ("Universal Asynchronous Receiver and Transmitter"). Das ist die serielle Schnittstelle, die zur Datenübertragung zwischen Mikrocontroller und PC genutzt wird. Zur Übertragung werden zwei Pins am Controller benötigt: TXD und RXD. Über TXD ("Transmit Data") werden Daten gesendet, RXD ("Receive Data") dient zum Empfang. |
T0 | Timer Eingang. Timer kann gestartet, gestoppt oder getaktet werden |
T1 | Timer Eingang. Timer kann gestartet, gestoppt oder getaktet werden |
AIN0 | Erster Eingang des Analog Komperators.
Mit AIN0 und AIN1 kann man zwei Spannungen miteinander vergleichen. Wenn die Spannung an AIN0 höher als bei AIN1 ist, liefert der Komparator "High", wenn umgekehrt ein "Low". |
AIN1 | Zweiter Teil des Analog Komperators
Mit AIN0 und AIN1 kann man zwei Spannungen miteinander vergleichen. Wenn die Spannung an AIN0 höher als bei AIN1 ist, liefert der Komparator "High", wenn umgekehrt ein "Low". |
OC0 | PWM bzw. Output Compare Ausgang des Timers 0 |
SS | SPI-Interface – wird beneötigt um den richtigen Slave am Bus zu wählen |
MOSI | SPI-Interface – Datenausgang (bei Slave Eingang) |
MISO | SPI-Interface – Dateneingang (bei Slave Ausgang) |
SCK | SPI-Interface – Bustakt vom Controller |
RESET | Rücksetz Eingang. Ein log. 0 – Pegel an diesem Pin für die Dauer von mindestens zwei Zyklen des Systemtaktes bei aktivem Oszillator setzt den Controller zurück |
VCC | Betriebsspannung 5 V
(2,7 Volt bis 6 V bei 8 Mhz, die nächsten AVRs sollen ab 1,8 Volt funktionieren ) |
GND | Masse |
XTAL1 | Eingang des internen Oszillators zur Erzeugung des Systemtaktes bzw. Eingang für ein externes Taktsignal, wenn der interne Oszillator nicht verwendet werden soll |
XTAL2 | Ausgang des integrierten Oszillators zur Erzeugung des Systemtaktes |
RXD | Serielle Schnittstelle Eingang TTL-Pegel |
TXD | Serielle Schnittstelle Ausgang TTL-Pegel |
INT0 | Externe Interrupt |
INT1 | Externe Interrupt |
INT2 | Externer Interrupt 2 |
OC1A | Ausgang für die Compare-Funktion des integrierten Zeitgeber- / Zählerbausteines
Der erste PWM Ausgang des Timers1. Er wird oft zum Regeln der Bot-Motogeschwindigkeit benutzt. |
OC1B | Ausgang für die Compare-Funktion des integrierten Zeitgeber- / Zählerbausteines
Der zweite PWM Ausgang des Timers1. Er wird oft zum Regeln der Bot-Motogeschwindigkeit benutzt. |
ICP1 | Eingang für die Capture-Funktion des integrierten Zeitgebers / Zählerbausteines |
ADC0 bis ADC7 | Eingänge des Analag nach Digital (AD) Wandlers. Spannungen können hier gemessen werden. |
AREF | Referenzspannung für Analog-Digitalwandler (wird meist auf 5 V gesetzt) |
GND | Masse |
AVCC | Analog Digital Wandler (siehe Beschaltungsskizze)
Die Betriebsspannung für den AD Wandler. Die Pins AVCC, AGND und AREF sollten immer beschaltet werden, da es sonst es passieren kann, dass Port A nicht richtig funktioniert, selbst wenn man den AD Wandler nicht benutzt |
TOSC1 | TOSC1 und 2 sind Eingänge für den Asyncronen Modus von Timer2. Sie sind vorgesehen für den Anschluss eines externen Uhrenquarzes ( 32.768 kHz ). Damit lässen sich zum Beispiel sehr genaue 1 Sekunden Impulse für eine Uhr generien... |
TOSC2 | TOSC1 und 2 sind Eingänge für den Asyncronen Modus von Timer2. Sie sind vorgesehen für den Anschluss eines externen Uhrenquarzes ( 32.768 kHz ). Damit lässen sich zum Beispiel sehr genaue 1 Sekunden Impulse für eine Uhr generien... |
TDI | JTAG-Debug Interface |
TDO | JTAG-Debug Interface |
TMS | JTAG-Debug Interface |
TCK | JTAG-Debug Interface |
SDA | I2C-Schnittstelle (Bus aus 2 Leitungen) Datenleitung |
SCL | I2C-Schnittstelle (Bus aus 2 Leitungen) Clockleitung |
OC2 | Pwm bzw. Output Compare Ausgang des Timers2 |
Die Fusebits
Fusebits nennt man bestimmte Bits zur Konfigurierung eines AVR-Controllers. Bei der Auslieferung neuer AVR Controller sind die Fusebits bereits vorkonfiguriert. In vielen Fällen kann man die Konfiguration unverändert belassen, je nach Controllertyp. Bei den Typen Mega xxx bestimmen einige Fusebits beispielsweise, dass der interne Taktgeber aktiviert ist. Möchte man dagegen einen externen Quarz anschließen oder die Taktfrequenz ändern, so müssen auch die Fusebits geändert werden. Auch das Deaktivieren des "On Chip Debugging" Modus ist oft notwendig, wenn man alle Ports ausnutzen möchte.
Die Fusebits werden in der Regel über die Software eingestellt, welche auch für das Übertragen des Programmcodes zuständig ist. Besonders einfach geht dies beispielsweise mit der Entwicklungsumgebung Bascom. Aber auch andere Programme wie PonyProg können für die Umstellung der Fusebits genutzt werden. Einmal eingestellte Fusebits bleiben bis zur erneuten Fusebit-Änderung erhalten. Der normale Programmiermodus verändert die Fusebits nicht.
Je nach AVR Controllertyp sind unterschiedliche Fusebits (Einstellungen) vorhanden. Die genaue Beschreibung findet man im jeweiligen Datenblatt. Da aber falsch gesetzte Fusebit-Einstellungen zu den häufigsten Problemen gehören, liste ich hier die Funktion der üblichen Fusebits nochmals genauer auf:
CKSEL0, CKSEL1, CKSEL2, CKSEL3 | Die Kombination dieser 4 Fusebits bestimmt die Taktquelle des Controllers. Das kann eine interner Taktgenerator, ein Quarz, Quarzoszillator, RC-Glied und ähnliches sein. |
JTAGEN | Hiermit wird die "On Chip Debugging" Schnittstelle aktiviert bzw. deaktiviert. Das sind die Bits mit den Bezeichnungen TDI, TDO, TMS und TCK. Möchte man diese Pins als normalen Port nutzen, so muss diese Schnittstelle immer deaktiviert werden. |
SUT0, SUT1 | Die sogenannte StartUp-Zeit (PowerOn delay). Diese Einstellung muss abhängig von der Art des Taktgenerators eingestellt werden, genaueres im jeweiligen Datenblatt. |
SPIEN | Hiermit kann die serielle ISP-Programmierung, welche die meisten Programmierkabel nutzen, deaktiviert werden. Dies sollte man lieber vermeiden, denn wenn dieser Programmiermodus deaktiviert wurde, kann nur noch der Parallel-Programmiermodus genutzt werden. Der Parallel-Programmiermodus benötigt jedoch ein spezielles Programmiergerät, das die wenigsten Bastler besitzen. Also Vorsicht! |
BODEN | Über dieses Bit wird der Brown-out Detector aktiviert bzw. deaktiviert. Dies ist eine Überwachung der Betriebsspannung. Diese Überwachung soll dafür sorgen, dass bei Spannungseinbrüchen ein ordentlicher RESET durchgeführt wird. Dadurch wird verhindert, dass ein Controller in einen undefinierten Zustand gerät (hängen bleibt). |
BOOTLEVEL | Über dieses Bit kann die Spannung festgelegt werden, ab welcher der Brown-out Detector den Controller neu startet (also RESET ausführt). |
BOOTRST | Gewöhnlich startet ein Programm im Controller nach einem RESET ab Adresse 0. Durch dieses Fusebit kann der Controller jedoch veranlasst werden, nach einem Reset einen sogenannten Bootloader-Bereich auszuführen. Ein Bootloader kann genutzt werden, um Controller über andere Schnittstellen (z.B. RS232) zu programmieren. |
BOOTSZ0, BOOTSZ1 | Der zuvor genannte Bootloaderbereich kann bei AVR-Controllern verschieden groß sein. Über diese beiden Bits können vier verschiedene Größen eingestellt werden. Siehe unter Bootloader. |
EESAVE | Dieses Bit legt fest, ob beim Programmieren des Controllers (man nennt es auch brennen) immer das EEPROM gelöscht werden soll. |
CKOPT | Abhängig von den Einstellungen von CKSEL kann hier dir Oszillator-Verstärkung eingestellt werden. Genaueres im Datenblatt des jeweiligen Controllers. |
WDTON | Schaltet den WatchDog-Timer beim Booten ein/aus. Dies ist auch per Software möglich |
RSTDISBL | Durch dieses Bit kann man den RESET-Pin deaktivieren und dann als normalen I/O-Port nutzen. Aber Vorsicht! Da die RESET-Leitung beim Programmieren (Brennen) des Chips genutzt wird, kann man nach dessen Deaktivierung den Controller mit den üblichen ISP-Adaptern nicht mehr programmieren. In diesem Fall könnte man zwar den Controlle noch mit speziellen Programmiergeräten im Parallelmodus programmieren, aber in der Praxis verfügen nur wenige Bastler über ein Programmiergerät, das dies leistet. |
LB1, LB2 | Das sind die sogenannten Lockbits, mit denen sich das Auslesen des Flash- als auch EEPROM-Speichers verhindern läßt. Zwar können andere Anwender immer noch Daten lesen, allerdings handelt es sich dabei nicht mehr um den wirklichen Inhalt sondern lediglich um wirre Datenbytefolgen. Programmierer, die den erarbeiteten Code vor Raubkopierern schützen wollen, nutzen diese Lockbits. Das Programmieren ist auch bei gesetzen Lockbits noch möglich. Der Bootloader-Bereich wird nicht durch die Lockbits geschützt. |
BLB01, BLB02 | Durch diese Bits kann der Code sogar vor dem Zugriff durch den Bootloader geschützt werden |
BLB11, BLB12 | Diese Bits schützen den Bootloaderbereich selbst |
Wie man die Fusebits mit Bascom einstellt, wird im Beitrag Bascom - Erstes Programm in den AVR Controller übertragen erläutert.
--Frank 19:49, 29. Nov 2005 (CET)
Siehe auch
- AVR-ISP Programmierkabel - Bauanleitung für die AVR Controller Programmierkabel
- RN-Control - Eines der beliebtestet AVR-Boards im Roboternetz
- RNBFRA-Board - Größeres Board mit zwei Atmel Controllern
- Bascom - Sehr gutes Basic-Entwicklungssystem
- Bascom - Erstes Programm in den AVR Controller übertragen
- avr-gcc - Leistungsfähiger AVR-Port des freien Compilers GCC
- On Chip Debugging
- Bootloader