RE: Obsluha tlačítka v assembleru pro procesory PIC 10,12,16F
Ladislav Kručinský
ladislav.krucinsky na hermanicky-pivovar.cz
Neděle Leden 19 16:15:15 CET 2025
Díky všem za reakce, Jindro ten Tvůj postup je pro mne asi tak nejpochopitelnější, napsal jsem si princip a zkusím ho příště použít, vypadá to dobře, asi to i vyjde na menší počet příkazů.
Já tam sice obsluhuju přerušení od tlačítka ale jen abych zahájil proces jeho vyhodnocení když se stiskne, pak už to jede v tom přerušení od časovače T0. Takže jsem se nepřesně vyjádřil.
Zdravím
Láďa
-----Original Message-----
From: Hw-list <hw-list-bounces na list.hw.cz> On Behalf Of Jindrich Fucik
Sent: Sunday, January 19, 2025 1:34 PM
To: hw-list na list.hw.cz
Subject: Re: Obsluha tlačítka v assembleru pro procesory PIC 10,12,16F
Ahoj,
Obávám se, že jsem poslední, kdo píše v ASM pro PIC :)
Knihovna příkladů je na piclistu, ale už to není podporovaná sajta, takže většina kliků končí na ruskejch reklamách:
http://www.piclist.com/techref/microchip/debounce.htm
Hele, první co mi je divné je, že píšeš, že jsi chtěl tlačítko řešit přerušením od timeru a v kódu máš:
btfsc INTCON,GPIF ;přerušení od změny stavu na GPIO?
goto gpioint ;ANO
...
gpioint ;přerušení od GPIO (tlačítko)
Používáš trochu jinej způsob psaní než já, tak se mi to nedobře čte a
moc se mi nechce to číst extra dlouho.
Já pro tyhle případy používám přerušení od časovače a malinkej stavovej
automat. Definuji si časovač dejme tomu každých 10-100ms, moc na tom
nesejde (větší čas = neexistuje debouncing). A v přerušení normální
stavovej automat:
stav 0
- je stisklé tlačítko?
+ ano=>stav 1 (inc stav); count = 0 (clrf count)
- ne =>nic
stav 1 (stisk)
- je stisklé tlačítko?
+ ano=>přičti count (inc count)
- ne=>stav 2 (inc stav)
- je count >= 200? (limit pro zaseklé tlačítko)
+ ano=>stav 3 (zaseklé tlačítko)
stav 2 (uvolnění)
- je count=0? (moc krátké, asi šum)
+ ano=>stav 0 (ignoruji a jdu od začátku); konec
- je count<=10 (limit pro krátkej stisk)
+ ano=>set short=1 (máme tu krátkej stisk)
- ne => set dlouhej=1 (máme tu dlouhej stisk)
- stav 0 (a to je vše)
stav 3 (zaseklé tlačítko)
- volej o pomoc
Dne 19.01.2025 v 11:48 Ladislav Kručinský napsal(a):
> Zdravíčko při neděli, kolezi.
>
> Více než kdy jindy jsem se poslední dny cítil jako Saturninův strýc
> František: „Nepotřebuji týt z toho, co objevili jiní…“
>
> Potřeboval jsem si do PICu naprogramovat jednoduchý časovač pro medomet,
> obsluhovaný jedním tlačítkem – krátký stisk něco, dlouhý stisk něco
> jiného. Chtěl jsem, aby tlačítko bylo obsluhováno pomocí přerušení
> timeru – čili žádné čekání v programových smyčkách, aby bylo odolné
> proti zákmitům – debouncing a aby se poznala chyba, když tlačítko
> zůstane viset. Nu a zapotil jsem se. „…A přitom taková blbost, že?...“
> abych ocitoval dalšího klasika. Nakonec jsem to po týdnu dal dohromady
> (jsem v důchodu, hraju si, vždycky chvilku, nefungovalo to tak den
> pauza, …). A tak bych se rád dotázal zde přítomných kolegů, kteří jsou
> v programování PICů v assembleru zběhlí:
>
> Jak to řešíte vy? Je někde nějaký osvědčený postup s příklady přímo
> v MPASM ? Já tak narychlo nic nenašel, v nějakém předchozím projektu
> jsem aplikoval vertikální čítač, ale to mi tady přišlo poněkud
> komplikované. Nakonec je toho asi 40 řádků v obsluze přerušení. Ale
> docela rád bych viděl, jak na to chodíte vy?
>
> Prosím neozývejte se s jazykem “C“ – ten je mi naprosto Cizí i když
> chápu že to v něm lze efektivně a robustně napsat. Rád bych právě
> porovnal přístupy v assembleru, tedy pokud nejste žárliví právě na to
> svoje řešení. Já do přílohy dávám svůj program, ať si případně
> pozvednete sebevědomí 😊. Vzhledem k tomu, že programuju vždycky nějakou
> capinu a pak třeba půl roku nic, snažím se ten program komentovat jako
> pro dementy – abych si vzpomněl co tam mám a proč.
>
> Hezkou neděli přeji.
>
> Ing. Ladislav Kručinský
>
> Koněvova 427/90
>
> 713 00 Ostrava - Heřmanice
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list