 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
PC_Master Član


Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.52 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Pet Apr 09, 2010 9:45 pm Naslov sporočila: Timer interrupti |
|
|
Živijo, odločil sem se za projekt, pri katerem bi rabil multi channel PWM, 10-20 channelov, ne vem še točno.
In to bi rad naredil s pomočjo timer interrupta, kateri bi se zaženil vsakih 256 ciklov, in primerjal vrednosti tabele s software counterjem in glede na to tudi primerno vključeval/izključeval PINe na mikrokontrolerju.
Natančnost PWMja ni pomembna, gre samo za LEDice - eyecandy.
Uporabil bom AtMega88, uporabil bi pa kar 8-bitni Timer. Programiram v Cju, mikroelektronika.
Po datasheetu se ne znajdem najbolje, približno mi je jasno, kako deluje PWM in števec, samo ne vem kako nastaviti bite in vse to.
Rad bi si nastavil, da števec teče normalno, brez top limita in compare enot, samo da ko se zgodi reset števca, da se pokliče interrupt, to je vsa umetnost.
Zanima me, katere registre moram poštimati, da bo zadeva delala... do zdaj sem razbral, da moram pri TCCR1A izbrati clock source, pri TIMSK1 pa vključiti bit za overflow interrupt, in seveda vključiti global interrupt... To je pa vse, kar sem do zdaj nabral.
In, ne vem kako je ime "interrupt funkciji", v kateri bi napisal program.
Koda: |
SREG=0b10000000; // global interrupt enable
TCCR1A=0b00000001; //clock source, brez prescalerja
TIMSK1=0b00000001; //
int tab[8]; int i;
int count=0;
void main()
{
for(i=0;i<8;i++)
tab[i]=127;
while(1)
{
}
//program, ki spreminja vrednosti tabele... trenutno samo vse kanale pusti na 127
}
ime_interrupta()
{count+=1;
for(i=0;i<8;i++)
if(tab[i]<count)
PORTB &= ~(1<<i)
else
PORTB |= (1<<i)
//program, ki opravlja PWM funkcijo
}
|
Vem, da sem vse nejasno razložil in vprašal, napisal zelo nejasno kodo, toda upam, da bo kdo dobil idejo, kaj hočem narediti in mi pomagal  |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Ned Apr 11, 2010 8:58 pm Naslov sporočila: |
|
|
Ime funkcije za klic prekinitve - govorim na pamet - pri uporabi timerja 1, kot ga vidim pri tebi, je
SIGNAL (SIG_OVERFLOW1)
Velja za AVR Studio.
Preberi še temo "Začetniški problem v C-ju pri AVR-ju", pa še marsikje je napisano...
Seveda pa najbolj pomaga razumevanje datasheeta... |
|
Nazaj na vrh |
|
 |
PC_Master Član


Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.52 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Čet Apr 15, 2010 11:27 pm Naslov sporočila: |
|
|
Hvala!  |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|