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 / 1213
(#) wincso válasza tki 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.
(#) tki válasza Máté Tibor Zoltán hozzászólására (») Márc 20, 2025 /
 
A klasszikus karaktergenerátor ROM-ok azért voltak használva, mert megfelelő szervezés esetén a videokártya a processzor használata nélkül, sima logikai áramkörökkel meg tudta címezni a karakterekhez tartozó biteket. És persze a karakterkészletet a ROM-ok cseréjével meg lehetett változtatni.

Egy PIC-ben is lehet karakterek pontjait EEPROM-ban tárolni, de úgyis programozottan kell kiolvasnod és felhasználnod. Vagyis írni kell egy olyan függvényt, ami egy karakterkódot fogad, és a Flash-ből vagy akár az EEPROM-ból felolvasott képpontokat kiírja megfelelő sorrendben a megfelelő parancsokkal pl. egy grafikus LCD-re.

Ha a karaktertábla vagy karaktertáblák elférnek a programmemóriában, akkor nincs értelme a karakterek bitjeit EEPROM-ba írni. Ha nem, akkor jöhetnek a mindenféle más tárolók, akár külsők is, pl. egy Flash memória valamilyen buszon át, és akkor akármennyi karakterkészlethez is lesz hely.
(#) 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ó
(#) tki válasza Máté Tibor Zoltán hozzászólására (») Márc 21, 2025 / 1
 
Érdemes lenne mindenféle megoldási próbálkozás előtt magát a feladatot teljesen tisztázni, sőt debugolni (...), különben garantált a célra nem vezető, később elvetett elképzelések kavalkádja, amiken feleslegesen és elhamarkodottan dolgoznak azok, akik ezt nem tartják szem előtt.

"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."

Akkor miért nem jó a PIC programmemóriája, miért nem lehet onnan felolvasni a képpontokat? Az nem igazán felejt, mivel az a dolga - Flash-nek hívják, és funkcióját tekintve ...ROM. Esetleg túl kicsi? Vagy könnyen átírhatónak kell lennie?
(#) Bakman válasza tki 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 (») Sze, 13:07 /
 
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 (») Sze, 13:19 /
 
Valami más formátumban vagy jobb minőségben kellene feltenni, mert alig kivehető rajta bármi is.
Következő: »»   1212 / 1213
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