• Keine Ergebnisse gefunden

Beschaltung und Programmierung von Atmel Microprozessoren

N/A
N/A
Protected

Academic year: 2021

Aktie "Beschaltung und Programmierung von Atmel Microprozessoren"

Copied!
18
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1

Beschaltung und Programmierung von Atmel Microprozessoren

Danksagung:

Ich danke Herrn Stoljarski, der als studentischer Assistent wesentlich zur Vorbereitung der Lehrveranstaltung, insbesondere der Versuche beigetragen hat.

(2)

2

ATmega Prozessorfamilie

● Familie von Microprozessoren mit unterschiedlichem Speicherausbau

– ATmega8,16,32,128

● Alle haben

– den selbenAufbau

– annähernd die selbe Ausstattung mit Peripherie

– unterschiedlichen Speicherausbau

– Neuere Generation

– Atmega48,88,168,328,1288

● Familie von Microprozessoren mit unterschiedlichem Speicherausbau

– ATmega8,16,32,128

● Alle haben

– den selbenAufbau

– annähernd die selbe Ausstattung mit Peripherie

– unterschiedlichen Speicherausbau

– Neuere Generation

– Atmega48,88,168,328,1288

(3)

3 3

01 02 03 04 05 06 07 08 0 09 10 11 12 13 14

28 27 26 25 24 23 22 21 20 19 18 17 16 15

A T M E G A -8

GND Vcc ca. 5V GND (/Reset) PC6 Reset, mit 10k..100k

an VCC beschalten, Verbindung mit GND

bewirkt Reset

(RxD) PD0 (TxD) PD1 USART für serielle

Kommunikation XCK für ext. Takt (eher

selten benötigt)

(Int 0) PD2 (Int 1) PD3 Externe Interrupts,

Flanke programmierbar

XCK T0 PD4

(XTAL1/TOSC1) PB6 (XTAL2/TOSC2) PB7

(ICP1) PB0 Externer Takt

Quarzoszillator in Verbindung mit

Fusebits

Eingang Capture- Funktion des Timers/Counters

(T1) PD5 (AIN0) PD6 (AIN1) PD7 Eingänge Analog-

komparator Eingang Timer/

Counter 1

PB1 (OC1A) GND

Ausgang A der Comparefkt. Timer 1

für PWM PB2 (/SS/ OC1B)

PB3 (MOSI/ OC2A) PB4 (MISO)

PB5 (SCK)

MISO, MOSI, SCK bilden die Grund- lage für Insystem- programming (ISP) und

serial Peipheral Interface (SPI) AVCC

AREF

Betriebs-/Vergleichs- spannung

für Analog/Digital Konverter PC0 (ADC0)

PC1 (ADC1) PC2 (ADC2) PC3 (ADC3) PC4 (ADC4) PC5 (ADC5)

Eingänge für Analog/

Digital Konverter

http://www.roboternetz.de/wissen/index.php/Avr#Hardware So viele Anschlüsse, im Laufe des

Semsters werden wir sie

kennenlernen

(4)

4

Allgemeine Merkmale:

Gehäuse: DIL-28

Takt: bis 16 MHz (ext.) Flash: 8KB

EEProm: 512 Byte RAM: 1K

I/ O: 23

Betriebsspannung: 2.7 - 5.5V

Allgemeine Merkmale:

Gehäuse: DIL-28

Takt: bis 16 MHz (ext.) Flash: 8KB

EEProm: 512 Byte RAM: 1K

I/ O: 23

Betriebsspannung: 2.7 - 5.5V

Ziemlich brutal wegen der verbogenen Pins und der LEDs ohne Vorwiderstand, aber eindrucksvoll einfache Beschaltung.

4

Die Prozesoren der Familie Atmega lassen sich mit sehr gerininger Außenbeschaltung betreiben und sind daher be- sonders für Einsteiger gut geeignet.

Die Prozesoren der Familie Atmega lassen sich mit sehr

gerininger Außenbeschaltung betreiben und sind daher be-

sonders für Einsteiger gut geeignet.

(5)

5

Werkzeuge zur Programmierung:

Programmer Linux:

avr-gcc Der Compiler/Linker/Assembler avrdude

editor make Windows:

AVR Studio

Im Praktikum immer makefile verwenden!

Keine Änderungen in den speziell markierten Bereichen vornehmen, da die

Programmierbarkeit des Prozessors dauerhaft gesperrt werden kann, und er so für weitere Versuche unbrauchbar wird!

Werkzeuge zur Programmierung:

Programmer Linux:

avr-gcc Der Compiler/Linker/Assembler avrdude

