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   896 / 1211
(#) apromax hozzászólása Jan 22, 2017 /
 
És egy másik kérdés a linkerrel kapcsolatban:

  1. typedef signed char         INT8;
  2. typedef signed short int    INT16;
  3. typedef union
  4. {
  5.     UINT8 Val;
  6.     struct
  7.     {
  8.         __EXTENSION UINT8 b0:1;
  9.         __EXTENSION UINT8 b1:1;
  10.         __EXTENSION UINT8 b2:1;
  11.         __EXTENSION UINT8 b3:1;
  12.         __EXTENSION UINT8 b4:1;
  13.         __EXTENSION UINT8 b5:1;
  14.         __EXTENSION UINT8 b6:1;
  15.         __EXTENSION UINT8 b7:1;
  16.     } bits;
  17. } UINT8_VAL, UINT8_BITS;
  18.  
  19. typedef union
  20. {
  21.     UINT16 Val;
  22.     UINT8 v[2] __PACKED;
  23.     struct __PACKED
  24.     {
  25.         UINT8 LB;
  26.         UINT8 HB;
  27.     } byte;
  28.     struct __PACKED
  29.     {
  30.         __EXTENSION UINT8 b0:1;
  31.         __EXTENSION UINT8 b1:1;
  32.         __EXTENSION UINT8 b2:1;
  33.         __EXTENSION UINT8 b3:1;
  34.         __EXTENSION UINT8 b4:1;
  35.         __EXTENSION UINT8 b5:1;
  36.         __EXTENSION UINT8 b6:1;
  37.         __EXTENSION UINT8 b7:1;
  38.         __EXTENSION UINT8 b8:1;
  39.         __EXTENSION UINT8 b9:1;
  40.         __EXTENSION UINT8 b10:1;
  41.         __EXTENSION UINT8 b11:1;
  42.         __EXTENSION UINT8 b12:1;
  43.         __EXTENSION UINT8 b13:1;
  44.         __EXTENSION UINT8 b14:1;
  45.         __EXTENSION UINT8 b15:1;
  46.     } bits;
  47. } UINT16_VAL, UINT16_BITS;



A fenti kódban az __EXTENSION és __PACKED nek mi a szerepe?
(#) pajti2 válasza minicooper hozzászólására (») Jan 22, 2017 /
 
Jó lenne az a kép nagyobb méretbe, nem olvashatóak a hibaüzenetek. Általában elárulja önként, hogy mi baja a progiddal, csak el kell olvasni.
(#) minicooper válasza pajti2 hozzászólására (») Jan 22, 2017 /
 
Az a gond hogy nekem valahogy nem.Windows-os környezetben sokat programoztam már és tudok is de egy Windows alá forditandó programnál a debug luxus a mikrokontrollerekez képest... számomra legalábbis érthetetlenek a hibaüzenetek.CCS még elment de az MPLAB kiveri a biztositékot.Ám valóban támogatja a CCS a PIC24et is.Köszönöm!
(#) pajti2 válasza apromax hozzászólására (») Jan 22, 2017 / 1
 
Az extension-ről egy post: Bővebben: Link
Magyarra fordítva a fejlesztői környezetükben gányoltak picit, aminek halom warning lett az eredménye, és azzal tudják eltüntetni. Nem a C nyelv eleme, nem csinál semmit, ne foglalkozz vele. Ha problémázik valamelyik fejlesztői környezet, simán töröld ki.

A packed 8 bit fölötti környezetekben annyit csinál, hogy tömöred helyezi el az adatokat. Például egy 32 bites fordító elkövethet olya optimalizálás címszóval, hogy ha 1 byte-os mező van egy struktúrában, akkor azt 32 bitesre egészíti ki azért, hogy az utána következő elemek 32 bit határra kerüljenek a memóriába (gyorsabb a hozzáférés úgy). Ha csak nem nagyon cipőkanállal kiszámolt a memóriád, nem akarod kommunikációban felhasználni azt a struktúrát, vagy egyébként is 8 bites környezetben vagy, egyszerűen kitörölheted, és nem lesz baj belőle.
(#) pajti2 válasza minicooper hozzászólására (») Jan 22, 2017 /
 
Copy paste bele szöveg file-ba, szöveg file betömörít winrarral, és rar állomány feltölt ide mellékletként.

Általában a legelső hibával érdemes elkezdeni, mert lehet, hogy ott annyira eltéved a fordítás menete, hogy utána már csak zagyvalékot reportol. Ha első hiba javítást kapott, fordítani újra. Ne lépd át az első hibát, muszáj azzal kezdeni.
(#) minicooper hozzászólása Jan 22, 2017 /
 
Ellenben most egy olyan kérdésem lenne hogy szükséges e szintillesztés ha UART-al szeretnék komunikálni egy 5v-os és egy 3.3v-os mikrokontroller közt vagy boldogulnak egymással?
(#) Hp41C válasza minicooper hozzászólására (») Jan 22, 2017 /
 
Milyen típusokról van szó? A 3.3V -os kontroller RxD lába 5V toleráns? Az 5V -os kontroller RxD lába a 3.3V -ot magas szintnek érzékeli?
(#) minicooper válasza pajti2 hozzászólására (») Jan 22, 2017 /
 
Azzal kezdem természetesen.Sok esetben az első hiba okozza a utánna következő akár százat is.De mivel megy a CCS eszem ágában sincs MPLAB-hez nyúlni.De mindenesetre köszönöm a segitő szándékot
(#) minicooper válasza Hp41C hozzászólására (») Jan 22, 2017 /
 
A kérdés oda vissza érvényes tehát tolerálja-e a 3.3v-os PIC a 5v-os TTL-t illetve elég-e a 3.3v a 5v-os PIC-nek UART-on.
(#) Hp41C válasza minicooper hozzászólására (») Jan 22, 2017 /
 
E helyett inkább a két típust adtad volna meg...
Általában az 5V -os típusok RxD bemenete ST, így 0.8*Vdd a magas szinthez tartozó bemeneti feszültség minimális értéke. Ha tányleg 5.00V -ról megy, akor min. 4.00V kell, amihez kell szintillesztő.
A hozzászólás módosítva: Jan 22, 2017
(#) apromax válasza pajti2 hozzászólására (») Jan 22, 2017 /
 
A packed -et láttam már korábban, de akkor ebben a szintaktikában volt használatos:
pl ebben a srukturában:
  1. struct foo
  2. {
  3. char b;
  4. int y[2] ;
  5. char a __attribute__ ((aligned (16)));
  6. int x[2]   __attribute__ ((packed));
  7. char f ;
  8. int h[2]  __attribute__ ((packed));
  9. }nnn;


Lényegében csak az a különbség közöttük, hogy a
char a __attribute__ ((packed)) -al adott struktúraváltozót lehet igazítani a struktúrában, míg a
struct __PACKED -el pedig egy egész struktúrát (pl. egy Union ban) ?

Kipróbáltam az alábbit is alátámasztandó a fentieket, nekem ez hibával fordult le:
  1. struct __attribute__ ((packed))
  2.     {
  3.         __EXTENSION UINT8 b0:1;
  4.         __EXTENSION UINT8 b1:1;
  5.         __EXTENSION UINT8 b2:1;
  6.         __EXTENSION UINT8 b3:1;
  7.         __EXTENSION UINT8 b4:1;
  8.         __EXTENSION UINT8 b5:1;
  9.         __EXTENSION UINT8 b6:1;
  10.         __EXTENSION UINT8 b7:1;
  11.         __EXTENSION UINT8 b8:1;
  12.         __EXTENSION UINT8 b9:1;
  13.         __EXTENSION UINT8 b10:1;
  14.         __EXTENSION UINT8 b11:1;
  15.         __EXTENSION UINT8 b12:1;
  16.         __EXTENSION UINT8 b13:1;
  17.         __EXTENSION UINT8 b14:1;
  18.         __EXTENSION UINT8 b15:1;
  19.     } bits;
A hozzászólás módosítva: Jan 22, 2017
(#) Elektro.on válasza balint730 hozzászólására (») Jan 22, 2017 /
 
Nekem is. És létrejön fordításkor a .hex file.
(#) Elektro.on válasza balint730 hozzászólására (») Jan 22, 2017 /
 
Még egy ötlet. Nem lehet, hogy ingyenes verziót használsz és a fordítandó kód nagyobb 2k nál?
(#) pajti2 válasza minicooper hozzászólására (») Jan 23, 2017 /
 
Idézet:
„E helyett inkább a két típust adtad volna meg...”
+1

Ha adatlapozni nem akarsz, van univerzális megoldás is:
-5v-os pic-ről a 3.3v irányába egyszerű ellenállás osztó.
-3.3v pic-ről 5v irányába fetes szintillesztő, vagy npn tranzisztor dupla inverter.
(#) nedudgi válasza minicooper hozzászólására (») Jan 23, 2017 /
 
Az a titokzatos 5V PIC miért nem mehet 3,3V tápról?
(#) cross51 válasza apromax hozzászólására (») Jan 23, 2017 /
 
Ha 8 bites uC használsz nem tudsz packed szerkezetet létrehozni mivel a memóri 8 bites igy nem kell a "csomagolással" foglalkozni.

A __PACKED eegy define ami nézi, hogy a kód 8 biten van vagy nem ha 8 bites az uC akkor semmi kerül a __PACKED helyére ha 16 vagy 32 bites akkor az attribute kerül oda ha nem 8 bitet használsz és úzgy dob hibát vallami elírás van.
(#) minicooper válasza nedudgi hozzászólására (») Jan 23, 2017 /
 
Mert rosszul irtam.Az 5V-os rész nem PIC csak a példa kedvéért irtam de mostmár értem a dolgot.Köszönöm mindenkinek
A hozzászólás módosítva: Jan 23, 2017
(#) picipic hozzászólása Jan 24, 2017 /
 
Sziasztok!

Függöny gépi mozgatásán bütykölök.
A mechanika lassan összeáll. A mozgatást ablaktörlő motorral tervezem.
A vezérlést RF jeladó és egy PIC 16F628A végezné.

A végálláskapcsolóval nem vagyok kibékülve.
Nem szeretnék mechanikus kapcsolókat és sok-sok vezetéket.
Arra gondoltam, hogy egy olyan áramkör kellene, ami figyeli a motor áramfelvételét,
és ha az egy adott érték fölé megy, egy jelet küld a PIC megadott lábára.
Ezt érzékelve a PIC leállítja a motort...stb.

(A PIC-el már néhány feladatot megoldottam a ház körül. Úgy vélem ez is menne.)


Kérdéseim:
1./ Az áramfelvétel figyelése a PIC-el megoldható-e?
2./ Milyen irányban kezdjek el kutakodni, hogy egy ilyen áramkört össze tudjak rakni.

Üdv:
picipic
A hozzászólás módosítva: Jan 24, 2017
(#) mrobi válasza picipic hozzászólására (») Jan 24, 2017 /
 
Komparátor esetleg? A motor áramfelvételét egy sorba kötött ellenállással tudod mérni. A rajta eső feszültség arányos az áramfelvétellel. A komparátor egyik bemenetére ezt a feszültséget kötöd. A másik bemenetre pedig egy ellenállás osztó és egy poti az állíthatóság kedvéért. Talán annyi baja lehet, hogy indulásnál is bebillen, de ezt mondjuk szoftverből meglehet oldani.
(#) Lamprologus válasza mrobi hozzászólására (») Jan 24, 2017 /
 
Ha van a PIC-nek analóg bemenete akkor a komparátor nem is kell ... negatív ágba a soros ellenállás, és azon figyeli a PIC az feszültségesést!
(#) Pali79 válasza Lamprologus hozzászólására (») Jan 24, 2017 /
 
A 16F628A-nak nincs analóg bemenete, csak komparátora....
(#) sonajkniz válasza picipic hozzászólására (») Jan 24, 2017 /
 
Inkább tegyél egy tárcsát a kihajtásra, és optokapukkal figyeld a forgását!
Azaz készíts hozzá egy kezdetleges encodert. Ezzel már könnyen feltaníthatod a véghelyzeteket, de akár köztes megállásokat is.
(#) mrobi válasza Lamprologus hozzászólására (») Jan 24, 2017 /
 
Mivel a kérdező 16f628-at említett...
Amúgy elgondolkodnék a 16f88-on. Abban van ADC.
(#) pajti2 válasza picipic hozzászólására (») Jan 24, 2017 /
 
Én a helyedben azt dönteném el először, akarsz-e galván kapcsolatot a mérő áramkör és a mért között, vagy sem. Ha nem, a soros ellenállás akkor is maradhat, de akkor egy optocsatolót rakj be abba a körbe. Mondjuk egy 0.5 ohm-os ellenálláson ha átfolyik 3A, akkor már 1.5V lesz a feszültség az ellenálláson, és a vele párhuzamos fotodióda kinyit. Optocsatolók adatlapjait nézegesd, milyen dióda feszültség milyen kimeneti áramot tud generálni. A kimeneti tranzisztorra rárakni egy munkaellenállás a kollektorra, ami csak normális áramnál húzzon annyit, hogy egy ST bemenet le tudjon billenni. De ha fontos, analóg mérést is csinálhatsz rajta, mert normális optocsatolóknál a karakterisztika viszonylag kicsi szórású, és kb 10-20 mA pontosan meg tudod mondani, mekkora áram folyik a motornál. Vagy ha még pontosabb kell, akkor csináld galván kapcsolattal, csak akkor figyelj rá, hogy ne kötögesd egybe azokat az áramköröket galván leválasztás nélkül, mert egy függönynél annyi lehet a sztatikus elektromosság, hogy simán kinyírja az eszközeidet valami földhurok.
(#) bbb hozzászólása Jan 25, 2017 /
 
Sziasztok!

PIC18F25J50 jószággal szeretnék SPI-t használni MPLAB-X és XC8 környezettel. A problémám, hogy nem találtam meg, hogyan lehetne definiálni, hogy az RP lábak melyike legyen felhasználva SDO, SCL lábaknak, így a WriteSPI() fv. nem azokat a lábakat mozgatja meg, amiket én szeretném.
  1. #define SDO LATBport.LB3
nem vezetett eredményre (logic analyzer-t ráakasztottam, hogy meglessem mi történik, de az általam óhajtott lábak nem mozognak).
Mi a megoldás erre?
(#) nedudgi válasza bbb hozzászólására (») Jan 25, 2017 /
 
Fel kell tölteni a PPS regisztereket. I/O portok környékén keresd.
(#) Pali79 hozzászólása Jan 25, 2017 /
 
I2C portbővítővel lehet olyat csinálni, mint a PIC-nél a BSF, BCF parancs, tehát, hogy csak az egyik bit állapotát változtatni vagy csak az egész regiszter újraírása lehetséges?
(#) bbb válasza nedudgi hozzászólására (») Jan 25, 2017 /
 
Köszönöm! Ez adott egy lökést, hogyan is kellene keresgélnem, s ráleltem erre az oldalra. Holnap ki fogom próbálni.
(#) Owert hozzászólása Jan 25, 2017 /
 
Sziasztok! Adott egy PIC16F877A mikrovezérlő, ami vezérelne egy dc motort pwm jel küldéssel, amit kézileg oldottam meg. A gond a következő: C-ben programozva (MikroC) egy while ciklusban van az egész program a gombok érzékelése miatt, ami azért probléma, mivel ha van mondjuk benne egy késleltetés, akkor addig nem ad pwm jelet a vezérlő. Mivel utána néztem és elvileg nem megoldható két while ciklus ezért javaslatokat szívesen fogadnék a probléma megoldásra. A cél az lenne, hogy függetlenítsem a fő programot a pwm vezérléstől. Előre is köszönöm!
(#) mrobi válasza Owert hozzászólására (») Jan 25, 2017 / 1
 
877-ben szerintem van PWM modul. Azt kellene használni. Így a pwm jeled független lenne a főprogramodtól. A fűprogramban csak az értékét kell megadnod.
Következő: »»   896 / 1211
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