close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Campus Speiseplan KW 14

EinbettenHerunterladen
Embedded Systems 1
13.10.2014
Embedded Systems I
Themen am 13.10.2014 (ES1_14_V4):
Timer / Counter – Programmierung (Musterlösungen mit
und ohne Interrupt), Application Note AVR130 / Atmega8535
Interrupts – Unterbrechungsanforderungen und ihre Verarbeitung.
Was steht in so einem Datenblatt / einer Application Note drin?
 Beachten Sie bitte die zusätzlichen Infos auf Proki und Tafel!
© Ulrich Schaarschmidt
FH Düsseldorf, WS 2014/15
Literaturhinweise




(unbewertete Reihenfolge!)
Datenblätter der Fa. Atmel, ATmega16 (.pdf)
Application Notes der Fa. Atmel (s.a. Web)
Gadre, Dhananjay V.:
Programming and Customizing the AVR Microcontroller
 McGraw-Hill, 2001
(bestes Buch zum AVR!)
 Schmidt, Gerhard:
 Anfängerkurs zum Erlernen der Assemblersprache von Atmel-AVRMikroprozessoren
http://www.avr-asm-tutorial.net
 AVR-GCC-Tutorial:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
http://www.mikrocontroller.net/articles/AVR-GCCTutorial/Die_Timer_und_Zähler_des_AVR
 Schmitt, Günter:
 Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
 Oldenbourg Verlag München Wien, 2007
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
2
1
Embedded Systems 1
13.10.2014
Zuordnung Ampel – I/O-Ports
13.10.2014
Prof. Dr. U.G. Schaarschmidt
3
Zuordnung Farben der
Fussgängerampel - Ports
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
4
2
Embedded Systems 1
13.10.2014
Grundsätzlicher
Programmaufbau
#include<avr/io.h>
//Bibliotheken und Headerdateien einbinden,
Deklarationen und Definitionen der Variablen / Konstanten vornehmen,
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
#define TASTER 7
void init(void){
// Initialisierung der Baugruppen,
DDRB = 0xFF;
//Datenrichtungsregister auf Ausgang
PORTB = 0xFF;
//Alle Bits von Port B auf High
int main(void){
//Hauptprogramm
while (1)
{
//(Endlos-)Schleife bei MCU-Programmen,
//Platzhalter z.B. für interruptgesteuerte Programme,
}
//Schleifenende,
return 0;
//Rückgabewert (immer) 0
}
// Programmende
13.10.2014
Prof. Dr. U.G. Schaarschmidt
5
Übung zum 13.10.2014 (u.f.)
Praktikum 2 vorbereiten
Im Praktikum Nr. 2 wird eine Strassenkreuzung
(Bild nächste Folie) an das STK500 angeschlossen (weitere Details  Praktikumszettel).
Überlegen Sie Timerstrategien hierzu und
bereiten Sie die Programmierung der Timer/Counter-Register vor!
Zuerst nur die Kreuzung, dann der
Fussgängerüberweg mit Anforderungstaster (mit
der Hauptkreuzung synchronisieren).
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
6
3
Embedded Systems 1
13.10.2014
Übungsaufgabe 2
13.10.2014
7
Prof. Dr. U.G.
Schaarschmidt
Aufgabe
Welche Funktionen / Definitionen der io.h
und der Stdint.h nutzen Sie für die
Ampelsteuerung?
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
8
4
Embedded Systems 1
13.10.2014
I / O –Ports aus der Nähe
betrachtet
DDRxn – Data Direction Register (eine 1
in diese Adresse geschrieben, bedeutet,
dass der zugeh. Pin als Output fungiert, 0
lässt ihn als Input arbeiten)
PINxn
- Adresse zum Einlesen des
Zustandes am Portpin (Port x, Pin n),
POUTxn
- Adresse zum Ausgeben
von Bit (-kombinationen) an den Portpins.
13.10.2014
Prof. Dr. U.G. Schaarschmidt
9
I / O – Ports aus der Nähe
betrachtet
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
10
5
Embedded Systems 1
13.10.2014
Avr/io.h & Co
Siehe extra Dateien (aus AVRStudioOrdner)
Io.h
Stdio.h
!Nicht irritieren lassen: Die diversen
header-files sind wie eine Baumstruktur
auch untereinander angeordnet!
13.10.2014
Prof. Dr. U.G. Schaarschmidt
11
Timer statt Zeitschleife
Überlegen Sie, wie die Timer / Counter
der AVR-Familie initialisiert und benutzt
werden können (um nicht mehr die DelaySchleifen aus P1 / P2 zu nutzen)!
Schreiben Sie Initialisierungsroutinen!
Hierzu nutzen Sie (sinnvollerweise)
Datenblätter und Application Notes (oder
Literatur, natürlich).
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
12
6
Embedded Systems 1
13.10.2014
AN (Application Notes) zum
Thema Time / long Time /
AVR130: Setup and Use the AVR Timers
AVR133: Long Delay Generation Using
the AVR Microcontroller
AVR108: Setup and Use of the LPM
Instruction
Die Register und alle Möglichkeiten der
Programmierung sind in den Datenblättern
zu finden
13.10.2014
Prof. Dr. U.G. Schaarschmidt
13
Timer / Counter - Control
Register
TCCR0: Timer/Counter Control Register 0
TCNT0: Timer/Counter Register 0
TCCR1A: Timer/Counter1 Control Register A
TCCR1B: Timer/Counter1 Control Register B
TCNT1H, TCNT1L: Timer/Counter1 (16 bit)
OCR1AH, OCR1AL: T/C1 Output Compare
Registers
OCR1BH, OCR1BL: T/C1 Output Compare
Registers
ICR1H, ICR1L: T/C1 Input Capture Registers
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
14
7
Embedded Systems 1
13.10.2014
Timer / Counter Prescaler
AN: AVR133
13.10.2014
Prof. Dr. U.G. Schaarschmidt
15
Programmierung Timer /
Counter
Die Konfiguration und Programmierung der
Timer-Register geht ähnlich vor sich, wie wir es
von den anderen I/O-Ports her kennen und im
Praktikum ausprobiert haben.
Ein Timer ist vom Prinzip her ein (einfacher)
Zähler. Vorteil: Er läuft unabhängig vom
Programm (wenn er erst einmal initialisiert ist).
Die AT90 und Atmega haben grundsätzlich 2 *
8-Bit-Timer und 1 * 16-Bit-Timer.
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
16
8
Embedded Systems 1
13.10.2014
Programmierung Timer /
Counter 2 - Überwachung
 In den 8535 kann jeder der Timer bis zu 3 verschiedene
Ereignisse überwachen. Die Status-Flags im TIFR geben
über die Ereignisse Auskunft.
 Timer Overflow,
 Compare Match,
 Input Capture.
13.10.2014
Prof. Dr. U.G. Schaarschmidt
17
Programmierung Timer /
Counter 3 – Timer Overflow
A timer overflow means that the counter has counted up to
its maximum value and is reset to zero in the next timer
clock cycle. The resolution of the timer determines the
maximum value of that timer. There are two timers with 8-bit
resolution and one timer with 16-bit resolution on the
AT90S8535. The maximum value a timer can count to can
be calculated by this Equation.
MaxVal = 2Res – 1
Res is here the resolution in bits. The timer overflow event
causes the Timer Overflow Flag (TOVx) to be set in the
Timer Interrupt Flag Register (TIFR).
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
18
9
Embedded Systems 1
13.10.2014
Programmierung Timer /
Counter (in Assembler)
 RESET:
 ;set up Timer0

ldi r16,0x02

out TCCR0,r16

ldi r16,0x02

out TIMSK,r16




;done with all setup
sei
ldi r16,0xFE
out TCNT0,r16
13.10.2014
;initialize the machine
;(CLK/8 src)
;enable Timer0 Overflow int
;enable all interrupts now
;start off closer to FF, to
; make it easier to see.
Prof. Dr. U.G. Schaarschmidt
19
Programmierung in C
// k4p2.c Bild 4-18c: Timer0 ungenauer Sekundenzähler mit Interrupt; 8 MHz : 256 : 256 = 122.07 gerundet 122 Hz
// Port B: Ausgabe Sekundenzähler; Port D: #include <avr/io.h>
// Deklarationen
#include <avr/signal.h>
// für Interrupt
#include <avr/interrupt.h>
// für Interrupt
#define TAKT 8000000ul
// Systemtakt 8 MHz
#define ZAEHL TAKT / (256ul * 256ul)
// Interruptzähler
#define TEILER 0x4
// 0b100 Taktteiler durch 256
volatile unsigned char takt=ZAEHL, seku=0;
// globale Variablen
SIGNAL (SIG_OVERFLOW0)
// bei Timer0 Überlauf
{
takt--;
// Interruptzähler - 1
if(takt == 0)
// nach 122 Durchläufen
{
takt = ZAEHL; seku++;
// wieder Anfangswert Zähler erhöhen
if (seku == 60) seku = 0;
// Sekunde mod 60
PORTB = ((seku/10) << 4) | (seku % 10);
// BCD ausgeben
}
// Ende if takt
}
// Ende SIGNAL
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
20
10
Embedded Systems 1
13.10.2014
Programmierung in C
(2.Teil)
void main(void)
// Hauptfunktion
{
DDRB = 0xff;
// Port B Richtung Ausgabe
TCCR0 |= TEILER;
// Teiler 100 Systemtakt :256
TIMSK |= (1 << TOIE0); // Timer0 Interrupt frei
PORTB = seku;
// auf Port B ausgeben
sei();
// alle Interrupts frei
while(1)
// schlafende Schleife durch Interrupt unterbrochen
{
} // Ende while
} // Ende main
13.10.2014
Prof. Dr. U.G. Schaarschmidt
21
Timer / Counter0
Blockdiagramm
AN: AVR133
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
22
11
Embedded Systems 1
13.10.2014
T/C1
Blockdiagramm
AN: AVR133
13.10.2014
Prof. Dr. U.G. Schaarschmidt
23
Long Delay Timing
AN: AVR133
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
24
12
Embedded Systems 1
13.10.2014
Zugriff auf 16-Bit-I/O-Register
AN: AVR072: Access 16-bit I/O Registers
13.10.2014
Prof. Dr. U.G. Schaarschmidt
25
Clock0 Prescale Selection
[Gadre]
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
26
13
Embedded Systems 1
13.10.2014
Compare1 Mode Select
PWM Mode Select
[Gadre]
13.10.2014
Prof. Dr. U.G. Schaarschmidt
27
Interrupt - Kontrolle
GIFR: General Interrupt Flag Register
MCUCR: MCU General Control Register
MCUSR: MCU Status Register
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
28
14
Embedded Systems 1
13.10.2014
Interrupt Sense Control
[Gadre]
13.10.2014
Prof. Dr. U.G. Schaarschmidt
29
Berechnung der Zeiten für
die Timerregister (AVR130)
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
30
15
Embedded Systems 1
13.10.2014
Weitere Berechnungen
13.10.2014
Prof. Dr. U.G. Schaarschmidt
(AVR130)
31
3. Übungsaufgabe zur
Vorbereitung auf P3
Bereiten Sie die Ansteuerung der A-D-WandlerProgrammierung vor. Suchen Sie die
Konfigurationsbits für das AD-Wandlerpraktikum
heraus und packen diese in entsprechende (C-)
Konstante, die Sie dann in Ihrem Programm
einsetzen können!
Datenblatt / Application Notes
13.10.2014
FH Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
32
16
Document
Kategorie
Technik
Seitenansichten
5
Dateigröße
758 KB
Tags
1/--Seiten
melden