21
Praktikum: Struktur von Mikrorechnern (SMR-P) Datum: Gruppe: Versuch 3 SMR-P Viga/08 Blatt: 1/21 Versuch 3 Versuche Lehrinhalte "Hardware" Lehrinhalte "Software" 1. Einführung Vertraut werden mit STK500/501-Board, AVR- Studio (Assembler, Simula- tor) und Codevision AVR (C- Compiler) - Struktur der Kits; Aufbau - Handhabung der Hardware - Ressourcen des AT-Mega128 - Lage und Nutzung der Ports - Adressraum und Lage von SFRs und Interruptvektoren - Ansteuerung einer LED - GUI und Handling AVR-Studio - GUI und Handling Codevision; Nutzung Code-Wizard - Makros zur Port- und Pin- Steuerung - Unterschied Assembler-Code/C- Code - Einsatz des Simulators bei As- sembler-und C-Projekten - Dimensionierung von Warte- schleifen 2. Parallele Ein-/Ausgänge Scannen eines 3x3 Tasten- feldes und Signalisierung der erkannten Taste über eine zugehörige LED - Benutzung von PORTs als Sig- naleingänge - Typen der Port-Ausgangsbe- schaltung - Nutzung von schaltbaren Pull- Up-Widerständen der Port-Pins - - Grundlegende Handhabung der PORT Pins mit spezieller Aus- gangsbeschaltung - Technik zum Pinsparenden Ab- tasten von Schalterereignissen durch Scanning-Verfahren; Tas- tenentprellen - Ansprechen von PORTs über PORT- und PIN-Deklaration 3. Timer und Interrupts Realisierung einer Blink- leuchte mit fester Blink- frequenz; Erzeugen quasi- analoger harmonischer Sig- nale; Umsetzung eines DTMF-Wähltongenerators auf Basis des Tastenfeldes - Behandlung von Interrupts im Controller - Timermodi (u. a. PWM) - Verknüpfung von Timerereig- nissen mit Signalausgängen und Interrupts - Konfiguration und Steuerung mittels SFRs - Erzeugen analoger Spannun- gen mittels PWM - Timernutzung zur Erzeugung eines Signalwechsels mit defi- nierter Frequenz - Interruptserviceroutinen - dynamische Konfiguration von PWM-Signalen - Realisieren von Berechnungen mittels "lookup table" - Vorteilhafte Umsetzung von Re- chenfunktionen 4. 1-Wire-Bus Identifizieren, ansprechen, abfragen und steuern von Busteilnehmern am Beispiel von Temperatursensoren DS18S20 (Dallas) - Bus-Kommunikationskonzepte (hier: Master-Slave) - Protokollrahmen - Busankopplung/Bustiming - Nutzung des USART0 - Teilnehmeridentifikation mittels ID-Suchbaum - CRC-Handling zur Detektion von Übertragungsfehlern - Codierung und Umwandlung von Temperaturwerten

Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 1/21

Versuch 3

Versuche Lehrinhalte "Hardware" Lehrinhalte "Software" 1. Einführung

Vertraut werden mit STK500/501-Board, AVR-Studio (Assembler, Simula-tor) und Codevision AVR (C-Compiler)

- Struktur der Kits; Aufbau - Handhabung der Hardware - Ressourcen des AT-Mega128 - Lage und Nutzung der Ports - Adressraum und Lage von

SFRs und Interruptvektoren - Ansteuerung einer LED

- GUI und Handling AVR-Studio - GUI und Handling Codevision;

Nutzung Code-Wizard - Makros zur Port- und Pin-

Steuerung - Unterschied Assembler-Code/C-

Code - Einsatz des Simulators bei As-

sembler-und C-Projekten - Dimensionierung von Warte-

schleifen 2. Parallele Ein-/Ausgänge

Scannen eines 3x3 Tasten-feldes und Signalisierung der erkannten Taste über eine zugehörige LED

- Benutzung von PORTs als Sig-naleingänge

- Typen der Port-Ausgangsbe-schaltung

- Nutzung von schaltbaren Pull-Up-Widerständen der Port-Pins

-

- Grundlegende Handhabung der PORT Pins mit spezieller Aus-gangsbeschaltung

- Technik zum Pinsparenden Ab-tasten von Schalterereignissen durch Scanning-Verfahren; Tas-tenentprellen

- Ansprechen von PORTs über PORT- und PIN-Deklaration

3. Timer und Interrupts

Realisierung einer Blink-leuchte mit fester Blink-frequenz; Erzeugen quasi-analoger harmonischer Sig-nale; Umsetzung eines DTMF-Wähltongenerators auf Basis des Tastenfeldes

- Behandlung von Interrupts im Controller

- Timermodi (u. a. PWM) - Verknüpfung von Timerereig-

nissen mit Signalausgängen und Interrupts

- Konfiguration und Steuerung mittels SFRs

- Erzeugen analoger Spannun-gen mittels PWM

- Timernutzung zur Erzeugung eines Signalwechsels mit defi-nierter Frequenz

- Interruptserviceroutinen - dynamische Konfiguration von

PWM-Signalen - Realisieren von Berechnungen

mittels "lookup table" - Vorteilhafte Umsetzung von Re-

chenfunktionen 4. 1-Wire-Bus

Identifizieren, ansprechen, abfragen und steuern von Busteilnehmern am Beispiel von Temperatursensoren DS18S20 (Dallas)

- Bus-Kommunikationskonzepte (hier: Master-Slave)

- Protokollrahmen - Busankopplung/Bustiming - Nutzung des USART0

- Teilnehmeridentifikation mittels ID-Suchbaum

- CRC-Handling zur Detektion von Übertragungsfehlern

- Codierung und Umwandlung von Temperaturwerten

Page 2: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 2/21

Inhalt 1 Konzept nebenläufiger Controllerprozesse unter Nutzung von Interrupts 2 Handhabung von Interrupts in der Programmiersprache C 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi 4 Praktischer Teil zum Termin 6 4.1 Initial-Konfiguration des Timers 0 mit dem Code-Wizard 4.2 Aufgabe: Erstellen eines timerinterrupt-basierten Programms zum periodischen

Wechseln des Leuchtzustands (Ein-/Aus) einer LED-Zeile mit einer Fre- quenz von genau 2 Hz und einem Tastverhältnis von 20%

