atmega16 idozito megszakitas winavr-ben
Bamer Balazs
bamer at db.bme.hu
Thu Nov 24 09:15:50 CET 2005
Szervusz Lista!
Atmega16-ra próbáltam egyszerű mórickaprogit írni az időzítés
és a HALL érzékelő beolvasásának kipróbálására WinAVR-ben. Az egyszerűbbik
példaprogramjukat alakítottam át (ez működött is, avarice-s letöltés jó),
a cél 1 Hz-es ill. 4 Hz-es villogás volt (Hallal átkapcsolhatóan) 4 MHz
belső RC oszci mellett. RTFM megvolt, kétszer nekifutottam, de nem tudom,
hol a hiba (nem csinál semmit). Ja, a h és hall változók összehasonlítása
azért van így, hogy egy jumperrel is lehessen sebességet váltani (-:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
enum { UP, DOWN };
volatile uint8_t direction,hall;
SIGNAL (SIG_OVERFLOW1)
{
uint8_t h;
switch (direction)
{
case UP:
direction = DOWN;
PORTB=_BV(PB5);
break;
case DOWN:
direction = UP;
PORTB=0;
break;
}
h=PINC;
if(h<hall)
TCCR1B = _BV (WGM12) | _BV(CS12) | _BV(CS10); //CTC :1024
if(h>hall)
TCCR1B = _BV (WGM12) | _BV(CS12); //CTC :256
hall=h;
}
void ioinit (void)
{
unsigned char sreg;
sreg=SREG;
cli();
TCCR1A = 0;
TCCR1B = _BV (WGM12) | _BV(CS12) | _BV(CS10); //CTC :1024
TCNT1=0;
OCR1A=1952;
DDRB = _BV (PB5);
timer_enable_int (_BV (OCIE1A));
sei ();
}
int main (void)
{
ioinit ();
for (;;);
return (0);
}
köszi: Balázs
More information about the Elektro
mailing list