Fórum témák
» Több friss téma |
Mint ha korábban is elkövettem volna ezt a hibát :hide:
Mostmár minden világos, köszi!
A terhelhetőségről hol találok adatot a pdf-ben? Régebben olvastam hogy kb. 20mA-ig lehet terhelni egy kimenetet, vagyis LED meghajtásra elég (mármint nem eloxidál, hanem nem lesz baj belőle ).
Meglepő módon az electrical specifications fejezetben.
Közbe meg lett... az ELECTRICAL CHARACTERISTICS-ben volt
Szia!
Az a legnagyobb baj, hogy a fordító nem jelez hibát és nem ad figyelmeztetést sem. A második szimblólum értéke páros, akkor a W -be tölti az első szimbólum értékének megfelelő címről olvasott adatot. Ha a második szimblólum értéke páratlan, akkor a STATUS bitjeit állítja be az első szimbólum értékének megfelelő címen levő adat szerint. Hasonló jelenség figyelhető meg a 18F fordítónál, ha kifelejtjük a w/f részt (ekkor sem kapunk figyelmeztetést):
vagy
Ugyan a rendeltetés default értéke f azaz 1, de az ACCESS RAM kiválasztása 0 -val történik (A = 0), így az A megadása a WREG -ben képzteti az eredményt, a BANKED megadása pedig a memóriában. Ezen a két helyen kerülendő minden más szimbólum használata, csak a W - F, illetve A - BANKED szimbólumokat használjuk...
Nos igen, nem jelzett hibát az MPLAB, amikor változóból akartam változóba másolni a MOVF-el.
ASM-ben (MPLAB-ban) a " goto $+2 " utasítás a következő sor utánira ugrik (tehát kihagy egy sort és az azutánit hajtja végre) ?
szerk.: és ha így van, meddig lehet növelni az ugrást (vagyis itt a 2-t) ?
De buta vagyok, most nézem:
Idézet: „Előre ugrásnál ne felegdük, hogy a GOTO utasítás két utasításszót (4 bájtot) foglal le, ezért a rákövetkező utasítás $+4 címen kezdődik.” Mostmár értem.
Szia!
Nem tanácsos a $ szimbólumot így használni, mert eltérések vannak a családok között: - 16F -en a következő utasítás az akutális utasítás címe +1 -en van - 18F -en a következő utasítás az akutális utasítás címe +2 -en van, ha az aktuális utasítás egyszavas, és a +4 en, ha a ha az aktuális utasítás kétszavas... Szerintem egy címke kiírása nem lehet nagy gond... Célszerűbb a bra utasítás alkalmazása, az csak 1 szó...
Címkéknél BRA utasítást használok, nem tudom hogy ennél az ugrásnál hogy viselkedik a BRA.
Idézet: „18F -en a következő utasítás az akutális utasítás címe +2 -en van, ha az aktuális utasítás egyszavas, és a +4 en, ha a ha az aktuális utasítás kétszavas...” Itt az aktuális utasítás alatt a soron következő utasítást érted? szerk.: azért lenne jó ez az ugrás, mert amúgy meg 14 címke kéne plusszba (vagy átírom a motort)
Azt hiszem inkább átírom akkor a motort. Már kész van, így kevesebb memóriát foglal
Idézet: „Itt az aktuális utasítás alatt a soron következő utasítást érted?” Aktualis utasitas amit epp vegrehajt a PIC. Tehat ha "BRA $+2" -t irsz, akkor az aktualis a 'BRA'. De ha 'GOTO $+4' -et, akkor a 'GOTO' az aktualis, ami mar 2 szavas... Mindketto pelda csupan annyit csinal, hogy kozvetlenul a BRA ill. GOTO mogott allo utasitasra 'ugrik', amit amugy is megtenne a PIC, tehat legfeljebb idozitesi feladatot lat el mintsem logikait.
A veremtárban mennyire gyakran szoktak adatot tárolni? Mert találtam itt a topicban egy asm kódot, ahol a veremben(?) tárolódik vagy 160 byte-nyi információ. Vagy az nem a verem? Csak mert RETLW-vel tér vissza...
A vége fele van egy ilyen rész:
Itt forráskód: Bővebben: Link Azt se értem hogy a "addwf PCL, 1" hova mutat.
A literális (konstans) adatokat általában a programmemória egy részében szokás eltárolni. Itt is ez a helyzet, tehát ez nem stack, hanem a programmemória. Ezt úgy kell elképzelni, hogy van egy kezdőcímed, jelen esetben a címke (vagyis az addwf PCL,1) sor. Ehhez a címhez egy eltolást adunk hozzá úgy, hogy a programszámláló alsó bytejához adjuk hozzá a W- ben tárolt eltolás értékét, majd a konstans adattal visszatérünk a szubrutinból. Ezt az eljárást az angol szakirodalomban look-up table- nek nevezik. Egy kis olvasni való
Tehát ha ezt tömbnek nézzük, akkor az "addwf PCL,1"-nél ami a workben van (ami hozzáadódik a PCL-hez) az az index, ami mutatna a tömb elemére, ami belekerül a workbe? Ez egyszerűbb mint gondoltam, a pdf-et átnyálazom, köszi szépen! :yes:
Igen, nagyjából ez a helyzet. Addig viszonylag egyszerű a dolog, amíg 256 byte- nál kevesebb adatot tárolunk, attól felfelé már állítani kell a PCH-t is, ami már nagyobb odafigyelést igényel. Ezek a linkelt pdf- ben szépen le vannak írva, tanulmányozgasd csak!
Próbáltam értelmezni a pdf-t, bár angol tudásom nem biztos hogy elegendő , de lehet hogy a 18F szériáknál máshogy van? A pdf csak utalást tesz róla hogy más mikrovezérlőknél nézzük meg az adatlapot, de alig értem miről is van szó.
Erről a Table dologról sem ír szinte semmit, vagy csak én nem értem. De az általam használt kód nem akar működni:
Szóval ebben az egyszerű részben csak annyit szeretnék csinálni hogy annyiszor menjen végig a ciklus, amennyivel visszatér a RETLW. Viszont ha ezt berakom a PIC-be akkor összevissza megy végtelen ciklusban. szerk.: szóval elvileg 6x kéne lefutnia a ciklusnak nem?
Ha 18F szériát használsz, akkor célszerű a táblaműveleteket támogató utasításokat használni, hiszen éppen erre találták ki őket. A PICCOLO project is tartalmaz erről némi ismertetőt. Bővebben: Link
Szóval 18F szériánál nem használható a RETLW?
Ez a táblaműveletes dolog nekem még nagyon magas
Használható ez is, csak nem szokták, mert van rá megfelelőbb utasításcsoport.
Pláne hogy nálam nem működik. Megpróbálom értelmezni ezt a táblás eljárást.
Próbáld ki a fenti kódot. Mielőtt meghívjuk a Szamol nevű szubrutint, a W- be kell helyezni az index értékét. Lehetne még rajta pofozni, de a célnak szerintem megfelel. Igyekeztem univerzálisra csinálni, pl. nem muszáj az 1000- es címtől lenni az adatoknak, lehetnek máshol is. Amire oda kell figyelni, hogy ha egyéb adatokat is akarsz tárolni, akkor egy DB sorban páros számú adatot kell megadni, mert így lesz folytonos az indexelés. Szerk: Azt elfelejtettem írni, hogy célszerű 0xnnnn00 címre helyezni a táblát, mert ekkor lehet a fenti kóddal a maximális számú (256) adatot eltárolni.
Nagyon szépen köszönöm!
Közben sikerült az EEPROM memóriát is kezelni, az egyszerűbbnek tűnik, de így ezzel együtt már van fél megám
Közbe felmerült az igény hogy nagyobb memória kéne.
Kevés még ez a 256 bájt is. Nem lehetne valahogy többet tárolni?
Szia!
- A pic18F -es családban van olyan kontroller, aminek 1K adat EEProm -ja van (18F2620), - A program memória (egy tartományát) is lehet írni / olvasni sokféle pic kontrollerrel, - Külső soros EEProm memória kezelése SPI vagy I2C felületen (24FC512 - 64Kbyte, 24FC1025 - 128Kbyte / 25F4096 - 512Kbyte....).
Tárolni könnyű, csak odaírod a többi után. Kiolvasni lesz bonyolultabb. De ha érted El_Pinyo kódját, akkor ezt egyszerűen ki tudod terjeszteni 16 bites címzésre. Annyi a lényeg, hogy a Szamol meghívásakor pl. SEGEDL és SEGEDH változókban legyen a kívánt bájt címe, és akkor
Azért szimulátorban is ellenőrizd le, mert ezt csak úgy fejből írtam. Meg az ADDWF utasításoknál még a végéről lemaradt a BANKED paraméter, tehát ADDWF SEGEDL, W, BANKED és ugyanígy a SEGEDH-nál is. Valószínűleg a fordító jól fordítja enélkül is, de biztos, ami biztos.
No még csak most jutottam el, hogy ki próbáljam ezt a kódot. Annyit nem értek hogy az Init rész miért a 0x0200-as címen van? No meg akkor a főpromram is innen kezdődik, illetve ugye ahol vége van az Init-nek.
|
Bejelentkezés
Hirdetés |