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 
Sponsored by SiOL

Programiranje v bascom avr
Pojdi na stran Prejšnja  1, 2, 3 ... 35, 36, 37
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Bascom sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 430
Aktiv.: 6.53
Kraj: Vrhnika

PrispevekObjavljeno: Pet Dec 22, 2017 9:36 pm    Naslov sporočila:   Odgovori s citatom

Naredil sem primer ce koga zanima kako se naredi casovno prekinitev.
Uporabil sem Timer1.
Vrednost Timer1reload se izracuna po formuli:
Timer1reload = (f*t)/pr kjer je
f = frekvenca uporabljenega kristala (v Hercih)
t = zeljena casovna enota (v sekundah)
pr = prescale oz. delilnik, ki deli frekvenco kristala, Izbiramo lahko med vrednostmi 1,8,64,256 in 1024.
Pomembno je da je vrednost Timer1reload med 1 in 65535 saj je Timer1 16-biten in zato je njegova max vrednost 65535.

izracun 1:
f = frekvenca uporabljenega kristala = 3686400 Hz
t = zeljena casovna enota = 100 ms = 0,1 s
pr = prescale = 1 (poskusimo z vrednostjo 1)
Timer1reload = (f*t)/pr = (3686400*0,1)/1 = 368640
dobljen rezultat 368640 je vecji kot je najvecja dovoljena vrednost 65535 zato poskusimo z vecjo vrednostjo prescale.

izracun 2:
f = frekvenca uporabljenega kristala = 3686400 Hz
t = zeljena casovna enota = 100 ms = 0,1 s
pr = prescale = 1024 (poskusimo z vrednostjo 1024)
Timer1reload = (f*t)/pr = (3686400*0,1)/1024 = 360
dobljen rezultat 360 je manjsi od 65535 zato je izracun v redu.

Nekje na zacetku programa napisemo tole nastavitev:
Koda:
'***Casovna prekinitev vsakih 100ms***
Const Timer1reload = 360
Config Timer1 = Timer , Prescale = 1024
Load Timer1 , Timer1reload
On Ovf1 Timer1_int
Enable Timer1
Start Timer1
Enable Interrupts


Cisto na koncu programa pa primer tele prekinitvene rutine:
Koda:
Timer1_int:
Ledica = Not Ledica 'Ledica (Nek izhodni pin) spremeni stanje vsako casovno enoto.
Load Timer1 , Timer1reload
Incr stevec 'Nek stevec, ki se vsako casovno enoto poveca za 1 in definiran mora biti na zacetku programa.
Return
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 430
Aktiv.: 6.53
Kraj: Vrhnika

PrispevekObjavljeno: Pon Jan 08, 2018 4:00 pm    Naslov sporočila:   Odgovori s citatom

Sele sedaj sem ugotovil da uporaba stavka "elseif (pogoj) then" znotraj if stavka ni tako logicna (vsaj meni ne) kot se zdi na prvi pogled Think
V bascom help-u piše:
Koda:
IF expression THEN
[ ELSEIF expression THEN ]
[ ELSE ]
END IF

po tem sem sklepal da lahko elseif normalno uporabljas kot naprimer:
Koda:
Dim A As Byte
A = 25
If A < 30 Then
    Print A < 30
Elseif A = 25 Then
    Print A = 25
Elseif A > 23 Then
    Print A > 23
End If

Izkazalo pa se je da se v tem primeru izvede samo ukaz "Print A < 30" kjub temu da sta izpolnjena tudi pogoja A = 25 ter A > 23.
V bistvu se izvede samo prvi pogoj ki je izpolnjen ostale pa ocitno ignorira.
Pa tudi v bascom help-u ne napisano nič na to temo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1094
Aktiv.: 7.25
Kraj: okolica Kobarida

PrispevekObjavljeno: Pon Jan 08, 2018 4:08 pm    Naslov sporočila:   Odgovori s citatom

Kaj se ti izvede pa, če prvi pogo A<30j ni izpolnjen?
Pomoje se šele takrat preverja ELSEIF vrstica.

Kdaj se izvaja drugi ELSEIF stavek pa tudi meni ni jasno tako na pamet brez poizkusit.

_________________
- Absens, carens -
- Tisti, ki ga ni, bo prikrajšan -
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
cimer
Član
Član



