Re: Obsluha tlačítka v assembleru pro procesory PIC 10,12,16F
Pavel Hudeček
edizon na seznam.cz
Neděle Leden 19 14:14:04 CET 2025
Zvykl jsem si na standard, že mám nějaké časovací přerušení, obvykle 1
kHz, kde se přičítá nějaká proměnná a nastavuje druhá, která říká že
bylo. Pak je v něm ještě interní čítač, který když dojde k 1 sekundě,
nastaví že byla sekunda.
Pak mám čekací funkci, která čeká požadovaný čas s pomocí tý čítací
proměnný. Zároveň se ale při ní dělá spousta dalších věcí, které se mají
dít na pozadí. Takže tam je sekce která proběhne když byla ms, další
když byla sekunda, další když byl cyklus ADC, ... a právě v tý sekci
ADC, nebo ms, mám tlačítka (často jsou připojený ve větším počtu na 1
nohu ADC).
V tomhle místě testuju hodnotu tlačítek a jak dlouho trvá nezměněný
stav. Když tahle doba překročí limit (50-200 ms), nastaví se podle toho
stavu proměnná se stavem tlačítka pro další využití. Občas používám i tu
interní informaci, jak dlouho stav trvá, resp. lze při změně uložit
nejen co bylo původně, ale i jak dlouho to trvalo.
Když chci třeba čekat na tlačítko, mám na to funkci, která nejdřív čeká
až není stisklé a potom zas než je stisklé. Stav už bere z tý proměnný
co se přepisuje hlavní čekací funkcí a tu volá dokola.
Sice to takhle dělám v C++, ale kdybych byl nucen zas někde použít asm,
udělal bych to v něm stejně.
PH
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.
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20250119/d15d8695/attachment-0001.htm>
Další informace o konferenci Hw-list