Počítadlá a časovače AVR
Zo stránky SensorWiki
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);
}
Č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
- Program doplňte podľa pokynov asistenta a odsimulujte.
Pozn.: Treba vypnúť optimalizáciu! (Project/Project options Pozri obr.) - Doplňte chýbajúce časti programu tak, aby LED blikala s frekvenciou 1 s.
- Vyskúšajte na svojej doske.
- Jednotlivé skupiny prepočítajú a nastavia interval na 1 ms, 10 ms resp. 100 ms.
Literatúra:
- Newbie's Guide to AVR Timers
- The traps when using interrupts
- Ako používať časovače v AVR C
- Prednáška o prerušeniach (Ing. Chamraz)
Odkazy
- Knižnica pre Arduino: http://www.arduino.cc/playground/Code/Timer1