06-09-2016, 11:40 PM (This post was last modified: 06-09-2016, 11:48 PM by gorankg.)
(06-09-2016, 02:26 PM)vojinilic Wrote: Moze da ostane i ovako, ali sa svakim tasterom na red po jednu diodicu i zajednicka linija ne bi isla na gnd, nego na pin od mcu-a. Kada pristupa displeju, taj bin bi bio ulaz bez pull-up/down (tri-state), a u ciklusu skeniranja tastature taj pin bi bio izlaz na logickoj nuli. Malo samo firmwerske egzibicije i nema frke.
Ovo rešenje bi bilo pravo (šmekerski kako pomenu Vojin) zato što štedi pinove ali možeš vezati i LCD na posebne. Ima ih dovoljno.
Konkretno kod ovog tvog uređaja, motalice, LCD a pogotovo tastatura su "mrtvi" kad krene sa motanjem. Sve što je trebalo da se ukuca i prikaže je prethodilo motanju pa je zato predloženo onakvo povezivanje kao na semi na pinove sa IOC. MCU ne gubi vreme na skeniranje tastature dok rade motori. STOP i START tasteri su ionako odvojeni.
Upravo tako tokom motanja nema potrebe stiskati tastere ali pre motanja dok se unose podaci u isto vreme je i prikaz na LCD pa tu da ne bude problema .
Da li moze da se data linije od LCD prebace na RC1 , RC2 , RD1 , RD2 a tasteri da ostanu na RB pinovima.
(06-09-2016, 02:26 PM)vojinilic Wrote: Moze da ostane i ovako, ali sa svakim tasterom na red po jednu diodicu i zajednicka linija ne bi isla na gnd, nego na pin od mcu-a. Kada pristupa displeju, taj bin bi bio ulaz bez pull-up/down (tri-state), a u ciklusu skeniranja tastature taj pin bi bio izlaz na logickoj nuli. Malo samo firmwerske egzibicije i nema frke.
Ovo rešenje bi bilo pravo (šmekerski kako pomenu Vojin) zato što štedi pinove ali možeš vezati i LCD na posebne. Ima ih dovoljno.
Konkretno kod ovog tvog uređaja, motalice, LCD a pogotovo tastatura su "mrtvi" kad krene sa motanjem. Sve što je trebalo da se ukuca i prikaže je prethodilo motanju pa je zato predloženo onakvo povezivanje kao na semi na pinove sa IOC. MCU ne gubi vreme na skeniranje tastature dok rade motori. STOP i START tasteri su ionako odvojeni.
MCU ne moze nikako da gubi vreme na skeniranje tastature, posto to treba raditi u interaptu. PWM se radi u interaptu itd. Drugim recima MCU ne radi nista pametno. Sve se odradjuje u interaptu.
Sto se multipleksiranja tice, kada projektujes neki uredjaj i posto je to DIY, onda treba da gledas da uredjaj mozes da iskoristis za jos neke stvari, a pogotovo da naucis nove stvari.
(06-10-2016, 06:14 AM)vojinilic Wrote: MCU ne moze nikako da gubi vreme na skeniranje tastature, posto to treba raditi u interaptu.
Da, slažem se a to je i ideja od samog početka. U ovom slučaju je to Interrupt-on-Change na RB4-RB7 a ne timer interrupt. Razlika je, ne drastična, ali zašto ne koristiti prednost koju ti nudi hardver MCU.
(06-10-2016, 06:14 AM)vojinilic Wrote: MCU ne moze nikako da gubi vreme na skeniranje tastature, posto to treba raditi u interaptu.
Da, slažem se a to je i ideja od samog početka. U ovom slučaju je to Interrupt-on-Change na RB4-RB7 a ne timer interrupt. Razlika je, ne drastična, ali zašto ne koristiti prednost koju ti nudi hardver MCU.
Zato sto Interrupt-on-change ne nudi mogucnost debounca. Kada imas mehanicki taster, onda pritiskom na taster se generise samo jedan impuls, vec se generise dosta impulscica dok se mehanicki deo sistema ne smiri. Ovo se zove treperenje ili bounce. To za IOC znaci da ce stalno da se generise interrupt, tj. onoliko puta koliko imas generisanih impulsa.
U tvom kodu ces sigurno imati i neki tmr. Taj tmr mozes da iskoristis i za skeniranje tastature i debounce. IOC se koristi za detektovanje brzih dogadjaja, a ne za tastature.
Ja licno nikada ne bih koristio interrupt za tastaturu, pogotovo za aplikacije gde je potrebno samo uneti neke parametre. IOC mozes da koristis kao brojacki ulaz npr. Razmisli o tome. Ovo su samo saveti i moja iskustva. Bice ti lakse kasnije u radu. Pokrenes motor i zbog velike frekvencije choppovanja izlaznih tranzistora, docice sigurno do generisanje smetnji na ulaznim linijama. Ako je smetnja dovoljno velika, generise se IOC i ti si npr. prmenio jedan parametar, a niko nije pritisnuo taster. Zbog ovog slucaja, a i zbog mehanickih karakteristika tastera, neophodno je uvek koristiti debounce tehniku.
Mislim da 4bit magistrala od LCD ( d4-d7) mora biti vezana isključivo u okviru jednog porta,
i to ne nasumično , već na d0-d3 ili d4-d7 od porta na koji je povezan (donja ili gornja polovina porta).
Jedino RS i ENA pinovi od LCD mogu biti povezani bilo gde.
4-bitna magistra LCD-a (na LCD-u mora da se koristi gornji nibble DB4-DB7, dok se donji nibble povezuje na GND ili VCC, to pise u DS od LCD-a). Bilo bi nalbolje da moze da se poveze u nizu, zbog lakseg pisanja programa. Ovde imas malo egzibicija tipa:
Naravno da se na LCD koristi uvek d4-d7 za 4-bitni prenos.
Ostatak odgovora sam i očekivao.
Ja koristim PBP kompajler, gde moram poštovati vezu u nizu na gornjoj ili donjoj polovini
nekog porta. Jednostavno, - takav je koncept LCDOUT komande u PBP.
Najbolje je da uvek pravis svoje funkcije. Tu je sve pod tvojom kontrolom. Ovako nikada ne znas da li neka biblioteka radi ili ne i za koji LCD kontroler je ona pisana. Moze lako da se desi da neki tajming nije dobar i onda ti ne radi ispravni inicijalizacija LCD-a. Lako je napisati svoje funkcije za LCD. Ja sam iskljucivo ASM i C orjentisan.
06-10-2016, 08:50 AM (This post was last modified: 06-10-2016, 08:56 AM by Želja.)
(06-10-2016, 08:44 AM)vojinilic Wrote: Ja sam iskljucivo ASM i C orjentisan.
Najbolja varijanta !
Ja sam krenuo sa PBP, koristio dosta godina - i sad mi se jednostavno ne menja ...
Doduše, i ja koristim tamo gde je "pipavo" blokove pisane u asembleru kroz PBP.
Ima PBP nesretno rešenih biblioteka.
Recimo pod OBAVEZNO u svakom projektu ceo interapt mi je napisan kroz ASM blok.
Već sam uočio gde su mu slabe tačke, i naučio kako da ih premostim ...
(06-10-2016, 06:14 AM)vojinilic Wrote: MCU ne moze nikako da gubi vreme na skeniranje tastature, posto to treba raditi u interaptu.
Da, slažem se a to je i ideja od samog početka. U ovom slučaju je to Interrupt-on-Change na RB4-RB7 a ne timer interrupt. Razlika je, ne drastična, ali zašto ne koristiti prednost koju ti nudi hardver MCU.
Zato sto Interrupt-on-change ne nudi mogucnost debounca. Kada imas mehanicki taster, onda pritiskom na taster se generise samo jedan impuls, vec se generise dosta impulscica dok se mehanicki deo sistema ne smiri. Ovo se zove treperenje ili bounce. To za IOC znaci da ce stalno da se generise interrupt, tj. onoliko puta koliko imas generisanih impulsa.
U tvom kodu ces sigurno imati i neki tmr. Taj tmr mozes da iskoristis i za skeniranje tastature i debounce. IOC se koristi za detektovanje brzih dogadjaja, a ne za tastature.
Ja licno nikada ne bih koristio interrupt za tastaturu, pogotovo za aplikacije gde je potrebno samo uneti neke parametre. IOC mozes da koristis kao brojacki ulaz npr. Razmisli o tome. Ovo su samo saveti i moja iskustva. Bice ti lakse kasnije u radu. Pokrenes motor i zbog velike frekvencije choppovanja izlaznih tranzistora, docice sigurno do generisanje smetnji na ulaznim linijama. Ako je smetnja dovoljno velika, generise se IOC i ti si npr. prmenio jedan parametar, a niko nije pritisnuo taster. Zbog ovog slucaja, a i zbog mehanickih karakteristika tastera, neophodno je uvek koristiti debounce tehniku.
Pozdrav
Prva promena na RB4-RB7 generiše IOC -> IOC se privremeno zabrani -> Debounce -> Pritisnuti taster detektovan -> IOC se omogući -> Obrada detektovanog tastera.
Tastatura je manji problem ukoliko je smetnja dovoljno velika!
Razmislite o još jednoj veoma interesantoj varijanti, koja sama po sebi koristeći neki softverski RC filtar, radi kao "debounce":
Mogu se vezati lagano 10-ak tastera na samo JEDAN pin mikrokontrolera!
Uvesti razdelnik napona, a tasterima menjati napon prespajanjem različitih otpornika, čime se menja izlazni napon. Ako je ADC sa 1024 nivoa kod ovog PIC-a
to znači da bez problem možemo uvesti detekciju 10 tastera sa po čitavih 100-ak digita histerezisa.
To je ona stara fora sa kraja 90-ih koliko se secam. Miki je to nasao za stari pic16c622 ili tako nesto ili mozda cak za 16c71. Mislim da to nije dobro samo iz razloga choppovanja morota u ovoj aplikaciji. Ipak to zahteva profi projektovanje PCB-a, filtriranje analognog napajanja i svih drugih stvari koje podrazumevaju stabilan rad AD konvertora.
Na kraju, na projektantima je da odluce koju verziju ce da koriste. Mi smo tu samo da damo nase misljenje, a oni mogu da ga odbace ili prihvate. Ja samo mislim da ako se nesto radi, onda treba da se radi maksimalno profesionalno, pa makar bilo i DIY.
Nadam se da sve moje postove shvatate dobronamerno.
Nekada sam mislio da je najveca nauka isprojektovati neku semu i PCB i napisati firmware za to. Kada sam imao strane poslodavce, video sam da je to najlakse. Ne mozete ni da zamislite o kojim detaljima se vodi racuna. To je haos. Da li neki taster stoji sa leve ili desne strane (da li je korisnik levoruk ili desnoruk), itd...
Tu sam video da je glavna fora u detaljima i to je ono sto privlaci korisnika. Svako ima svoj stil projektovanja (osim ako nije copy-paste).
Vojin je u pravu i moja preporuka je da se koliko god je moguće pri projektovanju pristupi maksimalno profi. To kasnije postane rutina i ume da umnogome olakša neke od situacija koje se iskustvom stiču a nisu uvek odmah uočljive. Privilegija je da se uči na "tuđim" greškama, ali neznam koliko nam genetika sa ovih prostora to dopušta
Pošto sam danas uleteo u ovu temu malo "padobranski", izvinjavam se na takvom uključenju. Nadam se da nisam uneo preveliku pometnju, samo sam hteo da "zagolicam" jednom dobrom idejom, koja provereno radi. Konačno, da budem jasan, Milanu u ovom projektu to nije apsolutna preporuka, već samo ideja koju može primeniti u nekom narednom periodu.
Sve gore napisano, postove mojih kolega, shvatam dobronamerno i retko se dešava da ljudi na ovom forumu to rade drugačije - šta da kažem, neprocenjivo
Posto imamo dosta predloga hajde prepustam vama iskusnima da odlucite koje je najbolje resenje da se odradi a ja cu to preneti na semu.
Shvatio sam da su svi predlozi dobronamerni ali ja nemogu da odlucim koje je najbolje jer nemam puno iskustva kako ona izreka kaze od najbolje treba uciti.
mozes to da gledas ovako. Tvoja CPU kartica je trenutno projektovana samo za ovu temu o kojoj pricamo. Posto je to DIY, probaj da razmisljas na sledeci nacin: mozda to mozes da iskoristis kao podlogu za neki PLC u buducnosti. Mozda mozes da je iskoristis za neki termo-regulator. Mozda mozes da je iskoristis za upravljacku grupu lifta. Mozda mozes da je iskoristis za ...
Sve ove diskusije moras ti kao projektant da uzmes u obzir i da odlucis kom pristupu projektovanja zelis da pristupis. Da li zelis da pristupis principu koji zagovaramo npejcic i ja ili zelis neki drugi princip. Ja bih voleo da Macola ukljuci u ovu temu, posto je on takodje zagovornik profesionalizma.
Imas posao da implementiras blink LED. To ne podrazumeva samo sch i pcb. To podrazumeva mnogo, mnogo vise. U koju kutiju da ugradis, kakvu masku da napravis, kako da je plasiras na trziste itd. Ja znam da je ovo samo DIY, ali to ne znaci da treba samo lemiti i crtati seme. Ti kao crtac sema, moras da znas programiranje i samu dusu MCU-a, da bi je nacrtao. Ti treba da budes taj, koji ce firmware programu da kaze kako da programira, a ne da pitas ti njega kako da povezes.
Sve te stvari te vode ka profi projektantu. Ovde ima mnogo ljudi koji zive od elektronike, ukljucujuci i mene. Neke poznajem licno, a neke, na zalost samo preko foruma, ali moze odmah da se izdiferencira ko se stvarno razume u te stvari.
Ovo je samo dobronamerno i zelim samo da ti pomognem da savladas svoje nedoumice i prepreke. Po semi mogu da vidim, da polako napredujes i da izbegavas tudja misljenja, ali nema razloga za to. Svaki post iz ove teme procitaj ponovo od pocetka do kraja i vidi sta nisi prihvatio, a sta jesi, i razmisli o tome jos jednom.