Pridružen-a: Sob 07 Okt 2006 0:07
Prispevkov: 108
Aktiv.: 0.76
Kraj: Ljubljana

PrispevekObjavljeno: Pon Jan 08, 2018 4:39 pm    Naslov sporočila:   Odgovori s citatom

Ojla

If stavek se izvaja točno tako kot si sledijo zapisani pogoji.

Najprej preverja prvi IF, če je pogoj izpolnjen, se izvede koda znotraj IF stavka in ko konča z izvajanjem kode skoči na konec IF stavka.

Če pogoj ni izpolnjen se izvede ELSIF ali ELSE. V primeru ELSIF velja isto kot za IF. Če je pogoj izpolnjen, se izvede koda znotraj IF stavka spet skok na konec IF stavka.

S tvojim primerom pravzaprav ne vem kaj si želel s programom. Če napišeš konkretno situacijo, ti lahko pomagamo / svetujemo.....

_________________
Lep pozdrav!

Marko S.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 4847
Aktiv.: 32.11
Kraj: Grosuplje

PrispevekObjavljeno: Pon Jan 08, 2018 5:29 pm    Naslov sporočila:   Odgovori s citatom

Kakor ti to razumeš velja za SELECT-CASE-END SELECT.
_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1094
Aktiv.: 7.25
Kraj: okolica Kobarida

PrispevekObjavljeno: Pon Jan 08, 2018 7:48 pm    Naslov sporočila:   Odgovori s citatom

Ker je bilo prej govora o timerjih in njihovih izračunih sem v TO TEMO pripel enostaven kalkulatorček.
_________________
- Absens, carens -
- Tisti, ki ga ni, bo prikrajšan -
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 430
Aktiv.: 6.53
Kraj: Vrhnika

PrispevekObjavljeno: Sre Feb 07, 2018 12:35 pm    Naslov sporočila:   Odgovori s citatom

Zdravo imam sledečo situacijo.
Atmega328 imam priklopljen na rezervno napajanje tako da ko zmanjka napajalne napetosti imam baterijo. Ker pa hočem imeti tudi zaščito proti preizpraznjenosti baterije imam podprogram ki mi izklopi vse porabnike ko pade napetost baterije pod določeno vrednost tako da ostane vklopljen samo še mikrokontroler sam.
Zanima me ali bi lahko naredil da gre mikrokontroler v tem primeru v kakšen način delovanja ki porabi zelo malo energije in se potem nekako spet zbudi ko pride napajalna napetost nazaj? Za meritev baterije uporabljam en ADC kanal za meritev napajalne napetosti pa drug ADC kanal.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 4847
Aktiv.: 32.11
Kraj: Grosuplje

PrispevekObjavljeno: Sre Feb 07, 2018 2:49 pm    Naslov sporočila:   Odgovori s citatom

328p pozna šest načinov spanja.
V priloženem pdfju glej stran 39.



ATmega328.PDF
 Opis:

Download
 Ime datoteke:  ATmega328.PDF
 Velikost datoteke:  22.3 MB
 Downloadano:  6 krat


_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 430
Aktiv.: 6.53
Kraj: Vrhnika

PrispevekObjavljeno: Sre Feb 07, 2018 3:19 pm    Naslov sporočila:   Odgovori s citatom

Sem si pogledal pa mi ni jasno kaj uporabit za moj primer. Ocitno bi ga moral nekako zbudit z ADC? Tudi nobenega programskega primera na ta nacin ne najdem?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 4847
Aktiv.: 32.11
Kraj: Grosuplje

PrispevekObjavljeno: Čet Feb 08, 2018 2:43 am    Naslov sporočila:   Odgovori s citatom

Odvisno v kateri način spanja ga postaviš, toda za vse načine ga lahko zbudiš z INT0 ali INT1, ko se na enem od teh pinov spremeni vrednost,
to se pravi, ko se spremeni od 1->0 ali obratno in ta signal mora biti prisoten vsaj toliko ciklov oscilatorja, kot je določeno s SUT v nastavitvah fuse bitov (opcije oscilatorja).
Preberi si to poglavje vsaj do strani 43.

_________________
Lp, Jaka
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 -> Bascom sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3 ... 35, 36, 37
Stran 37 od 37

 
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: 2153 dni


Powered by phpBB © 2001, 2005 phpBB Group