Embedded Systems

Ähnliche Dokumente
Embedded Systems

Embedded Systems

Embedded Systems

Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen.

Embedded Systems

Embedded Systems

AVR-8-bit-Mikrocontroller Gruppe Technologie der AVR-8-bit-Mikrocontroller Teil SPI

Interrupt-Programmierung

Embedded Systems

Embedded Systems

Timer. Funktionsprinzip

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös

Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register liegen und beide laut Tabelle 0 sind:

Mikrocontrollerplatine vorbereiten

U5-2 Register beim AVR-µC

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

WS 2017/18 Viel Erfolg!!

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega

myavr Programmierung in C

Erzeugen von PWM-Signalen mit dem Atmel AVR-Mikrocontroller

Einführung Microcontroller

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

Tag 3 Timer, ADC und PWM

Autonome Mobile Systeme. Dr. Stefan Enderle

IR NEC Empfänger mit 4x7 LED Anzeige (ATtiny2313)

WS 2016/17 Viel Erfolg!!

Aufbau eines Assembler-Programms

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

U3-1 Register beim AVR-μC. U3 3. Übung. U3-2 I/O-Ports des AVR-μC. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Wiederholung: Zugriff auf AVR-Prozessor-Register

Übungen zu Systemnahe Programmierung in C (SPiC)

Einführung in die Programmierung von Mikrocontrollern mit C/C++

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Schnittstellenbeschreibung. Inhalt

U2-1 Register beim AVR- C. U2-2 I/O-Ports des AVR- C. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Use of the LPM (Load Program Memory)

Mikrocontrollertechnik C2 Timer. Einführung

05. Assembler-Programmierung. Datenstrukturen des ATMega32. Literatur

by AS playground.boxtec.ch/doku.php/tutorial Multitasking 4

Parallel-IO. Ports am ATmega128

V cc. 1 k. 7 mal 150 Ohm

The amforth Cookbook angefangen

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC 0C0H T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0 0C8H. AFH AEH ADH ACH ABH AAH A9H A8H Bitdresse

Übung "Struktur von Mikrorechnern" (CBS)

Microcontroller Selbststudium Semesterwoche 9

Microcontroller VU Exam 1 (Programming)

~10 RESET 3.3V 5V GND GND VIN

DST EINFÜHRUNG IN MRT

16-Bit PCA Timer/Counter

Inhalt. Aufgabe 4: LED-Modul Hinweise Testen des Moduls Sommersemester 2015

Richtung durch Taster während des Ablaufs umschaltbar

DST EINFÜHRUNG IN MRT

Lotto. eine Projektarbeit in DVT. von Sven Schwab

ProcessorsTechnik Labor LCD-Uhr

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Globale Variablen

Wer möchte, kann sein Programm auch auf echter Hardware testen

8: IIC-Bussystem / PID

Analog-Digital-Converter

Sebastian Maier (Lehrstuhl Informatik 4) Übung 4. Sommersemester 2017

AVR Ein/Ausgabe. Inhaltsverzeichnis

Grundlagen der Objektorientierung :

U Abend 3: Musterlösungen, Taster entprellen, Unterprozeduren, Interrupts, Timer

Prinzipien und Komponenten eingebetteter Systeme

SS 2017 Viel Erfolg!!

Programmieren in C Teil 3: Mikrocontrollerprogrammierung

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

PIC16 Programmierung in HITECH-C

ATmega169 Chip: Pin-Layout

11: Echtzeitbetriebssystem ucos-ii

Einführung DIP & AVR EVK1100

Interruptsystem AVR. Interrupt-Quellen: Extern, Timer, ADC, USART usw. (siehe IVT im Anhang) Rücksprungadresse automatisch am Stack.

C++ mit dem Arduino (Uno und Mega2560)

Ansteuerung eines LCD-Screens

a) Welche Aussage zu Zeigern ist richtig? Die Übergabesemantik für Zeiger als Funktionsparameter ist callby-value.

Übung 3: VHDL Darstellungen (Blockdiagramme)

Assembler-Unterprogramme

4. Ditzinger Makerspace. Arduino Teil 1. Ein Projekt von Repair-Café und Stadtbücherei Ditzingen Stadtbücherei Ditzingen UG

WS 2018/19 Viel Erfolg!!

Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

LabView mit der myavr Produktfamilie. Andreas Düring

Programmier-Befehle - Woche 08

#include "C:\Users\media\Desktop\Harri\Technik\Elektronik\Projekte\Stiftuhr\Servotest\servotest\servotest.h"

d) Was passiert, wenn das folgende Programmstück übersetzt und ausgeführt

4 Formelsammlung C/C++

C++ mit dem Arduino (Uno und Mega2560)

Die AVR Mikrocontrollerfamilie

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Vorbereitung. Teil D Analog-Digital-Wandler 1

Übungen zu Systemnahe Programmierung in C (SPiC)

Tag 2 Eingabe und Interrupts

Embedded Systems

Bit Operationen. InE1 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

Projekt: Kaffeemaschinensteuerung mit ATMega128RFA1

Einführung in die Welt der Microcontroller

Mikrocontroller (Beispiel: ATMEL ATmega8)

Transkript:

Embedded Systems I Themen am 18.10.2016 (ES1_16_V3): 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 2016/17 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-AVR- Mikroprozessoren http://www.avr-asm-tutorial.net AVR-GCC-Tutorial: http://www.mikrocontroller.net/articles/avr-gcc-tutorial http://www.mikrocontroller.net/articles/avr-gcc- Tutorial/Die_Timer_und_Zähler_des_AVR Schmitt, Günter: Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie Oldenbourg Verlag München Wien, 2007 18.10.2016 Prof. Dr. U.G. Schaarschmidt 2 HS Düsseldorf (c) U.Schaarschmidt 1

