AVR-Mikrocontroller in BASCOM programmieren, Teil 3



Ähnliche Dokumente
Anleitung über den Umgang mit Schildern

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Professionelle Seminare im Bereich MS-Office

Simulation LIF5000. Abbildung 1

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Was meinen die Leute eigentlich mit: Grexit?

Primzahlen und RSA-Verschlüsselung

Versuch 3: Sequenzielle Logik

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Dow Jones Future am im 1-min Chart. Mein Handelsereignis lautet: 3 tiefere Hoch s über dem 50-er GD

Das Leitbild vom Verein WIR

Technische Informatik Basispraktikum Sommersemester 2001

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

10.1 Auflösung, Drucken und Scannen

RS-Flip Flop, D-Flip Flop, J-K-Flip Flop, Zählschaltungen

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Woche 1: Was ist NLP? Die Geschichte des NLP.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Fotostammtisch-Schaumburg

Das Persönliche Budget in verständlicher Sprache

Wie in der Skizze zu sehen ist, bleibt die Periodendauer / Frequenz konstant und nur die Pulsweite ändert sich.

Reporting Services und SharePoint 2010 Teil 1

Platinen mit dem HP CLJ 1600 direkt bedrucken ohne Tonertransferverfahren

Tech Note: SYSTEMVARIABLEN SIO_RJ11_BAUDRATE. Tel.: +43 (0) 3159/ Products: SLS Produkte A-8344 Bad Gleichenberg

1 Vom Problem zum Programm

Windows XP Jugendschutz einrichten. Monika Pross Molberger PC-Kurse

Leichte-Sprache-Bilder

Anlegen eines DLRG Accounts

Südbaden-Cup. Ausstieg Champions

Alle gehören dazu. Vorwort

Informationsblatt Induktionsbeweis

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Interrupt-Programmierung

Kreativ visualisieren

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Datensicherung. Beschreibung der Datensicherung

Dow Jones am im 1-min Chat

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Grundlagen der Informatik

Was ich als Bürgermeister für Lübbecke tun möchte

Day-Trading. Ich zeige Ihnen hier an einem Beispiel wie das aussieht.

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Die Post hat eine Umfrage gemacht

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Holiday plans: ein Gespräch über Urlaubspläne

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Elektrische Logigsystem mit Rückführung

WLAN Konfiguration. Michael Bukreus Seite 1

Lernwerkstatt 9 privat- Freischaltung

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Erstellen von x-y-diagrammen in OpenOffice.calc

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl

Wasserzeichen mit Paint-Shop-Pro 9 (geht auch mit den anderen Versionen. Allerdings könnten die Bezeichnungen und Ansichten etwas anders sein)

Zur drittletzten Zeile scrollen

Installation der SAS Foundation Software auf Windows

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Eigenen Farbverlauf erstellen

Wie Sie mit Mastern arbeiten

Die neue Aufgabe von der Monitoring-Stelle. Das ist die Monitoring-Stelle:

Herzlich Willkommen bei der BITel!

Regeln für das Qualitäts-Siegel

Bilder verkleinern oder vergrößern

Netzwerkeinstellungen unter Mac OS X

Voraussetzung. Anleitung. Gehen Sie auf Start Einstellungen und suchen Sie hier den Eintrag Datenverbindungen oder Verbindungen. Öffnen Sie diesen.

Kurzanleitung MAN E-Learning (WBT)

Anti-Botnet-Beratungszentrum. Windows XP in fünf Schritten absichern

Nicht über uns ohne uns

So funktioniert Ihr Selbstmanagement noch besser

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

EasyWk DAS Schwimmwettkampfprogramm

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: Ein Sinusgenerator mit AVR-Timer

Die SPD und die Grünen machen im Niedersächsischen Landtag. Alle Menschen sollen in der Politik mitmachen können.

Die Bundes-Zentrale für politische Bildung stellt sich vor

Was man mit dem Computer alles machen kann

Statuten in leichter Sprache

Erfahrungen mit Hartz IV- Empfängern

S7-Hantierungsbausteine für R355, R6000 und R2700

Anwendungsbeispiele Buchhaltung

FDAX mit Zertifikaten gehandelt

1. Kennlinien. 2. Stabilisierung der Emitterschaltung. Schaltungstechnik 2 Übung 4

Dokumentation für das Spiel Pong

Installation OMNIKEY 3121 USB

Animationen erstellen

ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht BREMERHAVEN. Der Zauberwürfel-Roboter. Paul Giese. Schule: Wilhelm-Raabe-Schule

Die Industrie- und Handelskammer arbeitet dafür, dass Menschen überall mit machen können

Step by Step Webserver unter Windows Server von Christian Bartl

Zeichen bei Zahlen entschlüsseln

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

Aufbau und Bestückung der UHU-Servocontrollerplatine

