Fórum témák
» Több friss téma |
Szia El_Pinyo!
Ezeket a konfigurációs biteket szeretném részletesen megismerni, mert lépten-nyomon elakadok. (Az INT0-al nem boldogulok, pedig úgy tűnik be vannak állítva a szükséges értékek.) Tudsz javasolni valamilyen irodalmat ehhez?
Kötelező olvasmány minden esetben az adott PIC adatlapja. Enélkül az ember csak sötétben tapogatózik. Tudom, hogy külföldiül van, meg kényelmetlen, hosszú stb. de nélkülözhetetlen a programozás során. Egyébként ez is olyan, hogy az ember minél többet olvas ilyesmiket, annál könnyebben megy. Ezen kívül nagyon ajánlott a felhasznált compiler útmutatóját is nézegetni. Ezen kívül például van icserny fórumtársunknak is több weboldala, ahol nagyon részletesen és magyarul mutatja be az ismeretanyagot (18-as és 24-s szériákhoz). A fórumon több PIC-es témában is rendszeresen linkelve van, érdemes egy kicsit keresgélni.
Igen, ezzel tisztában vagyok, töviről-hegyire elolvastam, amit az adatlapon írtak és amiket találtam. De pl. az előbbi SOSCSRC_DIG- ről sehol sem találtam részleteket, vagy olyasmit, hogy ennek milyen hatása van a bemenetekre.
(A PIC24f16KA102-nél sem a bemenettel, sem a megszakítással nem volt gondom ugyanilyen konfigurációnál.)
Én is az adatlapot néztem, csak ezek szerint valamivel hatékonyabban Nyilván némi rutin már van mögöttem is, de ezt a kellő mennyiségű idő és befektetett energia hozza meg. Végső soron itt a fórumon is felteheted a kérdésedet, sok segítőkész tagja van a HE-nek, akik készek segíteni. Egyébként az SOSCRC_DIG a kontrollered .h header fájljának végén található, ahol a konfigurációs szavakhoz tartozó define-ok vannak.
A *.h fájlok nálam valamelyest helyreteszik a dolgokat, így nélkülük nem is kezdek programot írni .
Köszönöm a biztatást, akkor még egy kérdés, megszakítással kapcsolatban és alszom.
RB15-ön felhúzó ellenállás, föld felé nyomógomb, RB8-on LED, soros ellenállás a föld felé. Eredmény: futtatás után a LED világít, sosem kapcsol ki, a nyomógomb hatástalan. Mi lehet a hiba? Köszönet!
Az inicializálós résznél szerintem hiányzik még az RB15 digitális bemenetté konfigurálása. Ezt az ANSB regiszter ANSB15 bitjével lehet megtenni. Alapvetően az analóg bemenetként is működtethető lábak reset-nél mindig analóg módban indulnak, ezért kell átállítani őket.
Pl.:
Még egy megjegyzés: A függvények deklarációjának mindig az első hívás előtt kell szerepelniük, tehát célszerűen még a main fölé helyezendők. Az interrupt függvényt nem muszáj deklarálni, mert explicit módon nem hívjuk őket.
A PIC24F04KL100 talán a legkisebb, legegyszerűbb és legolcsóbb tagja ennek az áramkörcsaládnak és nincs benne A/D konverter.
Arra gondoltam, talán az MPLAB +C30 nem jól kezeli ezt a típust, mert amiket eddig próbáltam, a PIC24f16KA102-n gond nélkül lefutottak. Kevesen használják szerintem, így nincs sok infó hozzá. A szimulátoron például nem működik a TIMER2, de a valóságban igen. A megjegyzés jogos, köszönöm, nem kényszerültem még a kijavítására.
Tudom, hogy nincs rajta AD konverter, de a port attól még működhet analóg módon, legalábbis az adatlap nem említi, hogy nem kell foglalkozni a kikapcsolásával. Kipróbáltad úgy is, hogy digitálissá állítod a portlábat?
Gyanítom, hogy a külső interrupt jól van konfigurálva, mert alaphelyzetben 0 a kimeneti láb, majd az init végén kikényszeríted az INT0 megszakítást, így belép az IT rutinba, ami felkapcsolja a LED-et. Azt még érdemes figyelembe venni, hogy a nyomógomb mechanikailag pereg, emiatt több megszakítás is bejöhet a gombnyomás során. Ha van debuggered, akkor egy töréponttal az IT rutinban megbizonyosodhatsz róla, hogy beesik a megszakítás, vagy nem. A szimulátorról meg annyit, hogy nem minden eszköz támogatottsága teljes körű. Az installált .\MPLAB IDE\Readmes\Device Support.htm tartalmaz egy táblázatot, ha a felhasznált PIC sora és a SIM oszlop által kijelölt cella sárga, akkor a támogatottság beta szintű, nem kiforrott.
A header fájban nincs ANS* és persze nem is ismeri fel. Másik típusnál egyértelmű a prell, de 10 gomnyomásból 3-7 hatásos.
A szimulátor sajnos tényleg nem teljeskörűen támogatott, viszont találtam egy problémát: ha újra aktiválom a megszakítást, nem alszik el a led. Ezek szerint a megszakítással van gond, ott akad ki. PicKit3 a programozó, azon biztos lehet debuggolni, utánajárok, mert nem csináltam még ilyet. Idézet: „A PIC24F04KL100 talán a legkisebb, legegyszerűbb és legolcsóbb tagja ennek az áramkörcsaládnak és nincs benne A/D konverter.” A/D konverter nincs benne, de analóg funkciók (pl. komparátor) vannak benne. Erre van az ANSA és az ANSB regiszter. Az adatlapban benne is vannak, az is ott van, hogy melyik modellben melyik bitjeik működnek. A legtöbb PIC-ben van valami analóg funkció, ezért valamilyen néven van bennük analog select regiszter, ami resetnél mindig analóg állásban indul el. Ha úgy általában nem használsz analóg funkciókat, akkor érdemes lehet a programjaidat mindig úgy kezdeni, hogy mindegyik ilyen regisztert kinullázod. Esetleg amelyik lábat analógnak akarod használni, oda raksz explicite egyest. Idézet: „A header fájban nincs ANS* és persze nem is ismeri fel.” Akkor valami nem kóser. Esetleg frissebb fordítót kéne nézni. Nálam (XC16 v1.11 van telepítve), ezek vannak a p24F04KL100.h-ban: ANSA, ANSB ANSELA, ANSELB (ezek gondolom ugyanazok, mint az előzőek, csak másik néven) ill. ugyenezek bitre lebontva. A hozzászólás módosítva: Máj 1, 2013
Idézet: „A header fájban nincs ANS* és persze nem is ismeri fel.” Én onnan másoltam ki! Véletlenül nem írtad el?
Kedves El_pinyo és _vl_!
Leszedtem a C30-at, amit februárban telepítettem. A szóban forgó IC header fájlja 2011. évi volt és nem volt benne semmi, ami az "ANS" karaktersort tartalmazta. Feltettem az XC16-ot és ezzel minden működik. NAGYON köszönöm a segítséget és elnézést a tökéletlenkedésért!
Nálam C30 3.31-es verzió van telepítve, abban is megtalálható. Korábban valamelyik PIC-es témában olvastam, hogy az XC jelű újabb Microchip C fordítók indokolatlanul nagy méretű kódokat fordítanak. Nem biztos, hogy érdemes erőltetni a használatát, amíg még van alternatíva.
Leningrádban Volvókat osztogatnak...
Az egyező név ellenére a különféle XC fordítók teljesen más háttérrel rendelkeznek. Mind az XC16, mind az XC32 megegyezik a Microchip elődökkel (C30 és C32, csak újabb verzió), mivel mindegyik tulajdonképpen egy open-source GCC (ha valaki nagyon elszánt, ott van fönt a forrás a Microchip oldalán, meg lehet próbálni lefordítani). A probléma az XC8 körül van, mivel 8-bites fordítóból a Microchipnek több is volt, és ezeket egybegyúrták, valamelyik "ős" adottságait örökölte az új XC8. Pl. a 16F és a 18F CPU-k kódja más-más elődből jött. Ezért itt előfordulhat, hogy ha valaki nem az előd fordítót használta korábban, akkor az XC8-ra áttérésnél pórul jár. (Meg ne kérdezzétek tőlem, hogy melyik melyikből jött.)
A 16F -ekre való HiTech C -t vásárolta meg a Microchip és a saját C18 -ával gyúrta össze XC8 -nak.
Nem kétlem, hogy igazad van! Sosem végeztem összehasonlítást, csak rémlett, hogy olvastam a problémát. Ezek szerint csak az XC8-t érinti. Elnézést a téves információért.
Februárban a 3.0-ásat tettem fel, de csak mostanában került sor a használatra. Olyat szerettem volna, ahol típuscsaládonként nem kell minden fordító filozófiáját és persze nyűgjeit megszokni. Talán az XC tudja majd ezt.
Idézet: Ez nem annyira a fordítón múlik, hanem inkább azon, hogy a Microchip hogyan hányja össze a fejléc állományokat (pl. mit nevez át, mit hagy ki belőle), vagy az adatlapokban milyen copy-paste eredetű bugyutaságok maradnak benn. „Olyat szerettem volna, ahol típuscsaládonként nem kell minden fordító filozófiáját és persze nyűgjeit megszokni.”
Sziasztok!
Folytatom az első SPI kommunikációs program írását, sajnos még nem sikerült működésre bírni. A környezet még mindig: pic24hj128gp504, mplab 8, c30 compiler Az spi-t pps-el hajtom meg, arra van kötve a hardwaren. A kód: PPS-init:
Utána semmi különös, egy FSInit() hívás van. Az SD-SPI.c -ben módosítottam az SPI beállításokat a következőre:
Ezzel kapcsolatban néhány kérdés: Mi a különbség a Chip-Detect és a Chip-Select között? Honnan tudom, hogy mi kell az én hardwaremhez? A write-protect remélhetőleg a 0-val ki van kapcsolva, azaz nem törődik vele. Egyszerűen írni szeretnék az sd kártyára.
Ezt pedig abba a header fájlba tettem, ahová az #include "fsio.h" -t is. Debugolva a hardware-t arra jutottam, hogy az fsinit hívás, eljut az sd-spi.c -ben található BYTE MDD_SDSPI_ReadMedia(void) függvényig, ahol van egy else ág:
A while ciklus itt sosem ér véget. A kérdés, hogy merre nézelődjet mi lehet a gond? Beállítás nem oké, gondolom én csak már nincs több ötletem. Köszönöm! Idézet: Mát megbocsáss, de ez szamárság. A PPS függvényekkel csak azt állítod be, hogy melyik lábra mi menjen (Peripheral Pin Remapping). Mint amikor a régi telfonközpontokban a kisasszonyok átdugdosták az összekötő vezetéket az állomások összekapcsolásához.„Az spi-t pps-el hajtom meg, arra van kötve a hardwaren.” Nem látom azonban az SPI1 modul engedélyezését és konfigurálását (órajel, üzemmód, stb). Ha a Microchip gyári könyvtári függvényeit használod, akkor ez egy OpenSP1() hívás, ami beállítja SPI1CON1, SPI1CON2 (ha van...) és az SPI1STAT regisztereket.
Hát igen ez a megfogalmazás nem volt túl konkrét, bocs
Ezt az engedélyezés dolgot én külön sehol sem csináltam. Letöltöttem a Microchip SD Library -t és egy pdf-et is a Microchip-től. Ebben le van írva, hogy a projectet miként konfiguráljam és még pár dolog, amit végig csináltam. Majd van egy példakód ami hívja az FSInit()-et, után olvas és ír. Egyelőre én az FSInit()-et próbálom csak ki, szeretném látni, hogy legalább az működik. Tehát igen, a Microchip függvényeit használnom. A FSInit függvényben van egy MDD_InitiO hívás ami az SD-SPI.c-ben található MDD_SDSPI_InitIO -ban ezt a pár sort futtatja le:
Ez után egy feltétel:
A DISKmount fv. hív oda, ahol a while ciklus már nem válaszol. Megtaláltam azt a részt is amit Te mondtál. Az InitSpiSlow függvény hívja majd meg, de nem az OpenSPI -t hanem az OpenSPIM függvényt, ahol ezeket csinálja:
majd utána
Tehát akkor elvileg ez megcsinálta, hogy az SPI modult inicializálta?
Én ezeket az elnevezéseket és átnevezéseket nem bírom követni, de úgy látom, te sem, mert a korábbi hozzászólásodban szereplő
Az SPICON1 = 0x0000; sort is át kellene gondolni, annak függvényében, hogy milyen adatsebességet akarsz beállítani. Ha maximális órajelen jár a mikrovezérlő (Fosc = 80 MHz, Fcy= 40 MHz), akkor legalább egy 1:4-es leosztás kell. A mostani 1:8 x 1:64 = 1: 512-es leosztás már enyhe túlzás.
Köszönöm, megpróbálkozom ezekkel amit írtál.
Megnéztem az említett while ciklus -nál mi van az SPI1CON1 regiszterben és hát eléggé fura igen.. Összehasonlítva a PIC adatlapjával nem azok a bit-ek vannak beállítva amivel engedélyezni lehetne a modult! Még van mit konfigurálnom akkor. A leosztásnál arra gondolsz, hogy bit 4-2 "SPRE" értékét állítsam át igaz?
Leosztás beállítása: SPRE vagy PPRE bitek. Van olyan leosztási arány, ami kétféle módon is beállítható (pl. 1:4 osztás, 1:8 osztás, 1:32 osztás). Lásd itt, a 4. táblázatban!
Értem, köszi. Remélem így már továbbjutok.
Sziasztok!
Az UART-al ismerkedem és két kérdésem van: 1: hogyan tudom a kiküldött adatokat a szimulátor ablakban megjeleníteni, mert ezt az üzenetet kapom: UART-W0005: Uart is enabled but no output destination has been assigned. (File or Output Window) 2: hogyan lehetséges ugyanezt a printf -el megcsinálni? A printf és hasonlók nem használható. (Object és library fájlok nincsenek a projekthez adva) Köszönet!
A szimulátor működik, a Debugger -> Settings menűben lehetett beállítani...
Sziasztok!
Itt volt arról szó, hogy miként lehet változót adott memória címre tenni, de struktúrák és unionokkal nem boldogulok, akár változót, akár konstanst akarok definiálni. Hiba nélkül lefordul, csak éppen nem a kívánt helyre kerülnek. Mit kéne másképp csinálni? |
Bejelentkezés
Hirdetés |