Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   155 / 1210
(#) doup válasza watt hozzászólására (») Okt 27, 2011 1 /
 
Egyéb hozzászólás?
(#) Hp41C válasza doup hozzászólására (») Okt 28, 2011 /
 
Megadtad a fordítónak, hogy 4 bites módban szeretnéd az LCD -t üzemeltetni?
(#) Hp41C válasza vicsys hozzászólására (») Okt 28, 2011 /
 
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....
(#) Poostmaster válasza doup hozzászólására (») Okt 28, 2011 /
 
É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.
(#) szitko hozzászólása Okt 28, 2011 /
 
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.
(#) Hp41C válasza szitko hozzászólására (») Okt 28, 2011 /
 
Szia!

Első ránézésre:
- Nem szerencsés 100nF kondenzátort a flop-flop kimenetére tenni (C2, C3),

  1. int_v
  2. movfs_ment,w; visszaírjuk a STATUST
  3. movwfSTATUS
  4. movfw_ment,w; visszaírjuk W-t
  5. retfie


A 4. sor elrontja a nagy gonddal visszaállított STATUS értéket...
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
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.

  1. callszamlalo_x; Az X tengely nulla értékek LCD-re írása

Ezt is megszuakításból hívod meg. Az LCD kiírás nagyon időiényes, lemaradsz mindenről...
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
Igen igen , köszönöm megnéztem, így már jó lesz:
  1. org4
  2. bcfINTCON,RBIF
  3. movwf w_ment
  4. swapf STATUS,w
  5. clrf STATUS
  6. movwf s_ment
  7. btfss PORTB,6
  8. goto ujra_2
  9. btfss PORTB,7
  10. goto ujra_3
  11. goto int_v
  12. ujra_2
  13. btfss PORTB,6
  14. goto ujra_2
  15. call x_null
  16. goto int_v
  17. ujra_3
  18. btfss PORTB,7
  19. goto ujra_3
  20. call y_null
  21. int_v
  22. swpaf s_ment,w
  23. movwf STATUS
  24. swapf w_ment,f
  25. swapf w_ment,w
  26. retfie

( 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.
(#) PetAd hozzászólása Okt 28, 2011 /
 
Ü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?
(#) watt válasza PetAd hozzászólására (») Okt 28, 2011 /
 
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!
(#) icserny válasza PetAd hozzászólására (») Okt 28, 2011 /
 
É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.
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
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...
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
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.
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
É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...
(#) watt válasza watt hozzászólására (») Okt 28, 2011 /
 
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!
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
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.)
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
Idézet:
„Az LCD időzítéseket már levettem a minimumra”

Nincs olyan kis idő...
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
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.
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
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.
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
É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?
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
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!
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
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ó.
(#) pcroland hozzászólása Okt 28, 2011 /
 
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!
(#) doup hozzászólása Okt 28, 2011 /
 
Sziasztok, tudna nekem valaki olyan szoftvert mondani amiben le lehet tesztelni a hex fájl működését?
(#) Norberto válasza doup hozzászólására (») Okt 28, 2011 /
 
Szia!

Egy lehetséges megoldás: MPLAB IDE v.8.80

Ezen belül: Debugger menü > Select Tool > MPLAB SIM
(#) szitko válasza watt hozzászólására (») Okt 28, 2011 /
 
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.
(#) janikukac hozzászólása Okt 28, 2011 /
 
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?

20pdemo.pdf
    
(#) watt válasza szitko hozzászólására (») Okt 28, 2011 /
 
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...
(#) nedudgi válasza janikukac hozzászólására (») Okt 28, 2011 /
 
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).
(#) icserny válasza janikukac hozzászólására (») Okt 28, 2011 /
 
X1: dugasztáp dugójához illeszkedő tápcsatlakozó.

S6: Kétállású (toló)kapcsoló
Következő: »»   155 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem