Operácie

Počítadlá a časovače AVR

Z SensorWiki

Verzia z 20:53, 7. marec 2021, ktorú vytvoril Balogh (diskusia | príspevky) (Vytvorená stránka „== 16-bitové počítadlo a časovač T1 s prerušením == Máte k dispozícii vývojovú dosku '''Arduino''' s procesorom ATmega328P ([http://senzor.robotika.sk/mmp/AT…“)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)

16-bitové počítadlo a časovač T1 s prerušením

Máte k dispozícii vývojovú dosku Arduino s procesorom ATmega328P (datasheet).

V tejto úlohe sa predpokladá znalosť funkcie časovača T1 z prednášky (datasheet, str.114 -- 141). Procesor je nakonfigurovaný na prácu s externým kryštálovým oscilátorom 16,000 MHz.


Počítadlo T1

Tento program pouzije D5 (arduino) ako pocitadlo. Mozne pripojit tlacitko, alebo 555 a pocitat pocet impulzov.

<source lang=c>
#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>
#include "lcd_ch.h"             // using our LCD library

#define LED1 PB5                // internal LED
#define SW1  PD5                // pushbutton on PD5 (Arduino D5)

int main(void)
{
	  char riadok[]= {"                "};	
	  int value = 0;
	  
	   DDRB |= (1<<LED1);       // PORTB: LED1 na PB5  je output

	   DDRD &= ~(1<<SW1);       // PORTD: SW2 (PD5) input
      PORTD |=  (1<<SW1);       //                  pull-up ON
   
     TCCR1B = 0x07;             // T1 clk = external clock source on pin T1, rising edge
									
    /* initialize LCD display */
    ini_ports();
    lcd_init();
	
	lcd_puts("-Button counter-\n");        
    
    while(1)
    {
         /* test the switch first */
  	 
	 if ( PIND&(1<<SW1) )
	  { value = 1; 
		PORTB &= !(1<<LED1);  }
	 else 
	  { value = 0;
        PORTB |= (1<<LED1);	  }


         /* cursor is now on second line, write second line */
		 
	 sprintf(riadok,"D5: %d TCNT: %04X",value,TCNT1);    // bolo tu aj (PIND&(1<<SW1))>>SW1
     lcd_puts(riadok);    
     lcd_command(0xC0 + 0);	//  0b1000 0000 + 40 + 0	 

    }
	
 return(0);
 
}
</source>


AVR Timer T1 Counter.png


AVR Timer TCNT1 Counter.png


Časovač T1

Pozri AVR ExampleT1pooled.c


Nasledovny kus programu nastavi pocitadlo na 5 impulzov pred pretecenim (0xFFFF - 5) a potom sleduje v hlavnej slucke, kedy nastane pretecenie. Ako hodinky je pouzity externy signal na T1, cize tlacitko alebo 555.


Úlohy

  1. Program doplňte podľa pokynov asistenta a odsimulujte.
    Pozn.: Treba vypnúť optimalizáciu! (Project/Project options Pozri obr.)
  2. Doplňte chýbajúce časti programu tak, aby LED blikala s frekvenciou 1 s.
  3. Vyskúšajte na svojej doske.
  4. Jednotlivé skupiny prepočítajú a nastavia interval na 1 ms, 10 ms resp. 100 ms.


Literatúra:


Odkazy