Zdravím, potřeboval bych radu. Mé krásné začátky ke kterým jsem si vybral 16F690 probíhají velice náročně. Pokusil jsem vytvořit obyčejné hodiny a ty fungují vcelku obstojně. Ale při nastavení hodin jsem chtěl, aby když držím tlačítko (RB4, nebo RB5) se mi cyklus opakoval po jedné vteřině. Po krocích vše OK, ale v reálu po krátkém stisku chvilku nic a potom po vteřinách nabíhá až dvacet najednou.
Je treba si dat pozor na to, ze tlacitko pri stisku nevyvola donale sepnuti, ale provede se spousty sepnuti a rozepnuti, dokud se tlacitko neustali. Proto by jsi mel mít nejake kratke casove smicky (cca 20ms) a pak overit zda opravdu doslo ke stisku tlacitka. Tedy asi takto:
ano tacitko jsem stisknul - cekani - potvrzuji, je sepnute a mohu plnit potrebny ukol
Zkusil jsem vytvořit kód - kontrola stisku - prodleva - kontrola - akce, ale asi někde dělám chybu. Výsledek je shodný. Stále se to chová jako oddělené cykly. (Nejdív nic a potom postupný náběh). Netuším, kde mi to “hapruje”
Program jsem základ použil z TestLCD od dovedy (abych se netrápil v začátcích s displayem) a zbytek jsem tam doplácal osobně.
Neměl jsem zapnuté pull-up, ale když jsem je teď zapnul, tak mi to nereaguje vůbec. Program řikládám v příloze. Hodiny.asm (15.2 KB)
Ten čas se počítá pouze smyčkama. Souhlasím, že jsou nepřehledné, ale tam jsem to pouze upravoval tak, aby to s krystalem 4MHz vycházelo na 1s.
Ale po startu hodin to jede už OK. Pouze nemohu rozběhnout ty tlačítka. (Main zobrazí 1 řádek čas, druhý řádek název hodin a přičte 1s.)
heh, je na case to udelat pres preruseni, zabijes tim 2 mouchy 1 ranou, budes mit presnejci cas a obslouzis tlacitka, pak se muze procesor 950ms dloubat v nose …
ten kod je neprehlednej takze sem to nestudoval jak to bezi vsechno posobe, takze asi takle…
main
zobrazeni aktualniho casu
smycka
je stiskly tlacitko ?
ano,je stiskly ,incf tlacitko1, a je stiskly vic jak 100ms(tlacitko1 > 5 ) minuty +, blabla…,zobrazeni casu
ne,cekej 20ms , clrf tlacitko1
goto smycka ;cca 48x !!
nop
nop ; doladeni casu
minuty + ; 1s
goto main
edit: po zmene casu musis hned taky udelat obnovu na lcd,pak se ti to prave obnovuje jen po 1s a po velkejch skocich…
No je to první můj pokus, kde jsem se snažil pochopit, jak to někdo vytvořil a podle toho zpracovat něco svého, ale je fakt, že jsem mohl nepotřebné části promazat. Pokusím se ještě předělat zobrazení času pouze při stisku tlačítka (teď tam bylo při každém cyklu) snad to pomůže. S přerušením jsem ještě nic nezkoušel, ale určitě v další fázi se pokusím tomu věnovat. Bohužel příklady jsou pro mě přehlednější než datasheet, tak se pokusím něco dohledat.
Tak jsem se to snažil pochopit, ale nic moc.
Pojedeme od začátku. co dělá tenhle kus kódu
TlacSmycka
call CAS_ZOBR ;zobrazí čas na display
movf PORTB,W
xorlw .0
BTFSC STATUS,Z
goto TlacSmycka
vždyť 16f690 nemá vyvedený PORTB,0!!! tady se ti to zacyklí.
Velice děkuji všem zúčastněným za snahu. Chápu že kód byl nepřehledný a pokud by ještě někdo měl nápad, kde dělám hloupou začátečnickou chybu, tak jsem ořezal kód na základní otázku (života, vesmíru a vůbec).
TrisA jsem omylem promazal při ořezávání kódu, ale při doplnění stále stejný výsledek. Výstupy zatím při všech pokusech ok, ale vtup nic, nic a nic. Už jsem zkusil použít i jiné porty (nebyl jsem si jist, jestli jsem to po těch všech pokusech neodpálil), ale bez výsledku.