Fórum témák
» Több friss téma |
Megadtad a fordítónak, hogy 4 bites módban szeretnéd az LCD -t üzemeltetni?
Kicsit nem értem a hozzáállást:
Ha valamelyik hozzászólással problémám van, akkor nem válaszolok rá... Ha mégis válaszolok, akkor megpróbálok ötletet adni. Végül ebben a kérdésben is megoldódott a probléma, Q3 helyén N-MOSFET volt beültetve....
Én is nemrég estem át ezen a fajta problémán. Jó volna tudni, hogy az Lcd_Init() függvényed mit takar. Sajnos a C nem az én nyelvem, ezért csak tippeket adhatok. Nézd át a konfig biteket, mert lehet, hogy ott is gond van. Én először áttenném az egészet a C, vagy D portra, hátha azon működik. Ezzel megállapíthatnád, hogy a lábak beállításával kapcsolatos-e a hiba. Az én programomnál az lcd inicializálása volt a fő gond, ezért is lenne fontos ismerni azt a részt. Ott fontos időzítések vannak, ráadásul az enyém csak akkor volt hajlandó 2 soros módba váltani, ha kétszer adtam ki a parancsot. Azt sem tudjuk, hogy a te ini-d 4, vagy 8 bites módba kapcsolja-e?
Esetleg nézd át azokat a kérdéseket, és válaszokat, amiket ezzel kapcsolatban föltettem szeptember közepén. Ott még linkek is vannak az LCD kezelésére, amiből nagyon sok minden világossá vált számomra.
Sziasztok.
Szeretnék feltenni egy PIC-el kapcsolatos kérdést. Reménykedve abban, hogy a topik visszatér az eredeti kerékvágásba, és tényleg a "PIC kezdőknek" szól. Tehát, még régebben elkezdtem írni egy számláló programot, amit ídő és tudáshiány miatt fel kellett függesztenem, de most elővettem. A lényeg röviden: Egy marógép satujára lesz a számláló, aminek oda-vissza kell számolnia. A jel két optóról megy egy 74ls74-en keresztül a PIC16f628a-ba.(csatolt pdf).A PIC 12Mhz-en megy, mert még tovább fogom fejleszteni.... A baj csak annyi lenne, hogyha gyorsan forgatom az encoder tárcsát, akkor nem tudja feldogozni a beérkező jeleket, és rosszul számol (ez kb. 40Hz).Ha lassan forgatom a tárcsát, akkor pontos oda-vissza. Ha felgyorsítom a PIC-et (20MHZ) akkor jobb a helyzet, de nem szeretném felgyorsítani. Felteszem a teljes forráskódot, (ami még nincs teljesen kész de már működik szimulátorban és próbapanelen is.). (Azért van benne a 74ls74, mert így tudtam a legkönyebben leprogramozni az oda vissza számolást és a tárcsa kialakítása is egyszerübb.) A segítséget előre is köszönöm és elnézést az off-ért.
Szia!
Első ránézésre: - Nem szerencsés 100nF kondenzátort a flop-flop kimenetére tenni (C2, C3),
A 4. sor elrontja a nagy gonddal visszaállított STATUS értéket...
Szia!
Nézd meg az adatlapban, hogyan kell a megszakításban menteni az értékeket. Ha gyors működést szerenél megszakításban, akkor csak azokat a műveleteket végezd el, amik feltétlenül fontosak. Valamint ne használj szubrutinhívást, főleg, ha az rövid, mert időigényes. Meg kellene viszgálni a jelalakokat a PIC bemenetén, mert lehet, hogy nem megfelelőek. A 100n egy integráló tagot képez az IC kimenetén, ez eleve csak egy bizonyos sebességet enged meg.
Ezt is megszuakításból hívod meg. Az LCD kiírás nagyon időiényes, lemaradsz mindenről...
Igen igen , köszönöm megnéztem, így már jó lesz:
( A TAB-okat kivehettem volna ) (kivettem) A megszakítás csak az X vagy Y érték törlésére szolgál, mást nem csinál. A 100nf azért van a kimeneten, mert amikor mértem szkóppal zavaros volt a négyszögjel, miután beraktam tiszta lett, (igaz eleinte 10nf volt ott). De lehet, hogy csak a dugdosós panel miatt volt a zavar. Ha majd egyszer nyákra kerül, nem lesz benne.
Üdv
Ha egy VDDnél kisebb értékű külső Vrefet használok, akkor károsodhat-e a PIC ha egy Vrefnél nagyobb,de Vdd+0,3Vnál kisebb feszültséget kap?
Adatlap szerint nem kaphat nagyobban, mint a Vref. Hogy károsodhat-e, még nem tapasztaltam, mert nem próbáltam még ki többet adni!
Én úgy értelmezem az adatlapban leírtakat, hogy nem, mert meghibásodást csak az Absolute Maximum Ratings-ban felsoroltak be nem tartása okoz.
Az más kérdés, hogy értelme nincs, mert az ADC nem tudja megmérni.
A mentések így már jók lehetnek.
Idézet: „A megszakítás csak az X vagy Y érték törlésére szolgál, mást nem csinál.” A call x_null rutinból hívod meg az LCD rutinjaidat is: call szamlalo_x, azaz megszakításból írsz ki az LCD-re. Ez nem jó így! A kiírást fő rutinból tedd meg, hogy meg lehessen szakítani! Az LCD ráér...
Bevallom őszintén nem teljesen értem. A call x_null rutin alapban nincs megszakításban. A megszakítás csak akkor hívódik meg ha megnyomom a gombot (PORTB 6 or 7), vagy rosszul tudom? (már teljesen bizonytalan vagyok)
Ha megszakítást idézek elő, azaz megnyomom a gombot, akkor igen onnan hívódik meg az LCD rutin, de az nem baj ha ilyenkor több időt tölt itt el a program, mert mint már írtam csak törli az értékeket, és ilyenkor nem kell szálálni. (Valóságban, ha tekerem a satut, akkor számol, megállok, lenullázom (valamilyen okból), ha nulla van kiírva csak utána tekerem tovább.) Azthiszem kicsit megkeveredtem.
Én is. Miután nem teljesen értem mi hová van kötve, azt gondoltam, hogy a megszakítást az impulusok beérkezésére használod, nekem így lenne logikus. A gombok kezelése abszolut nem megszakítás igényes! A teljes programodat nem tudtam még megérteni, csak azt láttam, hogy megszakításból LCD-re írsz. Mindenesetre ez semmiképpen nem jó megoldás.
Javaslom, hogy a megszakítást inkább a tárcsa fogadására használd, mert ott nincs idő mélázni. Jobban megnézem a programodat, hogy megértsem mit hogyan csinálsz, de szinte biztos, hogy lecsúszol a jelekről, valószínű az LCD rutinokban való időzés miatt. Még annyit, hogy jobban lehetne értelmezni a forrást(neked is majd pár hónap múlva), ha nem a portok számával végeznéd az ellenőrzéseket, hanem definiálnál nekik azonosítókat. pl. #DEFINE GOMB1 PORTB,2, majd BTFSS GOMB1...
Jól sejtettem. A figyel után a prg-re ugrassz, ott két LCD kiírást is végzel, majd utána érkezik vissza a program a figyelre. A növelő-csökkentő rutinok is tele vannak LCD hívásokkal. Gyorsabb jelek esetén az LCD kiírások miatt lemaradsz a jelről...
Át kellene kötni a jeleket a gombok helyére és a figyelést a megszakításból végezni. A megszakításban csak a szükséges változókat kell beállítani, halaszthatatlan beavatkozásokat elvégezni, majd kilépni egy jelzővel, ami az LCD-re való írást engedélyezi. Előfordulhat, hogy nem lesz minden szám kiírva a jeladó minden rezdülésére, de a változásokat jól fogja követni a program, és ez utóbbi a fontos!
Az LCD időzítéseket már levettem a minimumra, ha lejebb veszem már megbolondul. Az első kiserlet egy 7 segmenses kijelzőre írt, ott nem volt ilyen bajom, (csak az nem tetszett, az LCD szebb) Azért is vágtam bele, hogy megtanuljam az LCD kezelését, és a 7 segmenses kijelzöre nem tudtam kiírni egyszerre az X Y tengelyeket. ( Ha más fordulatszámérőt csinál LCD-re ennek is mennie kéne.)
Idézet: „Az LCD időzítéseket már levettem a minimumra” Nincs olyan kis idő...
Tudom. Tehát ha jól értelmezem amit írtál, valahogy így módosulna? (elméletileg)
1: megszakításból figyelem a bemenetet (X Y) 2: megszámolom a bejövő jelet 3: az értéket beírom egy regisztebe 4: ha megáll a tárcsa interrupt vége 5: a regiszerbe írt érték kiértékelése (egyes, tizes ....) 6: LCD-re írás Ha így jó, kezdhetem előröl az egészet. Ezért szeretem ezt a hobbyt.
Valamit elnéztél. Elösször az LCD inicializálás, utána ugrik a "prg"-be (itt nullázza az értékeket), utána megy a "figyel"-be, és onnan nem jön már ki csak akkor ha forog a tárcsa, de mindig a "figyel"-be tér vissza, a "prg"-be már nem.
Én ezt látom egyik verzióban sorban:
figyel call xfel goto x_egy_ertek call LCD_sor2W call LCD_karD Ráadásul goto val és call al is hívod az x_egy_ertek -et, ami nem gond, csak vigyázni kell a stack-el. Na és az xfel alján ott van egy goto prg. Na az minek is?
Nem pontosan:
1. várod a megszakítást (Közben LCD-re írsz, gombot figyelsz!) 2. beérkezik, azonosítod melyikről érkezik, módosítod a számlálót, lekezelsz pár dolgot ami halaszthatatlan, engedélyezed az LCD kiírást a fő rutinban egy jelzővel. 3. kilépsz a megszakításból és várod a következőt. A kiírás akkor történik meg, ha van ideje. Az érték akkor fog véglegesedni, ha már nincs megszakítás, azaz megállt a kerék. Közben több érték is átugorhat, de csak a kijelzénél. Ha van olyan teendő, ami a számlálótól függ, azt is vizsgálni kell a megszakítában, és szintén jelzővel jelezni a főprogramnak, hogy tegyen valamit. Ha a teendő halaszthatatlan, akkor azt is a megszakításban kell végrehajtani. Ha csak számlálsz és kiírod, akkor ez már így is működni fog, nagyon gyorsan!
Igen igazad van, tényleg ott van a "goto prg", de szerintem csak ott maradt. Ha befejeztem volna a programot, (mert az Y résznél is csak töredékek vannak) biztos nem marad ott. Az hogy a goto és a call is hívja a szubrutint, azért van mert nem tudtam máshogy megoldani, de mindenképpen kilép a szubrutinból.
Befejezem ezt a programot, (majd lassan tekerem a satut), és utána megírom úgy ahogy írtad. Nagyon szépen köszönöm a segítséget! Ja és jó, hogy megint PIC-ről van szó.
Kicseréltem a FET-et és egy törölt PIC-et fel programoztam sikeresen. Eszembe jutott, hogy a vinyóm bogyós (ferrites) kábelét használjam. Beforrasztottam és működik is a dobókocka Köszönöm a tanácsokat mindenkinek!
Sziasztok, tudna nekem valaki olyan szoftvert mondani amiben le lehet tesztelni a hex fájl működését?
Szia!
Egy lehetséges megoldás: MPLAB IDE v.8.80 Ezen belül: Debugger menü > Select Tool > MPLAB SIM
Még egy apró megjegyzés az előzökhöz.
Kicsit számolgattam és tesztelgettem, amiből az derült ki, hogy egy kiírási ciklust, azaz a jel észlelésétől számítva a kiírásig 2,7mS alatt teszi meg a program, 12MHZ-en. Ez csak a század érték, a többi arányosan növekszik, és a maximum 14mS. Ha nem csinál mást a proci csak számol, fel viszem max.-ra a frekit (20MHz), átírom az LCD időzítéseit, és így már jó lesz. (ha jól számoltam) Ettől függetlenül kipróbálom amit írtál. (egy újabb kihívás.) Mégegyszer köszi.
Sziasztok ! Könyvtárból töltöttem ezt a dokumentumot le, ám nem tudok rájönni, mi az X1, és S6. Valaki lelinkelné őket, hogyan néznek ki?
Szerintem egyszerűbb a megszakításos. 14ms elég sok, 70Hz. Ez hamar megfogja a tárcsát, ha gyorsabban mozgatják. Ott akár 200Hz is lehet, ha jól saccolom...
Az X1 egy tápegység aljzat, az S6 pedig egy kapcsoló, záró érintkezővel (a rajzon váltóérintkező van, de itt elég bármilyen záróérintkezős).
X1: dugasztáp dugójához illeszkedő tápcsatlakozó.
S6: Kétállású (toló)kapcsoló |
Bejelentkezés
Hirdetés |