editor make Windows:

AVR Studio

Im Praktikum immer makefile verwenden!

Keine Änderungen in den speziell markierten Bereichen vornehmen, da die

Programmierbarkeit des Prozessors dauerhaft gesperrt werden kann, und er so für weitere Versuche unbrauchbar wird!

Das Laden der Programme auf den Microconroller erfolgt über USB- Programmer. Sie sind über ebay bereits für wenoger als 5,00€ zu haben

Das Laden der Programme auf den

Microconroller erfolgt über USB-

Programmer. Sie sind über ebay

bereits für wenoger als 5,00€ zu

haben

(6)

6

Zubehör

● Stromversorgung (3,3..5V)Steckernetzteil

– über den Programmer

– Batterie/Akku/Solar….

– Steckernetzteil

● Programmer

– Fast nur noch USB (USBasp, STK500v.2)

● Externe Beschaltung je nach Anwendung mit

– Sensoren,

– Relais,

– Busadapter

● Stromversorgung (3,3..5V)Steckernetzteil

– über den Programmer

– Batterie/Akku/Solar….

– Steckernetzteil

● Programmer

– Fast nur noch USB (USBasp, STK500v.2)

● Externe Beschaltung je nach Anwendung mit

– Sensoren,

– Relais,

– Busadapter

(7)

7

Stromversorgung in Verbindung mit Steckernetzteil - der Klassiker

Bei ebay findet man preiswerte DC-DC Spannungswandler <5 €.

Zum Thema Spannungsversorgung gibt es einen extra Foliensatz

Stromversorgung in Verbindung mit Steckernetzteil - der Klassiker

Bei ebay findet man preiswerte DC-DC Spannungswandler <5 €.

Zum Thema Spannungsversorgung gibt es einen extra Foliensatz

7

1000uF 100nF 100nF

GND

7805

GN

+5V

1k

B1 C1 C2 C3

IC1

GND IN OUT

LED1

R1 X1-1

X1-2

+

~9-12V

Drahtbrücken

Stückliste

Farbe (Zoll) Stück (13) Rot klein (0.2“) 2

Orange (0,3“) 2

Gelb (0,4“) 2

Grün (0,5“) 1

Violett (0,7“) 2

Grau (0,8“) 2

Rot groß (2,0“) 2

Bez. Wert Stück

B1 B80C1500-WW+ Brückengleichrichter 1

C1 1000 µF Elektrolytkondensator, 105°C, RM 5,0mm

1

C2, C3 100 nF Vielschichtkondensator 2

IC1 7805S Spannungsregler 1A positiv, TO- 220

1 R1 1,0 k Kohleschichtwiderstand 1/4W, 5% 1

LED1 Grün LED 5mm, grün 1

X1 Anreihklemme 2-polig, RM5,0 1

2-Draht Kabel ~25 cm. 1

Der Klassiker mit Linear- regler, muss nicht mit aufgebaut werden. Heu- te finden eher Step- Down-wandler Anwen- dung, da sie viel effizien- ter arbeiten.

Der Klassiker mit Linear-

regler, muss nicht mit

aufgebaut werden. Heu-

te finden eher Step-

Down-wandler Anwen-

dung, da sie viel effizien-

ter arbeiten.

(8)

8

Versuch Nr 1: Grundschaltung Einsetzen/Beschalten des Prozessors Beschaltung von Ausgängen mit LEDs Programmübertragung vom PC auf den Controller.

http://www.informatik.htw-dresden.de/~beck/Atmel/Versuche_527819/V1/V1.html

100n

GND

GND GND

GND GND

MEGA8-P

RD RD RD

RD

+5V

+5V

+5V +5V 10k

1k 1k 1k

1k C4

22 AGND 21 AREF 20 AVCC

8 GND

PB0(ICP) 14 PB1(OC1A) 15 PB2(SS/OC1B) 16 PB3(MOSI/OC2) 17 PB4(MISO) 18 PB5(SCK) 19 PB6(XTAL1/TOSC1)

9

PB7(XTAL2/TOSC2) 10

PC0(ADC0) 23 PC1(ADC1) 24 PC2(ADC2) 25 PC3(ADC3) 26 PC4(ADC4/SDA) 27 PC5(ADC5/SCL) 28 PC6(/RESET)

1

PD0(RXD) 2 PD1(TXD) 3 PD2(INT0) 4 PD3(INT1) 5 PD4(XCK/T0) 6 PD5(T1) 11 PD6(AIN0) 12 PD7(AIN1) 13 7 VCC

IC1

LED2 LED3 LED4

LED5

