Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Üdv!
Furcsa tapasztalatom van: PIC16F887-tel dolgozok. Lap váltás beállítva, oda is tudok ugrani(GOTO). Gombokat nem kezeli és ha portot szeretnék törölni LAP1-ből, meghal az egész, rezetel. Ha beállítanék, csak 1-et tudok, ha még egyet állítanék, akkor is meghal. Mit rontok el? Vagy valamit be kell állítani?
És tényleg, köszönöm!
Pedig erről olvastam is tegnap. Van valami módszer véletlen szám generálására? Az oké hogy pörgetek egy számlálót jó gyorsan, aztán a nyomógomb felengedésekor megnézem hogy hol tart. De külső behatás nélkül lehet valahogy véletlen számot generálni? Idézet: „Esetleg beállitásbeli gond?” Igen, arra gyanakszom. Az FOSC2=OFF ugyanis azt jelenti, hogy ha OSCCON alsó két bitje nulla, akkor a belső oszcillátort kell használni. Ezért úgy sejtem, hogy FOSC=ON lenne a jó választás... Mellesleg: - DEBUG = ON helyett OFF is bölcsebb volna, ha I/O célokra szeretnéd használni az RB6/RB7 lábakat. - STVREN=ON reseteléssel jelezné, ha túlcsordul a veremtár.
Bocs, kimarad a kettes! Tehát FOSC2=ON a javaslat...
Létezik olyan 18f-es PIC, aminek van 2db teljesen kivezetett portja, illetve még egy aminek legalább négy bitje ki van vezetve és ebből kettő legalább 11 bites felbontású A/D?
Szerk.: A Microhip-nek is van olyasmi táblázata mint a Maximnak, úgyhogy lehet böngészgetni... MPi-c! Köszönöm, bár sajnos mostani ismereteim fényében még nem értem. :no:
Igen az oszcillátor nem volt rendesen beállitva. Valószinű emiatt nem volt jó, amit szimulátorba néztem. Most már jó. Köszönöm a segítséget
Üdv
Léteizik a Microchipnél egy MAPS (Microchip Advanced Parts Selector) nevű segédlet. Ez működik böngészőből is online, meg van gépre letölthető verziója is. Ennek segítségével megtudod találni az igényednek leginkább megfelelő Microchip alkatrészt, nem csak a PIC-eket.
Külső A/D nem kell most. De már találtam egy példányt: PIC18F2423. Az egyik port 8 bitje lesz a nyolc szegmens, a másik port 8 bitje pedig a nyolc digit. Az egyik A/D feszültséget mér, a másik áramot. A két négydigites LED kijelző pedig kiírhat feszültséget, áramot, teljesítményt stb a labortáp előlapján...
Van pár jó ötletem, csak tanulgatni kellene még sokat. Idézet: „Van pár jó ötletem, csak tanulgatni kellene még sokat.” Igen, egy kicsit előrerohantál szerintem!
Összeszedtem a kódot, hátha lát benne valaki valamit.
A Q0-t nem hajlandó lefuttatni. Utána vannak még címkék, de azokat nem illesztettem ide be, illetve több ilyen BCF is van benne.
Az org 800 miatt kérdezem, hogy vajon radixnak mi van beállítva?
A micsodának?
Az ORG 800-at azért tettem bele, mert a 0. lapot még nem írtam tele teljesen, de ott már nem férne el még egy rész, ezért kezdeném a következő lapon. Azt tudom, hogy az ORG-gal lehet kiválasztani a memória címet, és a 1. lap a 0x0800-tól kezdődik. Ezt a radixot nem értem.
Azért kérdezte, mert ha pl. 10-es számrendszerre állítottad az alapértelmezett számrendszert ( radix-ot), akkor a 800 --> 0x320 -at jelent!
Steve
Nézzétek meg légyszíves, találtok-e rajta valami hibát! Ha nem, akkor holnap levasalom.
Kapcsolási rajz Beültetési kép Nyákterv Szerk.: A mikrovezérlő egyébként PIC18f4520 lesz. A Chipcad-nél a PIC18F4520-E/P 880Ft, a PIC18F4520-I/P pedig 800Ft. Mi a különbség a kettő között?
Már nem tudom szerkeszteni az előzőt sajnos. A különbség a hőmérséklet-tartomány...
A PCLATH regisztert gondolom csak azért piszkálgatod, hogy az egész memóriát átfogó goto és call hívásokat kipróbáld.
Fordítsd le a kódodat és nézd meg, hogy az általad org 800-zal kezdődő rész hova fordul (View menű -> Program Memory) rögtön látod, hogy jó helyen van-e. Ha nem a 0x800 címtől látod ezt a részt, a radix nem hexadecimálisra van állítva. Akkor javítsd ki a címet az org után "0x800"-ra! Radix. Ahogy kissi utalt rá, alapértelmezett számrendszer. Nézd meg az MPASM Assembler helpjében! :nezze: Függetlenül a radix beállításától helyes szokás a számokat a megfelelő számrendszerre utaló előtaggal megadni (B,O,D,H vagy 0x...), így elkerülhető a keveredés és a meglepetés. Idézet: „A Chipcad-nél a PIC18F4520-E/P 880Ft, a PIC18F4520-I/P pedig 800Ft. Mi a különbség a kettő között?” Az ár, feltétlenül... I: (Industrial) hőmérséklettartomány: -40°C - +85°C E: (Extended) : -40°C - +125°C P: dip tokos A PIC közvetlen közelébe kell tenni a tápjára 100 n-os hidegitő kondikat...
Köszönöm a radix segítségeket, most már értem mi is ez.
A fordító így is, úgy is jó helyre tette, a 0x0800 helyre, de a progi a picen még nem megy jól. Esetleg nem lehet valami olyan, hogy mivel lapot váltottam, akkor a lapváltással együtt bankot is vált? Ugyanis a BANK1-ben nincsen PORTx csak TRISx. Ha viszont olyan művelet van a másik lapon (lap1), ami a PORT-ot állítja, akkor bankot kellene váltani? Vagy ez hülyeség lenne?
Kondikat szándékosan nem rajzolod fel az IC-k lábaihoz?
Szia!
- Azt kellene tudni, hogy az ÓRA_E címke hol van a programban (org ..) - Az egyértelműség érdekében használd a 0x800 formát, ahogy azt mások is ajánlották. - A 37. és 38. sorokkal így is probléma van: A 37. soban meghívod a 0. lapon levő TÖRÖLD rutint. Előtte, helyesen, beállítod a PCLATH értékét. A 38. sorban azonban egy, az 1. lapon levő címkére szeretnél ugrani (mivel nem látjuk a TÖRÖLD rutint, azt feltételezem, hogy nem változtatja meg a PCLATH értékét), a PCLATH-ban a 0. lap használata van előkészítve, a kontroller a 0. lapon a WW & 0x7FF címére fog ugrani... - Ha van megszakítás és nem csak a 0. lapot használod, akkor a PCLATH értékét is menteni kell a megszakítási rutinban. A mentés után a 0. lapot kell előkészíteni (clrf PCLATH). A visszatéréskor a mentett PCLATH értéket is vissza kell állítani. - A banksel és a pagesel beépített makrók használatát ajánlom. Szia
Nem, bankot nem vált. A korábban betett kódból nem dönthető el, hogy minden jól van-e beállítva, pl.hiányzik belöle a C port beállítása kimenetnek. A végén sem jól van a lapbeállítás a goto WW előtt...
Üdv!
Az ÓRA_E az még a 0. lapon található, azért kellett létrehozni, hogy az ugrás előtt betudjam állítani a lapot. Átírom helyesre az ORG-ot. a 38. sornál már nem ugrik vissza a 0. lapra, hanem ott, az 1. lapon egy végtelenített ciklusba ugrasztja. Ha visszatért a 0. lapról (elvégezte a TÖRÖLD rutint) akkor vissza kell állítani az 1. lapra a PCLATH-ot? Használok megszakítást, és eddig nem mentettem a PCLATH-ot, valószínűleg emiatt nem tetszett neki. Nekiugrok ennek. A pagesel-nek meg utánanézek. #578231 MPi-c: A lap beállítás miért nem jó? Idézet: „MPi-c: A lap beállítás miért nem jó?” Mert a 0x0800 cím után befordított sorokban a CALL TÖRÖLD előtt a PCLATH bitjeit törlöd. Azt nem tudjuk, hogy a szubrutinban mi történik a PCLATH bitjeivel majd a visszatérés után ismét van egy GOTO a törölt PCLATH 3:4 bitekkel. Ez megint a 0. lapra ugrik nem a 0x0800 valahány címen lévő WW cimkére. (de ezt írta le H4p41C is...) Idézet: Bocs! Hp41C „(de ezt írta le H4p41C is...)”
A kapcsolási rajzon? Hát most így jött ki. A nyákon ott vannak a kis elkók. De teszek melléjük fóliakondit is.
Egy szubrutinban lehet több RETURN utasírás? Hogy mondjuk itt is vissza tudjon ugorni, de ha egy feltétel nem teljesült akkor fusson még egy kicsit és onnan ugorjon vissza. De ha még akkor sem teljesült egy feltétel akkor még mindig fusson stb... Illetve; az egyszerű címke, amire GOTO utasítással tudok ugorni miben különbözik formailag a szubrutintól? Jól gondolom hogy csak annyiban, hogy RETURN vagy RETLW utasítás van a végén?
No, igen, ez volt a baja, legalábbis most lefutnak azok a sorok. Ha lapot váltottam, utána vissza kell állítani a lapot. Ezt eddig nem tudtam, jó lesz megjegyezni (A tiedet valahogy előbb feltudtam fogni, mint amit Ő írt :pirul: ) A TÖRÖLD rutin egyébként nem piszkálja a PCLATH-ot.
Köszönöm mindenkinek a segítséget, még a megszakításnál elmentem az elmentendőket, akkor remélem már hibátlan lesz a dolog! Köszönöm még egyszer mindenkinek! Idézet: „Egy szubrutinban lehet több RETURN utasírás?” Persze! Én is használok többet, ha valahol teljesül valami, akkor ugrik vissza. A cimkére tudsz hivatkozni a GOTO-val és a CALL-al is. Ha GOTO-val mész oda, akkor ott is marad, ha CALL-al, akkor az első talált RETURN-nál vagy RETLW-nél visszaugrik oda, ahonnan volt a CALL. A RETURN az egy sima visszatérítő utasítás, a RETLW 0x00 (pl) pedig olyan, hogy amit megadtál konstansban (ami mögötte van) azt beteszi a W-be (work regiszter) és úgy tér vissza. Táblázatoknál nagyon hasznos. Ha jól tudom, akkor ha GOTO-val megyünk el egy címkére, és RETURN-t talál, akkor NOP-pal helyettesíti, (ha nincs a veremben valami).
Szia!
Idézet: „Ha jól tudom, akkor ha GOTO-val megyünk el egy címkére, és RETURN-t talál, akkor NOP-pal helyettesíti, (ha nincs a veremben valami).” Nem célszerű ilyet csinálni, a nagyobb, modernebb pic-eknél stack undeflow kivételt vagy resetet okoz. Csak akkor használd, ha már egy szubrutin belsejében vagy, így egy másik részletre ugorhatsz, ami return/retlw utasítással tér vissza. Szia |
Bejelentkezés
Hirdetés |