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   704 / 1210
(#) ativagyok válasza sonajkniz hozzászólására (») Szept 23, 2015 /
 
Sajnos a MikroC beépített függvényeinek felépítését nem lehet látni, de szerintem ugyanilyen elven működik.
(#) sonajkniz válasza ativagyok hozzászólására (») Szept 23, 2015 /
 
Idézet:
„a MikroC beépített függvényeinek felépítését nem lehet látni,”

Ez nem teljesen igaz. MPLAB X-ben kérsz rá egy fordítást, majd megnyitod a PIC programmemóriája ablakot, és ott lessz az egész asm. kódban.
A hozzászólás módosítva: Szept 23, 2015
(#) ativagyok válasza sonajkniz hozzászólására (») Szept 23, 2015 /
 
Igen, fordítás után valóban látszik MikroC-ben is, MPLAB sem kell hozzá.
Viszont látszólag nálam más probléma van. Egy kicsit már előrébb vagyok, 0..3-ig már működnek a portok, viszont RA4 nem. RC4 állapota 15ms-onként változik.
Alapbeállításként RA4-en van kivezetve a belső órajel, azt hiszem ezzel lehet a gond. A konfigurációs biteket már beállítottam úgy, hogy RA4 láb I/O funkciójú legyen, de a hiba változatlan.
(#) ativagyok válasza sonajkniz hozzászólására (») Szept 23, 2015 /
 
Most úgy tűnik, hogy működik.
Annyit változtattam, hogy bitenként állítottam be a PORTA adatáramlási irányát ilyen módon:
TRISA0_bit = 1;
Nem értem mi lehetett a gond.
Most jöhet az EEPROM rész:
Ha sem LVD, sem ADC nincs a PIC-ben, akkor lehetséges valahogy kikapcsoláskor menteni?
A hozzászólás módosítva: Szept 23, 2015
(#) Pali79 válasza ativagyok hozzászólására (») Szept 23, 2015 / 1
 
Ha semmi nem előzi meg a kikapcsolást akkor vannak tápfigyelő ic-k amik logikai 1-be vagy 0-ba állnak a gyárilag beállított feszültségértéknél. Választasz olyat ami a tuti tápfeszültséged alatt van valamivel és tápágba teszel egy nagyobb kondit, hogy ne egyből foggyon el az energia. Ezt az ic-t kákötöd valamelyik portra bemenetként és ezt figyeled minden ciklusba, ha vált, mentesz.
(#) sonajkniz válasza ativagyok hozzászólására (») Szept 23, 2015 / 1
 
Igen. A tápfeszt diódával bontsd kétfelé. A PIC tápjára tegyél egy 1000q-s kondit, Ha tud a PIC IOC-t, az a legjobb, mert akkor megszakításból is tudod kezelni, ha nem, akkor pedig sűrűn be kell olvasni azt a lábat, amire a másik diódát kötötted. Természetesen azt a lábat testre kell húzni egy 2,2K-s ellenállással. Amint érzékel, a c port értékét mentsd egy változóba, és minden kimenetet kapcsolj le. Nehogy idő előtt kisüljön a 100q. Ezután indulhat a mentési rutin.
A hozzászólás módosítva: Szept 23, 2015
(#) Pali79 válasza sonajkniz hozzászólására (») Szept 23, 2015 /
 
Idézet:
„1000q-s kondit”
A q alatt milyen mértékegységet értesz?
(#) sonajkniz válasza Pali79 hozzászólására (») Szept 23, 2015 /
 
qF azaz microFarad
(#) Hp41C válasza ativagyok hozzászólására (») Szept 23, 2015 / 1
 
A TRISA = 0x0F csak a RA0..RA3 lábakat állítja bemenetnek, a TRISA = 0x3F pedig mind a 6 lábat.
(#) Pali79 válasza sonajkniz hozzászólására (») Szept 23, 2015 /
 
Értem. Azt µF-el vagy csak u-val szoktuk jelölni, ezért nem értettem.

Most látom, hogy az oldal át is alakítja a görög "mű"-re ha az F-el egybeírom. Na megint tanultam valamit.
A hozzászólás módosítva: Szept 23, 2015
(#) sonajkniz válasza Pali79 hozzászólására (») Szept 23, 2015 /
 
Stimmel, Csak valamiért nálam ez a "ku" qQ. Fogalmam sincs, miért így írja.
(#) ativagyok hozzászólása Szept 23, 2015 /
 
Köszönöm mindenkinek a segítséget.
Sajnos továbbra sem a kívánt módon működik a dolog. Nagyon érdekes, mert a programom csak annyiban tér el a MikroC példaprogramjától, hogy több bemenetet is "pásztázok", plusz a bemenetek logikai 1-re vannak húzva, és a gombok húznak földre. Ennek megfelelően átírtam a Button(); függvény harmadik paraméterét (logikai aktív szint).
A gomb nyomva tartása esetén is prellezik a kimenet, holott az még csak az oldstate változónak adna 1-es értéket.
Csatoltam egy képet a bekötésről.

Szerk.: Watchdog timer ki van kapcsolva.

Hp41C: Valóban. RA5-öt nem használom, de RA4 emiatt nem működött megfelelően.
A hozzászólás módosítva: Szept 23, 2015

button.jpg
    
(#) ativagyok hozzászólása Szept 23, 2015 /
 
Működik
Minden gombnak külön kell egy oldstate változó, mert ha az egyik gomb megnyomásakor 1-re íródik, akkor onnastól az összes gombot aktívnak érzékeli.
Most jöhet az EEPROM-ba mentél optimalizálása.
Köszönöm mindenkinek a segítséget.
Üdv,
Ati
(#) Bice hozzászólása Szept 24, 2015 /
 
Sziasztok!

Adott egy alábbi kis PIC development board:
http://www.piccircuit.com/shop/pic-dev-board/119-icp12-usbstick-pic...d.html

Egy hete szenvedek, hogy egy saját programot rátegyek a bootloaderen keresztül. Rengeteg helyen olvastam már utána, de bármit követtem el, sehogy sem sikerült összehoznom, hogy a legegyszerűbb LED villogtatás is sikerüljön.

A nyák egy 18f2550-t foglal magában és ha minden igaz, akkor a Microchip bootloadere (Microchip USB HID Bootloader) van rajta. Írtam a gyártónak is, ő csak annyit mondott, hogy át kell címezni a program forráskódját így:
START=0x102A END=0x7FFF
Majd mellékelte a következő fórumot is.
http://www.mikroe.com/forum/viewtopic.php?t=7370

Próbáltam, az MPlab-ben az XC8-as compilerrel vacakolni, de nem ment. Próbáltam, módosítottam a linker fájlt is, de így sem működött. MikroC-vel is próbálkoztam, az sem ment.

A bootloadert nem gyalultam le, mert egyrészt "PROTECTED" volt a linkerben a memóriaterülete, másrészt bármikor feltöltve a gyárilag kapott .hex-et, működött minden funkciója, tudtam kommunikálni a panellel oda-vissza.

Esetleg van köztetek olyan, aki e család valamelyik csipjével dolgozik és belefutott ebbe a problémába, és meg is tudta oldani? Már egy hete szívok vele napi több órát, hogy megoldást keresgessek és próbálgassam a módszereket, de nem megy.

Köszönöm előre is a segítségeteket.
(#) matheattila válasza ativagyok hozzászólására (») Szept 25, 2015 /
 
Nem kell feltétlenül midegyiknek külön egy változó, hisz amúgy is csak 1 vagy 0 lesz benne... az oldstate változó mindegyik bitjét felhasználhatod egy külön gombhoz és csak maszkolnod kell, hogy a megfelelő helyre kerüljenek. Ezzel csak egyetlen bájtot kell elmenteni az EEPROM-ba
(#) ativagyok válasza matheattila hozzászólására (») Szept 25, 2015 /
 
Valóban, ez tényleg szebb megoldás. Az EEPROM-ba viszont így is csak egy bájtot kell menteni, a PORTC értékét.
(#) sonajkniz válasza matheattila hozzászólására (») Szept 25, 2015 /
 
Na ez a baj a C nyelvvel.
Egy ilyen egyszerű feladaton is ennyit kell gyötrődni.
Ez assemblyben így nézne ki:
  1. CALL    VISSZATOLTES    ;A korábbi metés kiolvasása? PORTC-be töltée
  2.  
  3. MAIN
  4.     MOVLW   D'31'
  5.     MOVWF   0x0A
  6.     MOVF    PORTA,W
  7.     SUBWF   0x0A
  8.     BTFSC   STATUS,Z         ;Ha az eredmény 0, átugrik tápfigyelésre
  9.     GOTO    TAPFIGYELES
  10.     BTFSS   PORTA,0
  11.     BTG     PORTC,0
  12.     BTFSS   PORTA,1
  13.     BTG     PORTC,1
  14.     BTFSS   PORTA,2
  15.     BTG     PORTC,2
  16.     BTFSS   PORTA,3
  17.     BTG     PORTC,3
  18.     BTFSS   PORTA,4
  19.     BTG     PORTC,4
  20. PERGESMENTESITES
  21.     MOVLW   D'31'
  22.     MOVWF   0x0A
  23.     MOVF    PORTA,W
  24.     SUBWF   0x0A
  25.     BTFSS   STATUS,Z       ; Ha nem 0, töröljük a pergésmentesítő számlálóját
  26.     CLRF    0x01
  27.     BTFSS   PORTC,5        ;Pergésmentesítés közben is figyeljük a tápot
  28.     GOTO    MENTES
  29.     INCFSZ  0x01
  30.     GOTO    PERGESMENTESITES
  31.     GOTO    MAIN
  32. TAPFIGYELES
  33.     BTFSC   PORTC,5        ;C 5_öt használjuk tápfigyelésnek
  34.     GOTO MAIN
  35. MENTES
  36.     MOVF    PORTC,W
  37.     MOVWF   0x0B           ;EZ lessz a mentendő adat
  38.     CLRF    PORTC          ;Töröljük a kimenetet, nehogy idő előtt kisüljön
  39. ; a kondi, majd mentünk.
(#) icserny válasza Bice hozzászólására (») Szept 25, 2015 /
 
Microchip Applications Libraries letöltése és telepítése után az USB szekcióban találsz USB mintaprogramokat.

MPLAB + C18-cal vannak tapasztalataim:
1. Módosított linker állomány kell a projektekhez (a mintapéldák között találsz ilyeneket)
2. A reset és az interrupt vektorokat át kell helyezni az 0x1000, 0x1008, 0x1018 címekre (a mintapéldák main.c állományában ilyen és hasonló sorok:
  1. #if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER) || defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
  2.         extern void _startup (void);        // See c018i.c in your C18 compiler dir
  3.         #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
  4.         void _reset (void)
  5.         {
  6.             _asm goto _startup _endasm
  7.         }
  8.         #endif


3. A MAL (vagy úlabban MLA) mintapéldák újabb kiadásait nem ismerem. A régebbiek nem nagyon támogatták a 2550-et. A PIC18F4550 mintapéldákat tehát lehet, hogy egy kicsit idomítani kell...
(#) Hp41C válasza sonajkniz hozzászólására (») Szept 25, 2015 /
 
Felhívom a kedves tanácsadó figyelmét arra, hogy a 16F630 nem rendelkezik btg utasítással. Ha makro -nak definiáltuk, a MpAsm több utasításra fordítja le, így nem célszerű egy btfsc / btfss jellegű utasítás után írni.... Valamint a PCLATH módosítását is kerüljük: ld. movwf 0x0A.
A hozzászólás módosítva: Szept 25, 2015
(#) sonajkniz válasza Hp41C hozzászólására (») Szept 25, 2015 /
 
Köszönöm a figyelmeztetést!
Elkerülte a figyelmemet a PIC tipusa,
ráadásul én a 18-as szériát részesítem előnyben.
Máskor jobban odafigyelek az ilyen részletekre.
Mindazonálltal a C-ről alkotott véleményemet fenntartom.
(#) Pali79 hozzászólása Szept 25, 2015 /
 
Meg tudná valaki mondani nekem, hogy az alábbi config-okban mi a különbség (16F690)?
_FOSC_INTRCIO; _INTRC_OSC_NOCLKOUT; _INTOSCIO
A leírása ugyanaz mindegyiknek: belső oszci, I/O portokként működnek a lábak.
(#) Pali79 hozzászólása Szept 25, 2015 /
 
Újabb kérdés: 16F690, hardveres I2C. Hogyan kell a slave felől jövő ACK jelet figyelni?
(#) Csabesz04 hozzászólása Szept 26, 2015 /
 
Sziasztok!
Rendelkezem egy Pic32MX440f256h Pinguino fejlesztő környezettel,amelynek saját szoftja van,amiben megírhatom a forráskódot,compilalhatom is és fel is dobhatom a kütyüre.
A nyelv amiben írni kell a forráskódot nagyrészt kompatibilis az Arduinoéval.
Valamifele C és Assembly ötvözet.
Néhány dolgot mar kiviteleztem vele,a kérdésem,hogy csak C -ben hogyan tudom megírni a programot?
Gondolok itt arra,hogy én C-t tanultam CodeBlocks -ba és például abban szeretnem megírni a forráskódot,mire van szükségem?
Pic32MX440f256h includera?
Más egyébre?
A hozzászólás módosítva: Szept 26, 2015
(#) cross51 válasza Pali79 hozzászólására (») Szept 26, 2015 /
 
Gondolom a 16f690-est master-ként akarod használni
Idézet:
„Hogyan kell a slave felől jövő ACK jelet figyelni?”


De ebben a PIC-ben csak az SPI megy master módban az I2C csak slave módban.
(#) Pali79 válasza cross51 hozzászólására (») Szept 26, 2015 /
 
Ó, hogy a pék rakja tele! Szoftveres I2C master módra van valahol példa assemblyben?
(#) Hp41C válasza Pali79 hozzászólására (») Szept 26, 2015 / 1
 
(#) Pali79 válasza Hp41C hozzászólására (») Szept 26, 2015 /
 
Köszönöm! Hát ez bonyolultabb mint hittem...
(#) Keresztes Vitéz hozzászólása Szept 27, 2015 /
 
Sziasztok!
Akadt egy megoldandó problémám. A felállás jelenleg az, hogy egy bemenő jel hatására az egyik kimeneten bekapcsol egy LED, majd egy idő után kialszik. A problémám az, hogy a LED helyett egy mikro szervó motort kellene a két véghelyzet között vezérelni, tehát a jelre beáll az egyik véghelyzetbe, majd a várakozási idő után a másikba. PIC16F628A-ról van szó. Feltételezem PWM nélkül nem megy, viszont ebben nincs tapasztalatom. Ha valaki tud segíteni, azt megköszönöm!
(#) sonajkniz válasza Keresztes Vitéz hozzászólására (») Szept 27, 2015 /
 
Szia!
Ragaszkodsz ehhez a PIC-hez?
Mert ha csak ennyi a feladat, akkor egy PIC12F1840-el többre mennél.
Mindössze 8 lábú, és vannak analóg bemenetei.
Azaz a kívánt pozíciókat többfordulatos potikkal tudnád beállítani.
(#) Keresztes Vitéz válasza sonajkniz hozzászólására (») Szept 27, 2015 /
 
Szia! Azért használom ezt, mert csak ebből van itthon. Közben a feladatot sikerült megoldanom, bár valószínűleg nem a legegyszerűbb úton.
Következő: »»   704 / 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