|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Pet Dec 22, 2017 9:36 pm Naslov sporočila: |
|
|
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 |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Pon Jan 08, 2018 4:00 pm Naslov sporočila: |
|
|
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
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 |
|
|
kose19 Član
Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.51 Kraj: okolica Kobarida
|
Objavljeno: Pon Jan 08, 2018 4:08 pm Naslov sporočila: |
|
|
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 |
|
|
cimer Član
Pridružen-a: Sob 07 Okt 2006 0:07 Prispevkov: 121 Aktiv.: 0.57 Kraj: Ljubljana
|
Objavljeno: Pon Jan 08, 2018 4:39 pm Naslov sporočila: |
|
|
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 |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Pon Jan 08, 2018 5:29 pm Naslov sporočila: |
|
|
Kakor ti to razumeš velja za SELECT-CASE-END SELECT.
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
kose19 Član
Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.51 Kraj: okolica Kobarida
|
Objavljeno: Pon Jan 08, 2018 7:48 pm Naslov sporočila: |
|
|
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 |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Sre Feb 07, 2018 12:35 pm Naslov sporočila: |
|
|
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 |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Sre Feb 07, 2018 2:49 pm Naslov sporočila: |
|
|
328p pozna šest načinov spanja.
V priloženem pdfju glej stran 39.
Opis: |
|
Download |
Ime datoteke: |
ATmega328.PDF |
Velikost datoteke: |
22.3 MB |
Downloadano: |
6 krat |
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Sre Feb 07, 2018 3:19 pm Naslov sporočila: |
|
|
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 |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Čet Feb 08, 2018 2:43 am Naslov sporočila: |
|
|
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 |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Ned Avg 25, 2019 1:33 pm Naslov sporočila: |
|
|
Hi
Spet malo Bascom-a.
Kako napisati tale pogoj ?
ko je T_k večji (>) za 3 od T_b naj vklopi Rele1
in
ko je T_k enak (=) ali manjši kot T_b naj izključi Rele1
Poskušam s Select Case pa mi ne uspe. Prosim za kakšno pomoč.
LP,marko
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Ned Avg 25, 2019 1:45 pm Naslov sporočila: |
|
|
Dva if stavka?
|
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Ned Avg 25, 2019 1:58 pm Naslov sporočila: |
|
|
mato1111 je napisal/a: |
Dva if stavka? |
Sem poskušal pa mi ne uspe. Ali lahko napišeš?
|
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Ned Avg 25, 2019 2:15 pm Naslov sporočila: |
|
|
Ne poznam Bascoma, toda naj bi šlo takole:
Koda: |
If T_k > (T_b + 3) Then vklopi_Rele1
elseIf T_k <= T_b Then izklopi_Rele1
EndIf |
Če ne pozna operatorja <= potem še en if stavek ali logični OR ( If (T_k<T_b) OR (T_k=T_b) Then........ ).
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Ned Avg 25, 2019 2:25 pm Naslov sporočila: |
|
|
Operatorje pozna nesprejme pa tega v oklepaju.
|
|
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: 76 dni
Powered by phpBB © 2001, 2005 phpBB Group
|