Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   215 / 1319
(#) Csaplar hozzászólása Máj 21, 2008 /
 
Hali!

A következő lenne a kérdésem!

Feldobott egy warning ablakot az mplab, amikor debug módban fel akartam tölteni a progit a pic-re.
Hülyeséget csináltam, mert azt hittem tudom mi az és ráklikkeltem, hogy ne kérdezzen rá többet és ok.

Ezek után mindig ICDWarning200, Warning 13-as hibaüzenetet kapok és nem tudok vele semmit sem csinálni.

Már egyszer újratelepítettem az mplabot is, de nem változott semmi.
Megnyitottam egy pár napos jól működő mentésem és annál is ugyanez a gond jelentkezik debug módban.

Programmer módban simán felmegy és működik...

Mi lehet a baj?

Előre is köszi!
(#) watt válasza Lozsa hozzászólására (») Máj 21, 2008 /
 
Lozsa!
Feltétlenül használnod kell a linkert? Ha igen, akkor kéne az amit készítettél, mert nekem ez az asm 15 hibával fordul!

Átalakítottam, hogy leforduljon, de ehhez kivettem a CODE-okat, és org-ra cseréltem le. Csatoltam.

Egyből látszódnak a keresett változók...

Még annyit, hogy én már írtam néhány tucat prgoramot, de még egyszer sem használtam a linkert, csak ha microchip-es forrásba gyúrtam bele a saját programrészemet, akkor is igen keserves volt a folyamat. Bevallom csak elképzeléseim vannak a pontos működéséről, ami édeskevés. Javaslom Te se használd, ha elkerülhető!
(#) trudnai válasza watt hozzászólására (») Máj 21, 2008 /
 
Ebben az esetben nem nagy ordongosseg a linker, csupan fel kell venni az LKR filet a projectbe - ott vannak az MPASM/LKR konyvtarban processzoronkent osszegyujtve.
(#) watt válasza trudnai hozzászólására (») Máj 21, 2008 /
 
Nem tudhatom, hogy amit Ő linkelt, az módosítva lett-e(és hogy egyáltalán jó fájlt választott-e?).

Fel tudnám venni, ahogy mondod, de minek, ha egyébként nincs szükség a feladat megoldásához(azaz egy működő programhoz)?
(#) Szárnyas válasza vilmosd hozzászólására (») Máj 21, 2008 /
 
Hálás köszönet!
(#) Csaplar hozzászólása Máj 21, 2008 /
 
Még mindig nem sikerült rájönni, hogy miért nem akarja rátölteni az mplab a progit a pic-re debug módban...

ICD0200: Operation Aborted (Warning 13).
ICD0275: Programming failed.

Valakinek lenne ötlete, hogy mi lehet a baj?
(#) Thowra hozzászólása Máj 21, 2008 /
 
Üdv mindenkinek!
Lehet egyszerű dolog de biztos ami biztos.
Ha át szeretnék írni egy már kész progit egyik picrő a másikra (627 ről 877 re) akkor elég az include részt átírni?Lehet hülye kérdés de ha a progi véget ért (utolsó utasítás is) akkor kezdi előről vagy 'megáll'?
Bocs a sok alap kérdésér de még nagyon kezdő vagyok
(#) Topi válasza Thowra hozzászólására (») Máj 21, 2008 /
 
Ez nyelv függő. C nyelvek esetén, főleg magasabb szintű fordítók (pl. CCS-C) keveset kell foglalkozni a regiszterek nevével, szinte hozzá sem kell nyúlni más processzor típusra való átfordításnál.
Alacsonyabb szintű C fordítóknál (pl. HI-TECH PIC-C) már igencsak át kell egy két dolgot írni, mert ott sokkal inkább közvetlen dolgozol a regiszterekkel.
Pl. Több sorosport esete, más regiszter címek stb.
Assembly esetén is kb. ugyan ez a helyzet, bár elég sok regiszter és bit nevesített, konfig által meghatározott.
És ha ugye cseréled az include-ot cserélődik a cím is.
(#) trudnai válasza watt hozzászólására (») Máj 21, 2008 /
 
Ebben igazad van viszont. En csupan arra voltam kivancsi a valtozoi megjelennek-e nalam a watch-ban, igy ganyoltam a default linker scripttel
(#) trudnai válasza Csaplar hozzászólására (») Máj 21, 2008 /
 
Te figyi, attol, hogy tobbszor irod meg nem biztos, hogy fogjuk tudni a valaszt a kerdesedre Nem lenne szep ket piros haromszog a neved mellett

Amugy csak egy tipp: Probaltad mar, hogy a programozot none-ra teszed es csak a debugger van bekapcsolva - vagy nem is lehet a kettot egyszerre? Az osszes uzenetet amit ilyenkor kiir (nemcsak a hibauzenetet) be tudnad masolni hogy esetleg abbol kiderul valami is...
(#) Csaplar válasza trudnai hozzászólására (») Máj 21, 2008 /
 
Már nagyon idegesít ez a vacak hiba... Egyszerre csak egyik lehet kiválasztva! Programmerer módban rátölti minden szó nélkül, debug módban, meg csak az említett üzenetet kapom...
(#) Lozsa válasza trudnai hozzászólására (») Máj 21, 2008 /
 

udata_acs
Timer1 res 1
Timer2 res 1
Counter res 1
Leds res 1


Na ezzel a vriációval tényleg működik. Már csak nem értem mi ez.

Az udata_acs-ben definiálok egy datblokkot az access ramban, ha jól sejtem. Vagy címmel vagy anélkül. Itt anélkül.


Idézet:
„shr udata_acs 0x30”

Nem értem viszont, hogy:
- mi az az "shr" a sor elején?
- mi ez a "res 1"


Mindenesetre köszönöm szépen a megoldást. Pontot is adnék ha tudnám hogyan kell...
(#) trudnai válasza Lozsa hozzászólására (») Máj 22, 2008 /
 
Igen, 'udata' az rendes adatteruletet jelol ki, 'udata_acs' pedig az access ramosat. Ha nem adsz meg cimet akkor ezt a linker scriptbol szepen kiveszi es igy kesobb ha pl masik processzorra attersz akkor nem kell foglalkozn vele hova tedd, ill ha modulokat irsz siman be lehet emelni es lnkeles kozben szepen ossza vadassza a valtozokat hova keruljenek, nem kell tehat vele foglalkozni. - Ugyanaz amugy ez mint amit a 'code' kulcsszoval csinaltal csak az a program memoriara vonatkozik...

Vegulis mikor a kulcsszot megtalalja a fordito akko ronnantol kezdve azokat a res-es dolgokat arra a helyre rakosgatja majd. 'res' azaz reserve, azaz jelzed kell egy hely.. 'res 1' egy hely kell, 'res 2' ket hely kell stb. pl

int32 res 4

es akkor

movwf int32+3

teszi be a legmagasabb helyierteket little endian szerint tarolva a szamot...

'shr' csak egy cimke, lehetne ra hivatkozni, ill linker scripttel lehetne varazsolgatni - itt nem erdekes most, nem is kell oda igazad van.
(#) trudnai válasza Csaplar hozzászólására (») Máj 22, 2008 /
 
Hat en ezeket az infokat talaltam a help-ben:
  1. ICD0200: Operation Aborted.
  2.  
  3. MPLAB ICD 2 has aborted processing of a command at the user's request, usually as a result of hitting the cancel button on a warning dialog.

igazandibol nem tudom milyen ablak jon elo neked, ha egyaltalan elojon, de erre tippelnek:
  1. ICDWarn0013: Low Voltage Programming cannot be enabled when MPLAB ICD 2 used as a debugger. Disable Low Voltage Programming? (OK, Cancel)
  2.  
  3. Low voltage programming is not permitted while MPLAB ICD 2 is being used as a debugger. Selecting OK disables low voltage programming. Selecting Cancel aborts the programming operation.


LVP_OFF benne van a konfigban?
(#) Thowra válasza Topi hozzászólására (») Máj 22, 2008 /
 
Üdv!
Bocs, hogy csak most válaszolok de elment az idő.
CCS t használok. A fő gondom amiér át akarok térni egy nagyobb pic re a memória és a lábszám. A múltkori amatőr lcd megoldásom kb 8 karakter után megette a teljes helyet.
(#) prof6 hozzászólása Máj 22, 2008 /
 
Üdv mindenkinek!

Én assemblyben tanultam meg PIC-et programozni, és elég jól megy, de egy program részt most épp nem értek, ami a következő:

Convert
ADDWF PC
RETLW B'01110111'
RETLW B'01000001'
RETLW B'00111011'

Szóval azt értem, hogy WREG tartalmát összeadja PC (azaz Program Counter) tartalmával, de ez mire jó?
A Program Counter-rel mit tudok csinálni?
És azt is értem, hogy a RETLW utasítás visszalépés egy CALL utasítás utáni sorra és visszatérés előtt WREG-be tölti az adott értéket.
De nem értem, hogy lehet egy csomó RETLW egymás után...
Válaszotokat előre is köszönöm!
Üdv.: prof6
(#) kobold válasza prof6 hozzászólására (») Máj 22, 2008 /
 
Ez a módszer arra jó, hogy adott logika (pl. index-szerű számozás) szerint egymás után következő adatokat tárolj. Amikor végrehajtja az ADDWF PC utasítást, és W tartalma 0 volt, az első RETLW-nél megadott értékkel tér vissza; ha W-ben 1 volt, és azt adja a PC-hez, akkor a második sorban lévő konstanssal, és így tovább. Ugrótábla a becsületes neve; ha neked van mondjuk egy hétszegmenses kijelződ, amin 0 ... 9 között meg akarod jeleníteni a számokat, akkor a szükséges port-kombinációkat letárolhatod egy ilyen táblában, és aszerint kapod meg, amennyit épp meg kellene jelenítened (0 ... 9 közti érték lesz W-ben az összeadás előtt).
A PC egyik alkalmazási módja ez, a másik pedig a számított ugrás (computed goto). Ez utóbbinál nem a PC-hez adsz közvetlenül valamit, hanem némi matek után teljesen új értéket adsz neki, vagyis egy ugrást hajthatsz végre valahová (és ha nem számoltad el, jó helyre is). Számítógépes alkalmazásokban előszeretettel használják a számított ugrásokat arra, hogy a beírt regisztrációs számból, az említett matekozgatással, jó helyre (azaz a regisztráció érvényesítéséhez) ugorjon jó jelszó esetén, illetve rossz helyre, ha elgépeli az ember.
(#) trudnai válasza prof6 hozzászólására (») Máj 22, 2008 /
 
Szia prof6,

Az a 'PC' valoszinuleg PCL lesz amugy. Lenyeg, hogy a PC az a Program Counter (program szamlalo magyarul), tehat ahogy a PIC-ed sorra hajtja vegre az utasitasokat az folyamatosan no. Tulajdonkepp egy index regiszter a program memoriara. Mikor azt mondod GOTO, akkor egy erteket toltesz bele ebbe a PC-be... mikor azt mondod CALL, akkor elobb elteszi a veremre a CALl utani cimet (PC+1) majd PC-be betolti a szubrotin cimet, tehat ugras oda... RETURN ill RETLW meg kiveszi a veremrol ezt a cimet amit a CALL betett, es beteszi PC-be...

Namost, ha a PC-hez hozza adsz, akkor az is egy ugras. A kulobseg, hogy akkor a W-ben levo erteknyit lep elore a programban. Tehat ha a W=0 akkor az elso, ha W=1 akkor a masodik, W=2 akkor a harmadik RETLW az amelyik vegre fog hajtodni. A 'Concert' nyilvan egy cimke, amit CALL-al hivsz meg valahonnan, azaz a RETLW miatt a veremrol kiolvasott ertek ennek a CALL utasitas utani utasitasra kell mutatnia. Ekkor viszont mar a W-ben a RETLW altal betoltott ertek lesz, azaz ez nem mas mint egy tablazat, ha bele gondolsz.

pl. van ez a kodod:
MOVLW D'1'
CALL Convert
MOVWF ERTEK ; ide mar a tablabol kiolvasott ertek fog kerulni...

Ez mind szep es jo, de ez a kod nem teljesen korrekt, ugyanis te a PC-hez nem fersz hozza, csak az also 8 bitjehez. Azaz a PCL-hez (Program Counter Lower). Addig nincs gond amig a programreszlet egybefuggo oldalra kerul a program memoriaban, de amint ez a feltetel nem teljesul a program elteved. Gondolj bele, hogy az elso RETLW a 0x00FF cimen van, a masik a 0x0100 ill 0x0101 cimeken. Ha PCL-hez ami ugye 0xFF hozza adsz akar 1-et is, akkor az 0x00-ra csorog tul, es igy az nem a 0x0100-ra hanem a 0x0000-ra azaz a reset vektorra fog neked elszaladni.

Ezt ugy lehet kikuszobolni, hogy van egy regiszter a PCLATH, azt is kezelni kell, es 16 bites aritmetikaval kell kiszamolni a kivant cimet majd ezt betolteni a PCLATH+PCL regiszterekbe.

pl.

Convert
MOVWF temp
MOVLW high(Convert_Tabla)
MOVWF PCLATH
MOVF PCL,W
ADDWF temp,W
BTFSC STATUS,C
INCF PCLATH,F
MOVWF PCL
Convert_Tabla
RETLW.....

Remelem sikerult jol elbonyolitanom a helyzetet, de remelem azert ertheto nagyjabol
(#) vilmosd válasza prof6 hozzászólására (») Máj 22, 2008 /
 
Hali
Ez egy tablazat ertekeit visszaado fveny. A meghivas elott beleirod a W-be a tablazat indexet, es meghivas utan visszaadja a index szerini erteket. Tehat ha a w reg erteke hivaskor 0, visszatereskor a W B'01110111' erteku lesz , ha 1 , akkor B'01000001, ha 2 , akkor B'00111011' . Ez jol hasznalhato pl. 7 szegmenses dekodolasra is mert a tablazatba beirod az egyes szamokhoz tartozo kimeneti ertekeket es a kijelzendo szammal meghivva a W tartalmazza a kijelzore kiirando biteket. Itt az tortenik hogy a PC-hez hozzaadja a W erteket tehat ez egy ugras utasitasnak felel meg. A megcimzett helyen pedig talasz egy utasitast amit a PIC vere fog hajtani ( a jelen esetben RETLW k).
Itt lehet mas utasitas is (pl GOTO xx ha egy eredmenytol fuggo elagazast akarsz vegrehajtani).
Nagyon fontos a meghivas elott a W erteket megvizsgalni hogy nem-e tulmutat a fveny vegen mert igen erdekes mutatvanyokat tud csinalni a stack es a PC eltevedese miatt. A masik a laphatarok esetleges atlepese lehetoleg kerulendo. Erre van a MCHP oldalan AN.
Udv Vili
(#) trudnai válasza trudnai hozzászólására (») Máj 22, 2008 /
 
Bocsanat most veszem eszre hulyeseget irok, semmikepp sem MOVF PCL,W, hanem MOVLW low(Convert_Tabla) !!!
(#) sszasza hozzászólása Máj 22, 2008 /
 
Sziasztok!
Újabb MicroChip C18 kérdés. Hogyan lehet inicializált és inicializálatlan belső eeprom adatmezőt létrehozni? Nem tömb hanem változók, nevekkel. Illetve, van-e a C18nak eprom támogatása, mint pl a prog memnél a const rom char, és innentől tudja hogy tblrd? A Guideban egy árva szó sincs a belső epromról, a librarykban is csak a külső i2c, mwire stb-t találtam...

Valamit egyébként én a lkr-el nem tudok összehangolni, mert az access adatmező sem jön össze. Csak tudnám mit...
(#) prof6 válasza vilmosd hozzászólására (») Máj 23, 2008 /
 
Üdv!

Okés, értem már köszönöm mindenkinek a válaszokat!
Trudnai igazad volt tényleg összezavartál mert számomra valami hihetetlen magas fokon magyaráztad el...
Én minden új dolog tanulásával vmi hihetetlen jó kis kütyünek tartom a PIC-et...
A vele megvalósítható dolgoknak majdnem csak a képzelet szab határt, nameg a programozni tudás
Köszönöm +1x!
Üdv.: prof6
(#) Csaplar válasza trudnai hozzászólására (») Máj 23, 2008 /
 
Hali!

Köszi a tippet! Közben megtaláltam...

A Debugger-nél a settingsben kellett visszajelölni az egyik warnings fület. A fene gondolta, hogy ilyen egyszerű a megoldás...
A WDT miatt írta ki, mivel az nem megy debug módban!

Azért köszönöm a tippet!
(#) trudnai válasza sszasza hozzászólására (») Máj 23, 2008 /
 
Szia sszasza,

Linker scriptedben kell lennie egy ilyen sornak:

  1. CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED


Namost letre kell ezalapjan hozni egy scetiont, ami valahogy igy nez ki:

  1. SECTION    NAME=EEPROM     ROM=eedata


Ezekutan a C forrasoban igy definialhatsz elore inicializalt EEPROM ban tarolt valtozot:
  1. #pragma romdata EEPROM
  2. const rom char eetest[] = "EETEST";

De ez nem azt jelenti, hogy a valtozodat automatan a fordito majd szepen lekezelni. Ettol fuggetlen hasznalnod kell eeprom olvaso/firkalo fuggvenyeket, ez csupan arra jo, hogy forditaskor a HEX-be mar definialva legyenek a valtozoid szoval a programozaskor az EEPROM-ba ezek a jezdo ertekek bele keruljenek...

Remelem azert segitett valamit.
(#) wazsi hozzászólása Máj 23, 2008 /
 
Sziasztok

Nekem olyan problémám volna,hogy 1024bit/s digitális szót szeretnék beolvasni,és utána visszajátszani.
Igazából 512bit/félsec.
Órajel nincs ,szinkronbit nincs csak maga a szó van.
Ráadásul lehet a szó kisebb bit/s tehát a freki sem fix.
Assembly programozás elég jól megy ,elkezdtem a PIC tanulást is ,de arra volnék kíváncsi ezt a problémát hogy lehetne profin megközelíteni.Voltam a mikrochippes tanfolyamon is ,de pont addig jutottunk el ameddig a tudásom körvonalazódik.( Futófény, stb)
Azt szeretném megtudni, hogy a PIC funkciok közül mik azok amiket jol lehetne alkalmazni erre a problémára.
Valami megszakításos dolog a felfutó+lefutó élekre dereng, de ez sajna eléggé homályba van.
Ha vki segitene hogy álljak neki,esetleg 1 feladatspecifikáciot vagy irányt adna az megköszönném.
(#) trudnai válasza wazsi hozzászólására (») Máj 23, 2008 /
 
Szia Wazsi,

Valami szinkronizacios folyamatnak ott azert kell lennie kulonben lehetetlenseg megcsinalni ertelmesen. 1kb/s semmiseg amugy a PIC-nek, csak kellene tudni az adatfolyam szerkezetet. Ez valamifele asynchron atvitel lenne ha jol sejtem, vannak benne start es stop bitek? Hogy valasztodnak el egymastol az 512 bites csomagok? Van valami szabvanya ennek?
(#) Sipy válasza Csaplar hozzászólására (») Máj 23, 2008 /
 
Sziasztok! Ismeri valaki a Maxim MAXQ3210 mikrokontrollerét? Azt szeretném tudni,hogy azt hogyan lehet programozni, lehetőleg otthon elkészíthető programozóval. Sajnos a netet hiába kutattam. Üdv!
(#) wazsi válasza trudnai hozzászólására (») Máj 23, 2008 /
 
Sajna én semmiféle szinkronizációt nem tudtam felfedezni,de lehet ez az én hibám.És mivel több fajta készülékre lenne ez a szerkezet ezért kéne rugalmasnak lennie,hogy ne fix 512bit/fél sec-re legyen jó.
amúgy periodikusan jön a jel,tehát fél sec a szó,fél sec szünet.
úgy gondoltam hogy 1xüen letudd másolni a PIC 1 ilyen kis jelet,figyelve a lefutó,felfutó éleket, értelmeznie nem kell.csak pontosnak kell lennie.
(#) szilva válasza wazsi hozzászólására (») Máj 23, 2008 /
 
Akkor élek közti időket kell mérned, az alapján "vissza lehet böfögni" a vett jelet. Valami timeout meg jelzi, ha már nincs több jel - ez a csomag vége.
(#) trudnai válasza wazsi hozzászólására (») Máj 23, 2008 /
 
Akkor nyilvanvaloan a szunet a szinkronicacio alapja, tehat ha szunet van x ms-ig akkor szinkron, elso fel/lefuto el a jelsorozat kezdete, ha sebesseg adott akkor az elhez kepest kb a felenel elkezdeni a mintavetelezeseket es minden felidoben merni... visszaadni valamivel egyszerubb...

Ha abszolut nem ismeretes a sebesseg vagy viszonylag tag ertekek kozott valtozhat akkor amit Szilva montott a megoldas, ugyanigy a szunet utani allapottol kezdve van meg a jelsorozat - csak olyan PIC-et valassz ki amelyik el is birja tarolni a vett jelsorozatot a RAM-jaban... ugye ott 1byte vagy 1 word per el, es akkor ugye ha minden bitnel van elvaltas az eleg sok lehet...
Következő: »»   215 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.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