5 Praktischer Teil zum Termin 7 5.1 Erzeugen quasi analoger Stannungen durch Puls-Weiten-modulierte Signale (PWM) 5.2 Umsetzen von Rechenfunktionen durch Ergebnistabellen ("Lookup-Table", LUT) 5.3 Aufgabe: Erstellen eines Programms zur PWM-basierten Erzeugung eines harmoni-

schen Sinus-Signals für die Ansteuerung des am Portpin PB4 angeschlos- senen Lautsprechers unter Nutzung einer LUT mit 16 Werten pro Sinus- periode

6 Praktischer Teil zum Termin 8 6.1 Nutzung von Signaltonpaaren (DTMF) zur Identifikation von Wähltasten 6.2 Erzeugung von Signalen quasi beliebiger Frequenzen über LUT 6.3 Aufgabe: Erstellen eines Programms zur Tastenfeldabfrage und PWM-basierten Er-

zeugung eines tastenäquivalenten Mischsignals aus zwei harmonischen Sinus-Signalen unterschiedlicher Frequenz für die Ansteuerung des am Portpin PB4 angeschlossenen Lautsprechers unter Nutzung einer LUT mit 1024 Werten pro Sinusperiode

Page 3: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 3/21

1 Konzept nebenläufiger Controllerprozesse unter Nutzung von Interrupts Im Versuch 1 des Praktikums wurde zur Realisierung einer Blinkfunktion mit einer Blink-frequenz von 2 Hz ein Assembler-Programm erstellt, zu dessen Hauptkomponenten eine Warteroutine gehörte, die über verschachtelte Zählschleifen gebildet wurde. Beim äquiva-lenten C-Programm des Folgetermins wurde für den gleichen Zweck die Bibliotheks-Funktion delay_us(…) bzw. delay_ms(…) benutzt, die bei der Übersetzung durch den Compiler ebenfalls in eine Reihe verschachtelter Zählschleifen auf Assembler-Ebene um-gesetzt wurde. Beide Realisierungen einer Pausen-Funktion basieren darauf, den Prozes-sor für eine definierte Zeit im Sinne der Programmfunktion "unschädlich" zu beschäftigen, bis die nächste sinnvolle Aktion erforderlich wird. Timing-Aufgaben mit hoher erforderlicher Zeitkonstanz sind mit obigen Methoden nur sehr schwierig zu lösen. Durch das Zählen und Addieren der erforderlichen Taktzyklen aller verwendeten Befehle kann in Verbindung mit der vorgewählten Zahl der Schleifendurch-läufe näherungsweise der Zeitbedarf für die Ausführung der Warteroutine bestimmt wer-den, wobei jeder zusätzlich in die Schleifen eingefügte Befehl eine komplette Neuberech-nung des Zeitbedarfs der Warteroutine nötig macht. Noch größere Auswirkungen auf das Zeitverhalten der Warteroutinen hat eine Veränderung der Taktrate des Prozessors, wo-durch gegebenenfalls die komplette Schleifenstruktur verändert werden muss. Darüber hinaus wird durch Warteschleifen wertvolle Prozessor-Rechenkapazität vergeudet, die in der Regel für sinnvollere Zwecke eingesetzt werden könnte. Um den Prozessor von Warteschleifen bzw. dem zyklischen Abfragen von Ereignissen (sog. "Polling") zu entlasten, wurden bei Mikrocontrollern zusätzliche Schaltungsteile imp-lementiert, die nebenläufig, also ohne Zutun des Prozessors, eigenständig Funktionen er-füllen. Zu diesen Funktionen gehören typischerweise die Ausführung zeitgesteuerter Akti-onen ("Timer" und "Counter"), das Durchführen von Umsetzungsaufgaben (z. B. Analog-Digital-Umsetzung, ADU) sowie das Betreiben von Kommunikationsschnittstellen (z. B. USART- und SPI-Bus-Schnittstelle). Mit diesem Konzept der nebenläufigen Erledigung von zeitintensiven Aufgaben durch periphere Funktionseinheiten beschränkt sich der Pro-zessoreinsatz auf das gelegentliche Entgegennehmen von Ergebnissen bzw. von Status-Informationen. Wertvolle Prozessorzeit verbleibt für die Erledigung wichtiger Aufgaben. Eine wichtige Möglichkeit für periphere Funktionseinheiten, dem Mikrocontroller eine Ser-viceanforderung zu signalisieren, ist die Verwendung von (Hardware-)Interrupts. Dies ge-schieht über entsprechende "Flags" (spezifische Bitstellen) in einem der SFRs des Mikro-controllers. Jede Interruptquelle (periphere Funktionseinheit) kann ihr spezifisches Inter-rupt-"Flag" im Bedarfsfall setzen, woraufhin der Controller sein aktuelles Programm unter-bricht und die zur Interruptquelle gehörende Interruptservice-Routine startet. Der Pro-grammierer entscheidet, ob und wie in der Interruptservice-Routine auf die Interruptanfor-derung reagiert wird und welche Prioritäten die einzelnen Interrupts je nach Wichtigkeit bekommen sollen (Ausführungsreihenfolge). Nach Abarbeitung aller Interrupts-Services wird das durch den/die Interrupts unterbrochene Programm wieder aufgenommen.

Page 4: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 4/21

2 Handhabung von Interrupts in der Programmiersprache C Eine wichtige Voraussetzung für die Verwendung von Interrupts bei Controllern der AVR-Reihe von Atmel ist die globale Interruptfreigabe durch Setzen des I-Bits im Statusregister (Bit 7 in SREG gemäß nachfolgendem Bild)

