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   565 / 1210
(#) hd8783 válasza KBal76 hozzászólására (») Szept 8, 2014 /
 
Köszönöm a segítséget, megtaláltam a pdf-ben.
(#) brugo hozzászólása Szept 8, 2014 /
 
Szervusztok,
Hogyan tudnám megnézni az MPLABX alatt a beimportált .hex file mennyi memóriát foglal ?A Dashboard -ot hiába jelenitem meg 0 százalékot mutat .
(#) Pali79 válasza brugo hozzászólására (») Szept 8, 2014 /
 
El kell indítani a szimulátort, akkor a dashboardon megjelenik két %-os sáv és alatta a pontos adat.
(#) Pali79 válasza (Felhasználó 15355) hozzászólására (») Szept 8, 2014 /
 
Ez a legjobb megoldás az biztos.
(#) matheattila válasza Birs Alma hozzászólására (») Szept 9, 2014 /
 
Szia.
Az attól függ, hogy milyen PIC-re szeretnéd írni a programot (10Fxxx, 12Fxxx, 16Fxxx, 18F, PIC24, dsPIC, PIC32...) mert mindegyikre más kell nem beszélve a fejlesztő környezetről (MPLAB vagy MPLABX), pl:
10F, 12F és 16F -re szerintem a legjobb az MPLAB (legfeljebb v8.88) + Hi-Tech C;
18F-re MPLAB + C18;
PIC24 és dsPIC-re MPLAB + C30;
PIC32-re MPLAB + C32;
Ha MPLABX-et használsz akkor XC8, XC16, XC32;
Esetleg ha mégse a gyártó programjait használod hanem pl a MikroC-t akkor ott is a PIC családnak megfelelőt (mikroC PRO for PIC / for dsPIC / for PIC32...)(Mikroelektronika...
(#) brugo válasza Pali79 hozzászólására (») Szept 9, 2014 /
 
Köszönöm, sikerült szépen működik !
(#) Owert hozzászólása Szept 10, 2014 /
 
Szép napot mindenkinek! Valaki használt már PIC K150 USB programozót? Win7 64 bit-es rendszer alatt szeretném használni, viszont nem ismerte fel automatikusan. Találtam programot hozzá, az meg még nem találta meg, eszközkezelőben sárgán, USB SERIAL-ként ismeri fel, tehát nincs telepítve.
(#) Birs Alma válasza matheattila hozzászólására (») Szept 10, 2014 /
 
Köszönöm a részletes választ!
L.
(#) icserny válasza Owert hozzászólására (») Szept 10, 2014 / 1
 
Google segítségével találsz információt és drivert. Bővebben: Link Első körben nyilván egy Prolific PL2303 driver kell neki.
Én nem vennék ilyet. (igaz, ezt nem kérdezted...)
(#) kzolt válasza icserny hozzászólására (») Szept 10, 2014 /
 
Szia!
Nekem a csatolt képen látható driver-el sikerült.
Te válaszd ki, ne a számítógép.
(#) Owert válasza icserny hozzászólására (») Szept 10, 2014 /
 
Köszönöm, közben találtam már szoftver+égető kombót hozzá. Én sem támogatom az ilyen noname / soros portos dolgokat, csak hát a pickit egy hangyányit drágább. Egyébként tökéletesen szuperál.
(#) Owert válasza kzolt hozzászólására (») Szept 10, 2014 /
 
Nekem ezt a lehetőséget nem dobta fel, sárgán, eszközillesztő nélküli USB SERIAL-nak ismerte fel, aztán a letöltött eszközillesztő és égető program kombóval felismerte rendesen, ott már Prolific szerepel. Köszönöm a választ egyébként!
(#) patrik81 hozzászólása Szept 10, 2014 /
 
Sziasztok!

Írtam egy ilyen programot:
Az a kérdésem,hogy jó-e így?Inicializál az LCD-m?
  1. #include <pic.h>
  2. #include "config.h" //FCMEN=ON a többi OFF
  3. void delay(unsigned int varakozasIdo)
  4. {
  5.   for (unsigned int counter = 0; counter < varakozasIdo; counter++)
  6.   {
  7.       ;
  8.   }
  9. }
  10. int main()
  11. {
  12.     TRISA = 0;
  13.     TRISC = 0;
  14.     RC2 = 0; //kontraszt
  15.    
  16.     delay(1000); //15 ms
  17.    
  18.     RC1 = 0; //RS
  19.     RC0 = 0; //R/W   (utasítást írunk)
  20.    
  21.     RA5 = 0; //DB7
  22.     RA4 = 0; //DB6
  23.     RA3 = 1; //DB5
  24.     RC5 = 1; //DB4 (a DL=1 jelenti,hogy 8 bites üzemmódba kapcsoljuk az LCD-t)
  25.    
  26.     RA2 = 1;
  27.     RA2 = 0; //RA2 engedélyező bit.1 engedélyez,0 tilt
  28.    
  29.     delay(300); //4,5 ms
  30.    
  31.     RC1 = 0; //RS
  32.     RC0 = 0; //R/W   (utasítást írunk)
  33.    
  34.     RA5 = 0; //DB7
  35.     RA4 = 0; //DB6
  36.     RA3 = 1; //DB5
  37.     RC5 = 1; //DB4 (a DL=1 jelenti,hogy 8 bites üzemmódba kapcsoljuk az LCD-t)
  38.    
  39.     RA2 = 1;
  40.     RA2 = 0; //RA2 engedélyező bit.1 engedélyez,0 tilt
  41.    
  42.     delay(7);//kb 100us
  43.    
  44.     RC1 = 0; //RS
  45.     RC0 = 0; //R/W   (utasítást írunk)
  46.    
  47.     RA5 = 0; //DB7
  48.     RA4 = 0; //DB6
  49.     RA3 = 1; //DB5
  50.     RC5 = 1; //DB4 (a DL=1 jelenti,hogy 8 bites üzemmódba kapcsoljuk az LCD-t)
  51.    
  52.     RA2 = 1;
  53.     RA2 = 0; //RA2 engedélyező bit.1 engedélyez,0 tilt
  54.    
  55.     delay(7);//kb 100us
  56.    
  57.     RC1 = 0; //RS
  58.     RC0 = 0; //R/W   (utasítást írunk)
  59.    
  60.     RC4 = 1; //két soros az LCD
  61.     RC3 = 0; //5x7 font(karakterpont)
  62.     RA5 = 0; //DB7
  63.     RA4 = 0; //DB6
  64.     RA3 = 1; //DB5
  65.     RC5 = 1; //DB4 (a DL=1 jelenti,hogy 8 bites üzemmódba kapcsoljuk az LCD-t)
  66.    
  67.     RA2 = 1;
  68.     RA2 = 0; //RA2 engedélyező bit.1 engedélyez,0 tilt
  69. }


Kód tag javítva.
-moderátor-
A hozzászólás módosítva: Szept 10, 2014
(#) usane válasza Owert hozzászólására (») Szept 11, 2014 /
 
Lehet, hogy drágább, de szerintem megéri, minthogy egy ilyennel kelljen szívni. Főleg ha rendszeresen használod. És az ICSP-t sem azért találták ki, hogy foglalatba dugdossuk a csipet, ha meg SMD kell akkor mit csinálsz? Építhetsz is egy klónt akkor olcsóbb. Na mindegy én nem szólok bele senki költségvetésébe, csak egy vélemény.
A hozzászólás módosítva: Szept 11, 2014
(#) vidra8 hozzászólása Szept 11, 2014 /
 
Sziasztok!

Szeretnék építeni egy nagy kijelzős led-es digitális órát, mondjuk PIC-es változatot. Ehhez tudna esetleg valaki valamilyen jó kapcsolást esetleg komplett tervet?
Tudom, hogy a google tele van, de mégse. Általában ilyen Arduino megoldásokkal találkozom, ami nekem nem igazán jó.
Köszönöm.
(#) vidra8 válasza (Felhasználó 15355) hozzászólására (») Szept 11, 2014 /
 
Köszi de ezeket a kapcsolásokat már néztem itt is. Igazából nekem valami LED matrix-os kijelzős megoldás lenne szimpatikus. Vannak ilyenn 8x8-as ledpaneljeim is vagy esetleg egy marék ledből csinálnék hozzá kijelzőt.
(#) usane válasza vidra8 hozzászólására (») Szept 11, 2014 /
 
(#) vidra8 válasza usane hozzászólására (») Szept 11, 2014 /
 
Köszi. Mint ha már ezzel is találkoztam volna, csak átsiklottam felette mert csak 4 digites. De egynek jó lesz. Köszönöm.
(#) kissi válasza vidra8 hozzászólására (») Szept 11, 2014 /
 
Igaz, hogy még nem tudtam segíteni Neked ebben a témakörben, de szerintem jó lenne, ha megadnád a "sarokköveket", mert így elmegy a kollégák lelkesedése, ha utána közlöd, hogy ez ezért meg azért nem jó! Írd le, hogy milyet szeretnél, ne utána derüljön ki, hogy LED mátrix-os kell, meg több, mint 4 digites... !
(#) icserny válasza patrik81 hozzászólására (») Szept 12, 2014 /
 
Elég nehéz követni ezt a bitenkénti írogatást (ha nem változik az adat, nincs is értelme újraírkálni!), de szerintem rossz az inicializálás.

A honlapomon az lcd4bit.c példaprogramot próbáld meg követni!

- A program elején található #define sorokat a saját bekötésednek megfelelően kell átírni.
- Ha nem akarod használni a hardveres foglaltság figyelést, akkor a wait_lcd4_busy() függvény akár el is maradhat.
- A lcd_write_nibble() (egy félbájt kiküldése) és az lcd_en_pulse() (az E jel pulzálása) függvényeket a saját bekötésednek megfelelően írd át.
- A string kiíratására majd írj egy saját függvényt (a printf használata fölösleges rongyrázás), ami karakterenként kiír, amíg nulla kódot nem talál.

Megjegyzés: nagyon hülye viccnek tartom, hogy bizonyos kifejezésekre ráugorva a fórummotor önkényesen lecserél linkeket! (A beszúrás még hagyján...)
A hozzászólás módosítva: Szept 12, 2014
(#) proksa1 hozzászólása Szept 12, 2014 /
 
Sziasztok! Egy kis segítségért fordulnék hozzátok. Adott egy TLV5628C DAC konverter amit egy PIChez illesztenék. A kommunikációban kellene egy kis segítség. Az adatlap szerint soros interfészt használ(spi), de nincsen chipselect lába, mivel az áramkörömben 3db-ot használok ezért felraktam őket külön lábakra, hogy majd software-es spi-vel hajtom meg őket, úgyis csak kiküldeni szeretném feléjük adatokat. A kérdés, hogy mit kellene nekem küldenem,hogy mondjuk a DACA kimenetnek értéket tudjak adni? a referenciám 5V tehát mondjuk a 2.5Vhoz a 127 tartozik. 12bites parancsszót ír az adatlap tehát akkor kellene küldenem mondjuk azt hogy 1 és 127 (utolsó 3bit a címe a beállítandó kimenetnek, a 127 meg a kimenet értéke lenne illetve a LDAC és LOAD-ra lefutó él) mondjuk ez így elküldve 16bit.

adatlap: Bővebben: Link

Link javítva, használd a link gombot!
-moderátor-
A hozzászólás módosítva: Szept 12, 2014
(#) patrik81 hozzászólása Szept 12, 2014 /
 
Sziasztok!

Írtam egy ilyen programot.Miért nem világít a két LED egyszerre(RC0 és RC1)?A sorrendtől függ,hogy vagy az egyik vagy a másik.

  1. #include <pic.h>
  2. #include "config.h"//FCMEN ON a többi OFF
  3. int main()
  4. {
  5.     TRISC=0;
  6.     RC0=1;
  7.     RC1=1;
  8.     while(1);
  9. }
(#) icserny válasza patrik81 hozzászólására (») Szept 12, 2014 /
 
Idézet:
„A sorrendtől függ,hogy vagy az egyik vagy a másik.”

Read-Modify-Write (RMW) probléma. Így jár, aki bitenként írja a PORTx regisztereket... A honlapomon az I/O portok fejezetben a PORTx regiszterek szekcióban elrettentő példát is mutatok rá.
(#) patrik81 válasza icserny hozzászólására (») Szept 12, 2014 /
 
Átírtam,hogy ne bitenként állítsam a portokat,de így sem működik,ráadásul olvashatatlanabb lett a kód.
  1. #include <pic.h>
  2. #include "config.h" //FCMEN=ON a többi OFF
  3.  
  4. void delay(unsigned int varakozasIdo)
  5. {
  6.   for (unsigned int counter = 0; counter < varakozasIdo; counter++)
  7.   {
  8.       ;
  9.   }
  10. }
  11. int main()
  12. {
  13.     TRISA = 0;
  14.     TRISC = 0;
  15.     //PORTA bitjei:5=D7,4=D6,3=D5,2=E,1=D0,0=D1
  16.     //PORTC bitjei:5=D4;4=D3;3=D2,2=V0;1=RS,0=R/W
  17.     delay(6000); //45 ms-ot várunk a tápfeszültség miatt
  18.  
  19.     //funkció beállítás(8 bites,két soros,5x8 fontos)
  20.     PORTA = 0b001100;
  21.     PORTC = 0b00110000;
  22.     delay(600);
  23.     PORTA = 0b001000;
  24.     PORTC = 0b00110000;
  25.     delay(600); //45 us
  26.  
  27.     //az előző funkció beállítás ismétlése
  28.     PORTA = 0b001100;
  29.     PORTC = 0b00110000;
  30.     delay(600);
  31.     PORTA = 0b001000;
  32.     PORTC = 0b00110000;
  33.     delay(600); //45 us
  34.  
  35.     //kijelző beállítás(kijelző,kurzor)
  36.     PORTA = 0b000101;
  37.     PORTC = 0b00011000;
  38.     delay(600);
  39.     PORTA = 0b000001;
  40.     PORTC = 0b00011000;
  41.     delay(600); //45 us
  42.  
  43.     //kijelző törlés
  44.     PORTA = 0b000110;
  45.     PORTC = 0b00000000;
  46.     delay(600);
  47.     PORTA = 0b000010;
  48.     PORTC = 0b00000000;
  49.     delay(600); //45 us
  50.  
  51.     //entry mód beállítás (jobbra ír,képernyő eltolás)
  52.     PORTA = 0b000101;
  53.     PORTC = 0b00001000;
  54.     delay(600);
  55.     PORTA = 0b000001;
  56.     PORTC = 0b00001000;
  57.     delay(600); //45 us
  58.  
  59.     //vége az inicializálásnak
  60.     while(1);
  61. }
(#) Hp41C válasza patrik81 hozzászólására (») Szept 12, 2014 /
 
Az üres ciklust nem optimalizálja ki a fordíó? Meg kellene keresni a könyvtári várakozó függvényeket.
(#) icserny válasza patrik81 hozzászólására (») Szept 13, 2014 /
 
Mondtam, hogy írj egy lcd_write_nibble() függvényt, ahhor nem kell állandóan a PORTA/PORTC bitjeivel szerencsétlenkedni. Mindjárt áttekinthetőbb lesz az egész.
(#) ktamas66 válasza patrik81 hozzászólására (») Szept 13, 2014 /
 
Mellékelek egy pdf-et. Itt szépen le annak írva az utasítás végrehajtási idők, és az inicializálás menete az időzítésekkel. Kis ráhagyással szoktam csinálni a "kompatibilis " kijelzők miatt.
(#) Birs Alma hozzászólása Szept 13, 2014 /
 
Sziasztok,

Miért van az, hogy ez jól működik, de csak ha az aktuális paramétere konstans:

  1. void lcdDSetPos(unsigned char row, unsigned char col)
  2. {
  3.     unsigned char lcdDDRAMAddr ;
  4.     lcdDDRAMAddr = (row & 0x01) * 0x40 - (row & 0x02) * 44 + col ;
  5.     lcdDPutCom(0b10000000 | lcdDDRAMAddr ) ;
  6. }
  7.  
  8.  
  9. .
  10. .
  11. .
  12.  
  13.     // ez teljesen jól működik
  14.     lcdDSetPos(1, 5) ;
  15.  
  16.     // így nem működik !!!!
  17.     unsigned char sor  ;
  18.     unsigned char osz  ;
  19.     sor=1 ;
  20.     oszlop=5 ;
  21.     lcdDSetPos(sor, osz) ;



Ez meg egyáltalán nem működik jól:

  1. void _lcdDSetPos(unsigned char row, unsigned char col)
  2. {
  3.     unsigned char lcdDDRAMAddr ;
  4.     unsigned char _row ;
  5.     unsigned char _col ;
  6.     _row=row ;
  7.     _col=col ;
  8.     lcdDDRAMAddr = (_row & 0x01) * 0x40 - (_row & 0x02) * 44 + _col ;
  9.     lcdDPutCom(0b10000000 | lcdDDRAMAddr ) ;
  10. }


XC8-ban próbálom.
A hozzászólás módosítva: Szept 13, 2014
(#) zenetom válasza Birs Alma hozzászólására (») Szept 13, 2014 /
 
Szia!
Céül annyira nem értek, de lehet rossz változót adtál meg a függvényben?
Idézet:
  1. // így nem működik !!!!
  2.     unsigned char sor  ;
  3.     unsigned char osz ;   <------- itt"osz" van
  4.     sor=1 ;
  5.     oszlop=5 ;    <------- itt "oszlop" van
  6.     lcdDSetPos(sor, osz) ;   <--------- itt megint "osz" van, aminek nincs értéke (vagy random)

A hozzászólás módosítva: Szept 13, 2014
(#) kovacs gabor daniel hozzászólása Szept 13, 2014 /
 
Sziasztok! Mostanában elég sok időt töltök Arduino programozásával és külonböző hardware-ek összeállításával. Ezeket a "kreációkat" be szeretném ültetni több berendezésembe is. Mivel csak egy Arduino UNO R3 van a bírtokomban, ezért arra gondoltam, hogy az Arduino-t, PIC segítségével kellene helyettesítsem. De mivel a PIC mikrovezérlők világa tőlem messze áll, ezért gondoltam felteszek néhány kérdést:
-Miben különbözik egy PIC programozási nyelve az Arduinonál megszokottól?
-Programozó hiányában, lehetséges-e az Arduino-t erre a célra felhasználni?
-Melyek a legszükségesebb alkatrészek, egy PIC üzembe helyezéséhez?
-Egy ilyen mikrovezérlőt lehet esetleg többször is újraprogramozni, ha esetlegesen az illető program hibás vagy nem megfelelő?
Válaszaitokat előre is köszönöm
Következő: »»   565 / 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