Parametry male desticky s MCU.

Pavel Hudeček edizon na seznam.cz
Pondělí Únor 27 21:35:00 CET 2023


Že něco při špatné implementaci špatně funguje, je tak nějak normální. 
To je jako tvrdit že procesory jsou nespolehlivé, protože zlobí když se 
napájí z CR2032 a nedají se k nim žádné kondenzátory:-)

Moje programy standatdně obsahují čekací funkci, která čeká požadovaný 
počet ms a ta v rámci čekání kouká, jestli obsluha nějakého přerušení 
neoznámila nějaký výsledek. A jedna z takových věcí je, že když ADC 
projde všechny kanály, tak se započítají do průměrů a separátně se 
zpracuje kanál od tlačítek. Najde se, jestli hodnota zapadá do některého 
z rozsahů, zkontroluje, jestli tento stav již trvá dostatečný počet 
cyklů a pokud ano, tak se podle toho nastaví globální proměnná, typicky 
s názvem tlacitko. Počet cyklů bývá 16, někdy víc, když se měří rychle, 
někdy míň, když cyklus trvá dlouho, protože třeba už obsluha ADC přičítá 
do průměru. Celková min. doba setrvalého stavu bývá 20-50 ms.

A když jsou tlačítka připojená klasicky, vyhodnocují se stejným 
způsobem, jen se toho neúčastní ADC. Teda vlastně trochu účastní, 
protože je to typicky přifařený v sekci začínající if (adSync==1). 
Akorát v multiplexu s LED displejem, kterej běží na 1 ms, je to v sekci 
if (msSync==1).

A tu proměnnou tlacitko pak používá hlavní program. Např. přes funkci 
cekejNaTl, která napřed v jednom while čeká na puštění a v druhém na 
stisk. Tam už se implementace liší, někdy čeká na jakýkoli stisk, jindy 
na parametrem zadané tlačítko, nebo na splnění masky, když se jich dá 
stisknout víc najednou. Shoda je pak zas na tom, že čekání na tlačítko 
periodicky volá cekej(1). Teda někdy 1, někdy 0, někdy 10.

Ono to vypadá složitě, ale ve finále je to pár řádků kódu, který se 
zkopírujou z jiného předchozího programu. Ale celá funkce cekej, ta má 
klidně několik obrazovek, někdy je to většina programu:-)

PH

Dne 27.02.2023 v 16:56 Kaliciak, Richard napsal(a):
> Dobry den,
>
> pouzivat ADC na tlacitka je cesta do pekiel!
>
> Ono to sice isty cas bude funfovat podla ocakavania, ale casom sa bude 
> vdaka oxidacii kontaktov stale castejsie chybne vyhodnocovat stlacene 
> tlacitko.
>
> Napr: https://dratek.cz/arduino/899-lcd-shield-pro-arduino.html
> po case treba tlacitka stlacat rychlo a silno, inac to analogove 
> napätia nedefinovatelne coura. Musel som prerabat program tak, ze 
> tlacitko nacitavam viackrat za sebou a vyhodnocoval na rovnost (taky 
> analogovy debouncing).
>
> Ale aj komercne predavane pristroje to maju tak blbo urobene:
> * Tesco DR1403R
> https://www.startpage.com/do/dsearch?query=tesco+DR1403R&cat=images
> Nemal som ho este rozobrane, ale podla toho, ako sa chovaju tlacitka 
> (hlavne "Tune -" a "Tune +") dedukujem z toho, ze je to odporovy delic 
> snimany s ADC.
>
> * Panasonic SA-PM01
> https://www.startpage.com/do/dsearch?query=panasonic+sa-pm01&cat=images
> to iste spravanie sa ovladacich tlacitok.
>
> * uz teraz neviem aka znacka auta to bola (auto jedneho znameho), ale 
> packa pod volantom na ovladanie radia tiez takto blbla.
>
> Takze za mna, ak to nebudem vyrabat v milionovych seriach a snazit sa 
> preto usetrit kazdy cent, tak radsej tlacitka a ledky do multiplexu.
>
> RK
>
>
> Dňa 27.02.2023 o 12:09 Pavel Hudeček napísal(a):
>> Na tlačítka standardně používám odpory a ADC. Jednoduchá varianta by 
>> byla s jednou nohou na tlačítka+jumper a druhou na přepínač. Při 
>> komplikovanějším výběru hodnot bude stačit i jedinej pin na všechny 
>> vstupy.
>> Tedy ze 7 pinů ušetřeno 5 nebo 6.
>>
>> A LEDky se dají, pokud není požadavek na low power, dát z jednoho 
>> pinu antiparalelně proti děliči. Pin se pak třeba v milisekundovém 
>> přerušení invertuje a zároveň buď zapíná, nebo vypíná output podle 
>> ňákých dvou proměnných.
>>
>> Frajeřina by byla, dát ty ovládací prvky na ten pin s LEDkama a 
>> zapojit tak, aby možná napětí byla dostatečně blízko děliči, aby to 
>> nerozsvěcelo LEDky. A časování by mělo 3 kroky.
>>
>> Jednou jsem tohle udělal na klávesnici pro zadání hesla u vchodu. 
>> Odpoory byly drátové a ten jeden pin chráněn dvoustupňovou ochranou. 
>> Bylo možné do klávesnice prskat el. paralyzérem a pak normálně zadat 
>> kód pro otevření:-)
>> Klávesnice byla maticová, tak stačily dvě hodnoty těch R a vůbec 
>> nevadila přesnost 5 %.
>>
>> PH
>>
>> Dne 27.02.2023 v 11:43 Martin Hanek napsal(a):
>>> Dobry den,
>>> mejme malou desticku s MCU (napr. s 20 piny), ktera z jedne strany 
>>> prijima data a na druhe strane je nekam posila. Je pozadavek na 
>>> nastaveni cca 5-10 parametru.
>>> Aktualni reseni:
>>> - otocny binarni prepinac 16 poloh - 4 piny MCU
>>> - 2 tlacitka - 2 piny MCU
>>> - 1 jumper - 1 pin MCU
>>> - 2 LEDky - 2 piny MCU, ale ty by tam byly stejne
>>>
>>> Ovladani je nasledujici:
>>> - osadim jumper - obe ledky zablikaji, MCU prejde do nastaveni 
>>> parametru
>>> - na prepinaci nastavim cislo parametru a zmacknu 1. tlacitko, 
>>> zablika 1. ledka
>>> - na prepinaci nastavim hodnotu parametru a zmacknu 2. tlacitko, 
>>> zablika 2. ledka
>>> - takto opakovane pro ruzne parametry
>>> - odstranim jumper
>>>
>>> To mame 7 pinu jen pro nastaveni parametru. Jak na to jednoduseji?


Další informace o konferenci Hw-list