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   110 / 1210
(#) Hp41C válasza hackerfish hozzászólására (») Máj 29, 2011 /
 
Szia!

Ha mindenáron ezeken a lábakon szeretnéd a funkciókat, akkor 16F88 belső A/D -val, az összehasonlítás programból...
Megszakítási rutinban a regiszterek mentése / visszaállítása...
(#) hackerfish válasza Hp41C hozzászólására (») Máj 29, 2011 /
 
Már átkötöttem, de azért köszi!
Nagyon klasz! Működik.
Ledeket kötöttem RB7-re és RB6-ra. (Később motorvezérlés lesz.)
Már csak egy apróság:
A VASSZA-ban egyik ledet felkapcsolom, a megszakításban, ha RA2 nagyobb, a másikat kapcsolom fel.
Ezzel az a gond, hogy a megszakítás nem fut folyamatosan, szóval a vissza-ban lévő led többet világít (ha jól gondolom). A megszakításban meg nincs logikai vizsgálat, ahol meg lehetne adni a két lehetőséget. Gondolom ez alapbeállítás, hogy ha RA2 nagyobb, az arra vonatkozó műveletet kell beleírni.
(#) Hp41C válasza hackerfish hozzászólására (») Máj 29, 2011 /
 
Szia!

Amit írtál, nem értem igazán... Ami biztosan hibás: a WREG (és a STATUS) regiszter értékét a megszakítási rutinba belépéskor menteni, kilépés előtt visszaállítani kell.
(#) gabor128 hozzászólása Máj 29, 2011 /
 
Sziasztok!

LCD-vel kapcsolatban kérném a segítségetek!
Nemrég óta próbálnám az LCD-t programozni, gyakorolni rajta, de egyelőre nem tudok.
Vettem pár Displaytech 161A - 1x16-os sima LCD.
Egy ideje próbálkozom vele, de nem tudom életre kelteni.

Van egy pic18F452. A C portra kötözgettem be az adatvezetékeket (C0->DB0,C1->DB1,stb.), az A portra a vezérlő vezetékeket. Beállítottam a kontrasztot is egy trimmerpotival. Nincs szakadás a vezetékekben, az 5V nagy része eljut a pinekhez.
Próbáltam pöpecül megcsinálni a kijelző inicializálást és utána egy A betűt kiíratni, de nem jön össze. Annyit látok a kijelzőn, hogy a 16 karakterből 8-on teli fekete négyzetek vannak. Semmit nem reagál bármit csinálok.
Már másik LCD panellel is kipróbáltam, de ugyanaz. a helyzet.
Nem tudom, hogy a bekötés, vagy progi, vagy egyéb más hiba az oka. Tudna valaki segíteni?
Nagyon megköszönném, mert már lövésem sincs hogy mi lehet a probléma és elég bosszantó.
(#) watt válasza gabor128 hozzászólására (») Máj 29, 2011 /
 
A várakozás rutinban mit keres a RETFIE ?
(#) vtechonda hozzászólása Máj 30, 2011 3 /
 
Sziasztok!
Lenne egy kérdésem, illetve segítséget szeretnék kérni Tőletek!
Van egy Playstation 1 típusú készülék SCPH-9002-es modell. Na most szét szedtem mert nem olvasta az írott játékokat.Akkor szembesültem a dologgal hogy a chippeléskor odaforrasztott vezetékek közül az egyiket elengedte a forrasztás, és fogalmam sincs hol lehetett. Kérlek Titeket segítsen valaki!
chip
alaplap
A chipen PIC16LC54A feliratot találni, a gép pedig a nagy szürke PS1, SCPH 9002-es alaplapja pedig PU-23-as.
Remélem tudtok segíteni!
Köszönettel
Balázs
(#) hackerfish válasza watt hozzászólására (») Máj 30, 2011 /
 
Az már az eredeti kódban is bennevolt. A végén ezzel kilép a rutinból.
Javítottam a mentéssel.
Így már jó lesz?
Csak mert eddig néha hülyeséget mutatott. De az lehet a két érzékelő eltérése miatt is.
(#) hackerfish válasza Hp41C hozzászólására (») Máj 30, 2011 /
 
Megpróbálom érthetőbben:
A megszakítás megvizsgálja, hogy RA2 nagyobb -e mint RA1, ha igen, felkapcsol egy ledet. A "vissza", ami folyamatosan fut a megszakításig, a másik ledet kapcsolja be. Gondolom a megszakítás olyan sűrűn jön, hogy ezt nem lehet észrevenni, látszólag jó, de logikailag nem stimmel (szerintem). Nem azt kéne, hogy a megszakítás megvizsgálja az értékeket, és aszerint kapcsolja be az egyik ill. a másik ledet? (És a vissza csak egy végtelen ciklus lenne.)
De a megszakításba amit írok, az csak arra vonatkozik, hogy mi történjen ha RA2 nagyobb mint RA1. Nem tudok összehasonlítást, majd ez alapján kétféle lehetőséget csinálni (if, else), mert a megszakítás csak az egyik esetre vonatkozik. Így érthetőbb? Vagy én értek félre valamit?
(#) watt válasza hackerfish hozzászólására (») Máj 30, 2011 /
 
Én gabor128-nak válaszoltam...
(#) watt válasza hackerfish hozzászólására (») Máj 30, 2011 /
 
A komparátor egy analog eszköz, magától működik, nem úgy kell rá tekinteni, hogy meg kell viszgálni valamit, vagy sem, mert az esemény megtörténik, ha a + bemenet magasabb, mint a -. Ezt szemlélteti a 9-2: ábra, nézted?
A comparátor kimenetének változása képes megszakítást okozni, ha engedélyezed, azaz neked csak akkor kell foglalkozni az eseménnyel, ha bekövetkezett. A megszakításban lekezeled, törlöd a jelzőt kész.
Persze lehet pollingolni is(úgy is működik a dolog), csak semmi értelme.

Hogy ez a megoldás megfelelő-e a folyamatod irányítására kiderül, de ettől többet nem fog tudni.
(#) hackerfish válasza watt hozzászólására (») Máj 30, 2011 /
 
Ja bocs, elnéztem.
Közeb délelőtt még gondolkodtam a dolgon, és leesett, hogy biztos változás hatására hívódik meg, és nem szabályos időközönként, mint pl. a timer. Szóval ez így rendben van. De azzal mi van, hogy néha mind a két led világít? Az értékek lehetnek egyenlőek, vagy csak annyira gyors a váltás, hogy úgy tűnik, egyszerre világítanak? A komparátorral van lehetőség olyanra, mint a cikkben, hogy ha a két érték különbsége nem halad meg egy határértéket, a robot előre menjen?

A motorvezérléshez valahogy mégis kell majd módosítani, hogy a vizsgálat ne folyamatos legyen, vagyis csak akkor generáljon kimeneti jelet, ha én is akarom. Különben összevissza menne, már küldené is a köv. jelet, mielőtt a mozgás befejeződne. Ugye?
(#) watt válasza hackerfish hozzászólására (») Máj 30, 2011 /
 
Igen, pont erről beszéltem, mikor azt mondtam, hogy kérdés, hogy megfelel e a feladatra a komparátor.
A/D esetén az átmenet folyamatos, ki lehet értékelni a két érzékelő jeleit és folyamatosan lehet vezérelni, mondjuk egy motort, vagy amit a mozgatáshoz kell használni.

De had jegyezzem meg ez nem PIC kérdés, hanem robot építése topicba való kérdée, szerintem keress rá, van ilyen téma és ott lehet beszélni mindenről, ami ezzel kapcsolatos.
(#) hackerfish válasza watt hozzászólására (») Máj 30, 2011 /
 
Tudom, hogy robotépítés, de most főleg a szoftver részével foglalkozom, azért gondoltam, hogy itt is jó lesz, de átmegyek egy másik topicba.
(#) szitko hozzászólása Máj 30, 2011 /
 
Sziasztok.
A kérdésem nem kizárolag PIC jellegű, de kapcsolatos. Építettem egy egyszerű LCD-s PIC16f628-al vezérelt számlálót. Egy optokapuban forog egy lyukas tárcsa és a lyukyakat számolja a PIC és megjeleníti az LCD-n (1,2,3....). Idáig minden jó, működik is. A problémám az, hogy nem tudom, hogy oldjam meg, hogy ha visszafelé tekerem a tárcsát, visszafelé számoljon a számláló.
(#) brato válasza szitko hozzászólására (») Máj 30, 2011 /
 
Üdv!

Kettő optokapu kell hozzá. Figyelni kell melyik előtt halad el a lyuk előbb, ez megadja az irányt.
(#) szitko válasza brato hozzászólására (») Máj 30, 2011 /
 
Ez jó ötlet, hogy erre miért nem gondoltam. A régi golyós egerek elméletét néztem, de ott 99% -ban cél IC van.
(#) gabor128 válasza watt hozzászólására (») Máj 30, 2011 /
 
Szia!

Valószínűleg benne maradt az az utasítás, de kivettem. Ennek ellenére ugyanaz a helyzet. Amúgy az LCD inicializálása jó? Bekötése jó a leírtak alapján?
Már extra nagy időzítések vannak benne (20Mhz-es kristály van rajta). Kétlem hogy ez lett volna csak a baja. Nem volt valakinek hasonló esete?
(#) Hp41C válasza gabor128 hozzászólására (») Máj 30, 2011 /
 
Szia!

Előbb állítsd be a PORTC bitjeit, azután varj egy kicsit, míg az LCD adatvezetékein beáll az adat, csak aztán add ki az E jelen a magasat. A magas szint alatt az adatvonalak nem változhatnak. A minimális magas E szint kivárása után vidd az E jelet alacsonyra. Ezután jöhet a parancs végrehajtására való várakozás..
(#) gabor128 válasza Hp41C hozzászólására (») Máj 30, 2011 /
 
Heló!

Kösz a tanácsot!

Megpróbáltam az alábbi elrendezésben:
bcf RS ;funkcio set
bcf RW
movlw b'00110000'

movwf PORTC
nop
bsf EN
nop
bcf EN
nop

Sajnos nem jött össze. Az időzítést illetően az adatlap azt írja, hogy 500ns a legnagyobb, a ciklusidő, így az 1db nop utasításnak elég kellene lennie az egyes parancsok után. Egyébként a benne szereplő "data write" rész alapján próbáltam anno. Legalábbis ott azt írja, hogy az EN 1-be állítása után kell beállítani az adatbiteket és erre kell várni min 60 ns-t.
Mindenesetre kösz a segítséget! Még próbálkozok.
(#) kissi válasza gabor128 hozzászólására (») Máj 31, 2011 /
 
Szia!

Én nem látom, hogy "birizgálnád" az ADCON1 regisztert, miközben a vezérlő lábak a PORTA-n vannak ( a többi részt nem néztem meg, mert ez kizáró ok! ) ! Nézd meg a doksit, mert alapból analógként indul a láb!

Steve
(#) robotmind hozzászólása Jún 1, 2011 /
 
Sziasztok!

a segítségeteket kérném egy egyszerűnek tűnő, ám számomra elakadósnak bizonyuló kérdésben.

PIC16F688-ra írok progit, a rendszer elég komplex, de leegyszerűsítve két feladat ütközése okozza a problémámat:
- PIC főfeladat: az idő nagyrészében sleep, 2 percenként felébred és akció1 (pl. LEDet villant)
- gombnyomásra interrupt, akció2 (pl. másik LEDet villant)

A 2perces időzítést watchdoggal oldom meg (külső oszcillátort nem lehet csatlakoztatni a modulhoz, ezért a timer1 nem futtatható a sleep alatt, csak a watchdog).
A teljes rendszerre káros lenne egy random futás közbeni system reset, így a watchdogot csakis a sleepből felébresztésre használom (sleep előtt set, sleep után clear)

A probléma: ha sleep alatt jön a gombnyomás, utána törlődik a watchdog is (sleep után clear), így elromlik az időmérés - hogyan mérjek akkor időt?

Van valami mód rá, hogy clear előtt kiolvassam a watchdog értékét, és mikor újra sleep-be kerül a progi, attól az értéktől folytassa?

gondolkoztam RTOS-es megoldáson is. A rendszer eléggé energiakritikus, nem tudom hogy az RTOS-es "idle" szekciók mennyire lennének energiakímélőek egy "asm sleep" ciklushoz képest.

mi a véleményetek?

előre is köszi a helpet
(#) watt válasza robotmind hozzászólására (») Jún 1, 2011 /
 
A watchdog ébresztési időtartama ismert, mit kéne akkor ezen kívül mérni? Léptess egy számlálót minden ébredésnél, és annak értéke arányos lessz az idővel, csak a watchdog időegységével kell osztanod. Megjegyzem ez nem lesz túl pontos, mert a watchdognak RC oszcija van, tehát órának nem jó, viszont egyszerűbb időzítésekre igen.
(#) trudnai válasza robotmind hozzászólására (») Jún 1, 2011 /
 
A sleep utasitas torli a watchdog timer erteket, ezzel nem tudsz mit csinalni. Kulso RC taggal csinalhatsz magadnak sajat ebresztest, pl ST bemenettel, vagy analog compare bemenettel. Nehany PIC-nek van kifejezetten ilyen funkcioja, direkt erre talaltak ki, de en meg nem hasznaltam igy nem tudok arrol tapasztalatot mondani.
(#) szitko hozzászólása Jún 7, 2011 /
 
Sziasztok.
Elakadtam a számlálóm programozásában amivel kapcsolatban, kértem már egy kis segítséget a (#999243) hozzászólásban. Megfogadva "brato" segitségét, két optokaput raktam be. Programból figyelem a két optokaput, és amelyik elött elöször elmegy a lyuk arra számol, na itt a bibi.
  1. figyel     ;Bemenetek figyelése
  2.  btfsc    PORTA,0     ;Ha alacsony a bemenet
  3.  call      xfel             ;Számláló fel, szubrutin
  4.  btfsc   PORTA,1     ;Ha alacsony a bemenet
  5.  call     xle              ;Számláló le, szubrutin

Ha az xfel elött elhalad a lyuk kiír az lcd-re 1-et, de közben elhalad az xle elött is és már vissza is számol.
Nem értem,hogy oldjam meg, hogy ne figyelje az xle(2.optokaput), addig míg felfele számol. Remélem érthető voltam.
(#) vicsys válasza szitko hozzászólására (») Jún 7, 2011 /
 
Meglátásom szerint kéne egy segéd változó, amit bebillentesz ha volt változás. Ha ez a "flag" be van billenve, akkor a csökkentést figyelmen kívül hagyja. Ez persze vica-versa igaz a másik irányra is.
(#) szitko válasza vicsys hozzászólására (») Jún 7, 2011 /
 
Berakom az eddig megírt részletet.

szamlalo.asm
    
(#) janikukac hozzászólása Jún 7, 2011 /
 
Sziasztok.

Van egy PICkit2 Debug Express-em. Ennek van egy demo boardja. A Microchip oldaláról meg van a PK2 lessons, 44 pin demo boardom. Itt van pl. a Hello World, aminek a feladata, hogy egy ledet a boardom kivilágítson. Én rá is égettem, de semmi se világít. Mit csináljak, hogy világítson? A gombot is nyomtam a boardon.
(#) watt válasza szitko hozzászólására (») Jún 7, 2011 /
 
Egy ilyen optos iránydetektornál fontos a kialakítás! Olyan nem történhet, hogy mindkettő le van takarva, tehát a takaró lemez csak egy opto méretű legyen, valamint a hézag a takarólemezek között két opto méretűnek kell lennie, vagy nagyobb, tehát egy letakaró elvonulást követően mindkét optónak fényt kell kapnia. Annak is teljesülnie kell, hogy a takaró lemez átvonulásakor a két opto között, csak ez egyik opto kaphat fényt, nem lehet az átvonuláskor fals jel, élesnek kell lennie a váltásnak.

Ha ez teljesül, akkor a programban figyelni kell, hogy melyik opto kap először jelet, majd a második jelet várjuk és ha megérkezik, tudjuk az irányt és beszámoljuk az impulzust.
Ha nem érkezik meg a második impulzus a várt következő optótol, akkor az azt jelenti, hogy a takarólemez megállt.
Ha nem érkezik meg a második impulzus, valamint az első impulzus is megszűnik, akkor az azt jelenti, hogy a takarólemez ellenkező irányba mozdult.

Ennyi...
(#) El_Pinyo válasza janikukac hozzászólására (») Jún 7, 2011 /
 
Szervusz!
Érdemes tanulmányozni a demo board használati útmutatóját: Bővebben: Link
Gondolom a PICKit2 adja a tápot a panelnak.
JP1 jelű jumper be van helyezve?
(#) janikukac válasza El_Pinyo hozzászólására (») Jún 7, 2011 /
 
Igen,rá van húzva a tüskére a dugó..
Következő: »»   110 / 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