Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   798 / 1319
(#) El_Pinyo válasza Stefan hozzászólására (») Szept 11, 2010 /
 
Szia!
Az alábbi linken van néhány rutin, mely alkalmas lehet a feladatra: Bővebben: Link
(#) trudnai válasza Stefan hozzászólására (») Szept 11, 2010 /
 
BCD szamma kell atalakitani, onnantol kezdve mar egyszeru a dolog -- mar feltetelezem decimalisan szeretned kiirni, mert hexaban tul egyszeru lenne...

De amugy elmegy erre az oldalra es kiollozod a peldat es keszen is vagy... Ambar en szerintem azert jo az assambly mert agyalni kell vele, en pl epp ezt szeretem benne Szoval az ollozassal nem sokat fogsz tanulni belole kiveve ha megprobalod megerteni mit is csinal pontosan...
(#) Stefan válasza El_Pinyo hozzászólására (») Szept 11, 2010 /
 
Köszi a segítséget mindkettőtöknek.
Agyalni muszáj lesz vele, mert nem PIC-re lesz. , de az alapján már át tudom majd írni.
(#) icserny válasza messer hozzászólására (») Szept 12, 2010 /
 
Ha már úgyis a kezedben van a PICkit2, akkor léptesd ki az eredményt bitenként, s a PICkit2 logikai analizátor módjában leolvashatod a képernyőről! Ehhez hasonlót mutattam már ebben a hozzászólásban, de ott egy SPI meghajtáshoz szükséges órajelet és chip select jelet is ki kellett adnom (egy16-bites DAC vezérléséhez).
(#) mammut hozzászólása Szept 12, 2010 /
 
Jó reggelt!

PIC16F59-el ügyködöm és a következő problémába ütköztem:
Error - file './fw1.o', section '.org_0', performs a call to
symbol 'OUTPUT0' which is not in the lower half of a page.

Ha jól értelmezem a memória területet az első programmemórialapon feléltem.

Hogyan lehet memóriaterületet váltani a programban?
BxF STATUS, PA1
BxF STATUS, PA0
Ezekkel nem megy.
(#) icserny válasza mammut hozzászólására (») Szept 12, 2010 /
 
ITT megtalálod a leírást. A varázsszó: PCLATH.

A Microchip MPASM egyébként az adatterületet lapozó banksel mintájára pagesel makróval könnyíti a lapozást.
(#) Hp41C válasza icserny hozzászólására (») Szept 12, 2010 / 1
 
Sziasztok!

A16F54 másként működik:
- goto : az alsó 9 bitet az utasítás kódból veszi.
- call és a PCL írása : az alsó 8 bitet az utasítás kódból veszi, a 9. mindig 0.

A16F57-59 másként működik:
- goto : az alsó 9 bitet az utasítás kódból veszi, a 10. és 9. -et a STATUS 6. és 5. bitjéből.
- call és PCL írása : az alsó 8 bitet az utasítás kódból veszi, a 8. mindig 0, a 10. és 9. -et a STATUS 6. és 5. bitjéből.

A programodat át kellene szervezni. A call utasítással vagy a PCL regiszter írásával elérendő címek egy lap alsó felén legyenek (a cím 8. bitje 0 legyen: pp0ccccccc).

Más típusok:
Az Ott található rutinoknál két dologra hívnám fel a figyelmet:
- Ha van megszakítás kezelés, akkor a mentés és visszaállítás a PCLATH-t is mentse ill. állítsa vissza. A mentés után a megszakítás kiszolgáló programjának lapjára kell állítani a PCLATH-t.
- Van ott egy "0. lapra történő mentés" elnevezésű programrészlet, ami nem működik jól 2k-nál nagyobb programú kontrolleren, hiszen a PCLATH beállítása nélkül ugrana a 0. lapon levő címre...
(#) mammut válasza Hp41C hozzászólására (») Szept 12, 2010 /
 
Ezeknek fele igaz.
Ennek a PIC-nek a memóriája csak 2048 W-s.
PCLATH regiszter nincs csak PCL.
Ez egy eléggé mezei pic, minden "extra" nélkül.
(#) Hp41C válasza mammut hozzászólására (») Szept 12, 2010 / 1
 
Szia!

Épen azt írtam, hogy a 15F54-59 kontroller nem rendelkezik PCLATH regiszterrel, ellentétben a többi, általánosan használt 16Fxx tisussal, mivel előttem a PCLATH említették megoldásnak.

Javaslam átolvasásra az adatlapjának 3.5. fejezétét "Program Counter", valamint a hibajelzés szövegének lefordítását, értelmezését:
Idézet:
„Error - file './fw1.o', section '.org_0', performs a call to symbol 'OUTPUT0' which is not in the lower half of a page.”

Hevenyészve lefordítva annyit tesz:
Hiba - a './fw1.o' '.org_0' szekciója a(z) 'OUTPUT0' szimbólumra hajt végre call műveletet, ami nem egy lap alsó felén definiált.

A STATUS regiszter PA1 és PA0 bitjeivel nem megy, mert azok nem ezt a bitet állítják - ez a bit call esetén fix 0.

Vagy figyelembe veszed az adatlap leírását és a fordító hibaüzenetét, vagy áttérsz egy általánosabban elterjedt típusra: 16F74-16F77.

16F59.JPG
    
(#) mammut válasza Hp41C hozzászólására (») Szept 12, 2010 /
 
Köszönöm szépen a segítséget!

Azt hiszem jön egy pár órás tanulgatás az adatlapból.. :lookaround:
(#) jdani hozzászólása Szept 12, 2010 /
 
Hali. Nem tudnátok egy rajzot adni, ami egyszerű, összerakható könnyen, PIC programozásra? Mert most éppen nincs PICkit2 klónom, viszont már minden bajom van, ha nem égethetek PIC-t. (megkímélni legyenek szívesek az olyan szövegektől, hogy JDM-et ne építs meg stb. Egy egyszerű égetőre lenne szükségem, ami működik)
(#) cNobody válasza jdani hozzászólására (») Szept 12, 2010 /
 
Helló!

LPT-s: WLPT_Vpp_Mini_v4
COM-os: WCOM v4, v5

Mindkettőt ezzel a programmal érdemes használni:
WattPICBurn

Szerintem ennél egyszerűbbek nincsenek.
(#) icserny válasza mammut hozzászólására (») Szept 12, 2010 /
 
Kipróbáltam az MPLAB-ban az alábbi programot:
  1. #include "p16f5.inc"
  2.                 org 0x00
  3. RST:    NOP
  4.                 pagesel start
  5.                 goto start
  6.  
  7.                 org 0x200
  8. start:  NOP
  9.                 pagesel second
  10.                 goto second
  11.  
  12.                 org 0x410
  13. second: NOP
  14.                 pagesel RST
  15.                 goto RST
  16.                 END


A Disassembly lista hibásan mutatja, de a View/Program memory után jól látható, hogy mire fordul:

  1. RST    NOP
  2.        BSF STATUS,5
  3.        BCF STATUS,6
  4.        GOTO 0x00    ;itt GOTO RST szerepel a listán, de nem kell
  5. ;komolyan venni! Ez csak a lapon belüli cím.
  6.        ...
  7. start: NOP
  8.        BCF STATUS, 5
  9.        BSF STATUS, 6
  10.        GOTO 0x10
  11.        ...
  12. second:
  13.        NOP
  14.        BCF STATUS, 5
  15.        BCF STATUS, 6
  16.        GOTO RST
(#) trudnai válasza icserny hozzászólására (») Szept 12, 2010 /
 
Azt hiszem amugy a CALL-al van a gond... Majd kiprobalom.
(#) Hp41C válasza icserny hozzászólására (») Szept 12, 2010 /
 
Szia!

Itt leírtam - ez a pic más, mint a többi - még a 16C5xx időből való...

Nem a goto -van van a probléma, és a call -nál sem jelentkezik, ha a meghívandó rutin kezdőcímében a 8. bit 0.

Tedd fel a meghívandó rutint olyan helyre, ahol a címében a 8. bit 1, ekkor hívd meg call-lal. Máris jön a hibajelzés....
(#) Hp41C válasza Hp41C hozzászólására (») Szept 12, 2010 /
 
Itt a project - a hibajelzésekkel:

16F59.JPG
    
(#) mammut válasza trudnai hozzászólására (») Szept 12, 2010 /
 
Elképzelhető.
Érdekes viszont, hogy pár helyen a CALL-t GOTO-val helyettesítettem, és így hiba nélkül lefordul.
Valamiért mondjuk a PORTD regiszter 6. bitje beáll 0-ba amikor 1-ben van minden, majd élesben kiderül.

fw1.asm
    
(#) Hp41C válasza mammut hozzászólására (») Szept 12, 2010 /
 
A goto -nál a 8 bit nem kötött, az kezeli a 8. bitet rendesen, az utasítás kódjából veszi ki... Tedd át az eljárásokat a lapok elejére...

A START rutint tedd hátra a programban - ugorjon vissza a PROGRAM cimkére, az elég hosszú ahhoz, hogy az össze eljárásod a lap aljára kerüljön...
(#) mammut válasza Hp41C hozzászólására (») Szept 12, 2010 /
 
Így is tökéletes!
Így olyan az elrendezés majdnem, mint C-ben.

fw1.asm
    
(#) messer válasza icserny hozzászólására (») Szept 12, 2010 /
 
Köszönöm, ötletes nagyon
(#) cNobody hozzászólása Szept 12, 2010 /
 
Sziasztok!

Egy érdekes jelenséggel találtam szemben magam. Egy PIC18F4550-en a TIMER1-el szeretnék másodperces megszakítást elérni (óra alap). Ehhez külső 32,768KHz-es kvarccal hajtom meg a TIMER1-et. Mivel a TIMER1 16bites ezért alap esetben 2másodprces megszakításra számoltam. Aztán mikor összeállt a dolog meglepődve tapasztaltam hogy közel 1 másodpercenként jön a megszakítás.
Ez hogyan lehetséges?

T1CON=0b00001111; így van beállítva
A TMR1H és TMR1L regisztereket meg sem említem a programban. mikroC PRO for PIC v3.8 -al fejlesztek.
(#) pepe33 válasza cNobody hozzászólására (») Szept 12, 2010 /
 
Én akkor találkoztam hasonlóval, mikor nem volt a 32k kvarchoz kondi rakva.
Én 10pF-15pF kondikat szoktam rakni, lehet érdemes lenne megpróbálni.
(#) trudnai válasza cNobody hozzászólására (») Szept 13, 2010 /
 
pepe33 hozzaszolasat kiegeszitve:
En a kapcsolasbol is es a proba panelt nezve is ugy latom van ott kondi, de az egyik egy trimmer kondi ami esetleg tulsagosan le vagy fel vn tekerve es ettol a kvartz nem rezonal hanem gerjed?
(#) icserny válasza trudnai hozzászólására (») Szept 13, 2010 /
 
Lehetne próbálkozni az oszcillátor nagyobb teljesítényű üzemmódjával is (az alacsony teljesítményű mód kevésbé stabil). Valahogy így:
  1. #pragma config LPT1OSC = OFF
(#) cNobody válasza icserny hozzászólására (») Szept 13, 2010 /
 
Pepe33, Trudnai:
Kipróbáltam fix 15pF-os kondikkal (mind2), és akkor kb szemre (karórához képest) fél másodpercenként lépett egyet a másodperc, 27pF-al pedig még mindig gyorsabb volt, mint egy "valódi" másodperc. Kb fél perc alatt sietett 10 másodpercet. (18f4550 adatlapja 27pF-ot ír)

Próbálkoztam én már ezzel, azért is raktam be a trimmer kondit, hogy mondom majd azzal beállítom a másodpercet. De hát azért elég fura hogy dupla olyan gyorsan rezeg, sőt még gyorsabban is mint hogy kellene.
Nem hagy nyugodni a dolog.

Esetleg lehet olyan hogy a mellette lévő 4MHz-es kvarctól gerjed? Attól gyorsul be? Meg a próba panel sem a legszerencsésebb ilyen helyzetekben ugye. Hogyan lehetne egymástól leárnyékolni a két kvarcot?

Az a baj hogy nincs lehetőségem szkóphoz jutni. De még egy freki mérőm sincs. Ha lenne már megnéztem volna hogyan viselkedik. Szerintetek a PK2 klón jó ilyesmi célra? Legalább a frekit megmérné logikai analizátor módban? Még nem használtam így a PK2-t azért is kérdezném. Meg azt is, hogy hogyan kell használni?


icserny:
Az adatlap szerint a nagyobb teljesítményű az alapértelmezett, és én ezt nem bántottam.
(#) szilva válasza cNobody hozzászólására (») Szept 13, 2010 /
 
Pedig sajnos jó lenne szkóp... Az a gyanúm, hogy a kristály túlvezérlődik, és valami felharmonikuson rezeg. Van a Microchipnek is egy pár irománya ilyesmikről, például ez is: AN849. Igaz, hogy ez nem a Timer1 oszcira vonatkozik, de van benne szó XT módban használt 32768Hz-es kvarcról is, az ott fellépő problémákat lehet itt is támpontnak használni. Szerintem kellene az oszcillátorkapu kimeneti lábával sorba tenni valami ellenállást, esetleg a kondenzátorokat megnövelni még egy kicsit.

Szerk.: ha van mód a Timer1 oszcillátorának a módját átkapcsolni, akkor mindenképpen az alacsony teljesítményű módban próbáld az órakvarccal!
(#) potyo válasza cNobody hozzászólására (») Szept 13, 2010 /
 
Próbáld meg az alacsonyabb teljesítményű módot is. Esetleg néhányszáz Ω soros ellenállást tenni a kvarc egyik lábával sorba, illetve valami MΩ nagyságú ellenállást az oszcillátor két lába közé.
(#) Hp41C válasza cNobody hozzászólására (») Szept 13, 2010 /
 
Szia!

Az órakvarcnak elég vékony a kivezetése. Próbáld meg úgy, hogy levágott alkatrészlábat forrasztasz rá. A Microchip kifejezetten guard hurkot - föld vezetékkel való körbevételt - ajánl a két oszcillátor kivezetései közé illetve köré. Sajnos a breadboard -nak elég negy lehet a kapacitása a két kivezetéssor között...
(#) AZoli hozzászólása Szept 13, 2010 /
 
Sziasztok!

MPLAB 7.4 helyett 8.56 -ot feltelepítve fordításkor hibát jelez, a régi verzióval ugyan az a .asm file jó volt.

Error[113] C:\PROG....ASM 2722 : Symbol not previously defined (elogy_al_stab)


"elogy_al_stab" a progi elején definiálva van, de ott nem anyázik érte.
Mi lehet a baj?
(#) Hp41C válasza AZoli hozzászólására (») Szept 13, 2010 /
 
Szia!

A forrás nélkül nehéz... Ha nem titkos, töltsd fel az asm állományodat.
Következő: »»   798 / 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