www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Timer interrupti

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.52
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Pet Apr 09, 2010 9:45 pm    Naslov sporočila:  Timer interrupti Odgovori s citatom

Ž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 Angel
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3387
Aktiv.: 15.99

PrispevekObjavljeno: Ned Apr 11, 2010 8:58 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.52
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Čet Apr 15, 2010 11:27 pm    Naslov sporočila:   Odgovori s citatom

Hvala! Mr. Green
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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