2.Übung zum 17./18.10. 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). 18.10.2016 Prof. Dr. U.G. Schaarschmidt 3 Übungsaufgabe 2 18.10.2016 4 Prof. Dr. U.G. Schaarschmidt HS Düsseldorf (c) U.Schaarschmidt 2

Zur Erinnerung an Aufgabe 2 Zeichnen Sie hierzu ein Ablaufdiagramm bzw. Nassi-Schneider-Diagramm! Zuerst nur die Kreuzung, dann den Fussgängerüberweg mit Anforderungstaster (mit der Hauptkreuzung synchronisieren). Welche Funktionen / Definitionen der io.h und der Stdint.h nutzen Sie für die Ampelsteuerung? 18.10.2016 Prof. Dr. U.G. Schaarschmidt 5 Zuordnung Ampel I/O-Ports 18.10.2016 Prof. Dr. U.G. Schaarschmidt 6 HS Düsseldorf (c) U.Schaarschmidt 3

Zuordnung Farben der Fussgängerampel - Ports 18.10.2016 Prof. Dr. U.G. Schaarschmidt 7 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 18.10.2016 Prof. Dr. U.G. Schaarschmidt 8 HS Düsseldorf (c) U.Schaarschmidt 4

I / O Ports aus der Nähe betrachtet DDRxn Data Direction Register (eine 1 in diese Adresse geschrieben, bedeutet, dass der zugehörige 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. 18.10.2016 Prof. Dr. U.G. Schaarschmidt 9 I / O Ports aus der Nähe betrachtet 18.10.2016 Prof. Dr. U.G. Schaarschmidt 10 HS Düsseldorf (c) U.Schaarschmidt 5

Avr/io.h & Co Siehe extra Dateien (aus AVRStudio- Ordner) Io.h Stdio.h!Nicht irritieren lassen: Die diversen header-files sind wie eine Baumstruktur auch untereinander angeordnet! 18.10.2016 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 Delay- Schleifen aus P1 / P2 zu nutzen)! Schreiben Sie Initialisierungsroutinen! Hierzu nutzen Sie (sinnvollerweise) Datenblätter und Application Notes (oder Literatur, natürlich). 18.10.2016 Prof. Dr. U.G. Schaarschmidt 12 HS Düsseldorf (c) U.Schaarschmidt 6

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 18.10.2016 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 18.10.2016 Prof. Dr. U.G. Schaarschmidt 14 HS Düsseldorf (c) U.Schaarschmidt 7

Timer / Counter Prescaler AN: AVR133 18.10.2016 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. 18.10.2016 Prof. Dr. U.G. Schaarschmidt 16 HS Düsseldorf (c) U.Schaarschmidt 8

Programmierung Timer / Counter 2 - Überwachung In den AVR-MCUs 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. 18.10.2016 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 ATMEGA16. The maximum value a timer can count to can be calculated by this Equation. MaxVal = 2 Res 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). 18.10.2016 Prof. Dr. U.G. Schaarschmidt 18 HS Düsseldorf (c) U.Schaarschmidt 9

Programmierung Timer / Counter (in Assembler) RESET: ;initialize the machine ;set up Timer0 ldi r16,0x02 ;(CLK/8 src) out TCCR0,r16 ldi r16,0x02 ;enable Timer0 Overflow int out TIMSK,r16 ;done with all setup sei ;enable all interrupts now ldi r16,0xfe ;start off closer to FF, to out TCNT0,r16 ; make it easier to see. 18.10.2016 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 18.10.2016 Prof. Dr. U.G. Schaarschmidt 20 HS Düsseldorf (c) U.Schaarschmidt 10

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 18.10.2016 Prof. Dr. U.G. Schaarschmidt 21 Timer / Counter0 Blockdiagramm AN: AVR133 18.10.2016 Prof. Dr. U.G. Schaarschmidt 22 HS Düsseldorf (c) U.Schaarschmidt 11

T/C1 Blockdiagramm AN: AVR133 18.10.2016 Prof. Dr. U.G. Schaarschmidt 23 Long Delay Timing AN: AVR133 18.10.2016 Prof. Dr. U.G. Schaarschmidt 24 HS Düsseldorf (c) U.Schaarschmidt 12

Zugriff auf 16-Bit-I/O-Register AN: AVR072: Access 16-bit I/O Registers 18.10.2016 Prof. Dr. U.G. Schaarschmidt 25 Clock0 Prescale Selection [Gadre] 18.10.2016 Prof. Dr. U.G. Schaarschmidt 26 HS Düsseldorf (c) U.Schaarschmidt 13

Compare1 Mode Select PWM Mode Select [Gadre] 18.10.2016 Prof. Dr. U.G. Schaarschmidt 27 Interrupt - Kontrolle GIFR: General Interrupt Flag Register MCUCR: MCU General Control Register MCUSR: MCU Status Register 18.10.2016 Prof. Dr. U.G. Schaarschmidt 28 HS Düsseldorf (c) U.Schaarschmidt 14

Interrupt Sense Control [Gadre] 18.10.2016 Prof. Dr. U.G. Schaarschmidt 29 Berechnung der Zeiten für die Timerregister (AVR130) 18.10.2016 Prof. Dr. U.G. Schaarschmidt 30 HS Düsseldorf (c) U.Schaarschmidt 15

Weitere Berechnungen (AVR130) 18.10.2016 Prof. Dr. U.G. Schaarschmidt 31 3. Übungsaufgabe zur Vorbereitung auf P3 Bereiten Sie die Ansteuerung der A-D-Wandler- Programmierung 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 18.10.2016 Prof. Dr. U.G. Schaarschmidt 32 HS Düsseldorf (c) U.Schaarschmidt 16