Eine Manipulation dieses Bits erfolgt mit Hilfe der Assemblerbefehle SEI (Setzen des I-Bits) und CLI (Löschen des I-Bits). Neben der globalen Interruptfreigabe muss jeder spezi-fische Interrupt, wenn er verwendet werden soll, auch zusätzlich über sein zugehöriges Maskenbit (Bit in einem der jeweiligen Interruptquelle zugehörigen SFR) individuell freige-geben werden. Jedem möglichen Interrupt des Controllers ist ein Eintrag in der sog. Interrupt-Vektortabel-le im Datenspeicherbereich zugeordnet, der einen Sprungbefehl zur zugehörigen Inter-ruptservice-Routine (ISR) enthält. In C werden die Interruptservice-Routinen als Funktio-nen mit der im Folgenden gezeigten erweiterten Syntax deklariert. interrupt [<Interrupt-Vektornummer>] void <ISR-Name> (void) In der "Header"-Datei mega128.h sind für alle Einsprungaddressen der Interrupt-Vektorta-belle symbolische Namen definiert, die eine Nutzung erleichtern. Die Interrupt-Service-funktion, deren Name frei wählbar ist, erhält bei ihrer Aktivierung keine Daten (void) und gibt auch nach Beendigung keine Daten zurück (void). Mit dem Einsprung in eine Inter-ruptservice-Routine werden alle Interrupts automatisch global deaktiviert (wie bei CLI-Befehl) und erst nach Beendigung des Interrupt-Service automatisch global wieder freige-geben (wie bei SEI-Befehl).

3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden peripheren Funktionseinheiten jedes Mikro-controllers gehören die Timer/Counter, mit denen sich komplexe zeitabhängige Funktionen steuern lassen. Bei ihnen handelt es sich um eine Einheit bestehend aus einem Taktteiler, einem Aufwärts- bzw. Abwärtszähler und einem Komparator. Über den Taktteiler kann zu-nächst der Basistakt (z. B. der Systemtakt des Prozessors) soweit heruntergeteilt werden, wie es die Anwendung erfordert. Der heruntergeteilte Takt triggert anschließend den Zäh-ler und bewirkt je nach Konfiguration ein Inkrementieren bzw. Dekrementieren des Zähler-stands mit jeder Taktperiode. Der aktuelle Zählerstand kann in Verbindung mit dem Kom-parator dazu benutzt werden, unterschiedliche Ereignisse abzuleiten, wie beispielsweise

- Zählerüberlauf ("Counter Overflow") oder - Gleichheit von Zählerstand und Vergleichswert ("Compare Match").

Verbunden mit diesen Timer-Ereignissen lassen sich durch geeignete Konfiguration der Timereinheit gezielt Interrupts auslösen, der Zählerstand zurücksetzten ("Clear Counter on

Page 5: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 5/21

Match" bzw. mit einem vorbestimmten Wert laden ("Reload Counter on Match") und/oder Signalveränderungen an zugehörigen Timer-Ein-/Ausgangspins bewirken. Der AT-Mega128 besitzt 4 unabhängige Timer/Counter-Einheiten, die beiden 8-Bit-Timer 0 und 2 (Zähler- und Komparatorregister sind jeweils 8-Bit breit) sowie die beiden 16-Bit-Timer 1 und 3 (Zähler- und Komparatorregister sind jeweils 16-Bit breit). Das folgende Bild zeigt die prinzipielle Struktur der 8-Bit Timer/Counter-Einheiten. In dem hier behandelten Versuch 2 wird lediglich der Timer0 (8-Bit-Timer) verwendet. Der rot hinterlegte Pfad ent-spricht der unter Punkt 4 angenommenen Nutzung.

Die Konfiguration und Funktion jeder der 4 Timer ist vergleichsweise komplex und erfolgt unter kombinierter Nutzung einer großen Zahl von SFRs. Nachfolgend beschrieben sind nur die für die folgenden Versuche mit dem Timer0 notwendigen Eigenschaften und ihre Konfiguration über die entsprechenden SFRs (jeweils mit Endung "0" für Timer0). TCNT0 8-Bit Zählerregister mit aktuellem Zählerstand

(Timer/Counter 0) OCR0 Register mit 8-Bit Vergleichswert für den Komparator

(Output Compare Register 0) TCCR0 Funktions-Kontrollwort, legt Timer-Modus und Taktteilung u. A. fest

(Timer/Counter Control Register 0) Über das SFR TCCR0 werden die wichtigsten Voreinstellungen für die gewünschte Timer-funktion vorgenommen. Es gibt die nachfolgend kurz beschriebenen 4 grundlegenden Be-triebs-Modi des Timers, von denen zwei im Praktikumsversuch 2 für unterschiedliche An-wendungen benutzt werden sollen:

Page 6: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 6/21

a) Normal Mode In diesem Modus zählt der Zähler aufwärts bis zum Erreichen des Zählerstands TOP = MAX (0xFF), setzt das Überlauf-Bit (Overflow Flag), löst bei Freigabe einen Überlaufinterrupt (Overflow Interrupt) aus und beginnt die Zählung erneut vom Zählerstand BOTTOM (0x00) aufwärts. Erreicht der Zählerstand den Vergleichswert in OCR0, kann ebenfalls bei Freigabe ein Interrupt (Compare Match In-terrupt) ausgelöst werden.

b) CTC Mode In diesem Modus zählt der Zähler aufwärts bis zum Erreichen des Zählerstands TOP, der hier dem Inhalt des OCR0-Registers ent-spricht, löst bei Freigabe einen Interrupt aus (Compare Match Inter-rupt), "toggelt" bei Freigabe den Timer0-Ausgangspin OC0 (Port B Bit 4) und beginnt die Zählung erneut vom Zählerstand BOTTOM (0x00) aufwärts.

c) Fast PWM Mode In diesem Modus zählt der Zähler von BOTTOM (0x00) beginnend

aufwärts bis TOP = MAX (0xFF), setzt das Überlauf-Bit (Overflow

COMn1:0 = 0für OCn disconnect

Page 7: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 7/21

Flag), löst bei Freigabe einen Überlaufinterrupt (Overflow Interrupt) aus, setzt den Timer0-Ausgangspin OC0 auf '1' und beginnt die Zäh-lung erneut vom Zählerstand BOTTOM (0x00) aufwärts. Zusätzlich wird bei Gleichheit des Zählerstands mit dem Inhalt des OCR0-Registers bei Freigabe ein Interrupt (Compare Match Interrupt) aus-gelöst und der Timer0-Ausgangspin OC0 wieder auf '0' gesetzt. An OC0 entsteht dadurch ein Rechtecksignal konstanter Frequenz, des-sen Pulsweite über den Inhalt des OCR0-Registers einstellbar ist.

