Re: Obsluha tlačítka v assembleru pro procesory PIC 10,12,16F

Jindrich Fucik fulda na seznam.cz
Neděle Leden 19 13:34:05 CET 2025


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


Další informace o konferenci Hw-list