18
4. Attiny- Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler Übung (auch: Komparator und A/D- Wandler) Ergebnisse/Diskussion... In dieser Veranstaltung können wir nur einige der zahlreichen Möglichkeiten des Timer/Counters exemplarisch behandeln! A

4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Embed Size (px)

Citation preview

Page 1: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

4. Attiny-Veranstaltung

V 1.3 - Copyright 2010 by G. Heinrichs

Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler Übung (auch: Komparator und A/D-Wandler) Ergebnisse/Diskussion...

In dieser Veranstaltung können wir

nur einige der zahlreichen

Möglichkeiten des Timer/Counters

exemplarisch behandeln!

A

Page 2: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

RegistermodellPin T0 nicht mit Taster T0 verwechseln!

A

Page 3: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Drehzahlmesser

Unser Attiny soll Drehzahlen ermitteln. Dazu sollen Signale von Lichtschranken oder Tastern für 10 Sekunden gezählt werden. Diese auf 1 Minute hochzurechnen ist dann keine Kunst mehr...

Page 4: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Zählen - konventionellEnable INT0Config INT0 = Falling (Signal an INT0)Enable interruptsOn int0 zaehlen

zaehler = 0PortD.6 = 1 (Zählbeginn anzeigen)Wait 10 (10 s warten)PortD.6 = 0 (Zählende anzeigen)Portb = zaehlerEnd

zaehlen: zaehler = zaehler + 1return

Page 5: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Zählen mit dem Timer/CounterTCCR0B = &B00000110 (externer Takt über T0,

fallende Flanke, starten)TCNT0 = 0 (Zähler des T/C auf 0)

PortD.6 = 1 (Zählbeginn anzeigen)Wait 10 (10 s warten)Portd.6 = 0 (Zählende anzeigen)TCCR0B = 0 (T/C stoppen)PortB = TCNT0 (Zählerstand ausgeben)end

TCCR0B Bedeutung

&B00000110 Ext., fallende Flanke

&B00000111 Ext., steigende Flanke

&B00000000 T/C stoppen

Config Timer0 = counter, edge = Falling

Timer0 = 0

...

...

...Stop Timer0 (stoppen)PortB = Timer0 (ausgeben)...

A

Page 6: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Overflow-Interrupt

Jeder 10. Kunde

erhält einen

Gutschein über 100

Euro!

Unser Attiny soll bei jedem 10. Signal also einen Alarm auslösen!

Page 7: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Overflow-Interrupt I

Page 8: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Overflow-Interrupt IITccr0b = &B00000110 'ext. Takt, fallende Flanke, startenTcnt0 = 246 'Preset!!! 10 Takte bis zum OverflowTIMSK.TOIE0 = 1 'Overflow-Interrupt ermöglichenSREG.7 = 1 'Interrupts global ermöglichen

On Ovf0 Alarm 'Wenn Overflow-Interrupt...' Oder: On Timer0 Alarm

Do 'Hauptprogrammloop

Alarm: 'Interruptroutine Tcnt0 = 246 'Preset neu einstellen! Portb = 255 'Blitz! Waitms 10 Portb = 0Return

Page 9: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Attiny als Signalgeber

Unser Attiny soll nun selbst regelmäßige Signale geben. Schleifen mit Warte-Befehlen sind zwar möglich, halten den Mikrocontroller aber von anderen Aufgaben ab. Auch hier kann der Timer/Counter helfen.

Page 10: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Interner Taktgeber

Page 11: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Taktgeber einstellen - Prescale

TCCR0B Bedeutung

&B00000000 Timer0 anhalten

&B00000001 Timer0 = Clock

&B00000010 Timer0 = Clock/8

&B00000011 Timer0 = Clock/64

&B00000100 Timer0 = Clock/256

&B00000101 Timer0 = Clock/1024

&B00000110 Takt über T0, fallend

&B00000111 Takt über T0, steigend

Page 12: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Frequenzgenerator für 440 HzPortb.0 über TOV0-Interrupt toggelnTOV0-Frequenz muss 880 Hz betragen

Systemfrequenz (Clock): 4 000 000 HzWähle: Prescale = 64

Dann: Timerfrequenz = 4 000 000 Hz / 64 = 62 500 HzTCNT0 muss jeweils 62 500 / 880 = 71,02 Signale bis zum Overflow zählen

Also: Preset = 256 – 71 = 185Im

Experiment überprüfen!!!

A

Page 13: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

PWM – Was ist das?

Puls-Weiten-Modulation

Page 14: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

PWM mit dem Attiny

Page 15: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

Fast-PWM konfigurieren

Timer einschalten und Prescale wählen Vergleichswerte OCR0A und OCR0B eingeben Fast-PWM-Mode wählen (sorgt für Sägezahn-Kurve):

• TCCR0A.WGM01 = 1• TCCR0A.WGM00 = 1• TCCR0B.WGM02 = 0

Reaktion einstellen• TCCR0A.COM0A1 = 1• TCCR0A.COM0A0 = 1• TCCR0A.COM0B1 = 1• TCCR0A.COM0B0 = 0

Das Pulsverhältnis wird über den Vergleichswert OCR0A eingestellt.

Page 16: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

PWM - ProgrammTccr0a.wgm01 = 1 'FAST PWMTccr0a.wgm00 = 1 'Tccr0b.wgm02 standardmäßig auf 0

'PWM an OC0A (PortB.2)Tccr0a.com0a1 = 1 'Compare Match, clear OC0A at TOPTccr0a.com0a0 = 1Ocr0a = 200 'erster Vergleichswert

Tccr0b = &B00000101 ‚Timer-Takt ist 4 MHZ/1024

Do Inputbin Vergleichswert 'Vergleichswert empfangen Ocr0a = VergleichswertLoopMit O

szilloskop überprüfen!!!

A

Page 17: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

D/A-Wandler

Ideen:

PWM an OC0A (Typ High Low) Tiefpassfilter benutzen Sollspannung ~ Vergleichswert OCR0A

Page 18: 4. Attiny-Veranstaltung V 1.3 - Copyright 2010 by G. Heinrichs Organisatorisches Timer/Counter-Register Zählen, Takten, PWM Übung Mittagspause D/A-Wandler

A/D-Wandler

Das machen Sie mal selbst!

A