R2

R3 R4 R5

R6

3 4

1 2

S1

1 2 3 4 5 6

SV1

VCC SCKRESET MOSIMISO

GND

8

Stromversorgung

(9)

9 9

#define F_CPU 1000000UL // Clock speed

#include <avr/io.h> /* defines für IO-Register/-pins */

#include <avr/pgmspace.h>

#include <util/delay.h>

/*

* Delay in ms */

void delay_ms(unsigned short ms){

for(ms /= 10; ms > 0; ms--) _delay_ms(10);

}

int main(){

DDRB = 1 << PIN0 | 1 << PIN1 | 1 << PIN2 | 1 << PIN3; // 1:out 0:in

for(;;){

PORTB = 1 << PIN0;

delay_ms(1000);

PORTB &= ~(1 << PIN0);

PORTB = 1 << PIN1;

delay_ms(1000);

PORTB &= ~(1 << PIN1);

PORTB = 1 << PIN2;

delay_ms(1000);

PORTB &= ~(1 << PIN2);

PORTB = 1 << PIN3;

delay_ms(1000);

PORTB &= ~(1 << PIN3);

}

return 0;

}

Ein erstes Programm lässt die Leds blinken

Ein erstes Programm lässt

die Leds blinken

(10)

10 //#ifndef __IAR_SYSTEMS_ASM__

/* configs for io.h */

#define __SFR_OFFSET 0

#define _VECTOR(N) __vector_ ## N /* io.h does not define this for asm */

#include <avr/io.h> /* for CPU I/O register definitions and vectors */

//#endif /* __IAR_SYSTEMS_ASM__ */

#define mp 16 // oder r16

#define outerwait 17 // r17

#define innerwait 18 // r18 .global main

// rjmp main // .org 0x2a main:

ldi r16,0xff

out DDRB,mp ;//DDRB 0x17 ldi mp,0xf

out PORTB,mp rcall waitabit rcall waitabit

ldi r19,0 loop:

ldi mp,(1<<PORTB0) out PORTB,mp

rcall waitabit rcall waitabit

out PORTB,r19 rcall waitabit

lsl mp

out PORTB,mp

rcall waitabit rcall waitabit

out PORTB,r19 rcall waitabit

lsl mp

out PORTB,mp rcall waitabit rcall waitabit

out PORTB,r19 rcall waitabit

lsl mp

out PORTB,mp rcall waitabit rcall waitabit

out PORTB,r19 rcall waitabit

rjmp loop /* loop forever */

/* waitabit function, busy wait called to

** leave portB state stable for a few clock

** cycles.

*/

waitabit:

ldi outerwait,0xff waitouterloop:

ldi innerwait,0xFF waitinnerloop:

Subi innerwait,0x01 Brne waitinnerloop subi outerwait,0x01 brne waitouterloop

ret 10

Ein ähnliches Programm in

Assembler, können wir machen –

müssen wir aber nicht.

Ein ähnliches Programm in

Assembler, können wir machen –

müssen wir aber

nicht.

(11)

11 11

Ablauf, wenn auf dem Breadboard (Steckbrett) alles zusammengebaut ist

Arbeitsverzeichnis einrichten (für jeden Versuch ein Verzeichnis)

Quelltext/Makefile kopieren, im Makefile keine Änderungen vornehmen! Zu make gibt es einen gesonderten Foloiensatz.

make

Abnahme!!

Schaltung über USB-Programmer mit PC verbinden.

make flash

Das Programm startet nach erfolgreichem Laden Was machen die Leds jetzt??

Ablauf, wenn auf dem Breadboard (Steckbrett) alles zusammengebaut ist

Arbeitsverzeichnis einrichten (für jeden Versuch ein Verzeichnis)

Quelltext/Makefile kopieren, im Makefile keine Änderungen vornehmen! Zu make gibt es einen gesonderten Foloiensatz.

make

Abnahme!!

Schaltung über USB-Programmer mit PC verbinden.

make flash

Das Programm startet nach erfolgreichem Laden

Was machen die Leds jetzt??

(12)

12

Polling Interrupt

int main() {

/* Initialisierung */

. . .

//main-loop while (1) {

/* hier passiert jetzt alles */

} }

#include <avr/interrupt.h>

int main (void)

{ // Set Pin 6 (PD2) as the pin to use for this example PCMSK |= (1<<PIND2);

// interrupt on INT0 pin falling edge (sensor triggered) MCUCR = (1<<ISC01) | (1<<ISC00);

// turn on interrupts!

GIMSK |= (1<<INT0);

While (1) { hier passiert was } }

