Fórum témák
» Több friss téma |
Hello! A belső eprom kezelése nem olyan bonyolult, mint elsőre látszik... Mellékelek neked egy asm-fájlt amivel én teszteltem az eprom kezelést. Ha ebből valami nem világos, kérdezz nyugodtan!
Köszönöm szépen a segítségedet, a kommentek már elegendő infót nyújtottak, már megy is a cucc, teszt idejére picit átvertem a PIC-et, 1 Hz helyett 1 kHz-et kapott, így 6 perc alatt eljutott a 100 óráig
En ezt ugy csinaltam annakidejen, hogy a PIC indulaskor beolvasta az EEPROM-bol a szamot, majd novelgette az esemeny hatasara. Kijeloltem egy bemenetet tapfesz figyelesre, es ha elment a tap beirta az EEPROM-ba az utolso allast. A tapkor ugy volt kialakitva, hogy nagy erteku elkot tartalmazott. Amikor elment a tap meg volt ideje beirni. Azert is fontos ez a megoldas, mert az EEPROM csak veges szamu irast bir ki.
Szia!
Tedd be a Watch-ba a PCLATH regisztert és már tudod is módosítani ( persze célszerűen a megfelelő lépés előtt! )! Steve
Sziasztok, most, hogy látom, hogy eeprom-ról van szó gondoltam megkérdem, hogy az itt bemutatott szenzorokra (gyorsulásmérő, giroszkop és megnetométer) is vonatkozik ugyanaz mint az EEPROM-okra, hogy adott számú írást/olvasást lehet végrehajtani velük vagy ezeknél nem számít, mert nem találtam erre utaló leírást az adatlapokban.
Köszönöm előre is.
Ezek a szenzorok csak olvashatóak, nem? Mert olvasásra nincs az eepromnál sem korlátozás.
Sziasztok!
Egy PIC16F628A -ról lenne szó. Az RA0,RA1,RA2 mindig bemenetként szeretném beállítani, a többi RA portot pedig kimenetként. Ekkor jó a következő inicializáció?
Üdv.
Ezzel a megoldással alakítom át a 2 jegyű bin. számot BCD-re. int n, dig, count; int pBIN=55, pBCD=0; count = 0; for (n=0; n<4; n++) { dig = pBIN%10; pBIN = pBIN/10; pBCD = (dig< } Viszont szükségem lenne 4 bin. jegyről BCD-re alakításra és nem tudok, nem találok rá megoldást. (Mplab/C18) Kérem a segítségeteket, köszönönöm.>>>
Írhatóak is, mert be lehet állítani a paramétereiket, pl: méréstartomány, mintavételezési frekvencia, működési üzemmód, de ezeket úgy is csak indításkor kell beállítani, mert azon kívül csak olvasásra fogom használni szögmérés miatt, legfeljebb kevesebb alkalommal inicializálom
Ez, amit most bemásoltál, mitől nem négyjegyű? (Mellesleg én unsigned int változótípust használnék...)
Szia!
Köszönöm, közben rájöttem magamtól. (Mire nem vagyok képes ha gondolkodom kicsit... ) Működik már szinte minden amit szerettem volna. Valóban a lapváltásokkal rontottam el az egész kódot, tényleg jobb ez a PAGESEL dolog mint manuálisan állítgatni a biteket. És a szimulátor is nagyon jó. A kérdés..egy olyan megszakítást (és egyáltalán megszakítást..) amit pl egy USART vált ki, hogyan tudok a szimulátorral tesztelni? Mert a szimulátorban nem tudom "úgy intézni" hogy megszakítás történjen, mint gyakorlatban.
Hú de jó dolgok vannak ezen az oldalon, igaz nem olcsók...
Szia!
Debugger / Settings / Limitation - Uart nem szimulálható. A megoldás: -1: Debugger / Settings / Uart1 I/O: Enable Uart1 IO - kipipálni Output / Window - kipipálni. -2: Debugger / Stimulus / Register injection: RCREG, file, megadandó a file neve... Apply -3: Save stimulus - a további használatra... A mellékletben egy 16F648A -ra készült stimulus (A figyelmeztetés ellenére - "## SCL Builder Setup File: Do not edit!!"-, a típust átírhatjuk), amelyik a saját könyvtárában elhelyezett input.txt -ből veszi az uart szimulációhoz az adatokat. Újrafordítás után indítva, az Output ablak Uart fülét kiválasztva láthatjuk a kontrollerünk által küldött üzeneteket. - Megszakítás: A PCLATH -t is menteni kell, a mentés után a megszakítás kiszolgáló rutin lapjára kell állítani, a visszatérés előtt a mentett értéket vissza kell állítani. Olvastad?
Szia!
Én most PIC18F1320 alatt akartam a printf("hello"); -t kiíratni a SIM UART ablakba, de "out of bounds memory access" hibát ír. Debugger > Settings > Uart1 IO alatt bekapcsoltam a Enable Uart1 IO-t és a window is ki van választva. Teszteléshez kellene nekem a printf függvényt használni, de nem akar összejönni.
Ha úgyis csak szimulálni akarsz, próbáld ki egy nagyobb memóriájú típussal!
Vagy a memóriazabáló printf() helyett írj egyszerűbb függvényeket a kiíratáshoz! A PICula projektemben outString(), out4hex() vagy outdec() segítségével történik a kiíratás, amelyek a putchar() függvényt hívják meg.
Sikerült, már megy.
Köszi. Nagyon vágod ezt, de jó neked...
A megszakításban mentem a PCLATH ot is, a mentésekben és visszaállításokban is szerepel. Van egy PCLATH_TEMP váltózóm erre, sőt még az FSR t is mentem (FSR_TEMP) , ezt régebben írta valaki (ha jól emlékszem pont te Te ) hogy kell, azóta így csinálom. Nem olvastam ezt a cikket még, nem is tudtam hogy van ilyen témájú leírás. De nekiülök izibe...mert pont ezzel szívok.
Szia!
Melyik C fordítót használod? Próbáld ki szimulátorral - MpLab -ben az MpLab SIM. Írj egy villogtató rutint a PORTA egy kimenő bitjére. Vedd fel a kimenetet az MpLab logikai analizárorára. Egyetlen duktató van a 16F628(A) -ban,m a komparátor, azt kikapcsoltad.
MikroC PRO -t használok. Gyakorlatban még nem próbáltam.
Ez így nem működik.
Úgy meglehet adni valahogy, hogy mindegyik portnak megadom , hogy mi legyen bemenet vagy kimenet külön - külön?
Hali!
Még nem használtam a PIC-ben kódvédelmet, abban kérnék megerősítést, hogy ha bekapcsolom a kódvédelemet, akkor az csak az ICSP lábak felőli olvasást akadályozza meg? Tehát a program futásában ez a kódvédelem nem vesz részt?
Szia!
A futására csak akkor lehet hatása, ha a kód vagy adat EEProm területről olvas vagy oda ír adatot. A koncigurációs bitekkel ezeket a funkciókat lehet engedélyezni, tiltni.
Szia!
Mégis mi nem működik? - RA0 .. 2: gondolom működik bemenetnek, - RA3: működnie kell, mint kimenet, - RA4: Nyitott kollektoros kimenet - kell egy felhúzó ellenállás, - RA5: Csak bemeneti láb, - RA6 .. RA7: Az oszcillátor kivezetései is egyben. Csak belső oszcillátorral használható bemenetként vagy kimenetként.
Viszont van "Table Read Protection" bitek, meg sima "Code Protection" bitek, "Boot Block Code Protection", "Data EEPROM Code Protection"...
A "Table Read Protection" nem azt akadályozza meg, hogy a program futása közben végrehajtsa a táblaolvasás (TBLRD*) műveletet? Szerk.: 18F2550-ről van szó.
Pont erről szerettem volna írni:
A Table Read Protection aktiválása nem engedélyezi a programtár kiolvasását arról a területről, amire vonatkozik, még a saját program számára sem. A Table Write Protection aktiválása nem engedélyezi a programtár tartalmának módosítását azon a területen, amire vonatkozik, még a saját program számára sem. Code Protection aktiválása nem engedélyezi az ICSP-n való kiolvasást azon a területen, amire vonatkozik. Data EEPROM Code Protection aktiválása az adat EEProm területre nem engedélyezi az ICSP-n való kiolvasást.
RA0,RA1,RA2 nem működik , mint bemenet . Írtam egy kis teszt programot, de nem akarja érzékelni bemenetként a PIC. Íme a tesztprogram:
Sziasztok!
Valamilyen kellemetlen okból C18 fordításakor kapom ezt a hibát: Error - section '.idata_szakd.o' can not fit the section. Section '.idata_szakd.o' length=0x00000135 Errors : 1 PIC18F4455-el dolgozom, és valószínű ez lehet a baja, hogy definiálva van a következő néhány sor:
Valakinek van ötlete hogy hogyan tudnám eltárolni ezeket? :S elvileg az adatmemóriába kell hogy pakolja ahol van 2048 bájt hely, de mégsem :S
Egy másik topikban volt róla szó a közelmúltban, itt nézz körül!
|
Bejelentkezés
Hirdetés |