De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Verwante presentaties


Presentatie over: ""— Transcript van de presentatie:

50 Microcontroller Programmeren in C
MICPRG Les 6

51 Pulse generator Veel signalen in de buitenwereld zijn pulsvormig.
Veel actoren kunnen met een pulsvormig signaal worden aangestuurd: Lamp. Motor. Telefoonkiezer.(Puls en toon!) Luidspreker. enz... Om deze signalen te kunnen opwekken hebben veel µC’s een ingebouwde pulse generator.

52 Timer/Counter0 Timer/Counter0 kan een pulsvormig signaal opwekken op pin OC0 = PB3. Output Compare eventueel in CTC mode = Clear Timer on Compare match (50% duty-cycle). Fast PWM (instelbare duty-cycle). PWM = Pulse Width Modulation. Fase correct PWM (instelbare duty-cycle). Timer/Counter1 kan pulsvormige signalen op-wekken op pinnen OC1A = PD5 en OC1B = PD4. Timer/Counter2 kan een pulsvormig signaal opwekken op pin OC2 = PD7

53 TIMER0_COMP_vect interrupt
Output compare 7 TCNT0 0x06 0x07 0x08 count-ingang comparator = COM0/1 7 0x07 OCR0 OC0 PB3 Output control TIMER0_COMP_vect interrupt 1 FOC0 OCF0 OCIE0 =0 =1

54 T/C0 count-ingang

55 T/C0 Output Compare

56 T/C0 Output Compare OCF0 = Output Compare Flag 0.
OCIE0 = Output Compare Interrupt Enable 0. FOC0 = Force Output Compare 0. FOC0 = 1  Actie op pin OC0 = PB3, die bij compare match wordt uitgevoerd, wordt nu meteen uitgevoerd!

57 CTC Clear Timer on Compare Match
7 TCNT0 reset 0x07 0x06 0x00 count-ingang comparator = COM0/1 7 0x07 OCR0 OC0 PB3 Output control TIMER0_COMP_vect interrupt 1 FOC0 OCF0 OCIE0 =1 =0

58 T/C0 CTC

59 Waarom TIFR = 1<<OCF0 en niet TIFR |= 1<<OCF0
Opdracht Zie AVR boek pagina 44 t/m 46. 1 seconde wachten bij FCLK = MHz. Maak een variant van dit programma met behulp van T/C0 Output Compare in CTC mode. void wacht1sec() { uint8_t i; TCCR0 &= ~(1<<COM01 | 1<<COM00 | 1<<WGM00 | 1<<CS01); TCCR0 |= 1<<WGM01 | 1<<CS02 | 1<<CS00; OCR0 = 239; TCNT0 = 0; for (i = 0; i < 10; i++) { TIFR = 1<<OCF0; while (~TIFR & 1<<OCF0); } TCCR0 &= ~(1<<CS02 | 1<<CS01 | 1<<CS00); ? Waarom TIFR = 1<<OCF0 en niet TIFR |= 1<<OCF0

60 Opdracht Stel: Er is een luidspreker aangesloten op pin OC0 = PB3. De frequentie van de µC = 8 MHz. Schrijf een programma om een kamertoon op de luidspreker te genereren. De kamertoon, in de muziektheorie a' genoemd terwijl de wetenschappelijke benaming A4 is wordt veel gebruikt voor het stemmen van muziek-instrumenten. De kamertoon hoort een frequentie van 440 Hz te hebben. De meeste stemvorken worden dan ook op 440 Hz gemaakt.

61 Uitwerking 440Hz => periode tijd = 1/440 = sec.
PD3 elke 1/880 sec inverteren (toggle). fCPU = 8 MHz. Prescaler zo laag mogelijk (nauwkeuriger). Prescaler=1 => 1 tick T/C0 = 1/ sec. OCR0+1 = /880 = 9091 Past niet! Benodigde prescaler 9091/256 = 36. Kies 64. Prescaler=64 => 1 tick T/C0 = 64/ sec. OCR0+1 = /(880*64) = 142. Opgewekte freq = /(64*142*2) = 440,14

62 Uitwerking #include <avr/io.h> int main(void) { OCR0 = 141;
TCCR0 = 0x1B; DDRB |= 1<<3; while (1); return 0; }

63 Huiswerk Bestudeer AVR Boek pagina 121.
Bestudeer AVR datasheets hoofdstuk over T/C0 (18 pagina’s).


Download ppt ""

Verwante presentaties


Ads door Google