Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
(07-17-2017, 09:00 PM)YuMERA Wrote:
(07-17-2017, 11:34 AM)mikikg Wrote: ... MCP23S17 je zaduzen za I/O, njega konfigurisem iz SW prema postavci kartica ...

Mene zanima kako se u praksi pokazao MCP23X17 nisam ga do sad koristio a imao bi potrebe.
Zanima me kad se koristi kao ulazni expander i to kad se koristi button tj. kako resava debounce...
koliko sam video u pdf okine Interrupt kad dodje do promene na portovima. Nisam brzinskim citanjem video za debounce.

Izvrsno YuMERA!

Dosta komada MCP23S17 (SPI) sam upotrebio u praksi i pokazali su se kao izvrsni ekspanderi.
SPI verzije tog čipa (MCP23017 je I2C verzija) su pored konzumacije nešto više pinova zahvalni zbog brzine i 8 hw adresa.
Na primer, refreš svih 16 izlaza na jednom čipu (ako je tako konfigurisan) traje tipičnih 7,5uS sa SPI na 10MHz...

Mana bilo kog i bilo čijeg in/out ekspandera je da su to leč naprave, koje će zauvek držati poslednje upisano out stanje, sve dok ima napajanja.

Stoga se jedan od pinova na MCU konfiguriše kao output i dejstvom na dole, tj. niskim stanjem, preko eksternog PNP tranzistora, obezbeđuje napajanje celoj SPI garnituri ekspandera koji su zaduženi za izlaze.

U slučaju obaranja master MCU, njegovi pinovi se po resetu uvek inicijalno konfigurišu kao inputi High-Z, taj pin se jednostavno "otpusti" i obori napajanje SPI out ekspanderima, čim ih i resetuje (ako je njihov reset pin vezan za njihov nterni Vdd). To trenutno deaktivira sve pokrenute izlaze, tj. izaziva SVE-STOP stanje.
Taj pin se prilikom inicijalizacije MCU proglašava outputom, potom pre inicijalizacije SPI povuče jednom na dole i nigde se više dalje ne pominje u sw. Njegova je uloga, kao što rekoh, da inicijalizuje i "drži" napajanje SPI out ekspandera dok je MCU "živ".

Gde je neophodna ekstremnija pouzdanost, tu se pravi hardverski watch-dog (sa NE555 na primer) kao monostabil koji "šutne" napajanje SPI grupe, a jedan pin od ekspandera se zaduži za CLRWDT. Samo to zahteva neprestano "posećivanje" SPI bus od strane MCU...

Generalno postoje različiti stepeni pouzdanosti koji su zahtevani u nekoj digitalnoj kontrolnoj logici.

Najekstremniji slučajevi pouzdanosti se prave tako što MCU uvek kreće iz RESET stanja, samo jednom "provuče" svoj kod, potom storira bitne varijable i stek, na primer u FRAM koji je MIKI pomenuo (u te svrhe je se u najranijim vremenima procesne kontrole koristila magnetna memorija sa jezgrima, a ponegde i dan danas) i odlazi u RESET stanje iz kog se ponovo "budi" i uzima svoje poslednje stanje iz tog svog NV-RAM.
Dakle, jedan programski ciklus, potom reset i otpočetka. NV-RAM beleži potrebno i eventualne err koje se potom mogu ispraviti.

Takve stvari su na primer povoljne u uslovima visoke radijacije gde začas neka brza čestica koja prođe kroz sve to kao kroz sir i može da okine neki flop u CPU ili "istrese" neku ćelijicu RAM, i sve ode u PM jer će CPU garant zaglaviti (ako ne zna koja mu je sledeća pozicija PCL).

RESET se događa bezuslovno hardverskom napravom, i to veoma jednostavnom i što glupljom (par diskretnih komponenti) i sve može da se počne iz početka, sa dupliranim ili čak utrostručenim kopijama prethodnih stanja u NV-RAM.

Tako je moguće "sampopravljanje" u najsurovijim uslovima, kao npr u kosmosu...

Sve zavisi koliki stepen pouzdanosti se traži, a ne postoji nigde 100.0%.
-------------------------------------------------------

MCP23X17 su jako moćni ekspanderi i imaju dva nezavisno konfigurabilna 8-bit porta.
Kao ulazi mogu biti obični, a može se konfigurisati generisanje interrupt (pull-down) impulsa, na izlazu, koje ima svaki od portova kao open drain izlaz. To omogućava i žičanu OR logiku gde se svi takvi mogu vezati paralelno sa jednim pull-up otpornikom i afektovati jedan jedini pin zadužen za ext. ISR na MCU.

Pojedinačnim portovima, koji se konfigurišu kao ulazi, može se dodeliti interrupt osobina pojedinačno po pinu, ili grupno na bilo kakvu promenu u odnosu na prethodno pročitanu vrednost...

Dakle, kada se dogodi prekid na nekom od MCP23x17, MCU "ode" na SPI bus i "sazna" što pre ko je to izazvao..

Kao ulazi imaju dobru marginu šuma, posebno na 5V logici koja prirodno ima bolju marginu šuma od logike sa nižim naponima.

Interni debounce ne postoji u njima.

Dobri konstruktori se ne oslanjaju posebno na sw debounce jer to je izmišljeno za igranje na stolu i za vremenske sekvencijalne automate tipa nekih linija za pakovanje ili protočnih peći gde koja desetina mS nije od značaja (poput mnogih uobičajenih industrijskih PLC renomiranih proizvođača, gde je latencija ulaza rada 1-50mS, a za brže i preciznije se mora kupiti značajno skuplji modul sa brzim inputs male latencije).

Dobar konstruktor će svaki od inputa imunizovati sa RCD filtrima, gde se osim dobrog "debounce" dobija pouzdana zaštita od "ubijanja" konkretnog input, pojavama poput strmih naponskih tranzijenata velike amplitude.
Onda nema potrebe za boljim debounce od dva uzastopna čitanja sa nekim poznatim razmakom koji se namesti prema tom RCD filtru...

To je takođe neuporedivo brže "posmatranje" ulaza nego sw debounce (a manje se i čuka po tastaturi :-)

Pozz
Reply


Messages In This Thread
RE: Arduino - tutorijali, pitanja, primjeri i projekti - by Macola - 07-18-2017, 12:23 AM

Forum Jump:


Users browsing this thread: 34 Guest(s)