d) Phase Correct PWM Mode In diesem Modus zählt der Zähler von TOP = MAX (0xFF) beginnend abwärts bis BOTTOM (0x00), setzt das Überlauf-Bit (Overflow Flag), löst bei Freigabe einen Überlaufinterrupt (Overflow Interrupt) aus, in- vertiert die Zählrichtung und setzt das Zählen bis zum Erreichen von TOP fort. Während jedes Zählzyklusses wird abwärts bei Gleichheit des Zählerstands mit dem Inhalt des OCR0-Registers der Timer0- Ausgangspin OC0 auf '1' und aufwärts auf '0' gesetzt und bei Freiga- be in beiden Fällen ein Interrupt (Compare Match Interrupt) ausge- löst. An OC0 entsteht dadurch, wie unter c), ein PWM-Signal.

Welcher der obigen Timer0-Modi ausgewählt ist, entscheiden die beiden Bits WGM00 und WGM01 im SFR TCCR0 (WGM0n1:0 = 0 bedeutet "Normal Mode"; WGM0n1:0 = 1 bedeu-tet "Phase-Correct PWM Mode"; WGM0n1:0 = 2 bedeutet "CTC-Mode" und WGM0n1:0 = 3 bedeutet "Fast PWM Mode"). Zur Grobeinstellung der Frequenz für die vier oben beschriebenen Timer-Modi dient der bereits erwähnte Taktteiler (Prescaler), über den der Eingangstakt (Systemtakt oder alter-nativ externe Taktquelle, selektierbar über Bit AS0 in SFR ASSR) in 7 Stufen vom Tei-lungsverhältnis 1/1 bis zum Teilungsverhältnis 1/1024 heruntergeteilt werden kann (selek-tierbar über die Bits CS0, CS1 und CS2 des SFR TCCR0). CSn2:0 = 0 bedeutet als 8.

Page 8: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 8/21

Stufe, dass die Timer0-Funktionen deaktiviert sind (Timer ist gestoppt). Das folgende Bild zeigt die Blockstruktur des Taktteilers und seine Nutzung in den jeweiligen Teilversuchen.

4 Praktischer Teil zum Termin 6 4.1 Initial-Konfiguration des Timers 0 mit dem Code-Wizard Mit Hilfe des Code-Wizard-Configurators lassen sich Timereinstellungen leicht umsetzen.

Versuch 2 Termin 6 Versuch 2 Termin 7&8

Timer-Grundeinstellungen: Wahl von Taktquelle, Teiler-verhältnis und Timer-Modus

Interrupt-Einstellungen: Wahl von Überlauf- und/oder Zählervergleicher-Interrupt

Registerinhalte: Vorgabe der Initialwerte für das Zähler- und Vergleichsregister

Page 9: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 9/21

Im umseitigen Bild ist ersichtlich, dass die Einstellmöglichkeiten als Klartextangaben aus entsprechenden Auswahlfeldern selektierbar sind. Dort, wo Beziehungen der Einstellmög-lichkeiten zu Einstellungen aus anderen Menüpunkten bestehen, wie beispielsweise bei der Wahl der Teilerverhältnisse in Bezug zum vorgewählten Systemtakt, werden die Aus-wahloptionen entsprechend angepasst. Dies erleichtert die Wahl der korrekten Einstellun-gen. Auch werden die meisten Angaben auf Plausibilität überprüft und bei Unstimmigkei-ten werden entsprechende Fehlermeldungen bzw. Hinweise angezeigt. 4.2 Aufgabe: Erstellen eines timerinterrupt-basierten Programms zum periodi-

schen Wechseln des Leuchtzustands (Ein-/Aus) einer LED-Zeile mit einer Frequenz von genau 2 Hz und einem Tastverhältnis von 20%

Die für die Beantwortung der nachfolgenden Fragen und die Ausführung des Programm-entwurfs zur folgenden Aufgabenstellung notwendigen Informationen können den Unterla-gen zum Praktikumsversuch 1 und 2, den vorangegangenen Kapiteln, dem Datenblatt des AT-Mega128 und dem Handbuch zum Programm Codevision-AVR entnommen werden. Vorbereitende Fragen zur Klärung:

• Mittels welcher C-Anweisung lässt sich eine globale Interruptfreigabe erteilen? ___________________

• Wie lautet die Deklarations-Kopfzeile einer Interruptservice-Routine für den Überlauf-Interrupt (Overflow Interrupt) des Timers 0 in C-Notation? ______________________________________________________________________

• Welche Interrupt-Vektornummer besitzt der Überlauf-Interrupt des Timers 0? ___________________

• Welcher Wert im SFR TCCR0 konfiguriert den Timer 0 so, dass er im CTC-Modus ar-beitet, eine Taktteilung 1/256 vornimmt und den Ausgangspin OC0 nicht benutzt?

TCCR0 = ___________

• Wie muss die vorhergehende Timerkonfiguration geändert werden, damit bei einem Inhalt von 0x90 im SFR OCR0 ein Compare Match Interrupt alle 20 ms ausgelöst wird? TCCR0 = ___________ (Grundlage: Systemtakt fClk = 7,3728 MHz)

• Als Tastverhältnis eines PWM-Signals wird das Verhältnis der Einschaltdauer zur Peri-odendauer bezeichnet (PWM% = tein / T). Wie lassen sich regelmäßige Interrupts alle 20 ms nutzen, um ein Lichtsignal mit einer Blinkfrequenz von 2 Hz und einem Tastver-hältnis von 20% zu erzeugen?

Page 10: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 10/21

______________________________________________________________________ ______________________________________________________________________

Praktische Programmieraufgabe: Entwickeln Sie ein C-Programm mit dem Namen SMR_Termin6, das – einen durch den Code-Wizard erzeugten Initialisierungsteil besitzt, in dem der Timer 0

so konfiguriert wird, dass er im CTC-Modus arbeitet, den Ausgangspin OC0 nicht be-nutzt und den Timer in den Zustand "Stopp" versetzt.

– ein Hauptprogramm besitzt, das aus einem Initialisierungsteil und einer Endlosschleife besteht, wobei die Endlosschleife ohne Inhalt ausgeführt ist.

– vor Erreichen der Endlosschleife des Hauptprogramms alle Interrupts global freigibt und den Timer 0 startet.

