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   647 / 1210
(#) Hp41C válasza sonajkniz hozzászólására (») Márc 20, 2015 /
 
Érdemes elolvasni. Működik... Ajánlom az MpLab Szimulátor használatát.
A hozzászólás módosítva: Márc 20, 2015
(#) Zsora válasza Zsora hozzászólására (») Márc 20, 2015 /
 
Pl. egy adattábla áttöltése ROM-ból RAM-ba rendkívül egyszerű és hatékony PIC24-en:
  1. Kezd:     mov     #psvoffset(ROM_cim),w1
  2.           mov     #RAM_cim,w2
  3.           repeat  #1023
  4.           mov     [w1++],[w2++]
  5.  
  6.           .section .const,psv
  7. ROM_cim:  .word 0x0300,0x3f0c,0x3fc0,0x030c,0x0f00,0x0303,0x0303,0x0f03
  8.           .word 0x0c00,0x330f,0x0f33,0x0f03,0x0000,0x0000,0x0000,0x00ff
  9.           .word 0x0000,0x0000,0xc000,0x00c0,0x0000,0x0000,0xc000,0x00c0
  10.           .word 0xff3f,0x3fff,0x3f3f,0xffff,0x0c00,0xf03c,0x00c0,0x0000
  11.           ...
A hozzászólás módosítva: Márc 20, 2015
(#) killbill válasza Zsora hozzászólására (») Márc 20, 2015 /
 
Ha mar 16 bites chip-et hasznalsz, miert nem C-ben programozol? Erre a chip-re egesz jo kodot general a fordito.
(#) Zsora válasza killbill hozzászólására (») Márc 20, 2015 /
 
1.) Mert nem szeretem a C nyelvet.
2.) Mert az Assembly kód pont azt (és úgy) fogja csinálni, amit (és ahogy) én akarok.
3.) Mert ezen a mikrovezérlőn a legjobb Assemblyben programozni. ...és én szeretek Assemblyben programozni.
A hozzászólás módosítva: Márc 20, 2015
(#) zenetom válasza Zsora hozzászólására (») Márc 20, 2015 /
 
Én "leragadtam" a 18F-nél, bár szerintem fényévekkel jobb, mint a 16F. Relatíve elég sok új utasítás jelent meg, ami megkönnyíti az ember dolgát.
A 8 bitnél nagyobb PIC-ekre meg már tényleg valami magasabb szintű nyelven érdemesebb programozni. Bár ha továbbhaladok, asm nyelvvel szeretnék szintén kezdeni, mert anélkül csak a sötétben fogok tapogatózni, ha valahol gebasz van a C-nél.
Egy-két projectet csináltam már C-ben PIC-re, de sajnos nincs meg benne a megfelelő rutinom. Többször volt már olyan, hogy egy feladatnál C-ben elakadtam, aztán fogtam az egészet, és inkább átírtam asm-re, mert az csuklóból ment.
Viszont a C-ben az a jó, hogy nem kell szórakozni az átvitelekkel (8 bit esetén ugye a 255-nél nagyobb számok..), ott már vannak típusok, nem kell szórakozni a memória határokkal (ROM/RAM), és egész hatékonyan tud osztani. Ja meg a bonyolultabb perifériákat könnyebb kezelni (pl. USB). Na meg úgyahogy, de platformfüggetlen.
(#) don_peter hozzászólása Márc 20, 2015 /
 
Srácok, van egy kis problémám.
Egy t6963c GLCD sebességén szeretnék javítani, de nem tudom, hogy miképpen fogjak hozzá.
Jelen pillanatban ott tartok, hogy már nincs semmilyen késleltetés a programomban és az SPI sebességem maximumra húztam ami 4MHz. (PIC-em 64MHz-en ketyeg)
Egy MCP23S17-es portbővítőn keresztül kezelem a kijelzőt.
Az MCP kezeléséhez függvényeket készítettem és azokat makrókon keresztül érem el.
Egyszer mint ha Hp41C mondta volna, hogy a makrók lassúak, lehetséges, hogy ha a makrókat elhagynám (átírnám a program ezen részét) még gyorsulna a téma?

Videó a konkrét problémáról: Bővebben: Link
A hozzászólás módosítva: Márc 20, 2015
(#) Pali79 válasza sonajkniz hozzászólására (») Márc 20, 2015 /
 
16F628A-val dolgozok jelenleg. Igaza van Hp41C-nek, működik az rendesen, csak tudni kellene, hogy mi, miért történik úgy ahogy történik. Azért mert elsőre nem megy, még nem fogom feladni.
(#) don_peter válasza don_peter hozzászólására (») Márc 20, 2015 /
 
Nos annyit még teszteltem, hogy a makrókat kivettem, de ez nem hozott eredményt.
Lehetséges, hogy a portbővítő miatt már nem tudok rajta gyorsítani?

Az a baj, hogy ez a GLCD 24 lábú és ebből a minimum amit be kell kössek a PIC-re az 12-14 láb.
Szóval kell a portbővítő.
Mondjuk azt még nem próbáltam, hogy közvetlen a PIC-ről hajtom, de pont az lenne a lényeg, hogy ezt elkerülhessem.
Vélemény?
A hozzászólás módosítva: Márc 20, 2015
(#) zenetom válasza don_peter hozzászólására (») Márc 20, 2015 /
 
Szerintem tuti a portbővítő miatt van. Bár én azért kipróbálnám direkt a PIC-ről is.
(#) bbalazs_ válasza don_peter hozzászólására (») Márc 20, 2015 /
 
Egy masik PIC, ami csak ezzel a kijelzovel foglalkozik. Jobb kijelzo. Jobb PIC.

Milyen nyelven irod ?
(#) don_peter válasza zenetom hozzászólására (») Márc 20, 2015 /
 
Még is próbáltam már csak másik PIC-en.
18F4550-en próbáltam direktben is, legalább is a programok szerint mert megtaláltam.
Azt hiszem itt még sem vagy is nem csak a portbővítő lesz a ludas, hanem az, hogy a kijelző teljes felületét rajzoltatom.
Bár már a videón látható sebesség elfogadható, akartam még rajta kicsit javítani, de úgy veszem észre az elérhető sebességet elértem, ha a teljes GLCD felületet nézzük és telibe rajzoltatok.
A megoldás inkább a vonalas keretek kirajzolása lesz, azt most kipróbáltam, egy szempillantás alatt kirajzolja.. Vagy egyszerű keret, vagy kompromisszum a sebességgel.
Az a baj, hogy a grafikus részének törlésénél ez a gond még jelentkezni fog, mert ügye itt a szöveges és grafikus rész külön van... No majd kialakul.
Ha van ötlet ettől független a gyorsításra, szívesen veszem..
(#) don_peter válasza bbalazs_ hozzászólására (») Márc 20, 2015 /
 
Aham, ez sem rossz ötlet, csak most nem áll rendelkezésemre jobb vagy gyorsabb PIC mint 64MHz.
És az a baj, hogy ha külön PIC-ről hajtanám a kijelzőt akkor a két PIC közti kommunikációval lenne küzdés.
Bár ott is élhetne az SPI, de csak feleslegesen megbonyolítanám az egészet.
C nyelven írom a progit. C18
A hozzászólás módosítva: Márc 20, 2015
(#) zenetom válasza don_peter hozzászólására (») Márc 20, 2015 /
 
Ha meg tudod oldani, csak azt rajzoltasd ki, ami változik.
(#) don_peter válasza zenetom hozzászólására (») Márc 20, 2015 /
 
Ez persze megoldható, bár gondolom itt azt akartad mondani, hogy azt rajzoltassam ki ami nem változik..
A hátteret egyszer akarom betölteni, de majd tervezek a programon belüli váltásokat amelynél más-más lesz a háttér.
Itt majd még agyalnom kell mert lehet egy kaptafára kellene csinálnom és akkor csak szöveges rész változna, az meg viszonylag gyorsan pörgeti.
Át kell gondolnom ezt az egészet, mert utólag nehezebb lesz vele..
A hozzászólás módosítva: Márc 20, 2015
(#) zenetom válasza don_peter hozzászólására (») Márc 20, 2015 /
 
Mármint amikor írsz/rajzolsz az LCD-re, csak annyi adat kerüljön kiküldésre, ami az előző állapothoz képest változik. Pl. ha egy kép közepére akarod kiírni a pontos időt, akkor ne rajzold ki mindig a képet, elég csak a pozicionálni, és kiírni az időt. Ez lehet debil példa volt, de a lényeg érthető.
(#) bbalazs_ válasza don_peter hozzászólására (») Márc 20, 2015 /
 
A C azert szerinted nem lassit rajta?
Mert szerintem NAGYON. Teljesen azonosulni tudok Zsora lenti soraival. Magasszintu nyelv, mert az gyors es hatekony(?) aztan rajovunk, hogy ehhez 200MHz-es PIC kellene.
Minden egyeb makrozas, szubrutinozas, etc. csak ront a helyzeten.
Ha vannak valtozoid, probald meg minel egyszerubbkent megadni. Pl. x,y koordinatat nem kell lebegopontosban, ahol eleg egesz kerekites, oda siman mehet 16 vagy 32 bites egesszam, ahogy a helyzet megkivanja, stb.
Esetleg assembly betetek alkalmazasa az idokritikus reszeknel.

A rajzolorutinokat ki irta? Vagy siman valami library import, azt' hadd szoljon?
Mert pl. vizszintes vonalakat sokkal egyszerubben is lehet huzni, mint pontonkent kirajzolni, ugyanigy a fuggolegeseket, stb,stb.
(#) don_peter válasza zenetom hozzászólására (») Márc 20, 2015 /
 
Ja igen, így már értem mire célzol, termesztésen ez így is van most is..
Azért köszi..

bbalazs_: Igen ez biztosan lassíthat, már mint a C nyelv, de ezt tudom, ASM-et nem kezdem el, elég ez is, még
A rajzoló progikban nagy segítségemre volt egy CSS fájl ami alapján én írtam meg őket, vagy is nagyobb részt én írtam meg mert nem voltak jók, de törekedtem a minimális forrásra.
Így sem egyszerű
Tudok keretet, dobozt, vonalat húzni egyszerűen, szóval menni fog, ha más nem akkor így..
Köszi srácok, azt hiszem ezekből már tudok valamit kezdeni..
(#) Pali79 hozzászólása Márc 21, 2015 /
 
16F-en, hogy tudom legegyszerűbben megcsinálni, hogy megvizsgálom PORTA,1 bitjét és ha az 1 akkor legyen 0 és fordítva. Fontos, hogy a változtatás csak ezt az egy bitet érintse!
(#) sonajkniz válasza Zsora hozzászólására (») Márc 21, 2015 /
 
Ott a pont!
Én is azért programozok asm-ben, mert a gépi kódhoz az áll legközelebb, a PIC jobban érti, és mivel nem előregyártott függvényekkel dolgozom, nincs benne semmi fölösleges.
Hogy mindenki értsse mire gondolok:
Egy ismerősöm C-ben írt egy programot, ami egy potit olvasott be. 1V-os jelnél behúzott egy relé és indult egy másik kimeneten egy PWM jel a poti állásával arányosan.
Ez a progi fordítás után 276 soros lett.
Én ugyanezt megírtam assembly-ben, és fordítás után 50 sor lett. Tehát a C nyelv 226 fölösleges sort pakolt a programba. Egyértelmű tehát hogy a program futása 5x lassabb C-ben. Több a hibalehetőség. Nagyobb programoknál elfogy a memória. Mindehhez, ha egy C progit utólag bővítünk, még akkor is összeborulhat a program, ha a bővítés maga csak egy mellékszál lenne.
A hozzászólás módosítva: Márc 21, 2015
(#) cross51 válasza Pali79 hozzászólására (») Márc 21, 2015 /
 
Hát erre is jobb lenne 18F mert ott letezik a BTG (bit toggle)parancd de szerintem 16f re így lenne a legegyszerűbb:
  1. BANKSEL PORTA;(ha van LAT  is akkor azt használd)
  2. MOVLW b'00000010'
  3. XORWF PORTA
A hozzászólás módosítva: Márc 21, 2015
(#) kissi válasza sonajkniz hozzászólására (») Márc 21, 2015 /
 
Idézet:
„Ez a progi fordítás után 276 soros lett.
Én ugyanezt megírtam assembly-ben, és fordítás után 50 sor lett. Tehát a C nyelv 226 fölösleges sort pakolt a programba. Egyértelmű tehát hogy a program futása 5x lassabb C-ben. Több a hibalehetőség.”

Ez azért nem teljesen így van... A C-ben a változók átadása pl. veremtáron keresztül történik, ezért szükség van bizonyos "alapmemóriára" és a hozzátartozó programkódokra. Ezért lehetett pl. 5x-szörös kódméreted. Viszont ezt nem futtatja folyamatosan, hanem csak inicializáláskor például, így a futási sebességnél nem igaz az 5x-ös viszony! Fordítási opciókkal, fordítási szintekkel és a program kialakításával ez még lényegesen csökkenthető lehet. A C-vel sokkal áttekinthetőbb programot lehet írni, kezdők is gyorsabban eljuthatnak vele egy bizonyos szintre viszonylag könnyedén... Természetesen nem látsz teljesen mögé, de a megfelelő dokumentáció ( fordítóra vonatkozó !) birtokában nagyon jól kézben tartható ! Egy bonyolultabb program megírásánál ( bár én is írtam már több ezer soros programot is asm-ben ) ezért szokták a C-t választani, persze az időkritikus részeket asm-ben írják meg!
(#) Pali79 válasza cross51 hozzászólására (») Márc 21, 2015 /
 
Én is ilyesmire gondoltam de nem voltam biztos benne hogy ez a többi bitet nem változtatja meg.
(#) kissi válasza Pali79 hozzászólására (») Márc 21, 2015 /
 
Ez nem változtatja meg, de a PIC RMW ( Read Modify Write ) végrehajtása változtathat rajta, ezért utalt a kolléga az árnyékregiszterre ( LAT ) !
(#) Pali79 válasza kissi hozzászólására (») Márc 21, 2015 /
 
Rendben, de 16F-en nincs olyan.
(#) icserny válasza zenetom hozzászólására (») Márc 21, 2015 /
 
Nagy dilemma: ezeket a mikrovezérlőket már élvezet assembly-ben programozni, ugyanakkor valóban logikusabb C-ben dolgozni.
(#) zenetom válasza icserny hozzászólására (») Márc 21, 2015 /
 
Na igen, ez olyasmi, mint a hardver résznél az építés öröme (vs. boltban megveszem olcsóbban).
Közben most nézem, a 16 bites PIC-eknél (vagy legalábbis amit az előbb néztem) van hardveres osztó.
(#) kissi válasza Pali79 hozzászólására (») Márc 21, 2015 /
 
Tudom, de csinálni kell ...!

Veszel egy regisztert (elnevezed pl. LATB-nek !) és minden PORT írást ezen a regiszteren végzel ( mint a 18-asnál!) és megszakításból kellő gyakorisággal ( pl. 5-10 ms!) átmásolod az egészet a példa szerint a PORTB-re ! Máris van "LAT"-od !

Így elkerülheted az RMW problémát ( ezt hívják árnyékregiszternek ! )
A hozzászólás módosítva: Márc 21, 2015
(#) Hp41C válasza kissi hozzászólására (») Márc 21, 2015 /
 
Idézet:
„...és megszakításból kellő gyakorisággal ( pl. 5-10 ms!) átmásolod az egészet a példa szerint a PORTB-re...”

Vagy minden művelet elvégzése után. A lényeg, hogy a másolás movwf utasítással írja a PORTx -et.
A 12F1xxx, 16F1xxx sorozatoknál van LAT regiszter, de másik bankban...

pl:
  1. movlw 0x02
  2.   call XorToPortB
  3.  ...
  4. XorToPortB
  5.   xorwf LATB,f
  6.   movf  LATB,w
  7.   movwf PORTB
  8.   return
A hozzászólás módosítva: Márc 21, 2015
(#) kissi válasza Hp41C hozzászólására (») Márc 21, 2015 /
 
(#) Pali79 hozzászólása Márc 21, 2015 /
 
Szia Hp41C!

A cikkedben leírt "nagy táblázatok kezelése" részt szeretném alkalmazni és egy apróság hibádzik. Mégpedig, hogy a címszámító rutin elején növeli a címet, így a beolvasáskor a 0 címen lévő karaktert kihagyja. Az első futáskor ki tudtam küszöbölni azzal, hogy egyszerűen átugrottam, de mivel a rutint többször is használnám, ez nem jó, mert csak az első alkalommal kéne átugrani, különben elcsúszik az egész. Van erre ötleted?
Következő: »»   647 / 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