1/31 Ziele der Weiterbildung Vermitteln von Grundlagen zu den AVR Controllern Vermitteln von Assembler Grundlagen Vorstellen der benötigten Hard und Software Eigenständiges Programmieren der Controller Vermitteln von weiterführendem Wissen anhand praktisch durchgeführter Beispiele (Tabellen, Interrupts, serielle Schnittstelle)
Weiterbildung Eigenschaften der Mikrocontroller Speicheraufteilung (Memory Map) Assemblerdirektiven (Assemblervorlage) Benötigte Hard und Software Praktische Aufgabe: "Hello World in Assembler" 2/31
3/31 Mikrocontrollerkurs auf weigu.lu Nach einem Klick auf den Buchstaben A befindet man sich auf der Seite http://www.weigu.lu/a
4/31 Eigenschaften der AVR-8Bit-RISC Mikrocontroller Sehr hohe Effizienz durch: RISC (Reduced Instruction Set Computing ): einfache kurze Befehle in Hardware implementiert schnell! Meist nur ein Taktzyklus pro Befehl (1Mips/MHz) Effizienz durch 32 Arbeitsregister (ALU) Befehle sind registerorientiert, nur load und store greifen auf Speicher zu. Harvard Architektur: Getrennter Befehls und Datenspeicher (unterschiedliche Breite möglich, gleichzeitiges Laden und Speichern, parallele Rechenwerke).
5/31 Eigenschaften der AVR-Controller Mikrocontroller beinhaltet CPU, Speicher und mehrere Ein-/Ausgabebausteine
6/31 Eigenschaften der AVR-Controller Viele unterschiedliche Controller und Gehäuseformen mit AVR Kern: http://www.atmel.com/dyn/products/param_table.asp?family_id=607&orderby=part_no&direction=asc Systemtakt bis 20MHz! Geringer Energieverbrauch: 1,8V bis 5,5V, 6 verschiedene Schlafmodi, schnelles Erwachen, unterschiedliche Frequenzen Quelle: ATMEL Neu und Umprogrammierung während des Betriebes (Bootloader) In System Programming (ISP) On Chip Debugging and In system verification (JTAG Interface) Gratis Entwicklungsumgebung Studio 4
Verschiedene Controller 9 mm 7/31
Memory Map 8/31
9/31 Assemblerprogrammierung Wort Assembler hat 2 Bedeutungen: 1. maschinennahe Computersprache 2. Übersetzungsprogramm Assembler Maschinensprache Assemblerprogramm = reine Textdatei (mit der Endung.asm). Wird durch den Assembler in die Maschinensprache (Hexdatei *.hex) übersetzt. strukturierter übersichtlicher Code durch: Assemblerdirektiven, Include Dateien, Unterprogramme, bedingte Adressierung und Makros. Assembler Programmiervorlage um die Programmierung zu Beschleunigen wird mit beim Programmieren mit einer Vorlage (A2_template.asm) gearbeitet.
10/31 Assemblerprogrammierung [Label:]Direktive oder Befehl [Operanden] [;Kommentar] Label sind erfundene Namen für Speicheradressen Der Assembler kümmert sich um die Zuweisung. Direktiven sind Pseudobefehle des Assembler Diese Assembleranweisungen dienen der Steuerung des Übersetzungsvorgangs und werden nicht in Maschinencode übersetzt. Sie beginnen mit einem Punkt und stehen meist am Anfang der Zeile. Operanden sind von Befehlen oder Direktiven benötigte zusätzliche Informationen. Kommentare beginnen mit einem Strichpunkt.
11/31 Assembleranweisungen.DEF Name = Register Bsp.:.DEF Tmp1 = r16.equ Name = Ausdruck Bsp.:.EQU Tab = 0x1AF.SET Name = Ausdruck Bsp.:.SET Cnt = 20.INCLUDE.ORG.CSEG (.DSEG,.ESEG).DB (.DW) Liste Bsp.:.DB 0,0xFF,'A', "Hallo",0b11001100.BYTE Anzahl Bsp.:.BYTE 5.EXIT "Textdatei" Adresse (änderbar) Bsp.:.INCLUDE "m32def.inc" Bsp.:.ORG 0xD000
12/31 Assemblerbefehle Besteht aus Opcode und Operand Bsp: cli, ser r16, ldi r16,100 Bei zwei Operanden: Befehl Ziel,Quelle Arithmetische und logische Befehle (Arbeitsregister, beeinflussen Flags (SREG), add, eor, inc, sbiw, mul), Datentransferbefehle (mov, ldi, in, out, st, ld, sts, lds, push, pop, lpm) Sprungbefehle (rjmp, jmp, breq, call, reti), Bitorientierte Befehle (z.b. Flags, sec, lsl), Sonstige Befehle.(nop) Besonderheiten: unmittelbare Adressierung (ldi) nur bei Arbeitsregister r16 r31 Bitweise Adressierung der unteren 32 SF Register mit sbi und cbi und bitweise Abfrage mit sbic bzw. sbis.
A2_template.asm http://www.weigu.lu/a/asm/a2_template.asm http://www.weigu.lu/a/asm/m32def.inc 13/31
Benötigte Hardware 14/31
Benötigte Hardware USB EIA-232 IEEE 1284 PC ISPSchnittstelle Programmer ATmega32 15/31
16/31 Programmer Original ATMEL (kompatibel Studio 4 u. Bascom): Parallel: Seriell: USB : STK200, STK300 STK500, AVRISP, AVR JTAGICE mkii AVRISP mkii, AVR Dragon, AVR JTAGICE mkii Nachgebaut: Parallel: Seriell: STK200 kompatibel, SP12 Programmer AVR910, SI Prog, Sercon2 USB: USB AVR ISP, usbprog (elektor 10/07) USBisp, USB avrisp, Evertool, USBasp, AvrUsb500, AVR Doper, USBtinyISP, UCOM IR, http://www.mikrocontroller.net/articles/avr_in_system_programmer
USB-AVR-ISP 17/31
6 5 RESET MISO MOSI SCK ISP-Schnittstelle 4 ISP 6p GLJD 3 2 1 VCC GND 18/31
19/31 Software Entwicklungsumgebungen: Studio 4 (Win), WinAVR (AVR GCC), AVR Eclipse (Win + Linux), KontrollerLab (Linux), CodeVisionAVR C (Win, komm.), Bascom (Win) freie Assembler: tavrasm, avra, ava, avr as, gavrasm freie Debugger: simulavr, AVR GDB freie C compiler: avr gcc (avr libc) freie Programmer: avrdude
20/31 Digitale Ein- und Ausgabe ATmega32: 4 Ports A D mit je 8 Pins (Bit) = 32 individuell ansteuerbare E/A Pins. Jeder dieser Pins kann als Eingang oder Ausgang konfiguriert werden. Als Eingang kann ein interner Pull Up Widerstand dazugeschaltet werden. Achtung: alle Pins sind mindestens doppelt belegt. Für die Programmierung eines Pins n stehen drei Bits in drei Registern (x = Portname A D) zur Verfügung:
21/31 Digitale Ein- und Ausgabe Datenrichtungsregister DDRx (Data Direction Reg.) Legt (meist im Initialisierungsteil) fest ob ein Pin als Ein oder Ausgang verwendet wird. 0 = Eingang (default) 1 = Ausgang Unbenutzt sollte ein Pin immer als Eingang deklariert werden. Beispiele: ldi out r16,0xf0 DDRD,r16 ;obere 4 Bit Ausgang, untere ;4 Bit als Eingang(unbenutzt) sbi cbi DDRA,3 DDRA,4 ;Pin 3 (PORTA3,PA3) = Ausgang ;Pin 4 (PORTA3,PA3) = Eingang
22/31 Digitale Ein- und Ausgabe Datenausgaberegister PORTx (PORTx Data Reg.) Über das Datenausgaberegister werden die Daten an die einzelnen Pins ausgegeben (les und schreibbar). Ist ein Pin als Eingang initialisiert dann besitzt dieses Register eine andere Funktion! Mit einer Eins kann dann ein interner Pull Up Widerstand zum Eingangspin zugeschaltet werden. Beispiele: ldi out sbi Tmp1,'A' PORTD,Tmp1 PORTB,7 ;ASCII-Code von 'A' auf LEDs ; ;oberste LED PB7 einschalten cbi sbi DDRD,0 PORTD,0 ;PD0 = Eingang ;internen Pull-Up-Widerstand zuschalten
23/31 Digitale Ein- und Ausgabe Dateneingaberegister PINx (PORTx INput Pins Adress) Über das Dateneingaberegister PINx werden Daten eingelesen. Es ist nur lesbar (an sich ist PINx kein klassisches Register, denn die Bits folgen augenblicklich dem Zustand der Pins). Beispiele: Tmp1,PINA Tmp1,0x80 SW_ON ;PORTA (8 Bit) einlesen ;maskiere oberstes Bit ;falls Null dann nach SW_ON SW_ON: in andi breq...... PINA,7 ;ueberspringe naechste ;Zeile falls PA7=0 SW_OFF: sbis......
Studio 4 1. Doppelklick auf Icon Studio 4. 2. Projektname = A303 Verzeichnis in "Location" angeben dann "Next>>". 3. AVR Simulator und Baustein auswählen dann "Finish". 24/31
Studio 4 4. Klick "File" "Open File...". Datei "A2_template.asm" öffnen. Inhalt nach A303_dig_out-8bit.asm kopieren. 25/31
Studio 4 5. Programm beliebig erweitern und abspeichern. (Achtung: Richtige Pfadangabe für Definitionsdatei!) 26/31
Studio 4 6. Programm assemblieren mit "Build". 27/31
Studio 4 7. "Connect"-Icon anklicken und Programmiergerät auswählen. 28/31
Studio 4 8. Hexdatei auswählen und "Program" anklicken. 29/31
30/31 Erstes Programm: A303_dig_out_8bit.asm Das erste Programm soll acht LEDs gleichzeitig einschalten. Dazu sind acht LEDs mit den acht Pins von PORTD zu verbinden. Erstelle das Programm indem du die Vorlage ergänzt. Speichere das Programm mit dem Namen "A303_dig_out_8bit.asm" ab. Teste das Programm! Simuliere das Programm im Studio 4 (Funktion "Debug")
31/31 Zweites Programm: A304_dig_out_1bit.asm Schreibe das Programm so um, dass nur die LED an Pin 5 aufleuchtet. Dabei soll nur die Initialisierung so verändert werden, dass alle nicht benötigten Pins als Eingänge konfiguriert sind. Speichere das Programm mit dem Namen "A304_dig_out_1bit.asm" ab. Teste das Programm!