Mediator 9 - Lernprogramm

! " # $ " % & Nicki Wruck worldwidewruck

P = U eff I eff. I eff = = 1 kw 120 V = 1000 W

DAUERHAFTE ÄNDERUNG VON SCHRIFTART, SCHRIFTGRÖßE

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Fotos verkleinern mit Paint

Transkript:

jean-claude.feltes@education.lu 1/8 AVR-Mikrocontroller in BASCOM programmieren, Teil 3 Alle Beispiele in diesem Kapitel beziehen sich auf den Mega8. Andere Controller können unterschiedliche Timer haben. 14. Timer 14.1 Allgemeines Beim Mega 8 gibt es drei Timer: Timer0: 8 bit (0...255) Timer1: 16 bit (0...65535) Timer2: 8 bit (0...255) Timer1 bietet die meisten Möglichkeiten: Erzeugung von präzisen Impulsen, ohne dass dafür Rechenzeit benötigt wird Regelmäßiges Ausführen von Unterprogrammen Uhr Pulsweitenmodulation (PWM) Erfassen von Impulslängen und Zeiten Grob gesehen hat der Timer1 folgendes Blockschaltbild: I C P S y s t e m C L K I n p u t C a p t u r e I R Q T C 1 O v e r f l o w I R Q I n p u t C a p t u r e R e g i s t e r 8 6 4 2 5 6 C N T R 1 6 E X T C L K I N 1 0 2 4 P r e s c a l e r T C N T 1 C o m p a r e A R e g i s t e r C o m p a r e M a t c h A I R Q C o m p a r e B R e g i s t e r C o m p a r e M a t c h B I R Q O C 1 A O C 1 B Rot: Interrupt Requests (Interrupt-Anforderungen durch Timer1) Blau: Eingangspins Grün: Ausgangspins Der Takt des Timers kann gleich dem Takt des Controllers sein, oder um einen Faktor 8,

jean-claude.feltes@education.lu 2/8 64, 128 oder 1024 heruntergeteilt werden. Dies erledigt der Prescaler. Für einen 4MHz-Quarz ergibt sich z.b. folgendes: Prescaler 1 8 64 256 1024 Auflösung in s (T CLK ) 0.25 2 16 64 256 Tmax Timer0 (8 bit) 64 s 512 s 4096 s 16384 s 65 536 s Tmax Timer1 (16 bit) 16.384ms 131.072ms 1.048s 4.194s 16.777s 14.2 Timer1 mit Overflow-Interrupt Der Timer zählt vor sich hin, bei jedem Overflow wird ein Interrupt ausgelöst. Diese Betriebsart ist nur selten von Nutzen, da sie als Zeitintervall nur wenige Werte zuläßt, nämlich T =65536 T CLK, wobei T CLK die durch den Prescaler heruntergeteilte Taktfrequenz des Controllers ist. Eine Anwendung wäre das regelmäßige Ausführen einer Aktion, wenn die Zeitspanne frei gewählt werden kann. Im folgenden Beispiel blinkt eine LED, ohne dass das Hauptprogramm etwas dafür tun muß: $crystal = 8000000 Config Pind.5 = Output 'LED Config Timer1 = Timer, Prescale = 64 On Timer1 Timer1serv Enable Timer1 Enable Interrupts '----------------------------------------------- 'Hauptprogramm: 'Dreh Däumchen 'oder tu sonstwas... '----------------------------------------------- Timer1serv: Toggle Portd.5 Return Mit dem Prescaler von 64 wird der 8MHz-Takt heruntergeteilt, dies entspricht einer Takt- Periodendauer von 0.125μs 64 = 8μs. Ein Overflow tritt also alle 65536 8μs = 524ms auf. Die Blinkfrequenz ist also ca. 1Hz. Zuerst müssen Timer-Interrupt und Interrupts allgemein freigeschaltet werden, damit ein Timer- Interrupt möglich ist! Dies geschieht mit: On Timer1 Timer1serv Enable Timer1 Enable Interrupts

