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   998 / 1207
(#) sonajkniz válasza Bell hozzászólására (») Nov 27, 2017 /
 
  1. const  int x[] __at(0x900)={0x05,0x07,0x03,0x09};

Ezzel az erővel a programod végére odabiggyeszthetted volna ezt is:
  1. org  0x900
  2. DB 0x05,0x07,0x03,0x09

Kevésbé bonyolult, és biztos, hogy ott van.
(#) benjami válasza sonajkniz hozzászólására (») Nov 27, 2017 /
 
Az biztos, hogy ennél érthetetlenebb példaprogramot nehezen tudott volna kreálni. Pont csak azt nem lehet belőle kitalálni, hogy mi is a baja (de végül, ha nehezen is, de kiderült).
(#) f2f2 válasza benjami hozzászólására (») Nov 27, 2017 /
 
Idézet:
„sources/pic18/powerup.as”

Akkor az összes PIC18 nál ez nem működik ?
Idézet:
„nop ;Suggested Microchip errata workaround”

És neked mit kellene ide írni?
(#) benjami válasza f2f2 hozzászólására (») Nov 27, 2017 / 1
 
Ezt nem fordítja be automatikusan a programba, be kell másolni a project könyvtárába a többi forrás közé és hozzá kell adni a projecthez. Ezután már beleírhatsz amit akarsz. Jelen esetben egy 'BSF NVMCON1, 7' utasításra kell kicserélni a goto előtti nop-t, és utána minden rendben fog működni (remélhetőleg). Ez így van jól, mert nem lenne jó ha egy másik projectbe is automatikusan belekerülne a (másik chip-en esetleg nem is értelmezhető) módosítás.
(#) benjami válasza benjami hozzászólására (») Nov 27, 2017 /
 
Ja, és az elejére be kell még szúrni egy sort is: #include <pic18.inc> ,hogy tudja mi az a NVMCON1
(#) Hp41C válasza f2f2 hozzászólására (») Nov 28, 2017 /
 
Idézet:
„Akkor az összes PIC18 nál ez nem működik ?
Idézet:
„nop ;Suggested Microchip errata workaround””

Ez a nop a 0x000 címen van a program memóriában az ICDx debug előírások betartása végett. Minden 16F, 18F típusra ezt a megoldást ajánlják. Ugyanis a reset után a 0x0 címen levő utasítás végrehajtódik mielőtt a debugger átvenné a vezérlést.
(#) Hp41C válasza Bell hozzászólására (») Nov 28, 2017 /
 
Idézet:
„Azon viszont csodálkozom, hogy egyesek, akik itt lenézik a C nyelv lehetőségeit és azt is, aki használja, de a nagy assembly tudásukkal rendszeresen kérkednek, hozzá se tudnak szagolni.”

Esetleg nem érnek rá, nincs feltelepített MpLabX náluk, az XC8 fordítót az eredményei elismerése mellett régebben leinstallálták...
Itt fentebb hangoztatják azt is, hogy a magasabb szintű nyelvek használata sokkal kényelmesebb, elvont szintű leírással kell csak foglalkozni, az assembly ismerete nem is szükséges...
A hozzászólás módosítva: Nov 28, 2017
(#) Bell válasza Hp41C hozzászólására (») Nov 28, 2017 /
 
Mindenkinek köszönöm a hozzászólását és nem volt szándékom senkit sem elmarasztalni, sem megszólni.
Itt semmi sem kötelező, akinek nem volt ideje, nem érdekelte, nem foglalkozott vele.
A példaprogram 8 soros C volt, ami le volt fordítva asm-re, kezdőcímekkel ellátva. Aki itt megfordul, egyik sem teljesen érthetetlen számára.
Hogy ne legyen szükség telepített MPLABX-re, XC8-ra, azért tettem közzé ezt az egyszerű példát:
Bővebben: Link
(#) Bell válasza sonajkniz hozzászólására (») Nov 28, 2017 /
 
Benne van az asm forrásban.
Bővebben: Link
Később pedig az általad kért kommentezésben (; da ...)
(#) Bell válasza benjami hozzászólására (») Nov 28, 2017 /
 
Köszönöm!
Időnként más 18-as sorozatot is használok, így azt mindegyikbe beletenné.
Maradok az egysoros asm-nél.
(#) pajti2 hozzászólása Nov 28, 2017 /
 
Kicsit off, ezért leszíneztem.

1-tengelyes gyorsulásmérőre lenne szükségem. Valami extrém olcsó kivitelben.

Ami elektronikák vannak, 3-tengelytől kezdődnek, és legalább 1k huf-ba kerülnek. Azok a legolcsóbb lehetőségem, vagy van olcsóbb?
(#) Hp41C válasza Bell hozzászólására (») Nov 28, 2017 /
 
Nem követtem egészen a fordulatokat.
C program:
const int *p; ... p=&x[0];
Ha a p pointer konstans, miért adsz neki értéket? Nem a deklarációkor kellene? Illetve nem kellene const prefix neki.
Assembly lista:
Mi az igazi probléma:
Nem teszi ki a konstans értékeket a LATA regiszterbe? A tblrd* nem lépteti a TBLPTR regisztert. A tblrd*+ az olvasás után növeli a címet. Ekkor valahogyan gondoskodni kellene a tartomány végének teszteléséről.
Kikapcsol minden LED -et 1 másodperc után?
(#) bbalazs_ válasza pajti2 hozzászólására (») Nov 28, 2017 /
 
LIS2DH12TR 526 Ft Farnell
(#) benjami válasza Hp41C hozzászólására (») Nov 28, 2017 /
 
Nem a mutató a konstans, hanem az amire mutat (ROM címet tartalmaz).
(#) benjami válasza Bell hozzászólására (») Nov 28, 2017 /
 
Olvastad a tegnap esti hozzászólásomat (igaz, hogy f2f2-nek címeztem)? Ott pont ezt írtam le, hogy hogyan kell az aktuális projectbe berakni. Ha a C programod elejére teszed, akkor nem lesz a globális változóidnak kezdőértéke, mert a BSF NVMCON1, 7 csak a változók (így sikertelen) inicializálása után fog lefutni.
(#) rolandgw válasza Hp41C hozzászólására (») Nov 28, 2017 /
 
Ez a konstans pointer:

int *const p;
(#) Hp41C válasza rolandgw hozzászólására (») Nov 28, 2017 /
 
Ugye mennyivel egyszerűbb volt a C18 esetében:
  1. int * p;
  2. const int * q;
  3. rom const int * r;

A deklaráció elmondott mindent.
(#) Bell válasza Hp41C hozzászólására (») Nov 28, 2017 /
 
A p egy konstansra mutató pointer. Értéke a konstans címe, a konstans értékét a *p adja.
A gond az volt, hogy bármilyen globálisan deklarált konstans és változó 0 értéket adott vissza. Ezért aludt el a LED.
A példában egy ROM-ban elhelyezett konstans tömb elemeit olvastam ki, amit kitettem LATA-ba. A TBLRD hiába futott le a megfelő táblapointerek beállításával, mert nem volt engedélyezve a tábla olvasása.

Erre hívta fel a figyelmem benjami fórumtárs, ez benne van az eszköz errata-jában.
A megoldás egy bit beállítása, BSF NVMCON1, 7 utasítással, még mielőtt bármi más lefut.
Ezután a konstansok inicializálása hibátlanul működik, a LED már nem alszik el.
(Mindez nem volt látható a szimulátorban.)

Egyelőre ezt a C forrás elejére raktam, mert az MPLABX-ben nem találom, hogyan lehet benjami fórumtárs javaslatát kivitelezni.
Az utasítás így is végrehajtódik még mielőtt az adatok lehívása megkezdődik.

A konstansok inicializálása így megoldott, de a globális változók továbbra is 0 értéket adnak vissza típus és értéktől függetlenül.
Remélhetőleg ennek a megoldása sem lesz sokkal bonyolultabb.
(#) Bell válasza benjami hozzászólására (») Nov 28, 2017 /
 
Olvastam és öszönöm!
Nézegettem, de nem találom, hogyan tudom kivitelezni.
Lefut így is a fontos részek előtt, de ha tudom, átalakítom.
(#) f2f2 hozzászólása Nov 28, 2017 /
 
MPLAB-x et próbálgatnék lefordítástechnikailag tesztelni. Tudna prezentálni valaki egy projektet vagy fájlokat, amit hibátlanul fordít . Mindegy milyen PICre van és hogy mit csinál. Kössz
Eddig a minta mappából se sikerült a .mk nél hibákkal vérez el a build munkánál.
(#) Hp41C válasza Bell hozzászólására (») Nov 28, 2017 /
 
Itt már írtam, hogy a startup kódban nincs benne az inicializáló ciklus, ami a ROM -ban levő listából a RAM -beli helyekre másolná a globális változó kezdeti értékeit.
Abban a bizonyos C18 -ban kellett egy linker vezérlő állomány, amiben meg lehetett adni a startup kódot:
Ha voltak inicializált globális változók:
  1. FILES c018i.o

Ha nem voltak inicializált globális változók:
  1. FILES c018.o

A képen láthetó projectben vannak inicializált globális változók, a 0x7248 -től egy rakás tblrd*+ segítségével átmásolja az értékeket a megfelelő RAM területekre.
Amit a belinkelt forrásodból fordítottam a 18F25K50 -re, abból ez a rész teljesen hiányzik, csak az egy nyomorult i változót írta 0 értékre.
Feltettük a kérdést az XC8 szakértőknek, hogy mit és hogyan kell még beállítani, de eddig nem jött válasz.
- A Microchip fórumán és a 26K40 errata -jában ez az NVMCON bug szerepel. Másold le a <Windrive>:\Program Files\Microchip\xc8\<verzio>\sources\pic18\powerup.as állományt a saját projectedhez, vedd fel a forrás állományok közé. Tedd bele a BSF NVMCON1, 7 a goto start elé. --- Ettől még a globális inicializált változók problémája nem oldódik meg...
- Microchip fórum
--- Ehhez viszont a legújabb MpLabX kellene...
(#) benjami válasza Hp41C hozzászólására (») Nov 29, 2017 /
 
Pedig feltölti, a fordítás után ott lesz a programmemóriába feltöltő kód, csak a disassembly listing file-ba nem kerül be.
(#) benjami válasza f2f2 hozzászólására (») Nov 29, 2017 /
 
Mellékeltem egyet (pic18f452, xc8).
(#) benjami válasza Bell hozzászólására (») Nov 29, 2017 / 1
 
Melyik lépés nem megy az alábbiak közül?
1. powerup.as bemásolása a fordító sources/pic18 mappájából az aktuális project könyvtárába
2. a powerup.as hozzáadása a projecthez
3. a powerup.as módosítása (#include <pic18.inc>, BSF NVMCON1, 7)
4. fordítás
(#) Hp41C válasza benjami hozzászólására (») Nov 29, 2017 /
 
Idzet az állományodból:
Idézet:
„Microchip\xc8\v1.33”

Ez a verzió nem ismeri a 18F25K40 -et.
Az XC8 v1.42 -vel fordítgattam az MpLab 8.90 alatt. Ez sem ismeri a 18F25K40 -et, helyette a 18F25K50 -el próbálkozom, de nincs benne a fordított kódban a kezdőértékkel rendelkező globális változók inicializálása, pedig a linker Initialize opciója be van kapcsolva.
(#) benjami válasza Hp41C hozzászólására (») Nov 29, 2017 /
 
Nálam is csak 1.33 van, így én sem tudom a 18f25k40-et kipróbálni. Az alábbi próba 18f452-re van. Ami nem látszik a képen, a 0. címen a nop után egy goto 0x3FE8 van.
(#) Hp41C válasza benjami hozzászólására (») Nov 29, 2017 /
 
Az ugrás a start_initialization címre megvan itt is, de a start_initialization lényegében üres, nem tartalmaz tblrd utrasítást. Csak a globális p pointer -t törli, pedig neki nem volt kezdeti értéke - így inkább a változók törlésének része.
(#) benjami válasza Hp41C hozzászólására (») Nov 29, 2017 /
 
Majd valamikor kipróbálom a régi mplab alatt. A lenti fotókon levő beállításokat használtam. A linker beállításainál be van pipálva az initialize data (nem állítottam, ez volt az alapértelmezett).
A hozzászólás módosítva: Nov 29, 2017
(#) Hp41C válasza benjami hozzászólására (») Nov 29, 2017 /
 
Felkínlódtam az MpLabX 4.05 -öt a gépre, megcsináltam a projektet, lefordítottam....
Láss csodát ebben a környezetben működik minden...
Olvasgattam a fordító readme állományát. Vannak benne szekció átnevezésekre utaló bejegyzések (fő a kompatibilitás), vélhetőleg ezek okozzák a problémát. Sajnos az MpLab 8 -cal már nem tud együttműködni ezek szerint...
A hozzászólás módosítva: Nov 29, 2017
(#) f2f2 válasza Hp41C hozzászólására (») Nov 29, 2017 /
 
A 4.05 öst tettem fel én is

Kipróbálhatjuk mi is ? a fájljaiddal


Egy szinte üres C fájlt fordítva ez így jó?


CLEAN SUCCESSFUL (total time: 47ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'F:/X_microchip/MPLABXProjects/PIC16F84A_test.X'
make -f nbproject/Makefile-default.mk dist/default/production/PIC16F84A_test.X.production.hex
make[2]: Entering directory 'F:/X_microchip/MPLABXProjects/PIC16F84A_test.X'
"F:\X_microchip\XC8(v144)\bin\xc8.exe" --pass1 --chip=16F84A -Q -G --double=24 --float=24 --opt=+asm,+asmfile,-speed,+space,-debug,-local --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist -DXPRJ_default=default --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s" -obuild/default/production/newfile.p1 newfile.c
A megadott nevet (F:\X_microchip\XC8) a rendszer nem ismeri fel
bels� vagy k�ls� parancsk�nt, futtathat� programk�nt vagy k�tegf�jlk�nt.
A megadott nevet (F:\X_microchip\XC8) a rendszer nem ismeri fel
bels� vagy k�ls� parancsk�nt, futtathat� programk�nt vagy k�tegf�jlk�nt.
A megadott nevet (F:\X_microchip\XC8) a rendszer nem ismeri fel
bels� vagy k�ls� parancsk�nt, futtathat� programk�nt vagy k�tegf�jlk�nt.
"F:\X_microchip\XC8(v144)\bin\xc8.exe" --chip=16F84A -G -mdist/default/production/PIC16F84A_test.X.production.map --double=24 --float=24 --opt=+asm,+asmfile,-speed,+space,-debug,-local --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist -DXPRJ_default=default --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s" --memorysummary dist/default/production/memoryfile.xml -odist/default/production/PIC16F84A_test.X.production.elf build/default/production/newfile.p1
Microchip MPLAB XC8 C Compiler (Free Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
:: warning: (1273) Omniscient Code Generation not available in Free mode
A megadott nevet (F:\X_microchip\XC8) a rendszer nem ismeri fel
bels� vagy k�ls� parancsk�nt, futtathat� programk�nt vagy k�tegf�jlk�nt.
A megadott nevet (F:\X_microchip\XC8) a rendszer nem ismeri fel
bels� vagy k�ls� parancsk�nt, futtathat� programk�nt vagy k�tegf�jlk�nt.
A megadott nevet (F:\X_microchip\XC8) a rendszer nem ismeri fel
bels� vagy k�ls� parancsk�nt, futtathat� programk�nt vagy k�tegf�jlk�nt.

Memory Summary:
Program space used 12h ( 18) of 400h words ( 1.8%)
Data space used 5h ( 5) of 42h bytes ( 7.6%)
EEPROM space used 0h ( 0) of 40h bytes ( 0.0%)
Data stack space used 0h ( 0) of 3Fh bytes ( 0.0%)
Configuration bits used 0h ( 0) of 1h word ( 0.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)


You have compiled in FREE mode.
Using Omniscient Code Generation that is available in PRO mode,
you could have produced up to 60% smaller and 400% faster code.
See http://www.microchip.com/MPLABXCcompilers for more information.

make[2]: Leaving directory 'F:/X_microchip/MPLABXProjects/PIC16F84A_test.X'
make[1]: Leaving directory 'F:/X_microchip/MPLABXProjects/PIC16F84A_test.X'

BUILD SUCCESSFUL (total time: 4s)
Loading code from F:/X_microchip/MPLABXProjects/PIC16F84A_test.X/dist/default/production/PIC16F84A_test.X.production.hex...
Loading completed
A hozzászólás módosítva: Nov 29, 2017
Következő: »»   998 / 1207
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