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   70 / 1203
(#) icserny válasza zenetom hozzászólására (») Júl 27, 2010 /
 
Idézet:
„az Init rész miért a 0x0200-as címen van?”
Nincs jelentősége. Oda teszed, ahová jól esik. Csak a Reset és interrupt vektorokkal ne fedjen át, ha használni akarod azokat!
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 27, 2010 /
 
Az előző hozzászólásban Icserny már leírta a lényeget, én is csak ugyanazt tudnám elmondani.
Idézet:
„No meg akkor a főpromram is innen kezdődik, illetve ugye ahol vége van az Init-nek.”

Így van. A Reset vektorról elugrunk az inicializációs részre, melyet a program futása során csak egyszer kell lefuttatni, majd a programkód szekvenciális végrehajtása miatt az Init rész utolsó utasítása után a main címkével ellátott sor következik, mely egy végtelen ciklust valósít meg. Ez adja a főprogramot.
(#) Auf hozzászólása Júl 31, 2010 /
 
Sziasztok!
Az lenne a kérdésem, hogy:
Vezérlő billentyűzetet akarok az lcd meghalytó pic-hez.
Én úgy gondoltam, hogy az RB portokra teszem a gombokat, mivel ennél a chip-nél mindegyik lába interruptot okoz, tehát a gomb mindig minden nyomásra elvégzi a feladatát, annélkül, hogy külön a program erőfeszítést tenne arra, hogy megnyomtam-e, vagy sem.
A fő kérdésem az lenne, hogy a belső RBPU-val bekapcsolt felhúzó ellenállások megfelelnek e a mellékelt képen jelzett piros Rx ellenállásoknak.

A másik kérdésem pedig, hogy egyel több gomb kéne, amivel a készülék csipogója ki és be kapcsolható, ennek a fontossága nem annyira elsőrendű, hogy bármely müködése folyamatban érzékelje. Arra vajon melyik portot használjam fel? vagy hogy lehetne megoldani?

Bocs, ha picit hosszan fogalmaztam.
Köszi

bemenetek.JPG
    
(#) icserny válasza Auf hozzászólására (») Júl 31, 2010 /
 
Interruptot csak olyan nyomógombról fogadj, ami eleve pergésmentes, vagy hardveresen pergésmentesített!

A belső felhúzás is megfelel, bár nem tudom, hogy miért pont az ellenállásokon akarsz spórolni... Nem volna haszontalan dolog egy-egy soros ellenállást is berakni, hogy hibás beállítás esetén (vagy programozás közben) se lehessen véletlenül sem rövidrezárni kimeneteket.
Idézet:
„Arra vajon melyik portot használjam fel?
Abszolút mindegy!
(#) Auf válasza icserny hozzászólására (») Júl 31, 2010 /
 
Csak azért akarok spórolni vele, mert kevés a hely.
Pergésmentesítéses bemenetre így jó? mondjuk a 40106-tal

bemenet.JPG
    
(#) icserny válasza Auf hozzászólására (») Júl 31, 2010 /
 
Nem tudom, hogy jól értem-e, de az első rajzodból úgy tűnik, hogy csak a jobbra fel/le és a balra fel/le gombok kezelése időkritikus. Ha ezekete az RB0..RB3 lábakra teszed, és az Interrupt on Change helyett a külső interruptot használod (INT0...INT3) lefutó élre, akkor Schmitt-triggeres lesz a bemenet, s nem kell a külső logikai kapu. Ha már a helytakarékosság szempont...

A többi gombnál a szoftveres pergésmentesítés is megteszi: pl. egy periodikus timer interrupt 20 ms-onként rájuk néz.
(#) Auf válasza icserny hozzászólására (») Júl 31, 2010 /
 
Tehát, ha én is jól értem:
A mozgató gombok, amiket használok, rövid nyomások hadával, az megy a sima bejövő interuptra. És a pályaválasztó gombokat meg az interupt on change lábakra, aztán azt meg ugyis "hosszabban" nyomom majd.
És akkor nem kell más csak a külső felhúzó ellenállás.
Ha jól értem
(#) icserny válasza Auf hozzászólására (») Júl 31, 2010 /
 
Nem így gondoltam, hanem úgy, hogy a négy mozgatógombnál maradjon a második rajzodon szereplő két ellenállás és a kondenzátor is, csak a Schmitt triggert tudjuk lespórolni azzal, hogy az INTx bemeneteket használjuk.

A többi gomb estében pedig továbbra sem javaslom az Interrupt on Change használatát, hanem a mintavételezést ajánlom helyette.
(#) Auf válasza icserny hozzászólására (») Júl 31, 2010 /
 
Akkor viszont a többi gomb akár más lábakon is lehet, gondolom. Csak sima bemenetre teszem és kész. Viszont akkor a program futása közben állandóan figyelni kell majd a több bemenet állapotát...
(#) pörölycápa hozzászólása Júl 31, 2010 /
 
Két kérdésem lenne a hozzáértőkhöz, PIC12F508-al kapcsolatban:
1. Mennyire stabil (egyáltalán elfogadható-e) a Zener-diódás tápellátás, ha pl. 12V-os elemről akarom hajtani az áramkört, a minimális fogyasztás érdekében (és helyhiány miatt)? Egy távirányítót akarok építeni, a gombok kapcsolják a tápot is, és ahogy nézegettem, az 5V-os stabilizátorok saját árama sokkal nagyobb, mint amennyit a PIC fel fog venni (doboz, elem adott).
2. Ha a gomb kapcsolja a tápot, mint azt írtam, kell-e a programban pergésmentesítéssel foglalkozni?
Egy HCS300-al szerelt távirányító adta az ötletet minderre, csak sajnos nincs módom visszarajzolni.
(#) icserny válasza Auf hozzászólására (») Aug 1, 2010 /
 
Lentebb már írtam,hogy nem "állandóan", hanem időközönként. S nem feltétlenül a főprogramban, hanem pl. egy periodikus timer megszakításban.

Az pedig számodra már mindegy, hogy a gombok egyenként okoznak-e megszakítást, vagy egy megszakítás figyeli a gombok állapotát, hiszen ugyanabban a megszakítás-kiszolgáló eljárásban kell lekezelni...

Végeredményben valamilyen állapotváltozót kell beállítanod, az állapotgépként futó főprogram pedig ennek megfelelően ágazik el - gondolom én .....
(#) icserny válasza pörölycápa hozzászólására (») Aug 1, 2010 /
 
A Zener-diódás stabilizátor áramfelvétele nagyobb kell, hogy legyen, mint a PIC bármikori maximális áramfelvétele. Ennél tehát jobb egy kis áramfelvételű stabilizátor (pl. MCP1703).

A 12 V-os elem véletlenül nem 9 V-os?

Idézet:
„Ha a gomb kapcsolja a tápot, mint azt írtam, kell-e a programban pergésmentesítéssel foglalkozni?”
Ez elég félreérthetően hangzik! Ténylegesen kapcsolják a tápot, vagy csak a mikrovezérlőt ébresztik fel alvásból?
(#) Auf hozzászólása Aug 1, 2010 /
 
Sziasztok!
Szerettem volna egy kis programot, ami a 4mhz-es órajel mellett a porta1 porta2 -t 500ms-os váltással 0 és 1 váltást hajt végre. De amikor le akarom fordítani hex-be kiirja hogy error parameter "and"
Mit hibáztam el?
Már kész vagyok idegileg és nem tudok koncentrálni.
A legjobb az lett volna, hogy ha az egyik lába 100kHz-es jelet ad ki a másik meg 10Hz-eset.

tes.asm
    
(#) Hp41C válasza Auf hozzászólására (») Aug 1, 2010 /
 
Szia!

Sajnos a konfigurációs bitek elnevezése nem egységes:
A 16F682A esetén az EEProm memória kódvédelmét _DATA_CP_OFF / _DATA_CP_ON szimbólumokkal lehet ki- / bekapcsolni...
(#) Auf válasza Hp41C hozzászólására (») Aug 1, 2010 /
 
Az mpasm-ommal volt valami. Leszedtem és ujratelepítettem és már megy is.
(#) BEMcorp hozzászólása Aug 3, 2010 /
 
Tényleg kezdő PIC-es kérdés: egy adott porton belül, lehet-e kimenet és bemenet is?
(pl.: Rb0-Rb3 = kimenetek ; Rb4-Rb7 = bemenetek)
(#) cNobody válasza BEMcorp hozzászólására (») Aug 3, 2010 /
 
Minden további nélkül lehet. Csak a TRIS regisztert úgy kell beállítani.
0 - Output, 1 - Input
(#) zenetom válasza BEMcorp hozzászólására (») Aug 3, 2010 /
 
Tehát a Te esetedben:

  1. MOVLW b'11110000'  ;RB0..RB3 bemenet (1), RB4..RB7 kimenet (0)
  2. MOVWF TRISB            ; a TRISB a PortB "irányválasztó" regisztere


Ezt az elején kell beírni, de bármikor megváltoztathatod hogy be vagy kimenet legyen az adott pin.
(#) BEMcorp válasza zenetom hozzászólására (») Aug 3, 2010 /
 
Nagyon szépen köszönöm!
Igazából -nagy valószínűséggel- nem én fogom írni a programot (mert ahhoz nagyon sokat felejtettem már), de a kapcsolás szempontjából volt fontos.

Még egyszer köszi!
(#) zenetom válasza BEMcorp hozzászólására (») Aug 3, 2010 /
 
Szivesen.
(#) pörölycápa válasza icserny hozzászólására (») Aug 3, 2010 /
 
12V-os (miniatűr) az elem, Sony LR-23A.
Ez az MCP1703 tetszene, csak "készleten" nagy hirtelen nincs, szét kell néznem a bontható panelokon, hátha...
A Zener-es megoldással kapcsolatban arra gondoltam, hogy egy tantálkondit is kapcsolnék hozzá, amiben maradhatna annyi energia, hogy a küldés alatt (egyetlen csomag menne ki, nem állandó sorozat) rásegítene a PIC tápellátására.
A HCS-nél ténylegesen a tápot kapcsolták a gombok, plusz a bemeneteket is, csak ezt még nem tudom, hogyan oldhatnám meg a mostani kapcsolásban.
(#) Amjad hozzászólása Aug 12, 2010 /
 
Helo

Van egy működő, ezt-azt LCD-n megjelenítő programom. A háttérvilágítást szerettem volna pwm-el megvalósítani, de ha az alábbi kódot beszúrom a program elejére, akkor a háttérvilágítás gyönyörűen működik, viszont minden más nem. Semmi nem jelenik meg a kijelzőn. (18F4321).

1.c
    
(#) icserny válasza Amjad hozzászólására (») Aug 12, 2010 /
 
Az első sorban engedélyezed, hogy Timer2 periodikusan megszakítsa a programot. Mivel kezeled le?
(#) Amjad válasza icserny hozzászólására (») Aug 12, 2010 /
 
Az benne maradt az előző próbálkozásaimból. De most kivettem az INT_ONt, de ugyan az a jelenség.

riaszto.c
    
(#) Atielektro hozzászólása Aug 12, 2010 /
 
Sziasztok!

Szeretném a segítségeteket kérni.Egy 16f628a-val szeretnék a PC-vel a kommunikálni RS232-n. A hardveres része jó (MAX232), mert úgy sikerült összehoznom, hogy fél másodpercenként elküld egy karaktert a gépnek. Amivel most gondban vagyok az abból áll, hogy a gépről elküldök egy karaktert a pic-nek, ez megszakítással van (lenne) megoldva, és egyel megnöveli a bejövő adatot és visszaküldi. A probléma az az,hogy valamiért nem lép be a megszakításba, pedig szerintem mindent beállítottam...A programot szerintem eléggé bőven kommenteztem, így remélem érthető, hogy mit akarok csinálni. Az RCSTA és TXSTA regiszterek beállításaiban nem vagyok 100%-ig biztos, szóval lehet, hogy ott rejlik a hiba...
Még egy kérdésem lenne: Az adatlapban én azt olvastam, hogy a TX és RX lábat is bemenetnek (nagy impedanciásnak) kell állítani és majd a modul váltogatja az állapotát a lábaknak. Ezt jól értelmeztem?
Segítségeteket előre is köszönöm!
(#) El_Pinyo válasza Atielektro hozzászólására (») Aug 12, 2010 /
 
Szia!
Nos, ez több sebből vérzik. Kommentben azt írod 4 MHz az órajel, a konfigurációs szóban meg HS van megadva. Az SPBRG regiszterbe töltött értéked (dec. 25) arra enged következtetni, hogy 16 MHz az órajel. Ha így van, akkor a BRGH bitnek nem 1- nek, hanem 0- nak kell lennie. Az RCSTA regiszterbe meg jobb lenne 8 bitnyi valós adatot tölteni, nem csak hetet. Hozzátenném, így a soros kommunikáció le van tiltva, meg sem lepődök, hogy nem működik a kód.
(#) icserny válasza Amjad hozzászólására (») Aug 12, 2010 /
 
Jó bonyolult program, kicsit sok a hibakereséshez!

- OpenTimer2 hívása előtt én beleírnék valamit PR2-be.
- A SetOutputPWM1 függvényt nem kellene meghívni?
(#) Atielektro válasza El_Pinyo hozzászólására (») Aug 12, 2010 /
 
Köszi az észrevételeket. Így én sem csodálom, hogy nem akar menni Az a 7 bit 8 bit akart lenni valójában, csak beíráskor 1 bittel elcsúsztam és később meg nem tűnt fel. Majd átnézem az RCSTA beállítását.
Az oszcillátor kérdése az viszont érdekes dolog, mivel én tényleg 4 MHz-s kristályt tettem be és 9600-as baud-dal remekül működött a karakter küldése. Most hamar utána néztem (eddig is megtehettem volna már, mert az oszcillátor konfigjával mindig gondban vagyok) és a HS konfig szó 8MHz és afölötti órajelre vonatkozik, de nekem tényleg működött rendesen a kommunikáció így.
Még egyszer köszi a segítséget! Remélem ezek után már menni fog.
(#) Hp41C válasza Atielektro hozzászólására (») Aug 12, 2010 /
 
Szia!

Van még benne a Többiek által említetteken kívül is seb:
- RCIF, TXIC programból így nem törölhető.
- Ha már egynél több megszakítás engedélyezett, akkor a megszakítási rutinban meg kell nézni, hogy melyik egység kéri. Pl a TXIE engedélyezett és emiatt került a megszakítási rutinba, de a kódod feltétel nélkül olvassa az RCREG-et....
- Az RCREG kiolvasása előtt pontosan egyszer ki kell olvasni a RCSTA értékét és meg kell vizsgálni, hogy történt-e hiba, csak akkor kell a vevőt kikapcsolni, ha ráfutás vagy keretezési hiba történt.
- Ahhoz, hogy egy karaktert visszaküldjön, nem feltétlenül kell a megszakításos adás.
- Nem a TXSTA,TRMIT bitjét kell vizsgálni, hanem a PIR1,TXIF -et, a karakter beírásakor automatikusan törlődik.
- A vevőt sem kell mindig kikapcsolgatni, elég ha a megszakítás kérését tiltod, ha már nincs kimenő adat.
(#) El_Pinyo válasza Atielektro hozzászólására (») Aug 12, 2010 /
 
Igazad van, akkor a 4 MHz- re vonatkozó baud rate generátor beállítása megfelelő.
Ezen kívül van még néhány felesleges sor a kódban, de ha minden igaz a működést nem veszélyeztetik.

Szerk.: Látom közben Hp41C felhívta a figyelmet a többi problémára is.

Hp41C : Ha nincs engedélyezve az adás oldali megszakítás, akkor azt nem kell vizsgálni a megszakítás rutinban sem (ebben az esetben nem volt engedélyezve).
Következő: »»   70 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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