Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Nepredvidljivi ulazni digitalni signali u mikrokontroler

[es] :: Elektronika :: Mikrokontroleri :: Nepredvidljivi ulazni digitalni signali u mikrokontroler

[ Pregleda: 2443 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Nepredvidljivi ulazni digitalni signali u mikrokontroler22.10.2008. u 15:50 - pre 187 meseci
Ova tema je neutralna u odnosu na tip mikrokontrolera. Ona sama je jedna od tehnika programiranja MCU-a, i kao takva trebalo bi da joj posvete paznju iskusni programeri, a pocetnici bi mozda nesto naucili.

Potrebno je problem resavati bez spoljnih komponenata, ili sa sto manjim brojem njih. Za pocetak predlazem dva slucaja:

1. U MCU se uvodi (mozda preko optokaplera ili ne) signal sa nekog mehanickog davaca digitalnog signala koji prilikom promene stanja (sa 0 na 1 i obrnuto) vise puta promeni stanje pre nego sto ono postane stabilno. Perioda ovih stetnih promena je znatno kraca od trajanja stabilnog stanja, ali je nepredvidivo koliko ce dugo one trajati (vremenom se mehanicki davaci habaju, kvare i slicno). Takodje u toku trajanja stabilnog stanja moze uleteti neka smetnja sa nekoliko perioda gde svaka od njih moze da ima trajanje od oko 100us.

2. Davac radi sa 220VAC i daje takav signal koji se preko optokaplera za AC signal uvodi u mikrokontroler. I ovaj signal moze biti podvrgnut eventualnim smetnjama kao i signal pod 1.

Ja sam se bavio ovim problemima, ali verovatno i drugi. Ako se iznesu razna iskustva, moguce je doci do nekog optimalnog resenja, ili baram sagledati eventualne teskoce koje u raznim aplikacijama mogu da se pojave.

Trenutno nemam vremena, ali verovatno cu sutra izneti svoja iskustva za tacku 1.

Pozdrav svima.

 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.yu
Via: [es] mailing liste



+8 Profil

icon Re: Nepredvidljivi ulazni digitalni signali u mikrokontroler22.10.2008. u 21:27 - pre 187 meseci
Ovo pod 1. mi lici na klasican debouncing. Licno sam za njegovu realizaciju koristio tri principa.

1. Uzimanje semplova sa pina i brojanje prilikom svakog prolaska kroz taj kod do (unapred zadate) maksimalne vrednosti brojaca. Brojac se resetuje prilikom svake izmene stanja (suma) i ciklus brojanja pocinje iz pocetka. Novo, ispravno stanje prihvatice se tek kada brojac dostigne zadatu vrednost. Prednost je veliki broj semplova (do 255 uz 1 RAM registar) i stoga moguca detekcija kratkih smetnji, a mana malo duzi kod.

2. Isto kao pod 1, sa razlikom sto sam umesto brojanja koristio rotaciju ('0000 0001' pa '0000 0011' pa '0000 0111'...) dok ne bih u celom bajtu dobio isto stanje '0000 0000' ili '1111 1111'. Prednost je brz i lak test (uz postojeci set instrukcija za PIC), a mana ogranicenje na maksimalno 8 semplova po registru.

3. Za mali broj semplova i veci broj ulaza, idealni su vertikalni brojaci. Princip rada (sa gotovom rutinom) nasao sam na http://www.dattalo.com/ . Uz samo dva RAM registra moguce je testirati do 8 ulaznih pinova uz 4 sempla. Prednost je mali RAM, brza i jednostavna detekcija, a mana mali broj semplova.

Naravno, pozeljno je u bilo kom slucaju sto ravnomernije uzimati semplove sa pina (tajmerskim interaptima).

Jos jedan (cetvrti) princip bio bi hardverski debouncing, a njegova sema je (za PIC, mada se moze primeniti i na bilo koji drugi mikrokontroler) na http:///www.gooligum.com.au/tut_baseline.html pod Reading Switches. Mana mu je komplikovaniji (i podlozniji kvarovima) hardver, a prednost jednostavniji softver i mogucnost izazivanja interapta pri promeni stanja na pinu, sto softverskim debouncingom nije moguce.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Nepredvidljivi ulazni digitalni signali u mikrokontroler22.10.2008. u 22:27 - pre 187 meseci
Za spoljni signal koji se "uvodi" u mikrokontroler neophodno je definisati sta je to sto ce se smatrati ispravnim signalom, bez obzira odakle signal dolazio; sa mehanickog prekidaca, optokaplera ili neceg drugog.

U praksi se glicevi javljaju uvijek: i dok je korisni signal na neaktivnom nivou, i na uzlaznoj i silaznoj ivici korisnog signala, i za vreme trajanja korisnog signala.
Ako nije moguce predvidjeti maksimalno trajanje smetnji (i minimalno trajanje korisnog signala) onda sistem nije dobro definisan i mora se ici drugim putem.

Sve metode debaunsiranja se svode na sledece: ako je signal dovoljno dugo bio na visokom nivou smatracemo da je sada na visokom nivou, ako je dovoljno dugo bio na niskom smatracemo da je na niskom. Svako hardversko i softversko debaunsiranje emulira ovaj princip.
E sad, sta je to "dovoljno dugo", to se mora znati za svaki sistem posebno, ne postoji univerzalno rjesenje.

Poseban problem predstavljaju kratkotrajni glicevi koji se javljaju dovoljno cesto da prekidaju ono sto smo definisali kao koristan signal. Ako npr. definisemo da signal sa mehanickog prekidaca smatramo korisnim ako traje duze od 100ms, nije problem debaunsirati prekidac, ali ako ima jos neki izvor smetnji koji na toj zici indukuje kratkotrajni glic od par ns i to u intervalima kracim od 100ms onda moze biti problem softverom pravilno detektovati taj signal jer mu taj glic nikad nece dozvoliti da neometano traje 100ms. Medjutim, koriscenjem par dodatnih elemenata (integratori) to se lako hardverski rjesava.

Postoji vise softverskih i hardverskih nacina debaunsiranja, ali svaki ima svoj trenutak slave u zavisnosti od problema, mogucnosti i drugih relevantnih uslova.

Ja najcesce gledam da imam neki slobodan tajmer za debaunsiranje (osim ako procesor nema pametnij posla nego da ceka na pritisak tastera). Tajmer broji dok je neki odgovarajuci pin na odgovarajucem nivou. Ako je uspio da odbroji do neke vrednosti ide interupt, signal se proglasava da je sad na tom nivou, tajmer se resetuje i podesava se da broji kad je pin na suprotnom nivou od prethodnog i tako ukrug. Ako se signal u toku brojanja vratio na drugi nivo, a da tajmer nije stigao da odbroji do zadatog vremena, resetuje se tajmer, pa opet iz pocetka. Ovo radi bez problema za bilo koji tip mehanickog prekidaca sa kojima sam radio, a i za dobar dio ostalih izvora signala.
Ako nesto ne moze u datom sistemu da se rjesi na ovaj ili slican nacin onda obicno prvo posumnjam da sam zastranio u necemu drugom.
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Nepredvidljivi ulazni digitalni signali u mikrokontroler23.10.2008. u 07:57 - pre 187 meseci
Kod mene se odlicno pokazala varijanta koju je Stojan opisao pod 2. Koristim interapt kod jednog od tajmera i u njemu skeniram ulaze:


bcf carry
btfsc porte,0 / Taster na potrE.0
bsf carry
rlf Taster_SET,F

da bi u programu:

if (Taster_SET==255) / Da li je taster pritisnut
if (Taster_SET==0) / Da li je taster otpusten

Nedostatak je jedino sto trosi nesto RAM-a, svaki od digitalnih ulaza trosi jedan bajt.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Nepredvidljivi ulazni digitalni signali u mikrokontroler23.10.2008. u 09:39 - pre 187 meseci
I ja u najvecem broju slucajeva koristim slucaj 2 koji je opisao Stojan Trifunovic. To je po karakteristikama NF digitalni filter sa konacnim impulsnim odzivom. Frekvenciju semplovanja ulaznog signala i broj bitova koji se sifta sa ubacivanjem bita stanja na ulaznom pinu odredjuju karakteristike filtra. Sto je broj bitova koji se sifta veci, povecava se granicna frekvencija filtra (time i vremenska konstanta) i usporava se odziv filtra.

Potrudio sam se da to ilustrujem u prikacenom fajlu.

Pozdrav.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Nepredvidljivi ulazni digitalni signali u mikrokontroler

[ Pregleda: 2443 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.