– den Timer 0 so konfiguriert, dass alle 20 ms ein Compare Match Interrupt ausgelöst wird (Prozessortakt fClk = 7,3728 MHz).

– eine Blinkfunktion aller LEDs des Port A mit einer Frequenz von 2 Hz und einem Tast-verhältnis von 20% ausschließlich über die Interruptservice-Routine des Compare Match Interrupt realisiert.

Überprüfen Sie die Funktion des von Ihnen entwickelten Programms auf dem Praktikums-Board. Optionale Zusatzaufgabe: Kombinieren Sie die Funktionen des aktuellen Programms mit denen des vorhergehenden Praktikumsversuchs (Termin 5) so, dass die Blinklampenfunktion (LEDs am Port A) gleichzeitig mit der Tastenfeld-Scanfunktion ausgeführt wird, ohne dass sich beide Funkti-onen gegenseitig beeinflussen. Dabei soll das Hauptprogramm (Endlosschleife) die Tas-tenfeld-Scanfunktionen beinhalten und die Interruptservice-Routine vollständig die Blink-funktion übernehmen. Überprüfen Sie die Funktion des von Ihnen entwickelten Programms auf dem Praktikums-Board.

Page 11: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 11/21

5 Praktischer Teil zum Termin 7 5.1 Erzeugen quasi analoger Spannungen durch Puls-Weiten-modulierte Signale

(PWM) Puls-Weiten-Modulation (PWM) ist eine Technik analoge Signalwerte in eine Folge von Rechtecksignalen zu konvertieren. Dabei wird, bei gleich bleibender Periodendauer T des Rechtecksignals, das Verhältnis der Zeitdauer für den Zustand log. '1' (tein) zur Zeitdauer des Zustands log. '0' (taus) gemäß der Größe des analogen Signalwerts eingestellt. Als kennzeichnende Größe für den Momentanwert eines PWM-Signals wird das Tastverhält-nis PWM% verwendet, das sich als Verhältnis aus tein/T berechnet. Eine analoge Span-nung von 0 V (VL) entspricht dabei einem Tastverhältnis von 0%, die maximale Ausgangs-spannung von VH entspricht 100% Tastverhältnis. Dazwischen sind im Prinzip alle ande-ren analogen Signalspannungen linear in äquivalente Tastverhältnisse überführbar. Im folgenden Bild wird dies für die konstante Spannung VAV veranschaulicht.

Im Bild erkennbar ist auch, dass der zu einem PWM-Signal äquivalente analoge Signal-wert dem zeitlichen Mittelwert des PWM-Signals, also dem Integral der Signalwerte über eine Periode bezogen auf die Periodendauer entspricht (schwarze und blaue Fläche sind je Periode flächengleich). Puls-Weiten-modulierte Signale besitzen insbesondere im Bereich der Steuerungs- und Regelungstechnik z. B. als Stellsignale für Antriebe und Netzteile oder als Meldesignale von Sensoren eine große Bedeutung. Dies liegt u. a. darin begründet, dass ihre Erzeu-gung sowohl in analoger als auch in digitaler Schaltungstechnik leicht möglich ist, dass sie auch über längere Leitungsstrecken quasi störungs- und verlustfrei übertragen werden können und dass eine Rückwandlung in ein analoges Signal durch einfache Tiefpassfilte-rung erfolgen kann. Gerade letztere Eigenschaft soll in beiden folgenden Praktikumsteilversuchen ausgenutzt werden, um arbiträre Tonsignale über den auf dem Praktikums-Board an Port B Pin 4 (OC0) angeschlossenen Lautsprecher auszugeben. Dabei wirkt der Lautsprecher in Ver-bindung mit weiteren Schaltungskomponenten auf dem Board näherungsweise wie ein Tiefpassfilter. Will man ein zeitkontinuierliches analoges Ton-Signal mittels PWM-Signalen nachbilden, dann muss das Tastverhältnis des PWM-Signals von Periode zu Periode so angepasst werden, dass der zeitliche Mittelwert des Signals dem Momentanwert (Proben-

Page 12: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 12/21

wert) des nachzubildenden analogen Signals im Intervall der Periodendauer des PWM-Signals entspricht. Nachfolgendes Bild veranschaulicht die Vorgehensweise für die Nach-bildung eines Sinus-Signals.

Die Qualität der Nachbildung des analogen Signals wird umso besser, je kleiner die Perio-dendauer des PWM-Signals bezogen auf die des analogen Signals ist (im obigen Bild wird eine Periode des Sinus-Signals mittels 12 Perioden des PWM-Signals nachgebildet). Eine Grenze ist auch hier, wie in anderen Bereichen der digitalen Signalverarbeitung, durch das Nyquist-Kriterium gegeben. Bei der Beschreibung der verschiedenen Timer-Modi des Mikrocontrollers unter Punkt 3 wurden zwei Arten der Erzeugung von PWM-Signalen gezeigt, die beide darauf basieren, dass ein Ausgangssignal automatisch abhängig vom Momentanwert eines periodisch ak-tualisierten Zählers auf log. '1' gesetzt bzw. gelöscht (auf log. '0' gesetzt) wird. Dabei kann über den Inhalt des Vergleichswert-Registers (OCR0) das Tastverhältnis des PWM-Sig-nals linear eingestellt werden (OCR0 = 0 entspricht 0% Tastverhältnis, OCR0 = 255 ent-spricht 100% Tastverhältnis). In den beiden folgenden Teilversuchen soll jeweils der "Phase Correct PWM Mode" mit Aufwärts-/Abwärtszählung (Dual Slope) verwendet werden, der unter allen Betriebsbedin-gungen ausreichend viel Zeit für die Ausführung der zugehörigen Interruptservice-Routine zwischen zwei aufeinander folgenden Interrupts zur Verfügung stellt. In diesem Modus gilt für die Nachbildung eines periodischen analogen Signals der Frequenz f der folgende for-melmäßige Zusammenhang:

C

Clk

C

l

Nf

Nff 510/

==

Dabei sind NC die Anzahl der Probenwerte je Periode, fl die PWM-Frequenz und fClk die Timer-Taktfrequenz (hier: Prozessor-Taktfrequenz).

Probenwerte des analogen Sinus-Signals, die das Tastverhältnis für eine PWM-Periode bestimmen

