AVR 8-Bit RISC

Atmel's AVR microcontrollers have a RISC core running single cycle instructions and a well-defined I/O structure that limits the need for external components. Internal oscillators, timers, UART, SPI, pull-up resistors, pulse width modulation, ADC, analog comparator and watch-dog timers are some of the features you will find in AVR devices.

Datenblätter

AVR 8-Bit RISC Devices

AT90S8515

Download (pdf)

ATmega16(L)

Download (pdf)

AT90USB64x / AT90USB128x

Download (pdf)

User Guide

AVR Instruction Set

Download (pdf)

Programme

  • AVR-GCC ist ein kostenloser C-Cross-Compiler für AVR-Mikrocontroller. Die Windows-Installation wird auf dieser Seite beschrieben.

  • AVRStudio ist ein Assembler und Debugger für AVR-Mikrokontroller von Atmel. Neuerdings kann auch AVR-GCC im AVRStudio integriert werden. Dazu muss AVR-GCC vorgängig installiert sein. Beachten Sie, dass Sie den neusten Service Pack für AVRStudio auch herunterladen und installieren.

Bibliothek

Für den AVR gibt es eine C-Bibliothek, die avr-libc. Die Bibliothek wird von WinAVR benutzt und ist in WinAVR enthalten. Die folgende Liste zeigt einen Teil der Funktionalität der Bibliothek: Startup-Code, AVR spezifische IO Definitionen, Watchdog Handling, Standard IO, mathematische Funktionen, Interrupts, CRC Berechnung, Delays, ...

Die Dokumentation, welche auch eine gut FAQ Sammlung, generelle Informationen und Beispiele enthält, finden Sie auf der avr-libc Doku-Seite. Ein PDF der Doku ist ebenfalls in der WinAVR Distribution enthalten.

Debugging

AVRStudio beinhaltet einen guten Debugger, welcher für Assembler und C-Code (WinAVR muss installiert sein), verwendet werden kann. Eine Alternative ist die Verwendung des GNU Debuggers GDB, welcher in Eclipse integriert werden kann (Link) .

Je nach Mikrokontroller-Typ stehen unterschiedliche Schnittstellen für das Herunterladen und zum Debuggen zur Verfügung. Die unterstützten Schnittstellen sind in der Beschreibung zum jeweiligen Mikrokontroller und im Datenblatt aufgeführt.

  • ISP: In System Programming

    Über den ISP (oder JTAG) Port kann der Mikrokontroller programmiert werden. Mit diesem Verfahren können auch Fuse-Bits verändert werden. Der STK500 Entwicklungskit ( „Entwicklungs Kit“ ) hat einen ISP Programmer integriert.

  • JTAG

    Der JTAG-Port wird für das Programmieren, Debuggen und Testen verwendet. Nicht jeder AVR Prozessor hat eine solche Schnittstelle. Um die JTAG-Schnittstelle benutzen zu können, wird spezielle Hardware benötigt. Ein günstiger JTAG ICE-Adapter kann von Olimex gekauft werden. Allerdings unterstütz dieses Modell nicht alle AVR-Typen mit JTAG (z.B. AT90USBxxxx). Der einiges teurere Atmel JTAG mkII Debugger unterstützt alle Typen. Beachten Sie, dass die Pinbelegung je nach Typ unterschiedlich ist.

  • debugWire

    Das debugWire On-chip Debug System benutzt eine 1-Draht bidirektionale Schnittstelle um den Programmfluss zu kontrollieren, AVR Instruktionen auszuführen oder nicht-volatiles Memory zu programmieren. Um diese Schnittstelle zu verwenden, ist der teure Atmel JTAG mkII Debugger (~450 CHF) nötig.

Am Beispiel des ATmega16 wird erklärt, welche Tools und Schnittstellen verwendet werden können.

Will man den ATmega16 nur programmieren genügt ein ISP-Programmer. Dazu kann zum Beispiel der STK500 Entwicklungskit verwendet werden. Für das Debugging muss die JTAG Schnittstelle und entsprechende Hardware verwendet werden. Zur Auswahl stehen der billige JTAG ICE Adapter von Olimex oder der teure Atmel JTAG mkII Debugger. Zu beachten ist, dass der JTAG-Port über Fuse-Bits abgeschaltet werden kann. Ist dies der Fall, ist die einzige Möglichkeit, die JTAG-Schnittstelle über ISP wieder zu aktivieren. Als Debug-Software kann der im AVRStudio integrierte Debugger mit installiertem WinAVR benutzt werden. Falls nur Assembler programmiert wird, ist WinAVR nicht nötig.

Entwicklungs Kit