jean-claude.feltes@education.lu 3/8 14.3 Timer1 mit Output Compare Dies ist die geeignete Betriebsart, um zu definierten Zeitpunkten eine Aktion auszuführen oder ein Signal mit definierter Frequenz zu erzeugen. Im Prinzip wird der Zustand des Zählregisters mit dem Zustand des Compare-Registers verglichen und bei Übereinstimmung ein Interrupt ausgelöst oder der Zustand des OC1A bzw. OC1B- Pins geändert. a) Regelmäßig auszuführender Interrupt Beispiel: alle 100ms soll im Programm etwas geschen, hier der Einfachheit halber eine LED blinken. Wenn wir einen 8MHz-Quarz benutzen haben wir eine Taktperiodendauer T CLK = 0.125 s. Wir müssen den Prescaler so bemessen, dass sich einerseits eine möglichst hohe Auflösung ergibt (kleiner Wert), andererseits aber auch der Zähler nicht vor dem Erreichen des Endwertes überläuft großer Wert). Wir probieren ein wenig herum: Prescaler Auflösung Endwert 1 8 64... 8 0.125 s = 1 s 64 0.125 s = 8 s 65536 1 s = 65.536ms (zu klein!) 65536 8 s = 524.288ms (reicht) Also wählen wir Prescaler = 64. Dabei wird alle 8 s um eins weitergezählt. Der Interrupt soll alle 100ms ausgeführt werden, dies entspricht Zählschritten. Diese Zahl muß also ins Compare Register geschrieben werden. 100000 s 8 s = 12500 $crystal = 8000000 Config Pind.5 = Output 'LED Ocr1a = 12500 Config Timer1 = Timer, Prescale = 64, Clear Timer = 1, Compare A = Disconnect On Oc1a Timer1serv Enable Oc1a Enable Interrupts '----------------------------------------------- 'Hauptprogramm: 'Dreh Däumchen 'oder tu sonstwas... '----------------------------------------------- Timer1serv: 'statt eine LED zum Blinken zu bringen kann hier 'regelmässig etwas Wichtiges getan werden Toggle Portd.5

jean-claude.feltes@education.lu 4/8 Return In der Konfiguration des Timers Config Timer1 = Timer, Prescale = 64, Clear Timer = 1, Compare A = Disconnect wird Clear Timer = 1 gesetzt. Dies bewirkt, dass bei jedem Compare Match (Übereinstimmung zwischen Zähl- und Vergleichsregister) der Zähler zurückgesetzt wird und somit wieder von null mit zählen beginnt. Das Disconnect bewirkt, dass am OC1A-Pin kein Signal erscheint. Vorsicht! Bei hohen Frequenzen ist die Einsprungzeit für den Interrupt nicht mehr zu vernachlässigen. (Siehe Kapitel Interrupts) b) Generierung eines Signals am OC1A-Pin Wenn ein Signal mit fester Frequenz an einem OC1-Pin erzeugt werden soll, ist noch weniger Software-Aufwand nötig, da sich die Hardware des Controllers um alles kümmert. Nur das Compare-Register muß initialisiert werden. Beispiel: es soll ein 1kHz-Signal erzeugt werden, bei einer Quarzfrequenz von 4MHz. Die Taktperiodendauer beträgt T CLK = 0.25 s. Bei Prescale = 1 ist dies auch die Auflösung des Zählers. Das Umschalten des Pins muß alle 500 s ausgeführt werden, dies entspricht Zählschritten. 500 s 0.25 s = 2000 Dies entspricht einem Comparewert von 1999, da der Zähler dann von 0...1999 zählt und dabei 2000 Schritte macht. $crystal = 4000000 Ocr1a = 1999 Config Timer1 = Timer, Prescale = 1, Clear Timer = 1, Compare A = Toggle Mit Compare A = Toggle wird dafür gesorgt, dass der OC1A-Pin bei jedem Erreichen des Vergleichswerts umgeschaltet wird. Wichtig ist auch Clear Timer = 1, sodass der Timer bei jedem Compare Match rückgesetzt wird. Der Vorteil dieser Methode im Gegensatz zum Arbeiten mit Interrupts ist, daß die Frequenz völlig unabhängig davon ist, was der Controller sonst noch alles tun muß. Soll die Frequenz geändert werden, genügt es, der Wert im Register OCR1A zu ändern.

jean-claude.feltes@education.lu 5/8 c) Generierung eines Signals am OC1B-Pin Man könnte meinen hierzu würde es genügen, überall OC1B statt OC1A zu schreiben. Dies funktioniert jedoch nicht, obwohl das Blockschaltbild so aussieht, als ob es funktionieren müsste. Mit dieser Methode geht es: $crystal = 4000000 Ocr1a = 1999 Config Timer1 = Timer, Prescale = 1, Clear Timer = 1, Compare B = Toggle d) Generierung von phasenverschobenen Signalen an OC1A und OC1B Obschon der Controller zwei Compare-Register hat, kann man keine unterschiedlichen Frequenzen oder Signale mit einem Tastverhältnis ungleich 0.5 mit einem Timer erzeugen. Mit dem Compare B Register kann aber ein phasenverschobenes Signal erzeugt werden. Leider gibt es dazu keine vernünftige kumentation, oder ich habe sie noch nicht gefunden.