Page 13: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 13/21

5.2 Umsetzen von Rechenfunktionen durch Ergebnistabellen ("Lookup-Table", LUT)

Die Ausführung von Interruptservice-Routinen (ISRs) ist in der Regel zeitkritisch, da für ihre Abarbeitung das Hauptprogramm unterbrochen werden muss und solange ruht, bis der Interruptservice beendet ist. Erfordert die Funktion der ISR zeitintensive, komplexe Rechenoperationen, müssen Wege gefunden werden, diese Berechnungen zu vermeiden, zu vereinfachen oder die Ausführung dieser Berechnungen auf Leerlaufzeiten des Haupt-programms zu verlagern. Eine Möglichkeit in diesem Zusammenhang ist die Verwendung von Ergebnistabellen, der sog. "Lookup Table" (LUT). Hierbei werden die Funktionswerte der umzusetzenden Funk-tion bereits zur Compilierungszeit des Programms für eine ausreichend große Anzahl von Funktionsargumenten berechnet und zusammen mit dem Programmcode als Tabelle im Codespeicher abgelegt. Zur Laufzeit des Programms besteht die "Berechnung" des Funk-tionswertes dann lediglich im Auffinden des zum gewünschten Funktionsargument wert-nächsten tabellierten Funktionsarguments und dem Auslesen des zugehörigen Funktions-wertes aus der Tabelle. Bei Bedarf kann zusätzlich die Genauigkeit des Funktionswerts durch Interpolation zwischen den beiden benachbarten Funktionswerten mit geringem zu-sätzlichem Rechenaufwand erhöht werden. Im Fall der im Folgenden benötigten trigonometrischen Funktionswerte der Sinus-Funktion würde eine Umsetzung der Sinusberechnung durch den Compiler mittels eines Reihenan-satzes (Taylorreihe) erfolgen, der je nach gewünschter Rechengenauigkeit eine große An-zahl von Multiplikations- und Additionsberechnungen erfordert. Die hierfür erforderliche Rechenzeit lässt sich durch eine entsprechende LUT auf einen Bruchteil reduzieren. Das folgende Bild zeigt die für die Umsetzung einer Sinusfunktion mit 12 äquidistanten Stütz-stellen erforderlichen LUT-Werte unter Annahme eines möglichen Wertebereichs von 0 bis 255 (passend für das 8-Bit Vergleichswertregister OCR0 des Timers 0).

Das Einbinden von LUTs in den C-Programmcode kann in gleicher Weise, wie es im Ver-such 2 bereits für skalare Konstanten gezeigt wurde, auch auf Konstanten-Tabellen als Arrays angewendet werden, z. B. für ein Array TEST aus 5 Feldern in der Form: const char TEST[5] = {5, 10, 20, 40, 80}; Ein Aufruf der einzelnen Konstantenwerte erfolgt genau wie bei Variablen-Arrays.

4 37 94

160 217 250 250 217

160

94 37 4

Page 14: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 14/21

5.3 Aufgabe: Erstellen eines Programms zur PWM-basierten Erzeugung eines har- monischen Sinus-Signals für die Ansteuerung des am Portpin PB4 angeschlossenen Lautsprechers unter Nutzung einer LUT mit 16 Werten pro Sinusperiode

Die für die Beantwortung der nachfolgenden Fragen und die Ausführung des Programm-entwurfs zur folgenden Aufgabenstellung notwendigen Informationen können den Unterla-gen zum Praktikumsversuch 1 und 2, den vorangegangenen Kapiteln, dem Datenblatt des AT-Mega128 und dem Handbuch zum Programm Codevision-AVR entnommen werden. Vorbereitende Fragen zur Klärung:

• Wie lassen sich die erforderlichen Werte für eine 16-stufige LUT einer Sinusfunktion berechnen, wenn die komplette Amplitudenbandbreite ausgenutzt werden soll? SIN_TABLE [i] = (0 ≤ i ≤ 15) _________________________________________

• Wie lauten die zugehörigen 16 LUT-Werte? _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____

• Welcher Wert im SFR TCCR0 konfiguriert den Timer 0 so, dass er im Phase Correct PWM Mode arbeitet, keine Taktteilung vornimmt und den Ausgangspin OC0 (nicht in-vertiert) benutzt?

TCCR0 = ___________

• Was ist die höchste mögliche Frequenz, mit der Overflow Interrupts im Phase Correct PWM Mode ausgelöst werden können? fl = ___________ (Grundlage: Systemtakt fClk = 7,3728 MHz)

• Welche Tonfrequenz kann am Lautsprecherausgang wahrgenommen werden, wenn nach dem beschriebenen Signalerzeugungsverfahren eine LUT mit 16 Werten für eine Sinusperiode verwendet wird? f = ___________ (Grundlage: Systemtakt fClk = 7,3728 MHz)

• Wie würde sich eine Halbierung aller LUT-Werte am Lautsprecherausgang bemerkbar machen? ______________________________________________________________________

Page 15: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 15/21

Praktische Programmieraufgabe: Entwickeln Sie ein C-Programm mit dem Namen SMR_Termin7, das – einen durch den Code-Wizard erzeugten Initialisierungsteil besitzt, in dem der Timer 0

so konfiguriert wird, dass er im Phase Correct PWM Mode arbeitet, den Ausgangspin OC0 als nicht invertierten Ausgang mit Interrupt-Unterstützung nutzt und den Timer in den Zustand "Stopp" versetzt.

– ein Hauptprogramm besitzt, das aus einem Initialisierungsteil und einer Endlosschleife besteht, wobei die Endlosschleife ohne Inhalt ausgeführt ist.

– vor Erreichen der Endlosschleife des Hauptprogramms alle Interrupts global freigibt und den Timer 0 ohne Taktteilung startet.

– Stützstellenwerte für die Nachbildung einer Sinusfunktion als LUT mit 16 Werten im Co-despeicher ablegt, wobei die Stützstellenwerte so skaliert sind, dass sich ein maximal möglicher Signalhub ergibt.

– ein harmonisches Sinus-Tonsignal an dem am Ausgang OC0 angeschlossenen Laut-sprecher unter sequentieller Nutzung der Werte der LUT erzeugt.

– alle Maßnahmen zur Tonerzeugung ausschließlich über die Interruptservice-Routine des Overflow Interrupt des Timers 0 realisiert.

Page 16: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 16/21

6 Praktischer Teil zum Termin 8 6.1 Nutzung von Signaltonpaaren (DTMF) zur Identifikation von Wähltasten In analogen Telefonanlagen wird für die Teilnehmerwahl und zur Fernabfrage und Steue-rung von Anrufbeantwortern und automatisierten Telefondiensten ein Ton-basiertes Co-dierverfahren für die Zeichen und Ziffern der Telefontastatur verwendet. Dieses als DTMF (Dual Tone Multiple Frequency) bezeichnete Verfahren verwendet Mischtöne gebildet aus jeweils zwei charakteristischen hörbaren Tonfrequenzen. Die Tonfrequenzen sind dabei so gewählt, dass aus ihnen gebildete Mischprodukte (höhere harmonische Frequenzanteile), wie sie in nichtlinearen Übertragungssystemen auftreten können, leicht von den Nutzsig-nalen getrennt (ausgefiltert) werden können. Das DTMF-Verfahren verwendet zwei Grup-pen zu je 4 Tonfrequenzen mit denen sich durch Kombination 16 verschiedene Tasten der Telefontastatur verschlüsseln lassen. Das nachfolgende Bild zeigt die verwendeten Fre-quenzen und die Tonkombinationsmatrix.

Die Tonsignalmischung erfolgt dabei nicht mit gleicher Signalamplitude sondern nach DTMF-Spezifikation so, dass der jeweils niederfrequentere Ton eine um den Faktor K ge-ringere Amplitude A besitzt als der höherfrequente Ton. Der folgende formelmäßige Zu-sammenhang zeigt die Rechenvorschrift für die Bildung des Mischtonsignals:

[ ] 9,07,0)2sin()2sin()( <<⋅⋅⋅+⋅⋅⋅= KmittfKtfAtf ba ππ

Durch geschickte Wahl des Faktors K (innerhalb des zulässigen Wertebereichs) als K = 0,75 = 1 – ¼ kommt die programmtechnische Umsetzung obiger Formel ohne Multiplikati-onsoperation aus, da sich alle Multiplikationen mit 2'er Potenzen über Bit-Verschiebeope-rationen umsetzen lassen. Dies ist dort vorteilhaft wo eine sehr schnelle Berechnung be-nötigt wird, wie beispielsweise in Interruptservice-Routinen. 6.2 Erzeugung von Signalen quasi beliebiger Frequenzen über LUT Wie im vorangegangenen Teilversuch unter Punkt 5 gezeigt wurde bestimmt sich die Fre-quenz f eines Sinus-Signals, das mittels PWM-Signalen der Frequenz fl und einer LUT mit NC Werten durch zyklischen Wechsel erzeugt wird, nach der Formel

C

Clk

C

l

Nf

Nff 510/

==

Soll die Frequenz des Signus-Signals verändert werden, so besteht laut obiger Formel die Möglichkeit die PWM-Frequenz entsprechend anzupassen, oder die Zahl der Stützstellen

Page 17: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 17/21

der LUT für eine Sinus-Periode entsprechend zu variieren. Erstere Möglichkeit, die Varia-tion der PWM-Frequenz, ist mit den Mitteln des AT-Mega128 und des Timers 0 nur sehr begrenzt über die Stufen des Taktteilers möglich. Die zweite Alternative, individuelles Anpassen der LUT-Werte für die jeweils gewünschte Sinus-Frequenz, ist wenig flexibel, wenn man für jede weitere Sinus-Frequenz eine neue LUT anlegen muss. Eine Möglichkeit dies trotzdem flexibel mittels LUT-Technik zu ermög-lichen ergibt sich aus der folgenden Betrachtung. Verwendet man nicht jeden einzelnen Wert in der Folge der Werte aus der LUT, sondern z. B. nur jeden 2. Wert, dann führt dies zu einer Verdopplung der Frequenz des Sinus-Signals, allerdings auch zu einer Halbierung der Zahl der Stützstellen für jede Sinus-Periode. Das nachfolgende Bild verdeutlicht diesen Zusammenhang.

Durch geeignete Wahl der Inkrementstufen (Wahl jedes n-ten Wertes der LUT) lassen sich quasi beliebige ganzzahlige Vielfache der Grundfrequenz, für die die LUT-Werte berech-net wurden, als Signal-Frequenzen bilden. Eine Grenze nach Oben (zu hohen Frequen-zen) ergibt sich wiederum nur durch die kleinste noch zulässige Zahl von Stützstellen je Periode (analog zum Nyquist-Kriterium). Die Signalqualität wird bei diesem Verfahren um-so besser, je mehr Stützstellen die LUT je Signalperiode besitzt, also je kleiner die Grund-frequenz f in der vorherigen Formel ist. Der Zusammenhang zwischen der zu erzeugenden Signal-Frequenz fi (= fa bzw. fb) und der hierfür erforderlichen Inkrementstufe ∆i (= ∆a bzw. ∆b) bei gegebener PWM-Frequenz fl bzw. Taktfrequenz fClk lautet dann:

Clk

Ci

l

Ci f

Nff

Nfi 510⋅⋅=⋅=∆

4 37 94

160 217 250 250 217

160

94 37 4

37

160

250 217

94

44

94

217 250

160

37

Page 18: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 18/21

Damit ergibt sich der Index i (= a bzw. b) für den Zugriff auf den jeweils nächsten Wert der LUT aus dem Vorgänger-Index i' (= a' bzw. b') durch den Zusammenhang iii ∆+= ' . Um zu vermeiden, dass nach n-facher Inkrementierung der Index i einen Wert erreicht der größer als die Anzahl der Stützstellen der LUT ist, muss die Indexzählung nach Erreichen der höchsten zulässigen Indexzahl ringförmig wieder bei 0 beginnend fortgeführt werden (entsprechend einer Modulo-Operation). Für die Erzeugung der benötigten 8 unterschiedlichen Frequenzen für das DTMF-Verfah-ren (von denen im vorliegenden Praktikum nur 6 Frequenzen für die Codierung der Ziffern 1 bis 9 benötigt werden) lassen sich die jeweiligen Inkrementstufen nach der zuvor ange-gebenen Formel bestimmen. 6.3 Aufgabe: Erstellen eines Programms zur Tastenfeldabfrage und PWM-basier-

ten Erzeugung eines tastenäquivalenten Mischsignals aus zwei har- monischen Sinus-Signalen unterschiedlicher Frequenz für die An- steuerung des am Portpin PB4 angeschlossenen Lautsprechers un- ter Nutzung einer LUT mit 1024 Werten pro Sinusperiode

Die für die Beantwortung der nachfolgenden Fragen und die Ausführung des Programm-entwurfs zur folgenden Aufgabenstellung notwendigen Informationen können den Unterla-gen zum Praktikumsversuch 1 und 2, den vorangegangenen Kapiteln, dem Datenblatt des AT-Mega128 und dem Handbuch zum Programm Codevision-AVR entnommen werden. Vorbereitende Fragen zur Klärung:

• Wie muss ein Konstanten-Feld (Array) da_table[10] deklariert werden, damit über die Tastenziffer (1 bis 9) als Index die für die jeweilige Taste benötigte Inkrementstufe ∆a der DTMF-Spaltenfrequenz für eine LUT mit 1024 Werten direkt ermittelt werden kann? const char da_table[10] = {_______________________________________________};

• Wie muss ein Konstanten-Feld (Array) db_table[10] deklariert werden, damit über die Tastenziffer (1 bis 9) als Index die für die jeweilige Taste benötigte Inkrementstufe ∆b der DTMF-Zeilenfrequenz für eine LUT mit 1024 Werten direkt ermittelt werden kann? const char db_table[10] = {_______________________________________________};

• Wie viele Stützstellen NDTMF(fi) lassen sich für eine Signalperiode der höchsten und der niedrigsten verwendeten DTMF-Frequenz aus einer LUT mit 1024 Werten ableiten (ge-rundet)? NDTMF(fmin) = ___________________ NDTMF(fmax) = ___________________

• Von welchem Typ sollten Index-Variablen a und b für den Zugriff auf obige LUT sein? ___________

Page 19: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 19/21

• Warum sind die LUT-Werte der Datei "sin_table1024.dat" (auf dem Desktop des Prakti-kums-PC verfügbar) auf einen 7-Bit-Wertebereich (Werte 0 bis 127) beschränkt? ______________________________________________________________________ ______________________________________________________________________

• Wie lautet die C-Codezeile mit der die Berechnung des aktuellen Vergleichswerts für das OCR0-Register aus den Werten der LUT (sin_table[i]) und den Indizes i (= a bzw. b) unter Berücksichtigung des Faktors K = 0,75 = (1 – ¼) ohne Verwendung einer Mul-tiplikationsoperation ausgeführt werden kann? OCR0 = ______________________________________________________________;

• Welcher maximale Vergleichswert für das OCR0-Register kann sich aus obiger Berech-nungszeile in Verbindung mit den Werten aus der Datei "sin_table1024.dat" ergeben? ___________

• Wie lautet eine C-Codezeile mit der der neue Zugriffsindex a (für die DTMF-Spaltenfre-quenzen) aus dem Vorgängerindex und der Inkrementstufe ∆a (= da_table[tastenziffer]) berechnet wird, wobei sichergestellt werden muss, dass a nur Werte im Wertebereich von 0 bis 1023 annehmen kann (Umsetzung der Modulo-Operation über Wertabfrage!)? _____________________________________________________________________;

Praktische Programmieraufgabe: Entwickeln Sie ein C-Programm mit dem Namen SMR_Termin8, das – einen durch den Code-Wizard erzeugten Initialisierungsteil besitzt, in dem der Timer 0

so konfiguriert wird, dass er im Phase Correct PWM Mode arbeitet, den Ausgangspin OC0 als nicht invertierten Ausgang mit Interrupt-Unterstützung nutzt, den Timer in den Zustand "Stopp" versetzt und der alle notwendigen Portkonfigurationen der Ports B, C und D für das Abfragen der Tasten-Matrix und Ansteuern der Tasten-LEDs vornimmt.

– am Ende des Initialisierungsteils des Hauptprogramms alle Interrupts global freigibt und den Timer 0 ohne Taktteilung startet.

– Stützstellenwerte für die Nachbildung einer Sinusfunktion als LUT mit 1024 Werten im Codespeicher ablegt, wobei die vorberechneten Stützstellenwerte aus der Datei "sin_table1024.dat" (auf dem Desktop des Praktikums-PC verfügbar) übernommen werden sollen.

– in einer Endlosschleife des Hauptprogramms sequentiell die Scan-Phasen 1, 2 und 3 aus Punkt 2 des Versuchs 2 für jede der 9 Tasten der Tastenmatrix umsetzt (s. Pro-gramm aus Termin 4) und deren aktuellen Schaltzustand ermittelt.

Page 20: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 20/21

– abhängig vom erkannten Schaltzustand jedes Tasters die zugehörige LED einschaltet bzw. ausschaltet (s. Programm aus Termin 4).

– bei erkannter Tastenbetätigung ein äquivalentes DTMF-Tonsignal an dem am Ausgang OC0 angeschlossenen Lautsprecher unter Nutzung zweier Werte der LUT, und der un-ter Punkt 6.1 und 6.2 angegebenen Berechnungsformeln erzeugt.

– bei gleichzeitiger Betätigung mehrerer Tasten nur die zuerst erkannte betätigte Taste für die DTMF-Tonwahl und die LED-Signalisierung berücksichtigt (solange diese betä-tigt bleibt).

– eine Tonausgabe zuverlässig unterbindet, solange keine Taste betätigt ist. – alle erforderlichen Maßnahmen zur Tonerzeugung über die Interruptservice-Routine des

Overflow Interrupt des Timers 0 realisiert.

Page 21: Praktikum SMR Versuch 3 - uni-due.dehl271st/Lehre/SMR/smr_prakt_v3.pdf · 3 Timer/Counter 0 des Controllers und seine verschiedenen Betriebsmodi Zu den wichtigsten nebenläufig arbeitenden

Praktikum: Struktur von Mikrorechnern (SMR-P)

Datum:

Gruppe:

Versuch 3

SMR-P Viga/08

Blatt: 21/21

Anhang A: Interrupt-Quellen und Vektor-Nummern