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   1096 / 1210
(#) lelkes amatőr válasza Pali79 hozzászólására (») Aug 5, 2019 /
 
Van tovább is, csak az elejét raktam ki.
MPLAB IDE v8.91-et használok, még Hex fájlt se tudok csinálni. (valamit nagyon elfelejthettem )
(#) Pali79 válasza lelkes amatőr hozzászólására (») Aug 5, 2019 /
 
A C nyelvet nem vágom, de elméletileg a "build All " paranccsal fordítasz először, aztán mehet a PIC-re írás. Az output vagy valami ilyesmi ablakban írja mindig, hogy hová menti a fájlokat, valahol ott kell lennie a hex-nek is.
A hozzászólás módosítva: Aug 5, 2019
(#) lelkes amatőr válasza Pali79 hozzászólására (») Aug 5, 2019 /
 
Idézet:
„BUILD FAILED”
üzenettel leáll ha a Build All funkciót nyomom.

Biztos, hogy én csinálok valamit rosszul, csak nem jövök rá, hol hibázok.
Soha se értettem a PIC-hez, teljesen kezdő vagyok ebben. Egyszer valaki megmutatta, hogyan kell, öreg fejem elfelejtette.
(#) Pali79 válasza lelkes amatőr hozzászólására (») Aug 5, 2019 /
 
Akkor pedig hibás a forrás szerintem. Tedd fel ide az egészet, ha túl hosszú a csatolmányként, valaki aki jobban érti a C nyelvet biztos kiszúrja a hibát benne.
(#) lelkes amatőr válasza Pali79 hozzászólására (») Aug 5, 2019 /
 
Feltehetem, bár máshol rontom el a dolgot.
Az eredeti forrásfájlban (ami működött 100%. egy fórumtárs alkotta) csak a kapcsolási értéket irtam át.
(#) Pali79 válasza lelkes amatőr hozzászólására (») Aug 5, 2019 /
 
Pont azért kellene feltenni, hogy lássuk hol rontódik el a dolog.
(#) lelkes amatőr válasza Pali79 hozzászólására (») Aug 5, 2019 /
 
Nem tudom, feltehetem-e, most nem tudom megbeszélni a készitőjével.
Ebben az egy sorban (I2C_Write_Byte(0x85) irtam át a 0x02 értéket 0x85-re. Semmi mást nem változtattam.

Main.c
    
(#) lelkes amatőr válasza lelkes amatőr hozzászólására (») Aug 5, 2019 /
 
Annyi változás van, hogy a PICKIT2 programmal lementettem a másik (jelenleg használt) IC-ből a HEX fájlt és beirtam az újba. Ez rendben.
Akkor a gond, hogyan csináljak a módositott forrásfájlból új HEX fájlt? (mondom, hogy nem értek hozzá, ezért kérdezek itt a kezdő rovatban).
(#) lelkes amatőr válasza Pali79 hozzászólására (») Aug 5, 2019 /
 
Tényleg velem van a gond, nem állitottam be a "HI-TECH C Compiler"-t a programban.
Ilyen az amikor egy (nagyon) amatör akar komolyabb dologba belekezdeni.

Most már rendben megvan minden, működik az új program.
Köszönöm a türelmedet, segitségedet, iszom egy sört az egészségedre.
(#) sonajkniz hozzászólása Aug 13, 2019 /
 
Sziasztok!

Érthetetlen hibával küzdök.
Készítettem egy megjelenítőt, ami azt játssza, hogy a bejelentkező felirat lefuttatása után, ahelyett, hogy tovább menne, visszaugrik a bejelentkező felirat elejére és újra kezdi. Eleinte azt hittem, hogy valamiért resetel, de két fel nem használt láb billegtetésével mérni tudtam, hogy az inicializáció nem fut le újra, csak a bejelentkezés.
Most jön a csavar! Szimulációban tökéletes!
Az 1-es képen látható, amint a szimuláció elér egy elágazásig. Ezt a bitbillegtetés révén mérem is.
A 2-es képen látható, hogy a szimulációban elér a második bitbillentésig. A valóságban azonban nem.
Mi lehet ennek az oka:
(#) benjami válasza sonajkniz hozzászólására (») Aug 13, 2019 /
 
Mivel nem írtad milyen PIC-ről van szó és a programnak csak egy kis része látszik csak tippelni lehet:
- nincs PCLATH beállítva az ugrótáblázat címére
- az ugrótáblázat átlóg a következő 256 szavas programmemória területére
(#) sonajkniz válasza benjami hozzászólására (») Aug 13, 2019 /
 
Szia!
A PIC tipusa 18F14K22
Mellékeltem a kérdéses sor programban és programmemóriában lévő helyét.
Én úgy látom, nem lép át laphatárt.

03.JPG
    
(#) Hp41C válasza sonajkniz hozzászólására (») Aug 13, 2019 /
 
Mi a PCLATH értéke, amikor az addwf PCL,f -t végrehajtja?
(#) sonajkniz válasza Hp41C hozzászólására (») Aug 13, 2019 /
 
Logikusan úgy gondolnám, hogy mivel a program a 025C memóriacímen van éppen, hogy akkor PCLATH értéke 02-őn kellene hogy legyen. Ezért jelen esetben, ha PCL-hez 0-át adok, akkor a következő programsorra kellene ugrania. Szimulátorban így is tesz, csak a valóságban nem.
Mindazonáltal beültetted a bogarat a fülembe, ezért a mellékelt kép szerint módosítottam. Most már működik a valóságban is.
Köszönöm a segítséget.
Azt azonban leírhatnád, hogy PCLATH miért nem veszi fel automatikusan a megfelelő értéket a valóságban, ha a szimulátorban felveszi.
A hozzászólás módosítva: Aug 13, 2019

04.JPG
    
(#) Hp41C válasza sonajkniz hozzászólására (») Aug 13, 2019 / 1
 
Idézet:
„Azt azonban leírhatnád, hogy PCLATH miért nem veszi fel automatikusan a megfelelő értéket a valóságban, ha a szimulátorban felveszi.”

Inkább így tenném fel a kérdést:
A PCLATH miért veszi fel automatikusan a megfelelő értéket a szimulátorban, ha a valóságban nem felveszi fel.

A PIC18F14K22 leírásában a Compuded goto bekezdés eléggé elnagyolt. Érdemes egy régebbi típusnál utánanézni:
Pl. 18F242:
Idézet:
4.4 PCL, PCLATH and PCLATU
The program counter (PC) specifies the address of the instruction to fetch for execution. The PC is 21-bits wide. The low byte is called the PCL register. This register is readable and writable. The high byte is called the PCH register. This register contains the PC<15:8>
bits and is not directly readable or writable. Updates to the PCH register may be performed through the PCLATH register. The upper byte is called PCU. This register contains the PC<20:16> bits and is not directly readable or writable. Updates to the PCU register may
be performed through the PCLATU register. The PC addresses bytes in the program memory. To prevent the PC from becoming misaligned with word instructions, the LSB of PCL is fixed to a value of ’0’. The PC increments by 2 to address sequential instructions in the program memory. The CALL, RCALL, GOTO and program branch instructions write to the program counter directly. For these instructions, the contents of PCLATH and PCLATU are not transferred to the program counter.
The contents of PCLATH and PCLATU will be transferred to the program counter by an operation that writes PCL. Similarly, the upper two bytes of the program counter will be transferred to PCLATH and PCLATU by an operation that reads PCL. This is useful for computed offsets to the PC (see Section 4.8.1).”
(#) sonajkniz válasza Hp41C hozzászólására (») Aug 13, 2019 /
 
Mivel nem tudok angolul, ezért a google fordítóra bíztam.

Idézet:
„„4.4 PCL, PCLATH és PCLATU
A programszámláló (PC) meghatározza a végrehajtáshoz beolvasandó utasítás címét. A PC 21 bit széles. Az alacsony bájtot PCL-regiszternek nevezzük. Ez a nyilvántartás olvasható és írható. A nagy bájtot PCH-nyilvántartásnak hívják. Ez a regiszter a <15: 8> PC-t tartalmazza
bit, és nem közvetlenül olvasható vagy írható. A PCH-nyilvántartás frissítése a PCLATH-regiszter segítségével hajtható végre. A felső bájtot PCU-nak hívják. Ez a regiszter a PC <20:16> biteket tartalmazza, és nem közvetlenül olvasható vagy írható. Előfordulhat, hogy a PCU-nyilvántartás frissítései történnek
a PCLATU regiszter segítségével hajtható végre. A PC-címek bájtjai vannak a program memóriájában. Annak megakadályozása érdekében, hogy a számítógép tévesen illeszkedjen a szó utasításokhoz, a PCL LSB értékét „0” értékre kell rögzíteni. A számítógép 2-rel növekszik, hogy a program memóriájában lévő utasításokat megcélozza. A CALL, RCALL, GOTO és a programágak utasításai közvetlenül a programszámlálóba íródnak. Ezen utasítások végrehajtása érdekében a PCLATH és a PCLATU tartalma nem kerül át a programszámlálóra.
A PCLATH és a PCLATU tartalmát a PCL-t író művelet átviszi a programszámlálóba. Hasonlóképpen, a programszámláló két felső byte-ját a PCL-t leolvasó művelettel továbbítják a PCLATH-ra és a PCLATU-ra. Ez hasznos a számítógépre vonatkozó számított eltolásoknál (lásd a 4.8.1 szakaszt). ””

Bár kicsit zavaros, de azt megértettem belőle, hogy csak a PCL írható-olvasható direktben, viszont, ha írom akkor "A PCLATH és a PCLATU tartalmát a PCL-t író művelet átviszi a programszámlálóba." ami ha nem töltöm fel értékkel, akkor nulla.
Ez eddig világos.
Tehát valóban az a kérdés, miért működik a szimulátorban.
Köszönöm a segítséget.
(#) Hp41C válasza sonajkniz hozzászólására (») Aug 14, 2019 /
 
Akkor hevenyészett magyar fordításban:
A programszámláló (PC) meghatározza a végrehajtáshoz beolvasandó utasítás címét. A PC 21 bit széles. Az alacsony bájt -ot tartalmazó részt PCL regiszternek nevezzük. Ez a regiszter olvasható és írható. A PCH regiszter a PC<15: 8> bitjeit tartalmazza, és nem közvetlenül olvasható vagy írható. A PCH regiszter frissítése a PCLATH regiszter segítségével hajtható végre. A felső bájtot PCU-nak hívják. Ez a regiszter a PC<20:16> bitjeit tartalmazza, és nem közvetlenül olvasható vagy írható, módosítása a PCU regiszter segítségével történik.
...
A CALL, RCALL, GOTO utasítások közvetlenül a programszámlálóba írnak. Ezen utasítások végrehajtása közben a PCLATH és a PCLATU tartalma nem kerül át a programszámlálóra és nem is módosul.
A PCLATH és a PCLATU tartalmát a PCL-t író műveletek viszik át a programszámlálóba. A programszámláló két felső byte-ját a PCL-t olvasó művelet írja be a PCLATH és a PCLATU regiszterekbe.

A "movf PCL,w" utasítás nem csak a W regisztert tölti fel, hanem a PCLATU és PCLATH regisztereket is (az aktuális PC tartalma szerint). A "movwf PCL" utasítás a teljes 21 bites PC értéket változtatja meg W -> PCL (PC<7..0>), PCLATH -> PCH (PC<15..8>), PCLATU -> PCU (PC<21..16>).
A hozzászólás módosítva: Aug 14, 2019
(#) Jani_80 hozzászólása Aug 20, 2019 /
 
Sziasztok,
egy kis segítséget szeretnék kérni kijelző témában. Van egy NHD-0220CW-AY3 (OLED) kijelzőm amit most kezdenék működtetni PIC16F877-el C nyelven, CCS C fordítóval, MPLAB8.90-el. A kijelzőt SPI-n szeretném vezérelni. A kijelző adatlapja alapján nem vagyok biztos benne , hogy egyszerű dolgom lesz. Esetleg nincs valakinek ehhez vagy hasonló kijelzőtípushoz valamilyen mintaprogramja?

Ha a fenti kijelzővel nem boldogulnék, akkor tudnátok ajánlani a fenti PIC hez és környezethez valami egyszerű LCD kijelzőt és hozzá valami mintaprogramot? A célom annyi, hogy kb 5-10 karakterből álló szavakat alkalmanként megjelenítsek vele. Köszönöm szépen!
(#) pipi válasza Jani_80 hozzászólására (») Aug 20, 2019 / 1
 
Hali!
Adatlapra felületesen ránézve hd44780 parancskészletű, vagyis ilyen libraryból kiindulhatsz, ha nem találtál semmilyen mintát ehhez. A microchip oldalán is van minta. Amivel dolgoznod kell, hogy a paralell kiküldést átírd spi-re.
(#) icserny válasza Jani_80 hozzászólására (») Aug 20, 2019 /
 
A gyártó oldalán találsz mintakódot. Az OLED Examle Code sorra kell kattintani, s a megnyíló listán szerepel a NHD-0220CW típus is. A kódot nyilván át kell írni a mikrovezérlődhöz/fordítódhoz, de a lényeg kiolvasható belőle.
A hozzászólás módosítva: Aug 20, 2019
(#) Jani_80 válasza icserny hozzászólására (») Aug 20, 2019 /
 
Köszi a válaszod, néztem a honlapot, igaz csak telefonról, de sajnos nem találom azt az Oled Example Code sort sehol az oldalon amit írtál. Megkérhetlek hogy kuldesz linket? Koszi!
(#) icserny válasza Jani_80 hozzászólására (») Aug 21, 2019 /
 
(#) Jani_80 válasza icserny hozzászólására (») Aug 26, 2019 /
 
Köszi a segítséget mindenkinek, sikerült megoldanom!
(#) b10up hozzászólása Aug 26, 2019 /
 
Sziasztok!

Egy érdekességgel küzdök, adott egy 16F684, mikroC-ben programozva.
Tápfesz PIC-nek stabkockán keresztül 5V, amit vezérel az 12V.
P1A PWM kimeneten van egy 1k ellenálláson keresztül egy IRF540N FET, ezen tetszőleges fogyasztó, jelen esetben egy 12W 1.5W izzó.
RA2-n pedig egy 10k ellenálláson keresztül egy BD139, ami pedig egy védődiódával ellátott relét húz meg.
Ha a relét kapcsolgatom programkódból, semmi baj nincs. Viszont ha a PWM kimenet kitöltését elkezdem növelni, akkor a másik porton lévő relé is meghúz.
Ennek tudja valaki, hogy mi lehet az oka? Komparátorok elvileg letiltva, a PWM is a 4 láb helyett csak single módban fut egy lábon.
(#) Hp41C válasza b10up hozzászólására (») Aug 27, 2019 / 1
 
Mekkora terhelés van a PWM vezérelt FET -en? Okozhatja a terhelésen folyó szaggatott áram a zavart.
Hogyan van kialakítva a közös föld hozzávezetés? Hol ágazik le a PIC föld és a BD139 emitter valamint a FET source elektródája? A nagy áram a FET és a táp között megemelheti a PIC föld potenciálját a BD193 emitteréhez képest.
Van -e szűrőkondenzátor közvetlenül a PIC táplábainál? Mekkora?
Milyen vastag a föld vezeték?
A legjobb lenne egy kép a huzalozásról.
(#) szucsistvan123 hozzászólása Aug 30, 2019 /
 
Üdv!

A megszakítás prioritását beállító regiszterben miért van egy perifériához 4 bit?
  1. IPC3bits.U1TXIP
  2.     IPC3bits.U1TXIP0
  3.     IPC3bits.U1TXIP1
  4.     IPC3bits.U1TXIP2
A hozzászólás módosítva: Aug 30, 2019
(#) pipi válasza szucsistvan123 hozzászólására (») Aug 30, 2019 /
 
Milyen proci?
(#) szucsistvan123 válasza pipi hozzászólására (») Aug 30, 2019 /
 
Bocsi lenaradt!
PIC24FJ256GA702
(#) Tasznka válasza szucsistvan123 hozzászólására (») Aug 31, 2019 / 1
 
Az így nem teljesen 4,vagyis 1 .
IPC3bits.U1TXIP -> itt 0-7 ig állíthatod a prioritást.
A P0-P2 -ben meg a U1TXIP bitjeit állítod be,ami ugyanazt eredményezi,mint az első.

  1. __extension__ typedef struct tagIPC3BITS {
  2.   u_nion {
  3.     struct {
  4.       unsigned U1TXIP:3;
  5.       unsigned :1;
  6.       unsigned AD1IP:3;
  7.       unsigned :1;
  8.       unsigned DMA1IP:3;
  9.       unsigned :1;
  10.       unsigned NVMIP:3;
  11.     };
  12.     struct {
  13.       unsigned U1TXIP0:1;
  14.       unsigned U1TXIP1:1;
  15.       unsigned U1TXIP2:1;
  16.       unsigned :1;
  17.       unsigned AD1IP0:1;
  18.       unsigned AD1IP1:1;
  19.       unsigned AD1IP2:1;
  20.       unsigned :1;
  21.       unsigned DMA1IP0:1;
  22.       unsigned DMA1IP1:1;
  23.       unsigned DMA1IP2:1;
  24.       unsigned :1;
  25.       unsigned NVMIP0:1;
  26.       unsigned NVMIP1:1;
  27.       unsigned NVMIP2:1;
  28.     };
  29.   };
  30. } IPC3BITS;
(#) szucsistvan123 válasza Tasznka hozzászólására (») Aug 31, 2019 /
 
Heló!

Köszi! Így már világos!
Következő: »»   1096 / 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