jean-claude.feltes@education.lu 6/8 14.4 Timer2 mit Output Compare für Sekundentakt Timer 2 hat auch eine Output Compare Möglichkeit, seine Breite ist aber nur 8 Bit. Wenn man einen Sekundentakt benötigt, Timer1 aber für PWM oder sonstiges benötigt wird, bietet sich Timer2 an. Man benötigt dann aber noch einen Software-Zähler um auf die fehlende Breite auszugleichen. Um die richtigen Einstellungen zu finden, muß man ein wenig herumprobieren. Beispiel: Atmega8 mit 8MHz-Quarz. Taktperiode: 0.125μs Zählerperiode mit Prescale = 256: Tcounter = 256 * 0.125μs = 32μs Maximale Zählerzeit: 256 * 32μs = 8.192ms Mit Compare-Wert 249 ergeben sich 250 Zählschritte bis zum Interrupt, also 250 * 32μs = 8ms. Um auf 1s zu kommen, muß der Software-Zähler bis 1000ms/8ms = 125 zählen. 'Sekundentakt mit Timer2 $crystal = 8000000 $hwstack = 100 $baud = 9600 Config Portd.4 = Output 'LED 'Timer21 für 8ms Interrupt 'Tcounter = 256*0.125us = 32us 'Compare = 249 > 250*32us = 8ms Config Timer2 = Timer, Prescale = 256, Clear Timer = 1, Compare = Disconnect Ocr2 = 249 On Oc2 Timer2_isr Enable Oc2 Dim T2ticks As Byte Enable Interrupts Dim Secs As Long Dim New_flag As Bit If New_flag = 1 Then Print Secs New_flag = 0 End If ' Timer2_isr: 'Alle 8ms Incr T2ticks If T2ticks > 125 Then T2ticks = 0 Gosub Everysecond End If Return ' Everysecond: Secs = Secs + 1 New_flag = 1 Toggle Portd.4 Return

jean-claude.feltes@education.lu 7/8 14.5 Pulsweitenmodulation (PWM) Interessante Links: http://bascom-forum.de/mediawiki/index.php/timer#pwm_-_pulsweiten_modulation http://rn-wissen.de/wiki/index.php/bascom_und_pwm Der Timer1 bietet die Möglichkeit, zwei unabhängige PWM-Signale mit einer Auflösung von 8, 9 oder 10 Bit zu erzeugen. Dies geschieht rein hardwaremäßig, d.h. der Prozessor bleibt frei für andere Aufgaben. Achtung: für Hardware-PWM muss man diese Ausgänge, OC1A und OC1B benutzen, da diese das Signal des Timers führen, andere Pins kommen nicht in Frage. Je nach Controllertyp sind dies andere Portpins, z.b.: Mega8 Mega16 / Mega32 OC1A OC1B PortB.1 PortD.5 PortB.2 PortD.4 Es gibt verschiedene Modi für die PWM-Erzeugung, BASCOM benutzt standardmässig den phasenkorrekten Modus. Dabei zählt der Timer hoch bis zu seinem maximalen Wert und dann wieder herunter. Dies entspricht analog gesehen einem Dreiecksignal. Erreicht der Zähler den Wert des Komparatorregisters, wird der Ausgang je nach der Konfiguration entweder gesetzt oder rückgesetzt. Zählerstand Wert im Compare-Register t PWM t Die Programmierung ist einfacher als die Beschreibung im Datenblatt. Beispiel mit Mega8 und festem PWM-Wert 64/255 = ca. 25%: $crystal = 16000000 'geändert 'Timer1 als PWM mit ' Prescale=1 -> fctr = FXTAL = 16MHz -> fpwm = 16MHz/510 = 31.4kHz ' 510 = 2*2^8-2 (rauf und runter) ' PWM = 8 -> 8bit PWM (möglich: 8/9/10 bit) Config Timer1 = Pwm, Prescale = 1, Pwm = 8, Compare A Pwm = Clear Up Config Portb.1 = Output '=OC1A Pwm1a = 64 '64/255 = ca. 25%

jean-claude.feltes@education.lu 8/8 'Hauptschleife '... tu irgendwas Der Wert von Pwm1a kann während des Programms verändert werden. Im Beispiel ist er der Einfachheit halber fest vorgegeben. Die Bezeichnung Compare A Pwm = Clear Up in BASCOM ist unklar. Diese Einstellung ergibt jedenfalls ein nichtinvertiertes PWM-Signal wie im obigen Diagramm, während die Einstellung Compare A Pwm = Clear wn ein invertiertes Signal ergibt. Die Frequenz des PWM-Signals hängt ab vom Prescaler-Wert und der Auflösung des PWM-Signals. f Crystal f PWM = p (2 B 2) f PWM = Frequenz des PWM-Signals f Crystal = Quarzfrequenz p = Wert des Prescalers B = Bit-Auflösung des PWM (8, 9, 10) Wenn auch OC1B benutzt wird, können 2 unabhängige PWM-Signale erzeugt werden. Mit hoher Frequenz und einem RC-Tiefpassfilter kann ein PWM-Ausgang praktisch einen DA- Wandler ersetzen.