Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   243 / 1318
(#) watt válasza teodor hozzászólására (») Júl 15, 2008 /
 
Jó régi, és sajnos még hiányos. A főleg sajnos, hogy nem látok fejlesztést.

Viszont ami megvan, az egész szép munka. Jó lenne ha befejeznék rendesen!
(egyébként van egy olyan gomb a szerkesztésnél, hogy LINK. Érdemes használni...)
(#) acidum hozzászólása Júl 16, 2008 /
 
Sziasztok!
Egy MPLAB-os kérdésem lenne.
Adott egy projekt, ami 2 db assembly fájlból áll.Az egyik a főprogram, processzorbeállítással, regiszterbeállítással, stb, a másik egy alprogram, amit egy include utasítás hív meg.A kérdésem a következő:
-az includált programnak is a projektben kell lennie?
- a kiterjesztésének mindenképp .inc-nek kell lennie?
- kell hozzá linker fájl?

Sajnos nem vagyok nagy penge a témában.Türelmeteket, és segítségeteket köszönöm:AC
(#) trudnai válasza acidum hozzászólására (») Júl 16, 2008 /
 
Szia acidum,

Az include file-t ugy kell elkepzelni, hogy ott ahol azt mondod "#include" azon a ponton mintha egy szovegszerkesztovel beszurnad az filet a foprogramba. Nincs semmi extra ebben, nagyon regi es egyszeru technika ez amit a forditoknal alkalmaznak. Mielott a fordito egyaltalan latna a forras kodot egy elofeldolgozo elokesziti a forrast es az ilyen szerkeszteseket az elvegzi. Pl minden MCU-hoz ad a Microchip egy INC file-t, ami az MPASM konyvtarban talalhato meg pl "P12F683.INC", es ha ezt beinkludalod, akkor nem kell mar a specialis funkcioju regisztereket sajat magadnak definialni. Ugyanaz az eredmeny (es gyakorlatilag ugyanaz tortenik) mintha annak a file-nak a tartalmat Ctrl+C - Ctrl+V -vel atmasolnad a sajat forrasodba.

Kiterjesztesnek nem kotelezo INC-nek lennie, csak javasolt - innen latod, hogy ez nem egy kulon asm modul, hanem csak egy include file.. Nem is kotelezo a projectek koze felvenni, de megintcsak javasolt, igy konyebben tudod a projectedet atlatni, hogy mi tartozik bele mi nem, ill ha szerkeszteni kell akkor elegendo a project managerben rakattintani a file-ra mint hogy az Open-t hivogatni es keresgelni a konyvtarakban hol is van az atkozott INC file.

Linker script emiatt onmagaban nem kell... Szerencsesebb ha linker scipteket mar elkezded tanulni ill hasznalni, de lehet anelkul is ellenni amig nem hasznalsz LIB-eket.
(#) acidum válasza trudnai hozzászólására (») Júl 16, 2008 /
 
Köszönöm a választ kedves Trudnai.
A #include OK, értem is miért, de nem forditja le.Megadtam neki a full elérési utat, pl #include "c:\file.asm", de igy sem.Ezért kérdeztem, h az includált filének a projektben kell-e lennie.Ez egy külön modul szeretne lenni, azért nem .inc a kiterjesztése.

Mit kellene csinálnom, h lefordítsa a beincludált asm-et?
(#) watt válasza acidum hozzászólására (») Júl 16, 2008 /
 
Miért nem teszed be a projectbe és próbálod meg úgy?
Egyébként szerintem akkor is le kéne fordítania, ha megadod a teljes elérési utat, bár én még úgy nem próbáltam. A project beállításainál meg lehet adni a különböző fájlok elérési útvonalát, ott érdemes beállítani azt a könyvtárat, amiben az inc, header fájlaid vannak, akkor még elérési utakat se kell a forrásba beírni.
(#) acidum válasza watt hozzászólására (») Júl 16, 2008 /
 
Betenném, de átláthatatlan lesz az egész tőle
elég sok.Ez egy microchipes keeloq decoder, és a vevő része az, ami külön modulként akar lenni.
(#) trudnai válasza acidum hozzászólására (») Júl 16, 2008 /
 
Mi a hibakod vagy hibauzenet? Az egy asm file, tehat lehet egy modul amit nem inkludalni kellene, hanem szepen felvenni a projectbe es osszelinkeltetni?
(#) acidum válasza trudnai hozzászólására (») Júl 16, 2008 /
 
Nincs hibaüzi.Beleraktam egy sort, ami teljesen hülyeség, a fordító ugyis megáll, ha meglátja.De nem. A főprogram lefordul, a modul nem.
Hogy lehet összelinkeltetni?
(#) szilva válasza acidum hozzászólására (») Júl 16, 2008 /
 
Ha ez a külön file egy komplett asm, aminek a végén ott van az "end" is, akkor ezt nem include-álni kell, hanem fel kell venni forrásként a projektbe.

Ha egynél több asm file-ból megy a fordítás, akkor mindenképpen a relokálható és linkelendő módot fogja az MPLAB választani, tehát neked is úgy kell megírni a főprogramot, hogy az egy relokálható modulként forduljon le (cblock helyett udata, org helyett code használata a forrásban, de az MPASM help-ben jó példa is van rá). Esetleg abba a forrásba is bele kellhet nyúlni, amit modulként akarsz használni, ha az nem relokálható módra volt elkészítve.

A linkeléshez kell linker script, legegyszerűbb berángatni a projektbe a gyáriak közül a megfelelő PIC-hez tartozót. Ha jól emlékszem, az MPASM könyvtárából nyílik egy LKR könyvtár, abban vannak a gyári linker scriptek.

Ezután célszerű a "build all"-lal fordítani a projektet, ez két asm file esetén 3 folyamatot kellene, hogy eredményezzen, kétszer az MPASM lesz meghívva, külön-külön a két asm-re, aztán pedig az MPLINK a hex előállítására. Ezeket a műveleteket az output ablakban lehet is látni a fordítás után, hogy melyik parancsot milyen paraméterezéssel indította el.
(#) vtnagy hozzászólása Júl 16, 2008 /
 
Sziasztok!
Lenne egy sokkoló kérdésem..

Még nincs PIC égetőm, nem tudtam még beszerezni hozzá az alkatrészeket, ezért egyelőre az elmélettel próbálkozok.

Szeretnék egy futófényt csinálni 16F877-es PIC-kel, amiben egy gomb lenyomására lehetne változtatni a jelenleg futó "programon". Olyasmi lenne, mint pl. egy biciklilámpa.
A PIC PORTB, PORTC és PORTD lábait használnám fel a LED-ek működtetésére (24 db LED).
Egyelőre még csak 2 "funkció" található benne, ezt majd bővíteném még, de egyelőre annyi lenne a lényeg, hogy egyáltalán működőképes legyen.

A kijelzési részét azt hiszem, meg tudtam csinálni, de azt, hogy a gomb lenyomására lépjen, az már nem biztos

A gomb a PIC 2. lábán van (RA0). Az alapot, amit átírtam, innen az oldalról szereztem be, szóval nem magamtól van, ezért lehet, hogy sokaknak ismerős lesz
Magát a vizsgálatot egy szubrutin segítségével szeretném megoldani, nem tudom, hogy meg lehet-e csinálni egyéb módon, de azt szerintem majd mondjátok.

A vizsgálat a FUTOFENY label alatt található.

Azt szeretném, hogy legyen szíves mondja már meg valaki, hogy hol hibázok, milyen módszerrel lenne a legértelmesebb megcsinálni.

Ha valamit netán nem értetek, akkor szóljatok nyugodtan, igyekszem elmagyarázni.

futofeny.asm
    
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Van néhány alapvető probléma, szerintem azzal kezdjük és csak utána ássunk mélyebbre.
Tehát azt írod, hogy a PORT B,C,D kimeneteket használod LED-ekre. Ezzel szemben csak a PORTD-t állítod be kimenetnek. (csak 65 hibát írt ki az MPLAB!)
A másik, hogy nem szokás ilyen kígyó kódot írni, ha arrébb kell léptetni egy bitet. Erre való az RRF, és az RLF utasítás. Annyit kell csak tenni, hogy az első portra vonatkozó utasítás kiadása előtt törölni kell a C-t, hogy biztosan 0 lépjen be(nézd meg az utasítás működését az adatlapban!).

Ha ezen túlleszünk, jöhet a gombos kérdésed.
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Nem csak a PORTD-t állítom be kimenetnek, először PORTB-vel kezdek, aztán, ha lement mind a 8 láb, jön a PORTC, utána a PORTD.

Hogyan javítsam ki? Mert addig értem, hogy RRF meg RLF utasítást használom, csak hogyan tudom megcsinálni, hogy ne akadjon meg a lábak váltása közben?
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Idézet:
„Nem csak a PORTD-t állítom be kimenetnek, először PORTB-vel kezdek, aztán, ha lement mind a 8 láb, jön a PORTC, utána a PORTD.”

Én csak TRISD-t látok.
(Egyébként nem volt 65 hibaüzi, azt elhamarkodtam...)
(#) vtnagy hozzászólása Júl 16, 2008 /
 
Ha így csinálom, akkor jó lesz?

FUTOFENYJOBB
MOVLW B'00000001'
MOVWF PORTB
RRF PORTB, F
CALL DELAY
CLRC
MOVLW B'00000001'
MOVWF PORTC
RRF PORTC, F
CALL DELAY
CLRC
MOVLW B'00000001'
MOVWF PORTD
RRF PORTD, F
CALL DELAY
CLRC
GOTO FUTOFENYJOBB
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Ha végigköveted a programodat(amit legközelebb úgy szúrj be, hogy használod a "Kód" gombot, és a code után írod, hogy =asm) akkor láthatod, hogy nem az fog következni, amit szeretnél.
pl. minden GOTO FUTOFENYJOBB vissztérésnél a PORTB-re '00000001'-t viszel ki.
Megasztán, ha jobbra akarod léptetni a bitet, akkor a bal szélsővel kéne kezdeni. Azt is meg kéne beszélni, hogy milyen sorrendben állnak a portok. Én látatlanban a B,C, D sorrendet választottam, és így írtam meg a példát, amit ha leszimulálsz, akkor szépen lépegetnek a bitek a Watch ablakban! Csatoltam a projectet, csak az elérési utakat írd át a Project beállításoknál.
(#) Blint válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Szia!

Ha jól sejtem azt szeretnéd, hogy először végigfusson mindegyik port mindegyik lábán, akkor nem lesz jó.

mert most csak annyit fog csinálni, hogy felgyullad a PORTB,1, aztán kis idó múlva a PORTC,1 aztán a PORTD,1

A másik: ha betöltöd az W-ből a PORTB-re és egyból forgatod a biteket és csak utána hívod meg a delay-t akkor az első led elhanyagolható ideig fog csak világítani

Ha úgy szeretnéd, hogy végigfusson a portokon a fény akkor ciklusba kéne ágyazni, valahogy így:

movlw b'00000001'
clrc
movwf PORTB
call delay
rrf PORTB,F
btfss status,c
goto $-3
clrc

movwf PORTC
...
...
...

remélem nem írtam rosszul semmit, én is kezdő vagyok a témában
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Nagyon köszönöm a segítséget.
Használtam először a Kód gombot, csak egymásmellé behányta a szöveget, így inkább kivettem, nem tudtam ezt az =asm funkciót.
Sorrendre a B, C, D-t jól választottad, én is úgy kezdtem el

Ezt a bal szélsőset nem értem. A léptetést akkor úgy kell megcsinálni, hogy, ha RRF-et használok, akkor jól értem, '10000000'-ról kell elindulnom?

Ki szeretném bővíteni még több funkcióval, akkor ebben tudnál még segíteni?
Elég lesz az első lépést belémverd, utána szerintem már magamtól menni fog.
(#) Doncso hozzászólása Júl 16, 2008 /
 
Sziasztok, PicKit2 építésével kapcsolatban szeretném a hozzáértők segítségét kérni, épp benne vagyok a szilva oldalát talált pickit2 építésében de sajnos a rendeléskor lemaradtak a BAT85-ös diódák, illetve induktivitást olyat rendeltem ami úgy néz ki mint az ellenállás, namost az volna a kérdésem, hogy lehet valami ismertebb diódával helyettesíteni ezt a BAT-ot vagy nem igazán, illetve ,hogy az induktivitás megfelelő-e erre a célra.
Kapcsi csatolva.
Üdv: Doncso
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Persze segítek, csak lépésenként haladjunk, hogy megértsd.

Szimuláld le és a kezdő bites kérdésedre megvan a válasz.

Próbáld meg magad megírni a balra léptetős rutint. Ha nem megy szólj...
(#) trudnai válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Csak halkan jegyeznem meg, hogy az RLF/RRF is un RMW utasitas, azaz a port teljes tartalmat elobb kiolvassa, aztan modositja majd ujra vissza irja. Hogy miert erdekes ez? Tegyuk fel hogy egyik lab valami miatt nagyon le van terhelve, a PIC nem kepes azt - idoben - magasra emelni. Ekkor megint jon az RLF/RRF ami kiolvassa a portot de az meg alacsony szintet mutat, kiolvas ebben az esetben egy b'00000000' erteket es utana mar hiaba shifteled az nulla marad (immaron 'hivatalosan' is).

Ilyeneket shadow regiszterekkel szokas csinalni, tehat a shadow regiszteren el kell vegedni a szukseges modositast majd azt beirni a portba valahogy igy:

  1. futofeny
  2.     ; elso LED vilagitani fog amint a shadow-t atmasoljuk a portba
  3.     movlw   1
  4.     movwf   shadow
  5. loop
  6.     ; shadow registert bemasoljuk a PORT-ba
  7.     movf    shadow,W
  8.     movwf   PORTB
  9.  
  10.     ; varakozunk vagy mit tudom en
  11.     call    delay
  12.    
  13.     ; shadow registert shifteljuk
  14.     ; nulla legyen a C-ben nehogy mas LED-ek is vilagitsanak
  15.     ; mint ami kell nekunk...
  16.     bcf     STATUS,C
  17.     shl     shadow,f
  18.     ; megnezzuk az 1-es kiesett-e belole...
  19.     btfss   STATUS,C
  20.     goto    loop ; meg nem, tehat tekerunk tovabb
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Rendben, igyekszem
Még az MPLAB-ban való tesztelés nem igazán megy, de próbálok rájönni

trudnai: Ne haragudj, de szerintem ezt még egyelőre hanyagolnám, jó lenne rendesen megértsem az eddig hibáim javított verzióját
Kicsit sok lenne így egyszerre
(#) watt válasza trudnai hozzászólására (») Júl 16, 2008 /
 
Ebben igazad van, de egyelőre megteszi így is. Másrészt nem lenne szép, ha olyan áramkört terveznénk a kimenetre, ami nem engedné magasba! Legalább is én még ilyet nem követtem el. Szerintem a LED-ek sem tennének ilyet.
De ismétlem a megjegyzéseddel egyetértek, ha valóban ilyentől félni kéne.
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Idézet:
„Még az MPLAB-ban való tesztelés nem igazán megy, de próbálok rájönni”

A projectet ha megnyitod akkor Debugger módban jön fel? (vannak kék Play, Pause és >> gombok és léptető ikonok?, Feljön a Watch ablak?)
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Igen, van minden.
Úgy nézem, ahogy Topi leírta.

Eddig nem csinált semmit sem, de legalább most nem ír hibákat
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Hogy érted, hogy nem csinált semmit?
A Watch ablakban benne kell lennie a PORTB,C,D portoknak, bináris megjelenítésben is. Ráböksz a kék >> gombra és nézed, hogy mit csinál a program... De lépésenként is fégrehajthatod a Step Into ikonnal, vagy az F7 nyomkodásával.
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Szó szerint értem, hogy nem csinál semmit sem.
A Tiédet nem nyitja meg, ezért átmásoltam a leírtakat az enyémbe, de ott nem csinál semmit sem.
A Tiédnél azt írja, hogy:
"Unable to load workspace C:\...\vtnagy_futofeny.mcw because the file has been corrupted."
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Mintha írtam volna, hogy a Project beállításainál(zöld ikon fogaskerékkel) meg kell adni azt az elérési útvonalat, ahová Te másoltad a Directories fülön!

Milyen verziód van?
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Igen, tényleg írtad, ne haragudj, úgy tűnik, véletlen átsiklottam felette :/

8.14-es verzióm van
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Nem kell elnézést kérned, csak haladjunk! (kérdezz, ha elakadsz, és írd le a részleteket...)

A verzió jó. Vigyázz, hogy az elérési út hossza nem lehet 64 karakternél hosszabb. Ez az egyik legbosszantóbb az MPLAB-ban, nem értem miért nem képesek ezen túllépni, na de ez van...
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Ezt nem tudtam
Átraktam mostmár máshova, de még mindig nem igazán akar menni. Ezzel később is el tudok szöszölni, hogy megnézzem a debug részt.
Nem akarlak feltartani, így inkább beszúrom a balra futó futófény próbáját
  1. FUTOFENYBAL                                            
  2.         BCF             STATUS,C        ; CARRY TÖRLÉSE                      
  3.         RLF             PORTD,F         ; BITEK BALRA LÉPTETÉSE
  4.         RLF             PORTC,F
  5.         RLF             PORTB,F
  6.         BTFSS   STATUS,C        ; HA ÁTVITEL VAN LE KELL KEZELNI
  7.         RETURN                          ; HA NINCS ÁTVITEL, AKKOR KILÉP
  8.         MOVLW   B'00000001'     ; UTOLSÓ LED KIGYÚJT
  9.         MOVWF   PORTD  
  10.         RETURN
Következő: »»   243 / 1318
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem