Zdravim, mam problem s programem co ma spinat dve rele v intervalu 12 a 18 hodin a uz si vazne nevim rady co s tim. Pomoci promennych ON a OFF ( je to tam dvakrat a pomoci jumperu menim periodu) nastavuju pri kolika hodinach se ma jednotlivy rele vypnout a zapnout (porovnava nastaveny cislo s poctem hodin). V danou hodinu to sepne bez problemu, ale jakmile je treba o hodinu vice tak vypne a nemam poneti proc. Zkousel jsem to simulovat v YaPIDE, ale nejak ten programek neovlada preruseni. Myslim ze z programu by melo bejt jasny o co jde, pro prehlednost jsem ho podstatne zjednodusil (chyba je porad stejna i tak :( )
Predem dekuju za jakoukoliv pomoc.
Pozn.: misto porovnavani s hodinama to porovnava s minutama, je to kvuli testovani abych nestravil den cekanim.
Fórum › Assembler
Hodiny s PIC16f628
To freeman-half : a co v programu jen preklapet ty promenne kdyz to projde 12h nebo 24 hodinama?
jako bude pulnoc -> neguje se vystup ... dalsi pulnoc -> neguje vystup (pripadne kdyz to bude 12h interval tak i v ten druhy cas)
- samozrejme muze byt i jiny cas nez pulnoc
byla by to stale stejna operace ale nebyla by potreba stale kontrolovat ten cas...
pripadne si preved hodinu a minutu jen na 60*hod + min a kontrolovat jestli ten cas neni uz pres 12 hodin.. + vychytat jestli to neslo pres pulnoc..
O to nejde, problem je v tom, ze i kdyz umazu vsechny (je tam jedinej jeden) prikazy co maj vypinat rele tak se to presto i tak samo vypne. nevim cim to je.
Chova se to stejne jak v nepajivym poli tak v plosnaku. V nepajivym poli mam jenom na vytupy pripojeny diody, krystal a napajeni. Cely to lezi na stole vedle LCD monitoru. Rek bych ze ruseni to nebude. Kdyby se to restartvavalo tak by mi to neseplo presne treba za 4 minuty, protoze by se to dycky vynulovalo.
To freeman-half :
Od kdy je tohle
MOVLW B'11111111'
MOVWF TRISB
používáno na výstup, kde máš LED nebo relé? - Zápis do trisb a trisa máš přehozený ne?
Dál používá se instrukce swapf
org 04h
movwf W_save
movf STATUS,W -> swapf STATUS,W
movwf Sta_sav
zvlášť když jí máš úhledně na konci Intu
To by mohlo vytáhnout ze slepé uličky ;)
TRISB celej vstupni a TRISA celej vystupni.
Jakmile jsem pouzil SWAPF tak mi prestal fungovat hlavni cyklus program. Takze se mi ani jedna dioda nesepne. Bohuzel porad badam co s tim.
Už mám jasno s těma portama ...
Ale fakt si tam zkus odstranit ten nepořádek s tim swapf-
takhle na konci:
movwf PCLATH
movf Sta_sav,w -> swapf Sta_sav,w
movwf STATUS
swapf W_save,f ; W
swapf W_save,w
To co jsem psal minule taky nech. (jak zjišťuješ že to co je teoreticky správně způsobuje zásek-kde víš že to neni něco jiného..)
A nevim, kdybys zkusil cvičně ty porty fyzicky - zapojení prohodit - myslíš že by to taky vypínalo?
Vymenil jsem to nahore i dole za swapf. Funguje to porad stejne blbe :) nic se nezmenilo. Upravil jsem jeste ty porty ale stejne i pred tim uz byly v poradku. K vypnuti dojde dycky pri presuneni. Kdyz by nebylo tak by to sice nepocitalo dobu, ale inkrementaci hodin(ted minut) by to vypinalo ve spravnej cas. Davam sem aktualni verzi programu.
Vůbec by Neuškodilo schéma zapojení toho PICu !
Pokud ti něco podobného funguje, tozn. PIC nemáš vadný :
LIST P=16F628, R=DEC
INCLUDE<P16F628.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _XT_OSC
W_save equ 20h ; zaloha pri preruseni
Sta_sav equ 21h ; zaloha pri preruseni
PCL_sav equ 22h ; zaloha pri preruseni
FSR_sav equ 23h ; zaloha pri preruseni
dessek equ 25h
sek equ 26h
min equ 27h
hod equ 28h
on1 equ 0d
off1 equ 18d
on2 equ 0d
off2 equ 12d
c1 equ 34h
c2 equ 35h
#DEFINE REL1 PORTA,2
#DEFINE REL2 PORTA,3
#DEFINE LED1 PORTA,0
#DEFINE LED2 PORTA,1
#DEFINE JMP1 PORTB,1
#DEFINE JMP2 PORTB,2
#DEFINE TLAC PORTB,0
;-----------------------------------------------------------------------------------------------
org 00h
goto INIT
INIT BSF STATUS,RP0 ; nastaveni In / Out
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'11111111'
MOVWF TRISB
BCF STATUS,RP0
BSF REL1 ;zapni rele
BSF REL2
GOTO $
END
Doporučil bych ti jednoduše za sebe to co jsi šmahem odbyl u KIIVa - KIIV
Vyresil jsem to. Vychazel jsem z toho ze se to samo vypina, to znamena, ze jsem tam nechal jenom podminku ktera to bude po urcitou dobu neustale spinat. Sice nemam poneti proc to dela to co to dela, ale ted to funguje. Asi mi to nikdy neprestane vrtat hlavou, ale jelikoz to ted narychlo potrebuji mit hotovy tak jsem prisel s timhle resenim. V priloze prikladam soucasnz program. Pokud by nekdo tusil proc se to chova tak jak se chova, moc by me to zajimalo. Jinak vsem dekuji za ochotnou pomoc.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Hodiny — založil AtomicKiller
C# Atomove hodiny — založil Tessi
Analogové hodiny — založil Petr