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 

mikroC za AVR in prekinitve

 
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
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Sre Nov 24, 2010 10:12 pm    Naslov sporočila:  mikroC za AVR in prekinitve Odgovori s citatom

Pozdravljeni !

Nekako sem dobro začel s programiranjem v mikroC programskem jeziku in me zanima ali ga še kdo uporablja ?
Imam namreč težavo pri uporabi zunanjih prekinitvah, ki jih nekako ne znam uporabljati Mr. Green . Na uradnem forumu Mikroelektronike sem že iskal kakšne informacije, pa so primeri, ki jih ne razumem najbolje. Torej če je kdo, ki tudi uporablja omenjeni jezik, bi lepo prosil, če lahko poda preprost primer s kakšnim komentarjem kako uporabiti zunanje prekinitve.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Čet Dec 23, 2010 12:14 am    Naslov sporočila:   Odgovori s citatom

Odgovarjam sam sebi in sicer s malim primerom kako se uporabi zunanje prekinitve v jeziku MikroC za AVR:
Koda:
/*
* Project name:
     External Interrupt on PortD (Simple 'Hello World' project)
* Copyright:
     (c) Mikroelektronika, 2010.
* Revision History:
     20101006:
       - initial release;
       - 20101006 (RR);
* Description:
     This is a simple 'Hello World' project. It counts presses on PortD.3 and
     shows result on diodes connected to PORTB.
* Test configuration:
     MCU:             ATmega16
     dev.board:       EasyAVRv6
     Oscillator:      External Clock 08.0000 MHz
     Ext. Modules:    -
     SW:              mikroC PRO for AVR v3.50
* NOTES:
     - Make sure you turn ON the PORTB LEDs (SW8.2), set PortD Pull Up Jumper in Vcc position (J4)
       and turn on PortD.3 Switch (SW4.4)
*/


int cnt = 0;                                         // Global variable cnt

void interrupt_ISR () org IVT_ADDR_INT1 {            // Interrupt rutine
  SREG_I_bit = 0;                                    // Disable Interrupts
  cnt++;                                             // Increment variable cnt
  SREG_I_bit = 1;                                    // Enable Interrupts
}

void main() {                                        // Main program

  DDRD = 0xF7;                                       // Set PD3 as input
  DDRB = 0xFF;                                       // Set PortB as output

  PortD = 0x00;
  PortB = 0xFF;                                      // Starting value for PortD
  GICR = 0x80;                                       // Set the Interrupts
  MCUCR = 0x08;                                      // Configure Interrupt for falling edge on PortD.3

  SREG_I_bit = 1;                                    // Enable Interrupts

  while(1){                                          // Unending loop
    PortB = cnt;                                     // Write on PortB value of varibale cnt
  }
}
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sadida
Član
Član



Pridružen-a: Pet 17 Apr 2009 12:53
Prispevkov: 636
Aktiv.: 3.23
Kraj: Zasavje

PrispevekObjavljeno: Čet Dec 23, 2010 4:37 pm    Naslov sporočila:   Odgovori s citatom

Kako se razlikuje mikroC jezik od C jezika. In zakaj ti je boljši? Predvidevam, da ti je ker ga uporabljaš.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Čet Dec 23, 2010 7:49 pm    Naslov sporočila:   Odgovori s citatom

Bistvene razlike sicer ni, je mogoče kakšna rutina napisana, tako da je lažja za uporabo, če si začetnik v programiranju kot sem jaz. V C-ju sicer nimam izkušenj oz. samo toliko kot smo delali na faksu kjer je bil en semester obvezen predmet. Zdi se mi da sta zelo podobna.
Razlog, da ga uporabljam, je ta, da znam C od prej iz predavanj, ki smo jih imeli. Da pa nisem ostal na C-ju je glavni razlog ta, da sem po spletu okoliščin dobil licenco za ta program, tako da vsaki nadaljni update in nove verzije mi ne bo potrebno kupovati, kar se mi zdi nekako neka prednost sploh v navezi s tem, ker imam tudi razvojno orodje od istega proizvajalca, kjer se mi zdi, da je tudi podpora za njihove izdelke dobra.
Ker sta oba izdelka, tako razvojna plošča, kot tudi prevajalnik, istega proizvajalca, je programiranje določenih stvari zame lažje, ker so nekatere stvari v naprej pripravljene, tako da ni potrebno vedno na novo definirati npr. priključkov za lcd in podobne stvari. No, saj si lahko tudi v drugih okoljih to shraniš in uporabljaš za v naprej, ampak vseeno.
Všeč mi je tudi interface, ki se mi zdi nekoliko enostavnejši od npr. drugih bolj profesionalnih orodij.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Pet Dec 31, 2010 2:41 pm    Naslov sporočila:   Odgovori s citatom

Pozdrav !
Zanimam me zakaj ne morem odpraviti debounce efekta pri prekinitvah Rolling Eyes ? Dodal sem eno zakasnitev 30 ms, za cnt++ oz, vmes ko je prekinitev izključena, pa se efekt ne odpravi popolnoma. Je bolje ampak ni dobro. Če povečam zakasnitev na več, ni efekta, je kvečjemu slabše.

Lp, in srečno 2011 !
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Pet Dec 31, 2010 3:51 pm    Naslov sporočila:   Odgovori s citatom

V kolikor gledaš stanje s tipko, ki je vezana na prekinitev, potem moraš takoj, ko se prekinitev proži (ko stisneš tipko in program skoči v podprogram, ki ti streže prekinitev)
začasno onemogočiti prekinitve. Se pravi: Pritisneš tipko, prožiš prekinitev, takoj onemogočiš prekinitve, počakaš 5-10ms, preveriš, če je tipka še vedno aktivna, če je, postaviš eno zastavico in jo potem v glavni zanki obdelaš. V glavni zanki spet omogočiš prekinitve, da boš lahko spet pritisnil tipko.

LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Pet Dec 31, 2010 5:44 pm    Naslov sporočila:   Odgovori s citatom

Trenutno imam narejeno podobno v podprogramu za prekinitev. Ko pride do prekinitve se prekinitev onemogoči, števec se poveča in pa počakam še nekaj ms zaradi debounce efekta, potem pa vklopim prekinitve nazaj. Pa ne dela tako kot bi moralo, čeprav mislim, da je tudi ta način pravilen. Prekinitev pa imam nastavljeno da se proži z pozitivno fronto.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Pet Dec 31, 2010 7:12 pm    Naslov sporočila:   Odgovori s citatom

Daj zakasnitev preden povečaš števec, še prej pa dodaj še eno If zanko, kjer gledaš, če je pin, na katerem imaš tipko še vedno na 1 ali 0, odvisno kako stvar gledaš.

LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Pet Dec 31, 2010 7:45 pm    Naslov sporočila:   Odgovori s citatom

To pred števec sem že tudi probal, je isto. Nisem pa probal tega z if stavkom, tako da bom še to poskusil.

EDIT: Super RGorazd najlepša hvala. Sedaj pa dela tako kot je treba. V podprogramu za prekinitev sem dodal še tisti if stavek, pred njega pa zakasnitev. Dela kot je treba 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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group