Herunterladen Diese Seite drucken
Atmel STK500 Bedienungsanleitung
Atmel STK500 Bedienungsanleitung

Atmel STK500 Bedienungsanleitung

Avr-tutorial
Vorschau ausblenden Andere Handbücher für STK500:

Werbung

AVR-Tutorial - 1. Benötigte Ausrüstung - www.mikrocontroller.net
www.mikrocontroller.net
Home
AVR-Tutorial
1. Ausrüstung
2. IO-Grundlagen
3. Stack
4. LCD
5. Interrupts
6. UART
7. Speicher
Foren
µC & Elektronik
Programmierbare Logik
DSP
GCC
Codesammlung
Markt
Platinen
PC-Programmierung
Ausbildung & Beruf
Webseite
Sonstiges/Offtopic
Chat
Shop
Artikel
AVR-GCC-Tutorial
AVR Checkliste
AVR Assembler
Befehlstabelle
Operationsverstärker
SMD löten
Digitaler
Funktionsgenerator
Linksammlung
weitere...
[Letzte Änderungen]
file:///E|/Elektronik/AVR/assemblertutorial/equipment.htm (1 of 4)30.01.2007 15:23:28
AVR-Tutorial - 1. Benötigte Ausrüstung
1. Hardware
Ein Mikrocontroller alleine ist noch zu nichts nützlich.
Das STK500 kostet ca. 100 Euro. Wer nicht so viel ausgeben möchte, der kann auch selber
eine Schaltung aufbauen, die das Programmieren von AVR-Mikrocontrollern ermöglicht. So
kompliziert wie das STK500 wird es nicht, es reichen eine Hand voll Bauteile.
Die folgende Schaltung baut man am besten auf einem Breadboard (Steckbrett) auf.
Solche Breadboards gibt's z.B. bei
Über den Takteingang XTAL1 ist der Mikrocontroller mit dem Quarzoszillator verbunden,
der den benötigten Takt von 4MHz liefert. Achtung: die Pins werden, wenn man den
Oszillator mit der Schrift nach oben vor sich liegen hat, von unten links aus abgezählt.
Unten links ist Pin 1, unten rechts Pin 7, oben rechts Pin 8 und oben links Pin 14 (natürlich
hat der Oszillator nur 4 Pins, die Nummerierung kommt daher, dass bei einem normalen IC
Damit man etwas damit anfangen kann,
braucht man eine Schaltung in die der
Controller eingesetzt wird. Dazu werden bei
Elektronikhändlern Platinen angeboten, die
alles nötige (Taster, LEDs,
Steckverbinder...) enthalten, wie z.B. das
STK500.
ELV
oder Conrad.

Werbung

loading

Inhaltszusammenfassung für Atmel STK500

  • Seite 1 Ausbildung & Beruf Webseite Sonstiges/Offtopic Das STK500 kostet ca. 100 Euro. Wer nicht so viel ausgeben möchte, der kann auch selber eine Schaltung aufbauen, die das Programmieren von AVR-Mikrocontrollern ermöglicht. So Chat kompliziert wie das STK500 wird es nicht, es reichen eine Hand voll Bauteile.
  • Seite 2 AVR-Tutorial - 1. Benötigte Ausrüstung - www.mikrocontroller.net dieser Größe an den gleichen Positionen die Pins Nr. 1, 7, 8 und 14 wären). PD0-PD7 und PB0-PB5 sind die IO-Ports des Mikrocontrollers. Hier können Bauteile wie LEDs, Taster oder LCDs angeschlossen werden. Der Port C (PC0-PC5) spielt beim AT90S4433/Atmega8 eine Sonderrolle: mit diesem Port können Analog-Spannungen gemessen werden.
  • Seite 3 AVR-Tutorial - 1. Benötigte Ausrüstung - www.mikrocontroller.net Dann braucht man nur noch den ISP-Programmieradapter, über den man die Programme vom PC in den Controller übertragen kann. Eine Bauanleitung gibt es u.a. auf http://rumil.de/ hardware/avrisp.html (allerdings sollte man statt dem im Schaltplan angegebenen 74HC244 einen 74HCT244 nehmen).
  • Seite 4: Acrobat Reader

    AVR-Tutorial - 1. Benötigte Ausrüstung - www.mikrocontroller.net in Maschinencode übersetzt. Windows-User können das AVR-Studio von Atmel verwenden, das neben dem Assembler auch einen Simulator enthält, mit dem sich die Programme vor der Übertragung in den Controller testen lassen; für Linux gibt es tavrasm, avra und gavrasm.
  • Seite 5 AVR-Tutorial - 2. I/O-Grundlagen - www.mikrocontroller.net www.mikrocontroller.net AVR-Tutorial - 2. I/O-Grundlagen Home AVR-Tutorial Für die ersten Versuche braucht man nur ein paar Taster und Leds an die IO-Ports des AVRs anzuschließen. 1. Ausrüstung An PB0-PB5 schließt man 6 LEDs über einen Vorwiderstand von je 1kΩ gegen Vcc (5V) an: 2.
  • Seite 6 Dazu füttern wir das Programm dem Assembler, bei wavrasm z.B. indem wir eine neues Fenster öffnen, den Programmtext hineinkopieren, speichern und auf "assemble" klicken. Wichtig ist, dass sich die Datei "4433def.inc" bzw. "m8def.inc" (wird beim Atmel-Assembler mitgeliefert) im gleichen Verzeichnis wie die Assembler-Datei befindet.
  • Seite 7 AVR-Tutorial - 2. I/O-Grundlagen - www.mikrocontroller.net Beim ATmega8 ist standardmäßig der interne 1 MHz-Oszillator aktiviert; weil dieser für viele Anwendungen (z. B. UART) aber nicht genau genug ist, soll der Mikrocontroller seinen Takt aus dem angeschlossenen 4 MHz- Quarzoszillator beziehen. Dazu müssen ein paar Einstellungen an den Fusebits des Controllers vorgenommen werden.
  • Seite 8 AVR-Tutorial - 2. I/O-Grundlagen - www.mikrocontroller.net Schließlich wird mit rjmp ende ein Sprung zur Marke ende: ausgelöst, also an die gleiche Stelle, wodurch eine Endlosschleife entsteht. Sprungmarken schreibt man gewöhnlich an den Anfang der Zeile, Befehle in die 2. und Kommentare in die 3.
  • Seite 9 AVR-Tutorial - 2. I/O-Grundlagen - www.mikrocontroller.net doch nur bis PB5? Der Grund ist einfach: am Gehäuse des AT90S4433 gibt es nicht genug Pins für den kompletten Port B, deshalb existieren die beiden obersten Bits nur intern. 2. Eingabe Im folgenden Programm wird Port B als Ausgang und Port D als Eingang verwendet: Download leds+buttons.asm .include "4433def.inc"...
  • Seite 10 AVR-Tutorial - 2. I/O-Grundlagen - www.mikrocontroller.net bewirkt das Gegenteil. Achtung: diese Befehle können nur auf die IO-Register angewandt werden! Am besten verstehen kann man das natürlich an einem Beispiel: Download bitaccess.asm .include "4433def.inc" ;bzw. 2333def.inc ldi r16, 0xFF out DDRB, r16 ;Port B durch Ausgabe von 0xFF ins ;Richtungsregister DDRB als Ausgang konfigurieren ldi r16, 0x00...
  • Seite 11 AVR-Tutorial - 3. Der Stack - www.mikrocontroller.net www.mikrocontroller.net AVR-Tutorial - 3. Der Stack Home AVR-Tutorial "Stack" bedeutet übersetzt soviel wie Stapel. Damit ist ein Speicher nach dem LIFO-Prinzip ("last in first out") 1. Ausrüstung gemeint: das bedeutet, dass das zuletzt auf den Stapel gelegt Element auch zuerst wieder heruntergenommen 2.
  • Seite 12 AVR-Tutorial - 3. Der Stack - www.mikrocontroller.net Linksammlung rcall sub2 ;sub2 aufrufen weitere... ;hier könnten auch ein paar Befehle stehen [Letzte Änderungen] ;wieder zurück sub2: ;hier stehen normalerweise die Befehle, - Anzeige - ;die in sub2 ausgeführt werden sollen ;wieder zurück .def temp = r16 ist eine Assemblerdirektive.
  • Seite 13 AVR-Tutorial - 3. Der Stack - www.mikrocontroller.net ; wieder zurück sub2: ; hier stehen normalerweise die Befehle, ; die in sub2 ausgeführt werden sollen ; wieder zurück Natürlich macht es keinen Sinn, dieses Programm in einen Controller zu programmieren. Stattdessen sollte man es mal mit dem AVR-Studio simulieren um die Funktion des Stacks zu verstehen.
  • Seite 14 AVR-Tutorial - 3. Der Stack - www.mikrocontroller.net verkleinert? Das liegt daran, dass eine Programmspeicheradresse bis zu 2 Byte breit sein kann, und somit auch 2 Byte auf dem Stack benötigt werden um die Adresse zu speichern. Das gleiche passiert beim Aufruf von sub2. Zur Rückkehr aus dem mit rcall aufgerufenen Unterprogramm gibt es den Befehl ret.
  • Seite 15 AVR-Tutorial - 3. Der Stack - www.mikrocontroller.net Der nicht eingerahmten Rest besteht aus Assemblerdirektiven, Labels (Sprungmarkierungen) und Kommentaren, die nicht direkt in OP-Code umgewandelt werden. 2. Sichern von Registern Eine weitere Anwendung des Stacks ist das "Sichern" von Registern. Wenn man z.B. im Hauptprogramm die Register R16, R17 und R18 verwendet, dann ist es i.d.R.
  • Seite 16 AVR-Tutorial - 3. Der Stack - www.mikrocontroller.net ; hier kann nach belieben mit R17 gearbeitet werden, ; als Beispiel wird es hier auf 0 gesetzt ldi R17, 0 pop R17 ; R17 zurückholen ; wieder zurück zum Hauptprogramm Wenn man dieses Programm assembliert und in den Controller lädt, dann wird man feststellen dass jede zweite LED an Port B leuchtet.
  • Seite 17 AVR-Tutorial - 4. LCD - www.mikrocontroller.net www.mikrocontroller.net AVR-Tutorial - 4. LCD Home AVR-Tutorial Kaum ein elektronisches Gerät kommt heutzutage noch ohne ein LCD daher. Ist doch auch praktisch, 1. Ausrüstung Informationen im Klartext anzeigen zu können ohne irgendwelche LEDs blinken zu lassen. Kein 2.
  • Seite 18 AVR-Tutorial - 4. LCD - www.mikrocontroller.net braucht man somit zwei Zugriffe, wobei zuerst das höherwertige "Nibble" (=4 Bits), also Bit 4 bis Bit 7 übertragen wird und dann das niederwertige, also Bit 0 bis Bit 3. Die unteren Datenleitungen des LCDs legt man einfach auf GND.
  • Seite 19 AVR-Tutorial - 4. LCD - www.mikrocontroller.net swap r16 ;vertauscht die beiden Nibbles von r16 Aus 0b00100101 wird so z.B. 0b01010010. Jetzt sind die Bits für die erste Phase der Übertragung an der richtigen Stelle. Trotzdem wollen wir das Ergebnis nicht einfach so mit "out PORTB, r16" an den Port geben. Um die Hälfte des Bytes, die jetzt nicht an die Datenleitungen des LCDs gegeben wird auf null zu setzen, verwendet man folgenden Befehl: andi r16, 0b00001111...
  • Seite 20 AVR-Tutorial - 4. LCD - www.mikrocontroller.net (c)andreas-s@web.de ;; 4bit-Interface ;; DB4-DB7: PD0-PD3 ;; RS: ;; E: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;sendet ein Datenbyte an das LCD lcd_data: mov temp2, temp1 ;"Sicherungskopie" für ;die Übertragung des 2.Nibbles swap temp1 ;Vertauschen andi temp1, 0b00001111 ;oberes Nibble auf Null setzen sbr temp1, 1<<4 ;entspricht 0b00010000 out PORTD, temp1...
  • Seite 21 AVR-Tutorial - 4. LCD - www.mikrocontroller.net temp1, $21 WGLOOP0: temp2, $C9 WGLOOP1: temp2 brne WGLOOP1 temp1 brne WGLOOP0 ;wieder zurück ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden lcd_init: temp3,50 powerupwait: rcall delay5ms temp3 brne powerupwait ldi temp1, 0b00000011 ;muss 3mal hintereinander gesendet out PORTD, temp1 ;werden zur Initialisierung...
  • Seite 22 AVR-Tutorial - 4. LCD - www.mikrocontroller.net Displayinhalt gelöscht. Um dem LCD ein Zeichen zu schicken, lädt man es in temp1 und ruft die Routine "lcd_data" auf. Das folgende Beispiel zeigt das Wort "Test" auf dem LCD an. Download lcd-test.asm .include "m8def.inc" .def temp1 = r16 .def temp2 = r17 .def temp3 = r18...
  • Seite 23 AVR-Tutorial - 5. Interrupts - www.mikrocontroller.net www.mikrocontroller.net AVR-Tutorial - 5. Interrupts Home AVR-Tutorial Bei bestimmten Ereignissen in Prozessoren wird ein sogenannter "Interrupt" ausgelöst. Dabei wird 1. Ausrüstung das Programm unterbrochen und ein Unterprogramm aufgerufen. Wenn dieses beendet ist, läuft 2. IO-Grundlagen das Hauptprogramm ganz normal weiter.
  • Seite 24 AVR-Tutorial - 5. Interrupts - www.mikrocontroller.net Nr. Adresse Interruptname Beschreibung 0x000 RESET Reset bzw. Einschalten der Stromversorgung 0x001 INT0 Externer Interrupt 0 0x002 INT1 Externer Interrupt 1 0x003 TIMER2 COMP Timer/Counter2 Compare Match 0x004 TIMER2 OVF Timer/Counter2 Overflow 0x005 TIMER1 CAPT Timer/Counter1 Capture Event 0x006 TIMER1 COMPA Timer/Counter1 Compare Match A...
  • Seite 25 AVR-Tutorial - 5. Interrupts - www.mikrocontroller.net einzeln mit .org an die richtige Stelle zu rücken, die gesamte Sprungtabelle auszuschreiben: Download 4333-intvectortable.asm .include "m8def.inc" .org 0x000 ; kommt ganz an den Anfang des Speichers rjmp RESET ; Interruptvektoren überspringen ; und zum Hauptprogramm rjmp EXT_INT0 ;...
  • Seite 26 AVR-Tutorial - 5. Interrupts - www.mikrocontroller.net ldi temp, 0x00 out DDRD, temp ldi temp, 0xFF out DDRB, temp ldi temp, 0b00001010 ;INT0 und INT1 konfigurieren out MCUCR, temp ldi temp, 0b11000000 ;INT0 und INT1 aktivieren out GIMSK, temp ;Interrupts allgemein aktivieren loop: rjmp loop ;eine leere Endlosschleife...
  • Seite 27 AVR-Tutorial - 6. UART - www.mikrocontroller.net www.mikrocontroller.net AVR-Tutorial - 6. UART Home AVR-Tutorial Wie viele andere Controller besitzen die meisten AVRs ein UART ("Universal Asynchronous Receiver and 1. Ausrüstung Transmitter"). Das ist eine serielle Schnittstelle, die meistens zur Datenübertragung zwischen Mikrocontroller 2.
  • Seite 28 AVR-Tutorial - 6. UART - www.mikrocontroller.net Funktionsgenerator 5V/0V des AVRs kompatibel macht. Linksammlung Die 5 Kondensatoren sind 22µF-Elkos. Auf die richtige Polung achten! Der exakte Wert ist hier relativ weitere... unkritisch, in der Praxis sollte alles von ca. 10µF bis 50µF funktionieren. X2 ist ein 9-poliger Sub-D-Verbinder, female.
  • Seite 29 AVR-Tutorial - 6. UART - www.mikrocontroller.net Download uart-mega8.asm .include "m8def.inc" .def temp = r16 .equ CLOCK = 4000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 ; Stackpointer initialisieren ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;...
  • Seite 30 AVR-Tutorial - 6. UART - www.mikrocontroller.net ldi temp, 13 rcall serout rjmp loop serout: sbis UCSRA,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout out UDR, temp ; zurück zum Hauptprogramm Der Befehl rcall serout ruft ein kleines Unterprogramm auf, das zuerst wartet bis das Datenregister UDR von der vorhergehenden Übertragung frei ist, und anschließend das in temp (=r16) gespeicherte Byte an UDR ausgibt.
  • Seite 31 AVR-Tutorial - 6. UART - www.mikrocontroller.net Linux-Benutzer können das entsprechende Device (z.B. /dev/ttyS0) mit stty konfigurieren und mit cat die empfangenen Daten anzeigen. Empfangen Natürlich kann der AVR nicht nur Daten senden, sondern auch vom PC empfangen. Dazu muss man, nachdem die Baudrate wie oben beschrieben eingestellt wurde, das Bit RXEN setzen.
  • Seite 32 AVR-Tutorial - 6. UART - www.mikrocontroller.net dass das ensprechende Bit im Register PORTD keine Funktion hat und damit auch nicht für die Datenanzeige verwendet werden kann. Nachdem das UART konfiguriert ist wartet das Programm einfach in der Hauptschleife darauf, dass ein Byte über das UART ankommt (z.B.
  • Seite 33 AVR-Tutorial - 6. UART - www.mikrocontroller.net rjmp receive_loop in temp, UDR ; empfangenes Byte nach temp kopieren out PORTD, temp ; ... und an Port D ausgeben. rjmp receive_loop ; zurück zum Hauptprogramm Dieses Programm lässt sich allerdings noch verfeinern. Statt in der Hauptschleife auf die Daten zu warten, kann man auch veranlassen dass ein Interrupt ausgelöst wird sobald ein Byte angekommen ist.
  • Seite 34 AVR-Tutorial - 6. UART - www.mikrocontroller.net out UBRRH, temp ; Frame-Format: 8 Bit ldi temp, (1<<URSEL)|(3<<UCSZ0) out UCSRC, temp sbi UCSRB, RXCIE ; Interrupt bei Empfang sbi UCSRB, RXEN ; RX (Empfang) aktivieren ; Interrupts global aktivieren loop: rjmp loop ;...
  • Seite 35 AVR-Tutorial - 6. UART - www.mikrocontroller.net Für den Vergleich eines Registers mit einer Konstanten gibt es den Befehl "cpi register, konstante". Das Ergebnis dieses Vergleichs kann man mit den Befehlen "breq label" (springe zu label, wenn Vergleich positiv) und "brne label" (springe zu label, wenn Vergleich negativ) auswerten. Download uart-led.asm .include "m8def.inc"...
  • Seite 36 AVR-Tutorial - 6. UART - www.mikrocontroller.net sbi UCSRB, RXCIE ; Interrupt bei Empfang sbi UCSRB, RXEN ; RX (Empfang) aktivieren ; Interrupts global aktivieren loop: rjmp loop ; Endlosschleife ; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde int_rxc: push temp ;...
  • Seite 37 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net www.mikrocontroller.net AVR-Tutorial - 7. Flash, EEPROM, RAM Home AVR-Tutorial Die AVR-Mikrocontroller besitzen 3 verschiedene Arten von Speichern: 1. Ausrüstung 2. IO-Grundlagen 3. Stack Flash EEPROM 4. LCD Schreibzyklen >10.000 >100.000 unbegrenzt 5. Interrupts Lesezyklen unbegrenzt unbegrenzt unbegrenzt 5.
  • Seite 38 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net Linksammlung Anwendung weitere... [Letzte Änderungen] Flash-ROM Die erste und wichtigste Anwendung des Flash-ROMs kennen wir bereits: das Speichern von Programmen, die - Anzeige - wir nach dem Assemblieren dort hineingeladen haben. Nun sollen aber auch vom laufenden Programm aus Daten ausgelesen werden.
  • Seite 39 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net ldi ZL, LOW(daten*2) ; Low-Byte der Adresse in Z-Pointer ldi ZH, HIGH(daten*2) ; High-Byte der Adresse in Z-Pointer Wie man sieht ist das Ganze sehr einfach: man kann die Labels im Assembler direkt wie Konstanten verwenden. Über die Multiplikation der Adresse mit 2 sollte man sich erst mal keine Gedanken machen: "das ist einfach so"™.
  • Seite 40 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net .include "4433def.inc" .def temp = R16 ldi R16, RAMEND out SPL, R16 ; Stackpointer initialisieren sbi UCSRB,TXEN ; UART TX aktivieren ldi temp,4000000/(9600*16)-1 ; Baudrate 9600 einstellen out UBRR,temp start: ldi ZL, LOW(text*2) ;...
  • Seite 41 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net out UDR, R16 text: .db "AVR-Assembler ist ganz einfach",0 ; Stringkonstante, durch eine 0 abgeschlossen Wenn man bei .db einen Text in doppelten Anführungszeichen angibt, werden die Zeichen automatisch in die entsprechenden ASCII-Codes umgerechnet: .db "Test", 0 ist äquivalent zu .db 84, 101, 115, 116, 0...
  • Seite 42 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net Register) geladen. Dann löst man den Lesevorgang durch das Setzen des Bits "EERE" (Eeprom Read Enable) im IO-Register "EECR" (Eeprom Control Register) aus. Das gelesene Byte kann nun aus dem IO-Register "EEDR" (Eeprom Data Register) in ein normales Arbeitsregister kopiert und von dort weiterverarbeitet werden. Doch um etwas aus dem EEPROM lesen zu können muss man natürlich erst mal Daten hineinbekommen.
  • Seite 43 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net Bei Controllern mit mehr als 256 Byte EEPROM, z.B. dem ATmega8, passt die EEPROM-Adresse nicht mehr in ein Byte alleine. Statt einem Adressregister (EEAR) gibt es bei diesen Controllern deshalb 2 Register, eines für das Low-Byte (EEARL) und eines für das High-Byte (EEARH).
  • Seite 44 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net ldi temp, RAMEND out SPL, temp sbi UCSRB,TXEN ; UART TX aktivieren ldi temp,4000000/(9600*16)-1 ; Baudrate 9600 einstellen out UBRR,temp ldi address, text1 ; ersten String senden rcall eep_print ldi address, text2 ;...
  • Seite 45 AVR-Tutorial - 7. Flash, EEPROM, RAM - www.mikrocontroller.net .eseg text1: .db "Strings funktionieren auch ", 0 text2: .db "im EEPROM", 0 Impressum: Andreas Schwarz - Seßlacher Weg 4 - 96450 Coburg - webmaster(at)mikrocontroller(dot) file:///E|/Elektronik/AVR/assemblertutorial/memory.htm (9 of 9)30.01.2007 15:23:46...