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   545 / 1210
(#) jonatani01 válasza Pali79 hozzászólására (») Júl 10, 2014 /
 
Köszi hogy kipróbáltad, holnap megpróbálom én is másik áramkörrel.
(#) jonatani01 válasza Balagemann2031 hozzászólására (») Júl 10, 2014 /
 
Igen, tudom. Azokat is 0-ára állítottam.
(#) don_peter hozzászólása Júl 10, 2014 /
 
Uraim kérnék egy kis megerősítést vagy lecsekkolást mert nem vagyok benne biztos, hogy jól számoltam az időzítést.

P16F684-es PIC-re 32.768KHz-s kristályt tettem 33pf-es kondikkal lekötve.
Órát szeretnék készíteni és ehhez kellene a másodperces időzítés.
Jelenleg itt tartok a dologgal, de igazából még mindig nem értem mire való pontosan a PR2 regiszter.
Milyen és miért kell bele adatot írni? Miért kell az?
Configurációs beállításnál az LP vagy is Low-power crystal van kiválasztva.
  1. ANSEL = 0;                              // Minden láb digitális
  2.         CMCON0 = 7;                             // Comparator kikapcsolva
  3.         CCP1CON = 0;                    // Capt/Comp/PWM kikapcsolva   
  4.         INTCON = 0;                             // Összes interrupt láb kikapcsolva
  5.         PEIE   = 1;                             // Peripheral interrupt engedélyezése
  6.         GIE    = 1;                             // Globális interrupt engedélyezése
  7.        
  8.         //PR2 = 232;
  9.     T2CON = 0x45;       //0b0100 01 01
  10.     TMR2IE = 1;
  11.     PEIE = 1;
  12.     GIE = 1;

A számításom valahogy így néz ki:
32.768-at előosztással 8-al osztottam, majd utóosztásnál még 4-el elosztottam így elvileg megkapom az 1024-es eredményt.
Ami az 1KHz-es jel elvileg. (vagy is 1mp-enként okoz megszakítást?)
(32.768/8)/4 = 1024
Tuti, hogy még mindig nem értem rendesen ezt a timer-es témát.
Előre is köszi a segítséget.
(#) don_peter válasza don_peter hozzászólására (») Júl 10, 2014 /
 
Közben rájöttem, hogy a Timer0 jobb választás a 32-es osztó miatt.
  1. TMR0 = 255;
  2.         OPTION = 4;
  3.         T0IE = 1;

Köszi.
(#) icserny válasza don_peter hozzászólására (») Júl 10, 2014 /
 
Idézet:
„nem értem mire való pontosan a PR2 regiszter”
Abba kell beírni, hogy 0xFF helyett meddig számláljon a TMR2 regiszter. Bővebben: Link
(#) don_peter válasza icserny hozzászólására (») Júl 10, 2014 /
 
Köszi, ez hasznos link.
(#) elektroncso hozzászólása Júl 10, 2014 /
 
Sziasztok volna egy kérdésem. Van egy PIC16F84A típusú PIC-em. Ebbe kéne egy frekvenciamérő hex-ét beleégetnem. Először csinálok ilyet, nem értek hozzá. Az égetőmnek van egy PIC DATA és egy PIC CLK lába. Ezt a kettőt nem tudom hova kell csatlakoztatni. Csak egy tipp a PIC CLK láb az égetőn a 16-os CLKIN lábra megy, de a data melyikre? Ilyen égetőm van: Bővebben: Link Tudom tudom JDM-et ne, de nekem csak erre az egy alkalomra kellett valami, mert a frekvenciamérőmet szeretném befejezni. A Vicsys által publikált frekvenciamérőről van szó.
A hozzászólás módosítva: Júl 10, 2014
(#) vicsys válasza elektroncso hozzászólására (») Júl 10, 2014 /
 
Bővebben: Link A publikációban a beültetési rajznak illene tartalmaznia a megnevezéseket, de le tudod következtetni.
(#) elektroncso válasza vicsys hozzászólására (») Júl 10, 2014 /
 
Köszönöm, most már értem.
(#) jonatani01 válasza Pali79 hozzászólására (») Júl 10, 2014 /
 
Na kipróbáltam én is másik cuccal, tényleg a kontrolleremnek van baja.
(#) csabagalcsaba hozzászólása Júl 10, 2014 /
 
Sziasztok!

Tudnátok-e ajánlani egy jó pic szimulátor programot?
Olyan kéne amiben lehet assembler nyelven programozni, van hibakeresője, le tudja fordítani hex- be és lehet vele szimulálni a működést.
És még azt szeretném kérdezni, hogy ha ott a menüből állítom be a konfigurációs biteket és nem az assembler kódban, akkor azt beleírja a hex kódba és égetéskor az úgy fog működni vagy az csak a szimulációra vonatkozik.
A válaszokat előre is köszönöm!
(#) icserny válasza csabagalcsaba hozzászólására (») Júl 10, 2014 /
 
Azt, hogy jó vagy nem jó, ne firtassuk!
Egyrészt van az MPLAB, amely fordít és szimulál, másrészt van a Google, amelybe beírod, hogy PIC simulator, s akkor lehet válogatni. Van fizetős és ingyenes. Tökéletesnek egyik sem mondható.
(#) Pali79 válasza csabagalcsaba hozzászólására (») Júl 10, 2014 /
 
Én is kezdő vagyok, de szerintem a szimulátor felejthető dolog. Ha breadboard-on összedugdosod a pic-et pár leddel, írsz rá egy futófényt és látod valóban villogni az sokkal nagyobb élmény!
(#) foxi63 válasza csabagalcsaba hozzászólására (») Júl 10, 2014 /
 
Szia!
MPLAB-ra szavazok, minden igényedet kielégíti...
(#) cross51 válasza csabagalcsaba hozzászólására (») Júl 10, 2014 /
 
Én ha simulátor akkor Proteus ISIS de drága@mod ,de ne felejtsük el a siumulátor az simulátor.
A hozzászólás módosítva: Júl 11, 2014
(#) Pali79 válasza cross51 hozzászólására (») Júl 11, 2014 /
 
Mármint úgy gondoltad, hogy fizetős program!
(#) csabagalcsaba hozzászólása Júl 11, 2014 /
 
Sziasztok!
Itt ez a program:
  1. LIST  P=PIC16F630
  2.  #include <P16F630.inc>
  3.  CONFIG 0x3194
  4. SZAM1 EQU 0x20
  5. SZAM2 EQU 0x21
  6. SZAM3 EQU 0x22
  7.  ORG 0
  8. ;**********************
  9. BEALLITASOK
  10.  CLRF PCLATH
  11.  BANKSEL PORTA
  12.  CLRF PORTA
  13.  CLRF PORTC
  14.  BANKSEL TRISA
  15.  MOVLW B'001000'
  16.  MOVWF TRISA
  17.  BANKSEL TRISC
  18.  CLRF TRISC
  19.  BANKSEL PORTC
  20.  GOTO PROGRAM
  21. ;***************
  22. PROGRAM
  23.  MOVLW B'100000'
  24.  MOVWF PORTA
  25.  CALL IDO
  26.  MOVLW B'010000'
  27.  MOVWF PORTA
  28.  CALL IDO
  29.  CLRF PORTA
  30.  MOVLW B'100000'
  31.  MOVWF PORTC
  32.  CALL IDO
  33.  CLRF PORTC
  34.  MOVLW B'010000'
  35.  MOVWF PORTC
  36.  CALL IDO
  37.  CLRF PORTC
  38.  GOTO PROGRAM
  39. ;***************
  40. IDO
  41.  MOVLW D'99'
  42.  MOVWF SZAM2
  43.  MOVLW D'35'
  44.  MOVWF SZAM3
  45. IDO-X MOVLW D'20'
  46.  MOVWF SZAM1
  47. IDO-I DECFSZ SZAM1,F
  48.  GOTO IDO-I
  49. IDO-II DECFSZ SZAM2,F
  50.  GOTO IDO-X
  51. IDO-III DECFSZ SZAM3,F
  52.  GOTO IDO-X
  53. IDO-R RETURN
  54. ;**************
  55.  END
  56.  
  57. ; AZ END UTAN URES SOR


Elvégeztem a kollégák által javasolt módosításokat de mégsem akar működni.
A szimulációban működik, de amikor a valóságban ráteszem a 4 LED et akkor nem csinál semmit.
Tudna nekem valaki segíteni?
(#) Hp41C válasza csabagalcsaba hozzászólására (») Júl 11, 2014 /
 
Idézet:
„IDO-III”

A program cimkéi csak betüket és számokat és az aláhúzás karaktert ("_") tartalmazhatják és betüvel vagy az aláhúzás karakterrel kell kezdődniük. A "-" egy műveleti jel, ami azt írja elő, hogy bal oldalán levő szimbólum (kifelyezés) értékéből vonja ki a jobb oldalán álló szimbólum (kifelyezés) értékét.
(#) Pali79 válasza csabagalcsaba hozzászólására (») Júl 11, 2014 /
 
Többek közt ezért is lenne jó az MPLab-ot használni, mert fordításkor kidobálja azokat a hibákat is amiket itt elkövettél!
Javítsd azokat amiket Hp41C kolléga írt, illetve amit elmondtunk már korábban is, hogy a címkét nem írjuk egy sorba az utasítással:
Idézet:
„IDO-III DECFSZ SZAM3,F”

Helyesen:
  1. IDO-III:
  2.                     DECFSZ     SZAM3,F


Egyébként átírtam 628A-ra mert csak az van itthon és működik élőben is, persze a fenti javítások után!
A hozzászólás módosítva: Júl 11, 2014
(#) karak74 válasza csabagalcsaba hozzászólására (») Júl 11, 2014 /
 
Kedves csabagalcsaba!

Sajnos, mivel itt a legtöbben MPLAB-ot használunk, nem tudjuk biztosan, hogy az Oshon Pic Simulator IDE mit "szeret" és mit nem (eSDI- nek esetleg van erről több tapasztalata) Érthető, hogy ódzkodsz egy új környezettől, de így csak nagyon minimális segítséget tudunk adni. Addig is itt a minimális:
1. A 3-as sorodban CONFIG parancs szerepel. Ezt pl. az MPLAB nem fogadja el, csak a __CONFIG parancsot (két aláhúzás jel van a CONFIG előtt!)! Az Oshon hogy van ezzel?
2. A címkék! Ahogy Hp41C is és Pali79 is írta, az MPLAB esetében nem lehet - jel a címkében! Az Oshon ezt eltűri?
3. Még mindig a címkék! Az MPLAB-ban egy címkét az jelez, hogy a címke után van egy kettőspont. Pl
  1. IDOX: MOVLW D'20'

(és kedves Pali79! Az MPLAB megengedi az egy sorba írást! Persze nem kötelező, ennélfogva ízlések és pofonok!)

Elektronikai kialakítás? Gondolom csak táp, a kapulábakon meg egy ellenállás és egy led.
4. A táp 5V-os, stabil és zajmentes? A + megy az 1-es lábra, a - a 14-esre?
5. Hardveres teszt megvolt? Hardveres teszt: Kiveszed a PIC-et a próbapanelból, vagy foglalatból (remélem nem beforrasztottad!) és egy drótdarabbal átvezeted a pozitívat is, majd ennek bontása után a negatívat is a kapu láb helyére. Tehát a kivett PIC helyén levő 1-es lábhelyet összedrótozod a 2-es lábhellyel, (itt elvileg a led-nek világítania kell), ezt bontod, majd ugyanígy a 14-es helyet is a 2-essel (itt elvileg a led-nek nem szabad világítania). Ugyanígy a 2-es helyett 3-as, majd 5-ös és 6-os lábhelyekkel is. Amúgy mekkora az ellenállás? És tényleg akkora? Le is mérted? Nincs kontakthiba az áramkör kialakításban?

6. Már korábban is kérdeztem (vagy legalábbis akartam): az égető OK? Kipróbált, nincs vele baj? Vajon fut abban a PIC-ben egyáltalán valami? De jó volna belelátni, ugye? Nem egyszerű, de van egy kis esélyed. Cél, kivezetni az órajelet a 3-as lábra. Ehhez töröld a programban a 23-astól a 29-ig terjedő sorokat (a 23-ast is és a 29-est is, valamint a közte levőket), valamint az elején a CONFIG (vagy __CONFIG) után a 0x3194-et cseréld le 0x3195 -re. Újrafordítod, beégeted, beüzemeled, és a 3-as lábon most elvileg egy szép, 4Mhz-es négyszögjelet kell láss.
-- Ha van szkópod, azzal megnézheted.
-- Ha nincs, de van olyan műszered ami frekvenciát is mér, hajrá!
-- Ha egyik sincs, végy egy (azaz két) osztóIC-t, és oszd le a frekvenciát így, hogy azt már te is lásd egy próba-leddel, vagy egy műszerrel. (Osztó IC pl.: CD4060, ez 14-szer felez. Sajnos ez még nem elég a szemrevételezéshez, mert 4Mhz / 2^14 = 244, márpedig egy 244 Hz-es villogást nem fogsz látni. Érdemes ezt a jelet egy második CD4060-asra rátenni, és ott még 7-szer leosztani. így egy sacc fél másodperces villogás lesz a vége. Már ha a PIC dolgozik!)

Látod! Ez a szép a szakmában! A hibalehetőségek száma csak a csillagok számával összemérhető!
A hozzászólás módosítva: Júl 11, 2014
(#) karak74 válasza karak74 hozzászólására (») Júl 11, 2014 /
 
Bocsánat, az előző hsz-omban 6-os pontban rosszul mondtam, mert az a jel nem 4 MHz-es, csak 1 MHz-es!
(#) Hp41C válasza karak74 hozzászólására (») Júl 11, 2014 /
 
MpLab és a címkék:
A forrásban a címkét a sor elején célszerű elhelyezni. Különben "Warning[207] C:\......ASM 3471 : Found label after column 1. (LOOPU3216)"
Utasítást pedig célszerű bevezető szóközzel / tabulátorral írni. Különben "Warning[203] .....ASM 1283 : Found opcode in column 1. (movlw)" és hibásan fordít.

A proram részben mindegy, hogy a címke után van e kettőspont vagy nincs.
A cblock azonban másként működik:
  1. cblock  0x20    ;
  2.         Cimke1
  3.         Cimke2:
  4.         Buff:   .32
  5.         Cimke3:
  6.   endc

Ha nincs kettőspont a címke után, akkor a címszámláló 1 -gyel növekszik. A példának Cimke1 értéke a 0x20 lesz, a címszámláló 0x21 -re áll. Ha kettőspont van a címke után, akkor a címke megkapja a címszámláló értékét és a címszámláló annyivan növekedik, amennyit a kettőspont után megadunk. A példában Cimke2 értéke 0x21 lesz, a Buff értéke is 0x21 lesz, hiszen nem adtunk meg értéket a Cimke2 sorban a kettőspont után. A Cimke3 értéke pedig 0x41.

A címkével egy sorban is lehet utasítás. Azonban jobban áttekinthető a program, ha betarjuk a következőket. (Sajnos a fórum motor megváltoztatja a bemásolt kódokat.)
- Címkéket külön sorba írjuk
- Az utasításokat két tabulátorral írjuk és a paramétereket és a kommenteket is tabulátorra vezetjuk be. Ha egy részletet kommentezni kell (tesztelés hibakeresés miatt) a kommentezés nem fogja érinteni a megjelenést, csak a címkéket tolja beljebb.
- A feltételes fordítás direktíváit egy tabulátorral bevezetve írjuk. Ha több feltételes fordítás direktívát ágyazunk egymásba azokat 1 - 2 betüközzel is tehetjük beljebb, hogy láthatóvá tegyük a szinteket.
- Az utasításokat, paramétereket és kommenteket mindig azonos pozícióban kezdjük.
- A tabulátor "hosszát" a list b=(szóközök_száma) utasítással állíthatjuk be.
  1. list    b=4

Ha valaki annyira nem szereti a tabulátort, írjon helyette 4 vagy 8 betüközt...
A hozzászólás módosítva: Júl 11, 2014
(#) don_peter hozzászólása Júl 11, 2014 /
 
Srácok, hogy lehet egy előre beállított 8 bites értéket bejárni?
Tehát van egy ilyen beállított változom:
  1. char valtozo = 0b00011000;

Ezt szeretném úgy bejárni, (1 porton belül) hogy a nulláknál alacsony, egyeseknél magas szintre állítaná a PIC lábát.
Próbálkozom, de nem sok eredménnyel.
Előre is köszi a segítséget.
A hozzászólás módosítva: Júl 11, 2014
(#) zenetom válasza don_peter hozzászólására (») Júl 11, 2014 /
 
Szia!
A helyiértékek hogy alakulnak? Mert ha azonosak, akkor pl. a B portra:
  1. LATB = valtozo;

A hozzászólás módosítva: Júl 11, 2014
(#) Hp41C válasza don_peter hozzászólására (») Júl 11, 2014 /
 
1 - Kiírod a portra: movwf LATx: A port minden bitje a változó megfelelő helyiértékű bitjét kapja meg.
2 - Léptetéssel: RLCF vagy RRCF: Ekkor pl a 0 bit értékének megfeleően állítható be a PORTx/LATx egy bitje. Figyelem, a léptetésben a C bit is részt vesz.
3 - Léptetéssel: RLNCF vagy RRNCF: Ld. 2. pont , de a C bit nem vesz részt a léptetésben. Nincs minden típuson.
4 - Önmagával történő összeadással...
5 - Nibble cserével: SWAPF: ha esetleg 4 bites csomagokban lenne szükséges a léptetés.
A hozzászólás módosítva: Júl 11, 2014
(#) don_peter válasza zenetom hozzászólására (») Júl 11, 2014 /
 
Egyesével szeretném for() ciklusba vizsgálni majd kitenni portra. C nyelv és MPLAB
(#) don_peter válasza Hp41C hozzászólására (») Júl 11, 2014 /
 
1. igen ez meg van, de szeretném vizsgálni is, hogy 1-es vagy nulla
2. léptetést próbáltam, bár lehet rosszul értelmezem: valtozo>>1
4. ezt nem értem. Talán így: valtozo/valtozo == ?
5. egyszerre minimum 7bit-et kell léptetni és vizsgálni
C-ben dolgozom ASM csak felületesen megy..
(#) don_peter válasza don_peter hozzászólására (») Júl 11, 2014 /
 
Köszönöm meg van a megoldás: (hátha érdekel még valakit)
  1. char i;
  2.     char bitek = 0b00011000;
  3.    
  4.     for(i=0; i<8; i++){
  5.         if((bitek>>i)&1 == 1){
  6.             printf("egyes\n"); // ide jöhet a portra írás
  7.         }else{
  8.             printf("nulla\n");
  9.         }
  10.     }

Visszafelé pedig:
  1. if((bitek>>(7-i))&1 == 1){
A hozzászólás módosítva: Júl 11, 2014
(#) karak74 válasza Hp41C hozzászólására (») Júl 12, 2014 /
 
Kedves Hp41C!
Lám, lám! Több vonatkozásban is igazat kell adnom neked! Legelőször is, amit a cblock-ról írtál, nekem teljesen új volt! Így is tanul az ember! Köszönöm szépen! A címkékről is tanultam újat. Ez eddig dogmaként hittem a kettőspont kötelezőségében, ezt a hittételemet ezennel elvetettem. (Ilyen ez a "vallás"!) Én most azt látom, hogy vagy külön sorba, vagy kettősponttal. Mindkét verziót elfogadja a fordító, de az egy sorba kettőspont nélküli esetet nem. (Itt is látszik, az MPLAB intelligenciája. Próbálja kitalálni, mit akarunk, akár így, akár úgy mondjuk is neki.)
A csabagalcsaba által belinkelt programra visszatérve, az számos esztétikai, és néhány szintaktikai, (valamint anno működési logikai) hibát tartalmazott. Mivel nem kedvét szegni szeretném szegénynek, ezért azokra a hibákra, hibalehetőségekre koncentráltam, amik a kudarcot okozhatják! (Bőven van ebből is!) Így kizárólag a szintaktikai (és anno működési logikai) hibák kijavítására szorítkoztam. Tettem ezt annak érdekében, hogy minél hamarabb sikerélmény bátoríthassa őt. (A Pali79 által felvetett egy sorba írás tilalma ügyre is csak azért tértem ki, mert az állítás hamisságát saját szememmel láttam.) Tökéletesen igazat adok abban. hogy a hosszabb távú fejlődést gátolják az átláthatatlan, átgondolatlan programok, de most rövid távú volt a cél. A javasolt javítások után a program fordítása ugyan 11 warningot és 2 massage-t dobott ("gyári ajánlásoktól való eltérés" jellegű hibák), valamint kapkodom a fejem a fölösleges címkék és egyéb furcsaságok miatt, de a program lefordul (tehát szintaktikai hibák így már nincsenek). Én is nyomatékosan javaslom csabagalcsaba kollégának a "Dr. Kónya László: Mikrovezérlők alkalmazástechnikája" (vagy hasonlóan jó) könyv alapos áttanulmányozását, amiben még számos kötelező és ajánlott szabály van. Remélem, ehhez adja meg az első siker a kellő energiát. (Valamint javaslom még az MPLAB-ra való áttérést is.)
A hozzászólás módosítva: Júl 12, 2014
(#) Hp41C válasza don_peter hozzászólására (») Júl 12, 2014 /
 
Nézd meg egysze, mire fordítja a C forrásodat, el fogsz szörnyűlködni...
  1. char i;
  2.         char bitek = 0b00011000;
  3.         i=8;
  4.         do
  5.         {
  6.             if (bitek & 1)
  7.             {
  8.                 printf("egyes\n"); // ide jöhet a portra írás
  9.             }else
  10.             {
  11.                 printf("nulla\n");
  12.             }
  13.             bitek >>= 1;
  14.         } while (--i);
A hozzászólás módosítva: Júl 12, 2014
Következő: »»   545 / 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