|
|
Riadok 1: |
Riadok 1: |
| TODO: prerobit na verziu 2021
| |
|
| |
|
|
| |
|
Riadok 6: |
Riadok 5: |
| * [http://www.atmel.com/dyn/resources/prod_documents/doc2505.pdf AVR130: Setup and Use the AVR® Timers.] Aplication Note, Atmel Corporation 2002.<BR> + [http://www.atmel.com/dyn/resources/prod_documents/AVR130.zip software download] | | * [http://www.atmel.com/dyn/resources/prod_documents/doc2505.pdf AVR130: Setup and Use the AVR® Timers.] Aplication Note, Atmel Corporation 2002.<BR> + [http://www.atmel.com/dyn/resources/prod_documents/AVR130.zip software download] |
| * [http://www.atmel.com/dyn/resources/prod_documents/doc8014.pdf AVR135: Using Timer Capture to Measure PWM Duty Cycle.] Aplication Note, Atmel Corporation 2005.<BR> + [http://www.atmel.com/dyn/resources/prod_documents/AVR135.zip software download] | | * [http://www.atmel.com/dyn/resources/prod_documents/doc8014.pdf AVR135: Using Timer Capture to Measure PWM Duty Cycle.] Aplication Note, Atmel Corporation 2005.<BR> + [http://www.atmel.com/dyn/resources/prod_documents/AVR135.zip software download] |
| | * Pozn. pre autora: staršia verzia tohoto cvika je tu [[Meranie dĺžky impulzu 2]] |
|
| |
|
|
| |
|
|
| |
|
| '''Príklad ([[Médiá:avrdemo7.hex|avrdemo7.hex]])'''
| |
|
| |
|
| Na vstupe ICP1 (na doske Acrob D8, na čipe ATmega328P je to PB0, pin 14) máme pripojený [[555|zdroj externého kmitočtu]] cca 1Hz:
| |
|
| |
|
| [[Obrázok:Oscillogram7.png|center]] | | [[Mikropočítačové systémy (MIPS)#Cvičenia|Návrat na zoznam cvičení...]] |
|
| |
|
| Nastavené máme spúšťanie ICR dobežnou hranou, počítadlo počíta 16 MHz:1024, vypisujeme niekoľkokrát za sekundu stavy všetkých registrov
| | [[Category:AVR]][[Category:MMP]][[Category:MIPS]] |
| <source linenumbers lang="c">
| |
| Input D8 = 1 TCNT1 = 353 ICR = 0
| |
| Input D8 = 1 TCNT1 = 1543 ICR = 0
| |
| Input D8 = 1 TCNT1 = 2749 ICR = 0
| |
| Input D8 = 1 TCNT1 = 3956 ICR = 0
| |
| Input D8 = 1 TCNT1 = 5163 ICR = 0
| |
| Input D8 = 0 TCNT1 = 6369 ICR = 6070 D = 6070 T = 388.4800 ms
| |
| Input D8 = 0 TCNT1 = 7706 ICR = 6070
| |
| Input D8 = 0 TCNT1 = 8961 ICR = 6070
| |
| Input D8 = 0 TCNT1 = 10216 ICR = 6070
| |
| Input D8 = 0 TCNT1 = 11488 ICR = 6070
| |
| Input D8 = 0 TCNT1 = 12759 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 14031 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 15303 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 16574 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 17846 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 19117 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 20389 ICR = 6070
| |
| Input D8 = 1 TCNT1 = 21661 ICR = 21591 D = 15521 T = 993.3441 ms
| |
| Input D8 = 0 TCNT1 = 23046 ICR = 21591
| |
| Input D8 = 0 TCNT1 = 24334 ICR = 21591
| |
| Input D8 = 0 TCNT1 = 25622 ICR = 21591
| |
| Input D8 = 0 TCNT1 = 26910 ICR = 21591
| |
| Input D8 = 0 TCNT1 = 28197 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 29485 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 30773 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 32061 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 33349 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 34636 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 35924 ICR = 21591
| |
| Input D8 = 1 TCNT1 = 37212 ICR = 37110 D = 15519 T = 993.2161 ms
| |
| Input D8 = 0 TCNT1 = 38597 ICR = 37110
| |
| Input D8 = 0 TCNT1 = 39885 ICR = 37110
| |
| Input D8 = 0 TCNT1 = 41173 ICR = 37110
| |
| Input D8 = 0 TCNT1 = 42461 ICR = 37110
| |
| Input D8 = 0 TCNT1 = 43749 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 45037 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 46324 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 47612 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 48900 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 50188 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 51476 ICR = 37110
| |
| Input D8 = 1 TCNT1 = 52763 ICR = 52630 D = 15520 T = 993.2800
| |
| Input D8 = 0 TCNT1 = 54149 ICR = 52630
| |
| Input D8 = 0 TCNT1 = 55437 ICR = 52630
| |
| Input D8 = 0 TCNT1 = 56724 ICR = 52630
| |
| Input D8 = 0 TCNT1 = 58012 ICR = 52630
| |
| Input D8 = 0 TCNT1 = 59300 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 60588 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 61876 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 63163 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 64451 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 203 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 1458 ICR = 52630
| |
| Input D8 = 1 TCNT1 = 2730 ICR = 2619 D = 15525 T = 993.6000
| |
| Input D8 = 0 TCNT1 = 4083 ICR = 2619
| |
| </source>
| |
| | |
| Ak chceme merať aj striedu, musíme meranie realizovať s prerušením a v obsluhe prerušenia preklopiť konfiguračný bit, ktorý rozhoduje o prepise
| |
| TCNT do ICR registra. Je to bit ICES1, ktorý je v TCCR1B.6.
| |
| | |
| <source lang="c">
| |
| #include <avr/interrupt.h>
| |
| | |
| volatile int newTick = 0; // The variable for interrupt should be declared as a volatile one!
| |
|
| |
| ISR(TIMER1_CAPT_vect) // Timer 1 Capture Interrupt Service Routine
| |
| {
| |
| TCCR1B = ?? // toggle Edge Select bit
| |
| newTick = ICR1;
| |
| };
| |
| | |
| main()
| |
| {
| |
| | |
| DDRB = ?? // Set ICR - Port B, pin0 as INPUT
| |
| TCCR1B = ?? // T1 clk = F_CPU : 1024, falling edge pin ICP1,
| |
| TCCR1A = ?? // T1 in timer mode !! Note: if You omit this, TCNT1 will be only 8-bit !!
| |
| TCNT1 = 0x0000; // initialize the counter (16-bit! Low+High bytes)
| |
| TIFR1 = ?? // (1<<ICF1); if a 1 is written to a ICF1 bit
| |
| // - the ICF1 bit will be cleared
| |
|
| |
| TIMSK1 = ?? // Enable ICR interrupt
| |
| sei(); // Enable ALL interrupts
| |
| | |
| .... // TODO: display measured value somewhere
| |
|
| |
| }
| |
| </source>
| |
| | |
| | |
| Ukážka pre Arduino využíva zabudovaný príkaz [http://arduino.cc/en/Reference/PulseIn PulseIn]:
| |
| <source lang="c">
| |
| #define SWITCH 8 // select the pin for Switch
| |
| unsigned long duration;
| |
| | |
| void setup()
| |
| {
| |
| pinMode(SWITCH, INPUT); // this pin is an INPUT
| |
| Serial.begin(9600);
| |
| Serial.println("PulsIn test:");
| |
| }
| |
| | |
| void loop() // endless loop
| |
| {
| |
| duration = pulseIn(SWITCH, HIGH);
| |
| Serial.print(" T1 = ");
| |
| Serial.print(duration,DEC);
| |
| Serial.print(" [us]");
| |
| | |
| duration = pulseIn(SWITCH, LOW);
| |
| Serial.print(" T0 = ");
| |
| Serial.print(duration,DEC);
| |
| Serial.println(" [us]");
| |
| }
| |
| </source>
| |
| | |
| | |
| | |
| [[Category:AVR]][[Category:MMP]][[Category:DVPS]] | |