HELP con micro ST6

Salve a tutti c'è qualche buona anima pia che avrebbe qualche minuto da dedicarmi per dei chiarimenti sulla programmazione di questi micro? in pratica ho realizzato un timer Ho provato questa routine su diversi micro, sia ST6225 che ST6265, ma entrambi mi danno lo stesso problema. Il micro nel corso della giornata controlla le variabile minuti e ore li confronta con le variabili orestart, minstart, orefine e minfine dove sono impostati i valori di inizio e fine. IL mio problema è il seguente: se imposto i valori, al massimo un paio d'ore di ritardo rispetto all'ora di programmazione tutto funziona bene. Se invece programmo con diverse ore di ritardo, 10 - 15, ore il micro non interviene. MI spiego meglio, se il programma che gira sul micro indica le ore 10.00 e io programmo rispettivamente accensione e fine 11.15 e 12.30, tutto funziona. Se invece il micro indica 10.00 e io programmo accensione e fine 22.15 e 23.45 il micro non interviene, o meglio, per l'accensione interviene sempre, è per lo spegnimento che non interviene sempre.

orestart .def ;variabile contente ora inizio minstart .def ;variabile contente minuti inizio orefine .def ;variabile ore fine minfine .def ;variabile minuti fine

;+--------------------------------------------------------------------------

  • ;| controlla stato del timer per porta A0 | ;+--------------------------------------------------------------------------
  • timer1 ldi wdog,0feh ld a,minstart cp a,minuti jrz time1_2 ld a,minfine cp a,minuti jrz time1_3 jp esci1 time1_2 ld a,orestart cp a,ore jrz on_out1 jp esci1 time1_3 ld a,orefine cp a,ore jrz of_out1 jp esci1 on_out1 set 0,port_a jp esci1 of_out1 res 0,port_a esci1 ret

__________________________________________________________________ pasquale ICQ#: 86717156 Current ICQ status:

  • More ways to contact me __________________________________________________________________
Reply to
pippo
Loading thread data ...

Con gli orari di start e stop indicati dovrebbe funzionare. Mi sembra per=F2 che il programma possa commettere errori di valutazione se, ad esempio, minfine =E8 uguale a minstart (esempio: start a 11.45, fine a

12.45), oppure orefine =E8 uguale a orestart (esempio: start a 10.00, fine a 10.50). In tali casi, suppongo che of_out1 non venga mai raggiunto. L'errore sta nella prima parte del programma, dove compari minuti con minstart e minfine. Dovresti modificarlo in modo da fare prima la valutazione completa di minstart e orestart e se corrispondono, accendi; se non corrispondono allora fai la valutazione completa di minfine e minstart e, se corrispondono accendi, se no esci.
Reply to
roby

Correzione: pu=F2 sbagliare solo se minfine =E8 uguale a minstart, e non se orefine =E8 uguale a orestart, quando minfine e minstart sono diversi (svista!!!). Comunque, il suggerimento sulla modifica del programma non cambia.

Reply to
roby

Piu' che il micro in questione, il problema e' nella logica di programmazione.

In pratica hai fatto (tradotto in metalinguaggio):

if minuti = minuti_start { if ore = ore_start { activate_load } } else { if minuti = minuti_end { if ore = ore_end { deactivate_load } } }

In questo modo perdi alcune attivazioni. Devi fare due funzioni distinte per testare i due casi, attivazione e disattivazione, anche introducendo delle verifiche per evitare microattivazioni (es. se ore/minuti di partenza coincidono con quelle di fine). Anche io farei il test partendo dalle ore e non dai minuti per ridurre il numero di test se non deve fare operazioni.

Qualcosa del tipo :

if ore_start ore_end and minuti_start minuti_end { if ore = ore_start { if minuti = minuti_start { activate_load } }

if ore = ore_end { if minuti = minuti_end { deactivate_load } } }

C'ya Steve

--
Genius may have its limitations, but stupidity is not thus handicapped.
Elbert Hubbard (1856 - 1915)
Reply to
Stefano Bodini

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.