Fórum témák
» Több friss téma |
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 )
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
Idézet: üzenettel leáll ha a Build All funkciót nyomom.„BUILD FAILED” 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.
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.
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.
Pont azért kellene feltenni, hogy lássuk hol rontódik el a dolog.
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.
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).
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.
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:
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
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.
Mi a PCLATH értéke, amikor az addwf PCL,f -t végrehajtja?
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
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).”
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.
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
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!
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.
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
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!
Köszi a segítséget mindenkinek, sikerült megoldanom!
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.
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.
Üdv!
A megszakítás prioritását beállító regiszterben miért van egy perifériához 4 bit?
A hozzászólás módosítva: Aug 30, 2019
Milyen proci?
Bocsi lenaradt!
PIC24FJ256GA702
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ő.
Heló!
Köszi! Így már világos! |
Bejelentkezés
Hirdetés |