ISR(INT0_vect) {

// Hier passiert was, wenn ein Interrupt kommt

} 12

Programmieren ohne Betriebssystem?

Zur Verfügung steht:

ISP Lademechanismus zum Laden des Programms in den Flash Spezielle libc

Spezieller gcc

Interruptvectortabelle 64 I/O-Controllregister

2 Betriebsarten sind möglich:

InSystemProgramming Der Prozessor muss zur

Programmübertragung

nicht ausgebaut werden

(13)

13

Programmaufbau

● Ein AVR-Programm besteht aus den zwei grundlegenden Teilen

– Initialisierung (setup)

Konfiguration der Peripheriekomponenten (Timer, Interrupts, Bussysteme)

– Main-loop

Abfrage von Systemzuständen, IO-Operationen, Berechnungen

● Aus beiden Teilen können Funktionen gerufen werden

● Ein AVR-Programm besteht aus den zwei grundlegenden Teilen

– Initialisierung (setup)

Konfiguration der Peripheriekomponenten (Timer, Interrupts, Bussysteme)

– Main-loop

Abfrage von Systemzuständen, IO-Operationen, Berechnungen

● Aus beiden Teilen können Funktionen gerufen

werden

(14)

14 14

Aufbau des RAM. Im Adressraum des RAM befinden sich auch die Universalregister (R0..R31) Gerätesteuerregister (SFR-Register)

Adresse

Register

SFR

SRAM

$0000-$001F (32 Byte)

$0020-$005F (64 Byte)

$0060-$045F (1024 Byte)

$0000-$045F (1120 Byte)

RAM Speicher / Registerfile

(15)

15

Register Summary

Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Page

0x3F (0x5F) SREG I T H S V N Z C 11

0x3E (0x5E) SPH – – – – – SP10 SP9 SP8 13

0x3D(0x5D) SPL SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 13

0x3C(0x5C) Reserved

0x3B(0x5B) GICR INT1 – – – – – IVSEL IVCE 49,67

0x3A(0x5A) GIFR INTF1 INTF0 INTF0 – – – – – 68

0x39(0x59) TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 – TOIE0 72,102,122

0x38(0x58) TIFR OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 – TOV0 73,103,123

0x37(0x57) SPMCR SPMIE RWWSB – RWWSRE BLBSET PGWRT PGERS SPMEN 213

0x36(0x56) TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE 171

0x35(0x55) MCUCR SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00 33,66

0x34(0x54) MCUCSR – – – – WDRF BORF EXTRF PORF 41

0x33(0x53) TCCR0 – – – – – CS02 CS01 CS00 72

0x32(0x52) TCNT0 Timer/Counter0 (8 Bits) 72

0x31(0x51) OSCCAL Oscillator Calibration Register 31

0x30(0x50) SFIOR – – – – ACME PUD PSR2 PSR10 58, 75, 123,193

0x2F(0x4F) TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 97

0x2E(0x4E) TCCR1B ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10 100

0x2D(0x4D) TCNT1H Timer/Counter1 – Counter Register High byte 101

0x2C(0x4C) TCNT1L Timer/Counter1 – Counter Register Low byte 101

0x2B(0x4B) OCR1AH Timer/Counter1 – Output Compare Register A High byte 101 0x2A(0x4A) OCR1AL Timer/Counter1 – Output Compare Register A Low byte 101 0x29(0x49) OCR1BH Timer/Counter1 – Output Compare Register B High byte 101 0x28(0x48) OCR1BL Timer/Counter1 – Output Compare Register B Low byte 101

0x27(0x47) ICR1H Timer/Counter1 – Input Capture Register High byte 102

0x26(0x46) ICR1L Timer/Counter1 – Input Capture Register Low byte 102

0x25(0x45) TCCR2 FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20 117

0x24(0x44) TCNT2 Timer/Counter2 (8 Bits) 119

0x23(0x43) OCR2 Timer/Counter2 Output Compare Register 119

0x22(0x42) ASSR – – – – AS2 TCN2UB OCR2UB TCR2UB 119

0x21(0x41) WDTCR – – – WDCE WDE WDP2 WDP1 WDP0 43

15 Ram-Adresse

I/O-Controll- Register (von in/out verwendet)

Special function register (sfr)

Steuerrister für die verschiedenen Baugruppen innerhalb des Prozessors, lernen wir nach und nach kennen.

Special function register (sfr)

Steuerrister für die verschiedenen Baugruppen

innerhalb des Prozessors, lernen wir nach und

nach kennen.

(16)

16

0x20(0x40) UBRRH URSEL – – – UBRR[11:8] 156

