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 |