Fórum témák
» Több friss téma |
Ha belső órajelre kapcsolom akkor a szimulátorban működik:
Megvan az órakvarcon az órajel?
Sajnos nem tudom megnézni, hogy meg van-e rajta. De megyek holnap veszek új kvarcot bele. Amúgy nekem a módosítással, sem megy a szimulátoromban. Jól kötöttem-e be egyáltalán? PIC 11-es és 12-es lábára raktam rá a kvarcot, mindkét lábhoz egy-egy 22pF-os kondit, amik a VSS-re mennek.
Működik. Átállítottam szinkron módba és változtattam a végrehajtási sorrenden. Ha esetleg valakit érdekel:
Köszönöm annak, aki segített. A hozzászólás módosítva: Feb 4, 2013
Szia.
A szinkron móddal vigyázz, mert sleep-ben nem fog működni, azaz szinkron módban a Timer1 nem számol, ha nincs főórajel.
Szia!
Köszi szépen, ez új volt. Megnézem akkor, hogy megy-e aszinkronban, gondolom igen, csak a módosításokat nem egyesével szoktam csinálni, hanem ömlesztve, amiről gondolom, hogy meg kell változtatni, megteszem. Aztán sokszor van, olyan hogy megy, de megváltoztattam olyan dolgot is, amit nem lett volna szükséges.
Sziasztok.
Próbálom kihüvelyezni, mit is jelent a __weak__ attribútum a C30-nál, de valahogy nem tudom értelmezni. Segítenétek?
Sziasztok!
Még mindig a bootloaderrel szenvedek.(PIC18F4550) Microchip Applikations Library linker állományát használom. Eltéríti a vektorokat de mégsem indul el a program. A program kezdő értéke 0x102A de a reset vektor 0x1000. Hogyan lehet c-ben az interrupt vektorokat átugrani? Előre is köszi a segítséget!
A mellékelt headert és linker scriptet szoktam használni a HID bootloaderhez, a main kód pedig a következő:
MCHP bootloaderhez csak a komment jelet kell egy sorral lejjebb tolni a bootloaders.h-ban, ha nem kell a bottloader akkor meg mindkét definíciót ki kell kommentezni.
Nagyon köszönöm a segítséget! Elsőre elindult a fordítás után. Az interrupt függvényeknél
ugye csak azt állapítom meg, hogy mi okozta a megszakítást és a tényleges végrehajtást külön függvény hívásával érem el?
Úgy is lehet, de ha rövid a tényleges kiszolgáló program, lokális változókat sem használ, akkor teheted feltételes utasításblokkba (if) is. Ekkor gyorsabb és rövidebb lesz a programod, viszont kicsit nehezebb átlátni.
A hozzászólás módosítva: Feb 10, 2013
Ha nem használom a kétszintű megszakítást akkor is működőképes a függvény?
Úgy is működik, ekkor minden megszakítás a HIGH interruptra kerül, a LOW interrupt üresen hagyható.
Sziasztok!
Az miért van, hogy beállítom az RB megszakítást és amikor a jel megváltozik a porton, a kimeneten kapok egy 2ms órajelet?
Sziasztok!
Az miért van, hogy beállítom az RB megszakítást és amikor a jel megváltozik a porton, a kimeneten kapok egy 2ms órajelet?
Szia!
A válasz megadásához ismerni kellene a programot...
A kérdést már megválaszoltuk a PIC kezdőknek c. topikban. Bővebben: Link
Ja, ott megtalálható a forráskód is, ebben a beírásban.
Üdv! Tudtok abban segíteni, hogy az atmel atmega 162 mely lábait kell a programozóra kötni?
Szia!
Keress neki másik topic-ot, van olyan, amit kidob a kereső az "atmel" kulcsszóra ! Steve
Sziasztok!
Szeretnék segítséget kérni! I2C kommunikációt próbálok hardveresen megoldani két PIC18F4550 között. A "master" rész jól működik. A "slave" eszköznek két bájt küldése lenne a feladata, az elsőt át is küldi de a másodikat nem. Ráadásul az első bájt kétszeresét küldi mindig másodiknak. Felteszem a programot, megköszönöm ha valaki ránézne! Hátha találkoztatok már ilyen hibával.
Csináltunk pár vezérlőpanelt, az első példányt a fiókban levő 16F877A, a másodikat 16F887 típusokkal, míg a következőket, amik már sorozatterméknek tekinthetők, 16F887-el csináljuk. Ezen kívül van még néhány lábkiosztásbeli eltérés is az áramkörök között (összesen háromféle verzió). Hogyan szokás azt megoldani, hogy legyen pl. négy projekt fájlom - mivel panel+kontroller típust összesítve négyféle verzió van (1.mcp, 2.mcp, 3.mcp, 4.mcp), amik egy-egy header fáljra (main1.h, main2.h, main3.h és main4.h) mutatnak, amik tartalmazzák az áramkörök közötti különbségeket (lábkiosztás, konfig bitek, stb.), de a kód többi része azonos legyen? Arra gondoltam, hogy a mainx.h fájlokba teszek egy-egy #define MAINx_H sort, és a main.c-ben pedig ez alapján már meg tudom oldani a különbségeket az áramkörök között. Igenám, de ezt a fájlt be kellene includolni a main.c fájlba, nem elég csak az 1.mcp projektben megadni mint header állományt. Ez viszont nekem nem jó, hiszen pont az lenne a célom, hogy a projekt fájltól függően különféle mainx.h fájlok legyenek beincludolva? A kérdés, hogyan tovább? Nem hiszem, hogy ne lehetne megoldani, csak nem jövök rá, hogy hogyan kellene... Le lehet kérdezni valahogy a projektfájl nevét? Ha azt le lehetne, akkor azt felhasználhatnám fordítási direktívaként, akár még a mainx.h fájlok sem kellenének.
A hozzászólás módosítva: Márc 3, 2013
Közben rájöttem, hogy a Project->Build options->Project beállításokban a Compiler fülön lehet megadni makrókat. Ha minden igaz, ez nekem most jó is lesz. De azért ha van jobb módszer, szívesen hallom.
Nem tudom, hogy melyik környezetet használod, de mindegyikben lehet valamilyen módon az adott projekthez tartozóan a fordító számára átadandó extra paramétereket megadni (az MPLAB X-ben pl. ez a Project Properties-ben a fordító fül alatt adható meg).
A fordítónak pedig command line paraméterből lehet makrót definiálni, nem néztem meg a 8-bites PIC fordítót, de tipikusnak mondható a -Dmacro=value ill. -Dmacro szintaktika. Ezzel lehet ilyet csinálni, hogy -DCONFIG_XYZ, amit utána a
kóddal tudsz felhasználni (ha csak a makró létezését nézed, fölösleges értéket megadni hozzá). A hozzászólás módosítva: Márc 3, 2013
A megoldás a feltételes fordítási direktívák használata. Makrók definiálásán nem kell különösebben erőlködni, hiszen a Select Device révén az MPLAB automatikusan definiálja a mikrovezérlő típusazonosító makrót, amely a Microchip mintapéldáit követve használható fel:
Ez nem teljesen jó neki, mert egy processzor típus mellett használ több verziót!
Steve A hozzászólás módosítva: Márc 3, 2013
Ahogy kissi írja, az a gond, hogy egy kontrollertípus alatt is van kétféle hardver, önmagában a kontroller típus alapján nem lehet dönteni. De egyelőre jónak tűnik az előző hozzászólásomban írt megoldás a makró létrehozására.
Közben kaptam olyan tippet, hogy fordítsam meg a logikát és a közös kódrészt includoljam be, ne a közös részbe includoljam az eltérő részeket. Ez is kivitelezhető megoldásnak tűnik. A hozzászólás módosítva: Márc 3, 2013
Sziasztok!
Próbálkozom az spi-vel. De sehogy nem akar sikerülni. Egyenlőre odáig szerettem volna eljutni, hogy a küldés működjön, az órajelet és az adat kimenetet PicKit2 -vel nézem. De nem történik semmi. (A piccolo-ból csak a bootloader miatt van hivatkozás, így könnyebb volt, én meg lusta.) Ez a kód, a kérdés pedig természetesen, hogy hol hibázok:
A hozzászólás módosítva: Márc 4, 2013
Nem biztos, hogy emiatt nem megy, de előfordulhat. Nem tiltod le az analóg bemeneteket az RB portról. Valamelyik ADCON vagy ANSEL regisztert kell megnézned, attól függ, milyen típusú a PIC.
Tegyél ki az SPI használata nélkül simán digitális kimenetként egyest és nullát az SDO és SCK lábakra, és nézd meg, hogy megjelenik-e. Ha igen, akkor az ellentétes szintet is nézd meg. Ha mindkettő rendben, akkor lehet tovább lépni. Ha azt írod, hogy SSPBUF=0x5A; a WriteSPI helyett, akkor se történik semmi? 0xFF az épp nem jó tesztelésre, mert az adatlábon folyamatosan egyest adna ki, nehezebb észrevenni. Az ADCON0-t felesleges minden while ciklusban írogatni. Azt nyugodtan teheted oda az ADCON2-t beállító sor alá. Elég csak a GO bitet egyesre tenni a konverzió indításához.
Köszi szépen a választ!
Hajnalban meg lett a nem létező hiba: át kellett tenni az órajelet a timer2-re, alaposan lelassítva, mert a pk2 nem volt elég gyors. A gyanús az lett, hogy néha jött 1 db pici impulzus. Aztán elosztottam a 48-at a 64-el... A 255 már csak kínomban került oda amúgy az ad-t küldözgeti, az egész egy már létező fájlból való kitörölgetések eredménye (és persze az spi-s bővítés), ami 8 csatornát olvasott be, no ezért van a ciklusban, ezekkel most nem igazán foglalkoztam, mert a cél csak az spi beröffentése különösebb felhasználás nélkül, pusztán a kipróbálás miatt. Persze most jön az, hogy egy másik pickel venni is kéne, szóval várható a következő kérdés Köszi még egyszer!
MCC18-ban szeretnék definiálni egy többdimenziós integer tömböt, mely 5 sorból, soronként 128 elemből állna. Lényegében 1280 byte-nyi területet szeretnék lefoglalni, de a fordító a következő hibát adja:
Idézet: „MPLINK 4.46, Linker Device Database Version 1.11 Copyright (c) 1998-2011 Microchip Technology Inc. Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x00000660 Errors : 1” PIC18F26K22 memóriájába beleférne, úgyhogy nem tudom mi a gond. Valakinek ötlete? |
Bejelentkezés
Hirdetés |