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   1212 / 1225
(#) wincso válasza (Felhasználó 32034) hozzászólására (») Márc 9, 2025 /
 
A projektből küldtem a fájlokat , csak egy szük kodrészletet tettem fel mert ott a bajom, a bánatom ugyanaz , hogy a pic által mért adatokat nem tudom megjeleníteni a weboldalon, max lehet rosszul írtam le.
Nagyon köszönöm az eddigi segítséget.
(#) glaci hozzászólása Márc 13, 2025 /
 

12f683

Sziasztok!
pic12f683 picet használok. A GPIO5 lábat kimenetként szeretném használni, de nem akar kimenetként működni. Igazából lóg a levegőben. A mainban lehet, hogy hiányzik valami.
  1. void main()
  2. {
  3.   OPTION_REG         = 0x82;      //megszakítás a felfutó élnél,  előosztás 1/8
  4.   TMR0=255;
  5.   // IOC= 9;           // megszakítás engedélyezés a 0,3 bemeneteken
  6.   // INTCON=0b11001000;  //GIE és GPIE bitek engedélyével a perifériás megszakítás engedély
  7.  
  8.   INTCON=0b11101000;
  9.   /* INTCON.GIE=1;  //globális megszakítás engedély
  10.    INTCON.PEIE=1;  //perifériás megszakítás engedély
  11.    INTCON.T0IE=1;  //timer0 tulcsordulás megszakítás engedély
  12.                     //A T0IF lábat törölni kell megszakítás után
  13.    INTCON.GPIE=1;  //az input-output lábakon történő változás okozta megszakítás engedély
  14.                     //A GPIF lábat törölni kell megszakítás után  */
  15.    OSCCON=0b01110001;   // 8mhz belső oszcillátor
  16.    CMCON0=7;         //komparátor kikapcsolva
  17.  
  18.    ANSEL=0;          //analóg csatornák kikapcsolva
  19.    //         543210
  20.    //TRISIO=0b00001001;    // 0,3 láb bemenet
  21.    TRISIO=0x9;
  22.    GPIO=0;
  23.    GPIO.GP5=1;
  24.    figyel=0;
  25.    delay_ms(500);
(#) majkimester válasza glaci hozzászólására (») Márc 13, 2025 /
 
A configuration bits-ben az oscillátor INTOSCIO-ra van állítva?
(#) glaci válasza majkimester hozzászólására (») Márc 13, 2025 /
 
Szia! Ezt hol tudom állítani?
(#) majkimester válasza glaci hozzászólására (») Márc 13, 2025 /
 
Fordítótól függően, például a config macroval:
  1. __CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & BOREN_OFF);

vagy pragma-val:
  1. #pragma config FOSC = INTOSCIO
(#) glaci válasza majkimester hozzászólására (») Márc 13, 2025 /
 
Microc-ben programozok. Abban a macro ugye jó?
(#) majkimester válasza glaci hozzászólására (») Márc 13, 2025 /
 
Ott nem tudom mi van, a fentiek xc8-ban használhatóak.
(#) wincso válasza glaci hozzászólására (») Márc 13, 2025 /
 
A microc Ben az osszcilátort a projekt tulajdonságoknál modosítható ,bvalamint az osscon és osctune byteok helyes beállításával.
(#) Lali67 hozzászólása Márc 14, 2025 /
 

GY21 cím kiolvasás

Nagyon régen programoztam PicbasicPro-ba és most kellene egy páratartalom mérő amihez GY21-et választottam de nem tudok még címet sem kiolvasni, 20Mhz -en 16f877-t használok. Mit csinálok rosszul? Valaki tudna segíteni?
DEFINE OSC 20
DEFINE I2C_SLOW 1

SDA VAR PORTB.4
SCL VAR PORTB.0
TRISB.4 = 1
TRISB.0 = 1
OPTION_REG.7 = 0

address VAR BYTE
ack VAR BYTE
found VAR BYTE

LCDOUT $FE, 1, "I2C kereses..."
PAUSE 1000

found = 0

FOR address = $08 TO $7F '
I2CWRITE SDA, SCL, address, 0, ack
IF ack = 0 THEN
found = 1
LCDOUT $FE, $C0, "Cim: ", HEX2 address
PAUSE 2000
ENDIF
NEXT address

IF found = 0 THEN
LCDOUT $FE, $C0, "Nincs eszkoz!"
ENDIF

END
(#) KoblogPerGyok válasza Lali67 hozzászólására (») Márc 18, 2025 /
 
Szia!

Ehhez a programhoz nem értek, de nem világos minden nekem. Van logikai analizátorod? Az sokat segít ilyen esetben.

De ha a PIC a master, és az adja ki az órajelet is, akkor annak a lábnak nem digitális kimenetnek kell lennie? Mert mintha most input lenne.

IGEN, tévedtem, azok jók, bocsánat!

De persze tévedhetek is, mert itt van ez:
I2CWRITE
Lehet ez a függvény beállít mindent, bár nem tudom hogy ebben a környezetben ez a lib hogy van meghívva.
Illetve nem tudom, hogy minden regisztert beállít-e ez a függvény vagy sem.

Nem lehetne C-ben? Mplab X-el megoldani a problémát?
A hozzászólás módosítva: Márc 18, 2025
(#) KoblogPerGyok válasza Lali67 hozzászólására (») Márc 18, 2025 /
 
Mert elvileg itt egy jó leírása az egésznek, amiben kódok is vannak. A .h fájlokat meg kell csinálni és utána include-al berántani. A keresést meg ciklusba tenni.

Bővebben: Link
(#) Máté Tibor Zoltán hozzászólása Márc 20, 2025 /
 

PIC16F877A

Sziasztok!
Most kezdek PIC-el foglalkozni, de már is elakadtam. Lehet-e a PIC16F877A PIC EEPROM memoriáját előre beprogramozni karaktergenerátornak és, ha igen hogyan? Egy rövid leírás és egy program jól jönne! Köszönettel.
(#) Pali79 válasza Máté Tibor Zoltán hozzászólására (») Márc 20, 2025 /
 
Szia!
Először is milyen nyelven írod a programot?
Másodszor pedig, ha most kezdesz el a PIC programozással foglalkozni, szvsz nem pont az eeprom kezeléssel kellene kezdeni.
(#) Máté Tibor Zoltán válasza Pali79 hozzászólására (») Márc 20, 2025 /
 
Ha nem tudom megoldani a karaktergenerátort nem is érdemes foglalkozni, hogy mely nyelven írom a programot! Amúgy minden tanácsot, segítséget örömmel fogadok.
(#) Bakman válasza Máté Tibor Zoltán hozzászólására (») Márc 20, 2025 / 1
 
Idézet:
„nem is érdemes foglalkozni, hogy mely nyelven írom a programot”
Akkor legyen XC8-ra pár példa:

Fordítás közben EEPROM tartalom készítése (egyszerűsített változat):
  1. #if _PIC18
  2. #define DELTA_EEPROM 1
  3. #else
  4. #define DELTA_EEPROM 2
  5. #endif
  6.  
  7. #define EEPROM_DATA(startaddress, ...)                            \
  8.    asm(" psect eeprom,class=EEDATA,delta="___mkstr(DELTA_EEPROM)  \
  9.        ",space="___mkstr(3)",noexec");                            \
  10.    asm(" org " #startaddress         );                           \
  11.    asm(" irp arg," #__VA_ARGS__ );                                \
  12.    asm("  db arg               ");                                \
  13.    asm(" endm                  ")
  14.  
  15. EEPROM_DATA(0x10, 72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 32, 32, 32, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 13, 34, 56, 128, 255, 0b0010);

XC8 belső funckióit használva:
  1. uint8_t x;
  2. x = EEPROM_READ(3); //olvasás (cím)
  3. EEPROM_WRITE(3, x); //írás (cím, adat)

Igény szerint, saját funkció (PIC16F18426-hoz írtam):
  1. //address 0 - 255
  2.  
  3. void ee_write(uint8_t address, uint8_t data) {
  4.     uint8_t int_value = INTCON;
  5.  
  6.     NVMCON1bits.NVMREGS = 1;
  7.     NVMADR = 0x7000 | address;
  8.     NVMDATL = data;
  9.     NVMCON1bits.WREN = 1;
  10.     GIE = 0;
  11.     NVMCON2 = 0x55;
  12.     NVMCON2 = 0xAA;
  13.     NVMCON1bits.WR = 1;
  14.     while (NVMCON1bits.WR);
  15.     NVMCON1bits.WREN = 0;
  16.     INTCON = int_value;
  17. }
  18.  
  19. uint8_t ee_read(uint8_t address) {
  20.     NVMADR = 0x7000 | address;
  21.     NVMCON1bits.NVMREGS = 1;
  22.     NVMCON1bits.RD = 1;
  23.     return (NVMDATL);
  24. }


Tényleg kellene pontosítani pár dolgot. Legfőképpen azt, milyen nyelven akarsz programozni, melyik fejlesztőkörnyezetet akarod használni. Milyen karakterket, milyen kijelzőhöz akarsz generálni? Biztos vagy, a műszaki szemmel nézve őskövület, PIC16F877A használatában? Ez utóbbi annyira nem kritikus meg talán jobb is egyszerűbbel kezdeni, de jó ha tudod, ma már eljárt felette az idő.
(#) Máté Tibor Zoltán válasza Bakman hozzászólására (») Márc 21, 2025 /
 
Köszönöm a választ. Valóban grafikus kijelzőhöz kell és olyan ami nem felejti el kikapcsolás után sem, tehát mint egy PROM, EPROM vagy EEPROM. Külső karaktergenerátort tudok készíteni EPROM
2732 -vel a gond hogyan kerül be a PIC -be? A PIC16F877A a kezdőknek ajánlott, elnyűhetetlen PIC alapján került képbe és a sok IO miatt!
(#) Bakman válasza Máté Tibor Zoltán hozzászólására (») Márc 21, 2025 /
 
Az EEPROM mérete nevezett PIC-ben 256 bájt. Ha egyre gondolunk, a 2732-es EPROM 4096 bájtot tud tárolni. Ha a PIC programmemóriáját is felhasználod, akkor 256 + 8192 bájtnyi területed van.

Bekerülni a már említett módon tud. Esetleg a programmemóriát használva (pl. egy CRC tábla DS18B20 hőmérő IC-hez):
  1. const uint8_t crctable[256] = {0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};
Talán ez a legegyszerűbb feltöltési mód.
(#) Máté Tibor Zoltán válasza Bakman hozzászólására (») Márc 21, 2025 /
 
Köszönöm a választ és az önzetlen segítséget! Én nem akarom mindkettőt ezért szeretném, ha már a PIC tartalmazná a karaktergenerátort. (A PIC EEPROM területe elegendő.) Említetted a PIC16F877 már elavult típus. Ha tudsz (szerintem igen) ajánlani modernebb hasonló tulajdonságokkal rendelkező típust tedd meg. (Még nincs kész tervem csak most alakul.) A programírást MPLAB x IDE (MPLAB-v.6.25) a feltöltést pickit3 segítségével gondoltam. (A pickit3 összes kisegítője megvan!) Ha továbbra is tudsz segíteni előre is köszönöm!
(#) Hp41C válasza Máté Tibor Zoltán hozzászólására (») Márc 21, 2025 /
 
PIC16F877 helyett 16F877A, 16F887, 16F1937, 18F2620, 18F46Q84 stb.
(#) Bakman válasza Máté Tibor Zoltán hozzászólására (») Márc 21, 2025 /
 
Idézet:
„szeretném, ha már a PIC tartalmazná a karaktergenerátort”
Nem teljesen értem ezt a részt. A karakter generálása és annak tárolása két külön dolog. Generálni azzal generálod, amivel neked egyszerű, akár papíron is meg lehet csinálni. Az EEPROM (és/vagy a programmemória) adatokat tud tárolni, a feltöltésre írtam pár példát.

40 lábú PIC-ből van sok típus. Hacsak valami extra szolgáltatás nem kell, én PIC18F47Q43-at szoktam használni (EEPROM: 1024 bájt), az kb. mindenre elég, sőt. Nekem egyszerűbb így, mégha néha túl sokat is tud a feladathoz képest de nem kell megtanulnom 20 különböző adatlapot (és errata doksit), egyszerre többet véve általában van mennyiségi kedvezmény is. Csináltam már belőle három számjegyes nyomásmérőt is hétszegmenses kijelzővel. A tudásának kb. 0.2 %-a lett kihasználva de nem vacakoltam kisebb/régebbi kontrollerrel (eleve nagyon ügyes ADC van benne).

PIC16F877A: 2800 Ft nettó
PIC18F47Q43: 1200 Ft nettó
(#) Bakman válasza (Felhasználó 32034) hozzászólására (») Márc 21, 2025 /
 
Jó meglátások, valahogy nem jutott eszembe a lista:

LED villogtatás, "Hello world!" stb.
(#) Pali79 válasza Máté Tibor Zoltán hozzászólására (») Márc 21, 2025 /
 
Lehet előrébb jutnánk ha leírnád pontosan milyen célt szeretnél megvalósítani. Az eddigiekből én nem vagyok meggyőződve róla, hogy neked feltétlenül az eeprom-ra szükséged.
(#) reiti válasza Pali79 hozzászólására (») Márc 23, 2025 /
 
A perifériás mező a gyors mozgásokra van kihegyezve.
Ott a "sípoló" led is zavar hogy villog.
Annak ellenére hogy az idegrendszer 40...60Hz-en ketyeg elvileg.
(#) Máté Tibor Zoltán válasza Pali79 hozzászólására (») Márc 24, 2025 /
 
Lehet igazad van! Tehát kell egy 40 - ig számláló számláló és ezt az értéket megjeleníteni, PORTB (grafikus kijelzőn) és (PORTC) hex adatként kivezetni. A folyamat közben minden számváltás után a PORTC fennmaradó egyik kimenetén jelenjen meg egy beíró impulzus. (L). A számláló nullázza önmagát. (0-39) A számlálót PORTA (nyomógombról) léptetni előre-hátra. Ezért lenne jó, ha mindkettő (számláló és karaktergenerátor) PIC -en belül lenne. A fennmaradó 6 db PORTA bemenet nyomógomb lenne és mindig a számláló által kijelölt értéknél váltana L és H színt között. (A szint váltást én végezném.) Ez lenne a PORTD ( 6 db) kimenet. Ezt a kimenetet kell látni a PORTB kimeneten is. Röviden ennyi!
Kérlek csak akkor foglalkozz ezzel ha időd és energiád is van hozzá!
Köszönettel.
(#) KoblogPerGyok válasza Máté Tibor Zoltán hozzászólására (») Márc 24, 2025 /
 
Szia!

Meg tudnád itt mutatni, hogy milyen kijelzőre gondoltál pontosan?

Milyen nyomógombra?

A kimeneteknek hány biteseknek kell lennie?
(#) Pali79 válasza Máté Tibor Zoltán hozzászólására (») Márc 25, 2025 /
 
Idézet:
„Tehát kell egy 40 - ig számláló számláló és ezt az értéket megjeleníteni, PORTB (grafikus kijelzőn) és (PORTC) hex adatként kivezetni.”
Tehét ha jól értem a PORTA valamelyik két lábára kötnél két nyomógombot, egyet az előre, egyet a hátra léptetéshez, ami egy számlálót 0-39-ig léptet. Ez eddig nem sima ügy. A grafikus kijelző kezelése már kicsit macerásabb, de az sem nagy gond (írtam cikket róla jópár éve). A HEX megjelenítése a PORTC-n részt nem egészen értem. Hogyan akarunk HEX adatot megjeleníteni egy 8 bites porton. Simán lehet, hogy én vagyok lemaradva valamiről, de ennek a megoldását nem igazán látom még. Jó lenne egy kapcsolási rajz is, hogy biztosan értsük a dolgot.
(#) Máté Tibor Zoltán válasza Pali79 hozzászólására (») Márc 26, 2025 /
 
Először is köszönet Neked hogy ezzel foglalkozol!
Igen a rajz sokat segít a megértésben. Így elkészítettem az első változatot amely szerintem a FÓRUM tagok segítségével még változni fog. Remélve nem követtem el nagy hibákat így most feltöltöm.

PIC-DIP.jpg
    
(#) Pali79 válasza Máté Tibor Zoltán hozzászólására (») Márc 26, 2025 /
 
Valami más formátumban vagy jobb minőségben kellene feltenni, mert alig kivehető rajta bármi is.
Következő: »»   1212 / 1225
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