[ electron2008 @ 27.04.2012. 12:50 ] @
Sta da uradim, kako, da se odredjena labela izvrsava recimo 15 minuta i da posle tog vremena predje na drugu, recimo:
Code:
 Ugrejano:



 LCDOUT $FE,1,   "TEMP. DOSTIGNUTA"
 LCDOUT $FE,$C0, "Rad"

 led=0:led1=1:g=0:P=0:V=0


 if b=0 then blokada
 pause 10
 if t1=0 and t2=0 then gosub Ugrejano
 pause 10
 if t1=1 and  t2=1 then gosub Paljenje
 pause 10
 if t1=0 and  t2=1 then gosub Ugrejano
 pause 10
 if t1=1 and  t2=0 then gosub Blokada
 pause 10 
 goto ugrejano


Ovo treba da mi odradjuje neko vreme i posle tog vremena da predje u novu labelu Ugrejano1, a vreme odbrojavanja timera nemora da se prikazuje na displ. jednostavo da se zadrzi u labeli ugrejano odredjeno vreme koje bih mu ja odredio u kodu i predje u labelu Ugrejano1
[ bogdan.kecman @ 27.04.2012. 18:06 ] @
aj probaj da objasnis zasto ti to treba tj sta hoces tacno da postignes posto nisi bio jasan sa postavljanjem pitanja ..

ako hoces da "cekas" 15min, napravis obicnu petlju za cekanje u kojoj dovoljan broj puta pozivas maximalnu vrednost za pause (ne znam u basic-u dal pause ceka u ms ili us ili sec .. koliki je max value .. ali koliko god da je stavis je u petlju i pozoves toliko puta da dobijes 15min)

ako hoces da si siguran da neki deo koda ne traje duze od 15 min onda moras kod da napises drugacije (to ce ti pomoci ovi momci koji rade basic)

ali najverovatnije ti to gledas pogresno ... gledajuci imena tvojih subrutina (ugrejano, paljenje, blokada), ne verujem da treba da resavas stvar sa predefinisanim vremenskim periodom .. zato te pitam sta je cilj posto "ugrejano" treba da traje dok se nesto ne ugreje (citas senzor povratni i grejes dok ne dostigne potrebnu temperaturu), paljenje takodje, imas neki feedback kada je "gotovo" etc etc ..
[ ZAS011 @ 27.04.2012. 20:08 ] @
Ja u nekom od mojih postova vec dadoh LINK
Implementira sa i u PBP i u Proton+ i u MikroE kompajlerima (bilo kom) i radi k'o sat
[ mnn @ 27.04.2012. 22:24 ] @
TMR1 podesiš na neku pogodnu vrednost.Sakim interaptom povećaš neki brojač koji testiraš u nekoj petlji . Kad se saberu vremena izađeš iz petlje i ideš dalje.
[ ZAS011 @ 27.04.2012. 23:19 ] @
@mnn: TMR0 podesis na 0, preskaler pridodelis WDT, koji, btw, ne koristis, i time efektivno meris 1/4 frekvenciju kristala. Za 4 MHz kristal to ti je 1,000,000 instrukcijskih klok-ova za 1 sec. Procitaj sta pise u linku koji sam postavio.
[ sfredsfred @ 28.04.2012. 20:34 ] @
http://www.circuitsonline.net/forum/view/66874, pogledaj
[ ZAS011 @ 28.04.2012. 21:56 ] @
Code:
Device 12F617
Xtal 4
All_Digital True
PortB_Pullups False

CCP1_Pin GPIO.2

'****************************************************************
'* Config Fuses                                                 *
'****************************************************************
Reminders False
Config BOREN_OFF, CP_OFF, FOSC_INTOSCIO, IOSCFS_4MHZ, MCLRE_OFF,_
       PWRTE_ON, WDTE_OFF, WRT_OFF
Reminders True

On_Hardware_Interrupt Int

Symbol T0IE = INTCON.5
Symbol T0IF = INTCON.2
Symbol GIE = INTCON.7
Symbol PS0 = OPTION_REG.0
Symbol PS1 = OPTION_REG.1
Symbol PS2 = OPTION_REG.2
Symbol PSA = OPTION_REG.3
Symbol T0CS = OPTION_REG.5

Dim Bres As Dword
Dim Sekunde As Byte
Dim SecFlag As Bit


Clear

GoTo Glavni
'****************************************************************
'* Interapt rutina                                              *
'****************************************************************
Int:
    Context Save
    Bres = Bres + 256
    If Bres >= 1000000 Then
        Bres = Bres - 1000000
        SecFlag = 1
        Inc Sekunde
    EndIf
    T0IF = 0
Context Restore

'****************************************************************
'* Podprogrami                                                  *
'****************************************************************
Inicijalizacija:
    GIE = 0        ' Turn off global interrupts
    PSA = 1        ' Assign the prescaler to WDT (no prescaler to TMR0)
    PS0 = 1        ' Set the prescaler
    PS1 = 1        ' to increment TMR0 
    PS2 = 1        ' every 256th instruction cycle 
    T0CS = 0       ' Assign TMR0 clock to internal source
    TMR0 = 0       ' Clear TMR0 initially 
    T0IE = 0       ' Enable TMR0 overflow interrupt
Return

'****************************************************************
'* Glavna programska petlja                                     *
'****************************************************************
Glavni:
GoSub Inicijalizacija

.
.
.
.


Deo programa, a prema linku koji sam vec postavio
[ electron2008 @ 29.04.2012. 12:44 ] @
Aj da objasnim, to je deo koda koji sam uradio za neki kontroler gorionika, koji radi ok, samo sto plamen gasi, naravno, kad dostigne zeljenu, tj zadatu temperaturu, kad temp padne gorionik krece sa paljenjem i opet ispocetka... A meni bi trebalo da kad dostigne zeljenu temperaturu predje na drugu labelu gde smanji snagu gorionika, tj ventilator i gorivo, znaci neka manja snaga koja bi trajala tih recimo 15-30 minuta i onda ga ugasi sve dok termostat opet ne pokrene, kako se nebi stalno cimao tj palio i gasio gorionik, a temperatura nebi preterano padala, tj da nebude velika histereza, da sad neobjasnjavam princip...