Das Atmel AVR STK500 Entwicklungssystem für Atmel's AVR Flash Mikrocontroller bietet die Möglichkeit, diverse AVR Typen zu programmieren und Schaltungen auszutesten. Die flexible Verwendungsmöglichkeit bringt es mit sich, dass die Verdrahtung nicht ganz einfach ist. Einen guten Überblick wird im STK500 User Guide gegeben.

STK500 User Guide

Download (pdf)

STK500 Schema

Download (pdf)

JTAG ICE

Download (pdf)

USB Experimental Board

Overview

This project aims to provide a easy to use USB experimental board for students of the first year. Instead of only using the standard log for their (yet simple) programs, they are able to integrate hardware into their applications, which makes programming more interesting. The project provides a Java API to access the hardware such as display, flash, ADCs, etc. on the target board over USB from the PC. This approach requires a high level of abstraction to make it possible to use a simple but flexible Java API hiding the hardware and communication details.

For advanced students, firmware based on the existing framework can be developed on the microcontroller and downloaded over USB or JTAG.

Hardware

For communication and controlling the hardware a Atmel AT90USB1287 USB microcontroller is used. The following hardware components are accessible on the board:

  • 3x12 Characters I2C/TWI LCD Display

  • Serial Interface (UART)

  • 32 Mbit Serial Flash Memory (SPI)

  • 4+1-Way Joystick

  • Loudspeaker

  • Microphone

  • Light Dependent Resistor (LDR)

  • Thermal Resistor (NTC)

  • 4 LEDs

  • 6 Buttons

Documentation

Installationsanleitung Eclipse und AVR-Plugin

Download (pdf)

Programmierung mittes Eclipse

Download (pdf)

Schema

Download (pdf)

Port Assignment

Download (pdf)

Software

The communication with the device is based on the Java libusb wrapper.

Each hardware component is represented by a Java class. Prior to using the class, the connection to the USB device must be established. The following code snippet shows how to write a string to the Display using the Display class.

	// create and open the USB device
	Device dev = DeviceFactory.getDevice();
	dev.open();
	
	// create and initialize the display
	Display disp = new Display(dev);
	disp.init(true, true, true);
	// write a string to the display
	disp.write("Hello World");
	
	// close the USB device
	dev.close();
More information can be found in the javadoc.

Test Application

To test your device you can use the test application AVRExpboard TA . To use this program the Inf USB Library must be installed.

Links

FAQ

1. Der Mikrokontroller ist über die JTAG-Schnittstelle nicht mehr ansprechbar.
2. Das EEPROM wird beim Schreiben des Flashs ebenfalls überschrieben.
3. Der Bootloader lässt sich nicht auf das Target laden.
1.

Der Mikrokontroller ist über die JTAG-Schnittstelle nicht mehr ansprechbar.

Dieser Fehler kann mehrere Ursachen haben. Beachten Sie, dass weil der JTAG-Port nicht mehr benutzt werden kann, die Programmierung von Fuse-Bits und Flash über die ISP-Schnittstelle erfolgen muss (z.B. mit dem STK500, das 6-Pin ISP-Kabel muss richig verbunden sein!).

  • Der JTAG-Port kann über Fuse-Bits abeschaltet werden. Stellen Sie sicher, dass dieses Bit gesetzt ist.

    Dies ist die Standardeinstellung der Fuse-Bits:

    • On-Chip Debug Enabled

    • JTAG Interface Enabled

    • Boot Flash section size=1024 words

    • Brown-out detection level at VCC=2.7V

    • Int. RC Osc. 1MHz; Start-up time: 6 CK + 64 ms;

    Die Lock-Bits sind alle inaktiv.

  • Stellen Sie sicher, dass Ihr Progamm nicht die JTAG-Port Pins (TDI, TDO, TCK, TMS) umkonfiguriert. Beim ATmega16 sind diese Pins am PORTC.

  • Falls die oben aufgeführen Punkt in Ordnung sind, programmieren Sie ein funktionierendes Programm ins Flash oder löschen Sie das Flash (über ISP).

  • Falls es immer noch nicht funktioniert: Fragen Sie Ihren Dozenten oder Assistenten und lesen Sie die Packungsbeilage.

2.

Das EEPROM wird beim Schreiben des Flashs ebenfalls überschrieben.

Obwohl das AVR-Studio durch setzen des Fuses "Preserve EEPROM memory through the Chip Erase cycle" die Option bietet, den EEPROM Inhalt bei einem Schreibvorgang des Flashs zu schützen, wird dieser denoch gelöscht. Hierbei handelt es sich um einen Fehler des AVR-Studios. Leider ist uns bis zu diesem Zeitpunkt keine Möglichkeit bekannt, wie dieses Problem behoben werden kann.

3.

Der Bootloader lässt sich nicht auf das Target laden.

Dies ist ein bekannter Fehler des AVR-Studio Ver. 4.16, daher sollte auf die aktuellste Version des AVR-Studios aktualisiert werden.