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   265 / 1207
(#) icserny válasza lutyii hozzászólására (») Jún 5, 2012 /
 
Idézet:
„ha elrontották és a 8-as láb valójában már az RB0, akkor az mindent megmagyarázna.”
Az adatlap szerint a 8-as láb RB0!
(#) lutyii válasza icserny hozzászólására (») Jún 5, 2012 /
 
Igen, sajnos elrontottam a panelemet. Sikerült összekevernem a TQFP tokozást QFN-nel.
Köszönöm azoknak, akik segíteni probáltak.
lutyii
(#) bbalazs_ válasza lutyii hozzászólására (») Jún 5, 2012 /
 
Egyebkent van valami ertelmes oka, hogy egy ilyen esetben NEM egyezik meg a labkiosztas?
Belul a szilicium gondolom tok ugyanaz.
(#) pajti2 válasza bbalazs_ hozzászólására (») Jún 5, 2012 /
 
Személyes megfigyelésem szerint az egyes tokozás típusokra vannak "hagyomány"-ok, amik alapján elrendezik a lábkiosztást, és az sokkal dominánsabb elv, mint akár a pic típusjele.
(#) Hp41C válasza pajti2 hozzászólására (») Jún 5, 2012 /
 
Hagyomány? Megfontolás illetve tervezés.
pl.
- Nagy dip toknál jellemzően miért van a tápbevezetés középső lábon? A tokon belüli kivezetés rövidebb.
- Nagyobb tokokon miért van több táp illetve föld láb? A hozzávezetés impedanciájának csökkentésére.
- Miért is kell minden táp és föld lábat bekötni? Az un. ground bounce (föld hozzávezetésen keletkező potenciál eltolódás) csökkentésre.
- Az oszcillátor lábak miért vannak a föld kivezetés közelében? Egy jobban megtervezett panelen ezeket a kivezetéseket és a hozzájuk kapcsolódó elemek kivezetését egy un. guard ring (árnyékoló gyűrű) veszi körül, hogy csökkentsék az arra haladó jelek hatását az oszcillátorra.
stb.

Ezekre az okokra egyébként akkor derül fény, ha a tokba beleláthatnánk. Persze aki gyártja, annak vannak dokumentációi a tokon belüli vezetékezésről.
(#) L2773 hozzászólása Jún 6, 2012 /
 
Valaki megtudná mondani, hogy a WATT égetőáramköre a WPB programmal vagy a WinPIC800-zal miért csak az I/P tokozású PIC-jeimet ismeri fel?
A 16F628-ból 20/P és 20I/P tokozásúakat kaptam (csak) és nem ismerik fel. A 16F88 I/P-t és 16F684 I/P-t igen.
(#) _vl_ válasza pajti2 hozzászólására (») Jún 7, 2012 /
 
Idézet:
„Valaki mérte már meg, mit tudnak sebességre a pic32mx1-esek ? Ram-ba töltve biztos viszi a program a 40mhz-et, de mi a szitu flash-ből?”

Flashből is viszi.
Én egy 220-assal játszottam, és bizony egy utasítás - egy órajel. Egy invertálás oda, egy invertálás vissza - ez két órajel, 40MHz-en pontosan 50us lesz (20Mhz-es kimenő jel). Ha ciklusban akarod csinálni, akkor viszont kell jump is bele előbb-utóbb, úgy viszont egy nop, egy invertálás, egy jump, egy invertálás kóddal felére csökken az effektív frekvencia, azaz 100us (= 10MHz-es kimenő jel).
(#) bbalazs_ válasza _vl_ hozzászólására (») Jún 8, 2012 /
 
Nanosecundum lesz az...
(#) _vl_ válasza bbalazs_ hozzászólására (») Jún 8, 2012 /
 
Ja, bizony... már félrebeszélek
(#) Pepebá hozzászólása Jún 8, 2012 /
 
Hali!
PIC18f4550/C18-hoz keresek UART programozásához példaprogramot. A soros átvitel programozásával akarok megismerkedni.
Üdv.
(#) Hp41C válasza Pepebá hozzászólására (») Jún 8, 2012 /
 
Szia!
USB CDC demo forrást keress.
(#) Pepebá válasza Hp41C hozzászólására (») Jún 8, 2012 /
 
Hali!
Köszi, az USB CDC és HID programozásán már 'átrágtam magam' , jelenleg a RX/TX programozásával próbálkozom.
Üdv.
(#) icserny válasza Pepebá hozzászólására (») Jún 8, 2012 / 1
 
Az USB Device - CDC Serial Emulator gyári demót is nézd meg , abban benne van a soros port kezelése is.

De nézegetheted a PICula projektemet is, mert abban ugyan PIC18F4520 szerepel, de a soros port kezelése ugyanúgy történik a 4550-nél is. Ha CTS/RTS vonalakat is akarsz vezérelni, akkor az utóbbi nem tökéltes számodra, mert én csak az RX/TX jeleket kezelem (ezen jelek nálam egy CP2102 USB/UART protokol konverterhez csatlakoznak, de ez már részletkérdés).
(#) Pepebá válasza icserny hozzászólására (») Jún 8, 2012 /
 
Hali!
Köszi a tippeket, egyenlőre csak az RX/TX-t akarom kezelni.
A PICula projekbe benéztem, de ezek szerint nem kellően.
Üdv.
(#) Pepebá válasza icserny hozzászólására (») Jún 8, 2012 /
 
Hali!
Nézegetem és próbálom értelmezni a megadott forrásokat és kérdésem a következő:
a PICCOLO project keretében van lehetőség az USB HID kominikáció mellett és közben az RX/TX-n adatok belolvasására?
Üdv.
(#) icserny válasza Pepebá hozzászólására (») Jún 8, 2012 / 1
 
Idézet:
„a PICCOLO project keretében van lehetőség az USB HID kominikáció mellett és közben az RX/TX-n adatok belolvasására?”
A PICCOLO projektben USB CDC kommunikáció van, nem HID (HID kapcsolatot csak a bootloader használ).

Elvileg lehet mellette soros porti kapcsolat, de az "intelligens megoldásoknak" (pl. printf használata) határt szab az, hogy C18-ban a STDIO csak két eszköz kezelésére (pl. USB CDC és LCD) van felkészítve.

Gondot okozhat névütközés is. Most fejből nem emlékszem, de lehet, hogy az egyik projektben azokat a függvényneveket használom a soros port kezelésére, amelyeket a másik projektben az USB CDC kezelésére. Kell tehát némi kreativiás, ha ezeket össze akarod házasítani. Elvi akadálya nincs...
(#) Pepebá válasza icserny hozzászólására (») Jún 8, 2012 /
 
Hali!
Köszönöm, az elvi lehetőségre voltam kíváncsi. A függvénynév azonosságokat észrevettem. Majd a módosításokat megcsinálom mint a CDC helyett a HID USB kapcsolatot.
Üdv.
(#) Thomy hozzászólása Jún 9, 2012 /
 
Sziasztok!

PIC16F-nél ha C-ből hívok assembly függvényt, aminek
a prototípusa void func(int t), akkor hová kerül a paraméter? W-ben lesz az LSB? És hol lesz az MSB?
És miért nincsen leírva ez sehol konkrétan (nem találom)?

Köszönöm a válaszokat! Üdv, Thomy
(#) p_istvan válasza Thomy hozzászólására (») Jún 9, 2012 /
 
Szervusz!
A paraméterek a paraméter listában megadott változókban lesznek a a RAM-ban, itt konkrétan a "t" nevű változóban lesz a paraméter.
Nem tudom miért is keresed a munkaregiszterekben, a C nem erről szól.
Üdv. István
(#) Thomy válasza p_istvan hozzászólására (») Jún 9, 2012 /
 
Szia!

Megnézve, mit művel a fordító, a kérdéses 2 byte-nyi paraméterem a 0x70 és 0x71 címen lévő GPR-ekbe kerülnek (a paraméterek ált. regiszterekben kerülnek átadásra RISC-nél, mert ez nagyon gyors. Az, hogy C, mit számít?).

A kérdés itt főleg az, hogy honnan tudom, hogy oda fogja tenni, bárhonnan is hívom meg az assembly kódomat?

Vagy lehetséges assemblyben hivatkozni egy paraméterre a nevével?

Kicsit kontransztba álíltva: pl ARM-nál megadják a calling conventiont, hogy "ha ilyen a paraméter, akkor ebben a regiszterben kell keresni". Üdv,Thomy
(#) p_istvan válasza Thomy hozzászólására (») Jún 9, 2012 /
 
A paraméterek száma és mérete szinte korlátlan lehet, a PIC munkaregisztereké viszont koránt sem...
Nem kell tudnod fizikailag hova teszi, majd a fordító gondoskodik róla (többek közt ezért is számít hogy C), esetleg optimalizálhat ha csak byte vagy int hosszúságú a paraméter és látja hogy a függvényben a paramétert az első lépésben felhasználod egy műveletben, nem kell tovább tárolnia későbbi felhasználásra a függvényben.
Igen a beszúrt assemblerben is lehet hivatkozni a paraméter nevével, pl. az alábbi CCSC kódrészletben az i3, i4, i5 változóval, igaz ezek lokális változók, de a paraméterek is ugyanolyan változók, a függvényben ugyanúgy használhatók.

  1. void ucc_isr(void){      
  2.   int8 i5, i4, i3;
  3.          
  4.   if (adc_meres) {       // minden mérés után egy mérés nélküli ciklus, hogy a mérés időzítésének bizonytalansága legalább a return idővel csökkenjen,
  5.      
  6.      i5 = n_ck;          // 5 utasításinként számolunk -> 1us (legalább egy legyen) min 24 órajel --> 4,8 us
  7.      i4 = n_ck_mar + 1;  // 4 utasítás hosszú ciklusok száma + 3 ciklus
  8.      i3 = 5 - n_ck_mar;  // 3 utasítás hosszú ciklusok száma + 3 ciklus
  9.      // 4 órajel (200 ns) pontosságú késleltetés                  
  10.      #asm                // (x*5) + 4*(n+1) + 3*(5-n) = 4*n + 4 + 15 -3*n = (x*5) + n + 19 utasítás késleltetés
  11.      x5: NOP
  12.          NOP
  13.          DECFSZ i5,f
  14.          GOTO x5
  15.          NOP
  16.      x4: NOP
  17.          DECFSZ i4,f
  18.          GOTO x4
  19.          NOP
  20.      x3: DECFSZ i3,f
  21.          GOTO x3
  22.          NOP  
  23.      #endasm
(#) Thomy válasza p_istvan hozzászólására (») Jún 10, 2012 /
 
Szia!

Értem, köszönöm.

Meg tudnád mondani, hogy hogyan kell a következő kódrészletet helyesen megírni?

  1. C fájlban:
  2.  
  3. extern void valami(int x);
  4. ...
  5. valami(100);
  6. ...
  7.  
  8. ASM fájlban:
  9.  
  10. _valami:
  11.   "x -= 1" // kérdéses sor
  12.   return


Itt akadtam el, mert nem találom a hívási konvenciót. Üdv Thomy
(#) p_istvan válasza Thomy hozzászólására (») Jún 10, 2012 /
 
Szervusz!
Így már értem a gondodat, "extern" assembler modult akarsz meghívni PIC C-ből! Ezt valószínűleg C fordítónként eltérő módon lehet kezelni. Ha megmondod milyen C-vel akarod megoldani a dolgot akkor lehet, tényleg tud majd valaki segíteni. Ennyit találtam hirtelen a problémáról HI-tech C-re:External Assembly Module
Én általában megmaradok a C nyelv eszközeinél, ha muszáj pár sor beszúrt assemblert írok. Ha teljesen assemblerben megírt modult kellene beilleszteni, akkor is egy C függvényben helyezném el, amely gondosodna a paraméterek átvételéről és ha kell a visszatérési érték átadásáról a hívó függvény részére.
(#) Thomy válasza p_istvan hozzászólására (») Jún 10, 2012 /
 
Szia!

A kérdésemet így is megoldottad, megpróbálom megírni inline assemblyként.

Köszi! Üdv, Thomy
(#) Zsora válasza p_istvan hozzászólására (») Jún 11, 2012 /
 
"ha muszáj pár sor beszúrt assemblert írok."

Bocsi a kukacoskodásért, de az Assembly nyelv fordítóját hívják assemblernek.
(#) kiskata hozzászólása Jún 11, 2012 /
 
Kedves hozzáértők...
Szeretnék egy feladat elvégzése után "elaltatni" egy 12F675-öt...
Hogyan fogjak hozzá? ...vagy elég ha delayt rakok egy ciklusba és akkor mivel semmi dolga - nem fogyaszt?
(#) vicsys válasza kiskata hozzászólására (») Jún 11, 2012 /
 
Keress rá a sleep utasításra.
(#) Vfr72 hozzászólása Jún 11, 2012 /
 
Sziasztok!

Az alábbi problémára keresek választ.
A portot (TRISB) kimenetnek konfigurálom.
A LATB-re kiírom a (B'11111111) értéket,
a WATCH ablakban ha megnézem a LATB értékét, akkor nem a D'255'-öt kapom vissza, hanem D'224'-et.
Megnéztem a PORTB regisztert is, de a jelenség ugyan az.

LISTP=PIC18F4550; lista megadása
INCLUDE; includde fájlok megadása
RADIXhex; alapértelmezet számrendszer megadása



org0x0020; program memoria kezdő címe

movlwb'00000000'
movwfTRISB
MAIN
movlwb'00000000'
movwfLATB
nop
movlwb'11111111'
movwfLATB


GOTOMAIN; ugrás a MAIN címkére

END


üdv. VFR72
(#) Hp41C válasza Vfr72 hozzászólására (») Jún 11, 2012 / 1
 
Szia!
Az RB0.. 3 analóg módban van. Ld. ADCON1 regiszter vagy a Config3H regiszter PBADEN bitje. ((6000))
(#) Vfr72 válasza Hp41C hozzászólására (») Jún 11, 2012 /
 
Szia!

Köszönöm a gyors segítséget.
Hogy erre miért nem gondoltam...

üdv. VFR72
Következő: »»   265 / 1207
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