UCSRC URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL 153

0x1F(0x3F) EEARH – – – – – – – EEAR8 20

0x1E(0x3E) EEARL EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 20

0x1D(0x3D) EEDR EEPROM Data Register 20

0x1C(0x3C) EECR – – – – EERIE EEMWE EEWE EERE 20

0x1B(0x3B) Reserved 0x1A(0x3A) Reserved 0x19(0x39) Reserved

0x18(0x38) PORTB PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 65

0x17(0x37) DDRB DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 65

0x16(0x36) PINB PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 65

0x15(0x35) PORTC – PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 65

0x14(0x34) DDRC – DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0 65

0x13(0x33) PINC – PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 65

0x12(0x32) PORTD PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 65

0x11(0x31) DDRD DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 65

0x10(0x30) PIND PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 65

0x0F(0x2F) SPDR SPI Data Register 131

0x0E(0x2E) SPSR SPIF WCOL – – – – – SPI2X 131

0x0D(0x2D) SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 129

0x0C(0x2C) UDR USART I/O Data Register 153

0x0B(0x2B) UCSRA RXC TXC UDRE FE DOR PE U2X MPCM 154

0x0A(0x2A) UCSRB RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 155

0x09(0x29) UBRRL USART Baud Rate Register Low byte 158

0x08(0x28) ACSR ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0 194

0x07(0x27) ADMUX REFS1 REFS0 ADLAR – MUX3 MUX2 MUX1 MUX0 205

16

(17)

17

Speicherarten

● RAM+Register

– Daten, Steuerung, veränderliche Inhalte

● Flash

– Programm, konstante Daten(-tabellen)

● EPROM

– Nicht flüchtiger Datenspeicher

● RAM+Register

– Daten, Steuerung, veränderliche Inhalte

● Flash

– Programm, konstante Daten(-tabellen)

● EPROM

– Nicht flüchtiger Datenspeicher

(18)

18

Taktung

● ohne externe Beschaltung: 1, 2, 4, 8 MHz

● Mit externer Bewschaltung: bis 16 MHz, (Atmega88 bis zu 20 MHz)

● Weitere Takte für Timer, ADC, … werden aus dem Systemtakt über Teiler gewonnen

● Der Prozessor-(System-)takt wird über sog.

fusebits eingestellt. Damit ist sehr sorgsam

umzugehen, falsch eingestellte Fusebis können den Prozessor unbrauchbar machen

(gesonderter Foliensatz).

● ohne externe Beschaltung: 1, 2, 4, 8 MHz

● Mit externer Bewschaltung: bis 16 MHz, (Atmega88 bis zu 20 MHz)

● Weitere Takte für Timer, ADC, … werden aus dem Systemtakt über Teiler gewonnen

● Der Prozessor-(System-)takt wird über sog.

fusebits eingestellt. Damit ist sehr sorgsam

umzugehen, falsch eingestellte Fusebis können den Prozessor unbrauchbar machen

(gesonderter Foliensatz).

Referenzen

ÄHNLICHE DOKUMENTE

Dann gibt man einen Spatel ~-Anthrachinon-Natriumsulfonat und etwas KCl0 3 hinzu und schmilzt über dem Bunsenbrenner weiter bis das Wasser verdampft ist.. Nach dem Erkalten wird

Die flüchtigen Gase werden durch eine Staubkammer ge- leitet und der Phosphor dann - er hat einen Schmelz- punkt von 44 0 C - unter Wasser kondensiert. Durch Destillation wird

Ich möchte hier nur die für diesen Vortrag wichtigen Fakten ausführen. Reaktionen, bei denen im Übergangs- zustand Ionenladungen entstehen oder bereits beste- hende Ionenladungen

Die Bedeutung eines imperativen Programms ergibt sich durch die Programmausführung Die Bedeutung eines Logikprogramms ist durch die Prädikatenlogik definiert. Die Bedeutung

Eine Weile war Sundardās in Fatehpur, eine Weile in Ḍīḍvāṇā, Eine Weile war er in Gujarat, ließ sich aber dort nicht nieder Und ging also nach einigem Bedenken nach

Typische Fehler sind, dass der Kopf des Patienten nicht korrekt nach hin- ten überstreckt wird oder der Mund bei der Atemspende nicht fest genug aufge- presst wird und Luft

● Pull-Down Widerstände zwischen Basis und Emitter sorgen für sichere Störfestigkeit im Resetfall von dem MC.. I/O: Für

·Relais für die Steuerung einer grosseren Last verantwortlich (brauchen einen höheren Strom). ·D1 und D2