Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   32 / 1319
(#) KoLa hozzászólása Máj 9, 2007 /
 
SZiasztok!
Két kérdés az első Pic-égetéssel kapcsolatban.
- égetés után a szoftwer azt mondja minden OK, remélem úgy is van, de az első sor a hex. file-ból, nincs benne a PIC-ben. Ez
:020000040000FA
Lehetséges, hogy ez a config, és ez nem kerül így bele?
Áramköri próbához még kell pár nap..
- A céláramkört át kell alakítani az ICSP-hez? Gondolok az MCLR lábra ami vagy direkt, vagy egy ellenállással a Vdd-n van. Ez így kaphat 13V-ot? Kell oda egy dióda ICSP idejére, ami akár állandóan ott lehet? A 7805 és a PIC Vdd védelmére? A diódát az MCLR lábra gondolom a táp felől, hogy ne engedje arra a 13V Vpp-t.
Minden jót: Laci
(#) watt válasza KoLa hozzászólására (») Máj 9, 2007 /
 
Idézet:
„:020000040000FA
Lehetséges, hogy ez a config, és ez nem kerül így bele?”

Nem, ez a kiterjesztett lineáris címzés jele az Intel hex formátumú fájlokban.

A konfig bájtok ettől még nem biztos, hogy beégnek, mert nem biztos, hogy bele fordítódik a hex-be.
(#) KoLa válasza watt hozzászólására (») Máj 10, 2007 /
 
Köszönöm Watt! Még nem sikerült teljesen megértenem a válaszodat, de próbálkozom. Az megvan, hogy Intel hex formátumot használ a PIC. ( de itt van egy pont) Mivel ez egy jel, így rendben van, hogy nem ég be? Amit találtam- a sor elején két szám az adatbájtok száma a következő négy a cím, a következő kettő 00 vagy 01 (?) -ez nekem 04- , -itt jön a valódi adat- a végén két szám az ellenőrző bájt. Így helyes?
Brenner5-t építettem meg és a saját softwerét használtam. Felismerte, hogy van az asm-ben config és át is vette a config ablakban. Remélem benne van.
Köszi, minden jót!
(#) watt válasza KoLa hozzászólására (») Máj 10, 2007 /
 
A 04 jelenti a kiterjesztett lineáris címzést. A többit majdnem jól sejted.
Ha bővebben akarsz errő infót, akkor olvass bele ebbe:
http://t-t.freeweb.hu/elokep/pic/felhkk/kk/sz1103.htm
Van itt még néhány dolog ami érdekelhet a fájlformátumon kívül is.
(#) Prinner válasza watt hozzászólására (») Máj 10, 2007 /
 
Üdv.
Nem tudtok valamilyen algoritmust 16 bites szorzásra?
Timer0 értékét akarom összeszorozni az előosztó értékével. Írtam is egy egyszerű algoritmust:

Van 2db 8 bites regiszter, (HL, LL) az LL-be bemásolom TMR0 regiszter értékét. Ahányszoros az előosztó, annyiszor hozzáadom a a TMR0 értékét LL-hez (amibe már bemásoltam TMR0 értékét). Ha LL regiszter túlcsordul, akkor incf HL,1 azaz növeli eggyel HL regiszter értékét. Azért gondoltam erre a megoldásra, mert ha 255x255 akkor még pont belefér a 16 bitbe... Csak amikor élesben kipróbáltam, rossz és pontatlan értékéket generált .

Egy kis részlet:

MULTIPLIER
movf tmr0mir,0
addwf ll,1
btfsc STATUS,0 ;tulcsordulas
incf hl,1
decfsz puffer,1 ;itt van az elooszto erteke
goto MULTIPLIER
movf ll,0
movwf BINL
movf hl,0
movwf BINH
goto BCDKONV
clrw

.......
(#) watt válasza Prinner hozzászólására (») Máj 11, 2007 /
 
Nézz fel az oldalamra, ott találsz egy szemléletes táblázatot, amiből meg lehet érteni, hogy miként kell szorozni. Van példa program is.
(#) Prinner válasza watt hozzászólására (») Máj 11, 2007 /
 
Kösz

Az excel táblázatodat már néhány nappal ezelőtt megtalálta a gugli, de nem értettem meg a lényegét, ezért nem is foglalkoztam tovább vele
Lefutattam az MPLAB szimulátorban az ASM-et, ez már többet segített
(#) watt válasza Prinner hozzászólására (») Máj 11, 2007 /
 
Hát igen, szerintem sem embernek találták ki ezeket a formulákat!
(#) Prinner válasza watt hozzászólására (») Máj 14, 2007 /
 
Üdv.
Megint segítségre van szükségem... Nem sikerül egy megszakítás, pontosabban látszólag mindig megszakítást csinál, amikor engedélyezve van......
Az előző frekimérőbe kellene ahol a B port felső négy bit változására kellene megszakítást csinálnia. A B porton egy 4X4-es bill. mátrix van, porton a felhúzóellenállások be vannak kapcsolva a RB4...RB7 bemenet, ha bármelyik billentyűt lenyomom akkor 0-ra vált a PORT felső 4 bit egyike, és létrejönne a megszakítás.

A megszakítás rutinja csak abból áll, hogy egy temp1 nevű regiszter 1. bitjét egybe állítja, aztán letiltja a megszakításokat:

INTERRUPT
bsf temp1,1
clrf INTCON
retfie

A frekv. számláló hurokban a következő módon van elhelyezve:

FREQCOUNTER
.....
nop
;-------
bsf STATUS,RP0 ;bank 1
bcf STATUS,RP1
movlw b'11110000' ;PORTB SETUP
movwf TRISB
bcf STATUS,RP0 ;bank0
clrf PORTB
;-------
bcf temp1,1
call T5 // 200ms időzítés
;--------
bsf INTCON,7 ;megszakitas engedelyezes
bsf INTCON,0
;--------
......// itt a frekimérés van, 1s mintavételi idővel, majd a szorzás, bin=>BCD dekódolás, LCD-re mérési eredmény kiírása
;
---------
btfss temp1,1
goto FREQCOUNTER
goto DDS
------

Tehát csak az INTCON, GIE és RBIF van engedélyezve, mégis mindig megszakítást csinál
(#) watt válasza Prinner hozzászólására (») Máj 14, 2007 /
 
Első blikkre nem engedélyezed az RBIE-t, helyette a RBIF-et kapcsolod be! (RBIE a 3. bit, nem a 0.!)
(#) Prinner válasza watt hozzászólására (») Máj 14, 2007 /
 
Kösz a gyors választ , de sajna így sem müködik, érdekes módon, ha csak a GIE van engedélyezve akkor is megszakításokat csinál.
Lehet, hogy valami PIE regisztert kell átállítani???
A mikrovezérlő: 16f877a
(#) watt válasza Prinner hozzászólására (») Máj 14, 2007 /
 
Nos nem árt a nem használt perifériákat alaphelyzetbe állítani, kikapcsolni és ez alá a megszakításaik tiltása is beletartozik.

A másik, hogy megszakításkor el kell tárolni néhány regisztert, mert ellenkező esetben hibás viszatérést okozhatnak a megszakítás közben elvégzett műveletek.
kb így:
megszakítás belépési pontra:
MOVWF AKKU_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
MOVF PCLATH,W
MOVWF PCLATH_TEMP
MOVF FSR,W
MOVWF FSR_TEMP
.....
Ide jön a lekezelés...
.....
MOVF FSR_TEMP,W
MOVWF FSR
MOVF PCLATH_TEMP,W
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF AKKU_TEMP,F
SWAPF AKKU_TEMP,W
RETFIE
megj: A SWAPF azért jó, mert nem változtatja meg a status biteket!

Ezen kívül érdemes ellenőrizni, hogy milyen megszakítás történt. Így könnyű kideríteni azt is, hogy mi okozhat hibát.

Érdemes LED-ekkel ellenőrizni, hogy a program hová jut el.

Nézzél fel az oldalamra, találhatsz program struktúrára példákat, amihez hasonlót érdemes felépíteni saját progidban is! Az ne zavarjon, hogy 18F-ekre íródott, 16F-eknél is beválik.

(#) elko2 válasza watt hozzászólására (») Máj 15, 2007 /
 
üdv.
nekem is lenne egy kérdésem.Szeretmék valami időrelé funkciot megvalositani,addig nem is gond még fix az időzités,akkor kezdődtek a problémáim mikor
ezt az időt állitani is kellene kivülről pl. potmeterrel.
Valami ADCs modszer lenne jo szerintem csak....
már felturtam az egész NETet de sajna ilyent nem találtam. Minden segitséget előre köszönök,még ha
csak ötlet is
(#) watt válasza elko2 hozzászólására (») Máj 15, 2007 /
 
Ha a poti korlátozott felbontása(pontatlan időbeállítás egy sávon belül), elegendő, akkor egyszerűen csak fel kell kötni a poti egyik sarkát Vdd(5V)-ra a másikat 0-ra, a közepét pedig bevinni egy 100n-val szűrve egy PIC AD bemenetére(valódi AD kell, komparátor nem jó!).
Ha ez megvan, akkor kell írni egy számlálót, ami 10 bites(az AD-is 10 bites). A számlálót indításkor le kell nullázni. A számlálási sebességet be kell kalibrálni a poti 5V-hoz, ill. a kívánt időintervallumhoz, amit ehhez rendelünk. Ha pl. 60perc van a poti teljes sávjához rendelve, akkor a 0V = 0perc = 0dec érték, az 5V = 60perc = 1024dec érték. A kettő közötti tartomány lináris(természetesen A-s poti kell ide!!!).
Az elvi felbontás 3600sec/1024= 3,515625sec. Tehát egy Timer megszakítást úgy kell beállítani, hogy 3,515625 sec-enként léptesse a számlálódat. Amikor a két érték(az AD értéke, és a számlálóé) egyforma, akkor eseményt generálsz(azaz letelt az időd).
Valószínű, hogy a timert sem tudod direktben belőni, azaz a megszakításoknál is számláló kell, ami 3,515625 secenként éri el a kívánt fő számláló léptetésének szintjét, de ez csak részletkérdés.
Az is valószínű, hogy nem a Timert kell finomítgatni, hanem a potin kell a feliratokat a timerhez rajzolni. nem baj, ha nem használod ki mind az 1024 felbontást, úgy sem tudod a potit olyan pontosan oda állítani ahová akarod.

Na most jól leírtam, hogy milyen lesz egy pontatlan időzítő beállítás!
Van ahol pont elegendő ennyi pontosság, ahol több kell, oda kijelző és két gomb szükséges.
(#) watt válasza watt hozzászólására (») Máj 15, 2007 /
 
Javítás: 5V = 60perc = 1023dec érték
(#) elko2 válasza watt hozzászólására (») Máj 15, 2007 /
 
Kösz a gyors választ,azt hiszem értem az elvet,
a pontosság ebben az esetben nem olyan kritikus(pár
ms ide oda)ugyhogy ki fogom probálni.Az eredményeimről majd beszámolok.
(#) watt válasza elko2 hozzászólására (») Máj 16, 2007 /
 
ms? A pontossság nem a PIC miatt lesz, hanem a felbontás miatt, ami értendő a 10bites AD-re, de még inkább a poti skálájára! Fizikailag nem fogod tudni, hogy milyen időt állítottál be!
(#) Csaplar hozzászólása Máj 16, 2007 /
 
Sziasztok!

Lenne egy óriási nagy problémám!

pic18f4520-as procit használok és MPLAB - mcc18 kombinációt!
Most jutottam odáig, hogy a programban szeretnék az egyszerű összeadás, szorzáson kívül szorozni és osztani is! Sajnos nem igazán működik a dolog!

Ha létrehozok egy pár soros példát, amiben összszorzok két háromjegyű int számot, akkor teljesen rossz eredményeket kapok. az eredmény típusát long-ra állítottam!

Mi lehet a baj? Egy 10 soros példában mit tudok elrontani ???

Köszi
(#) watt válasza Csaplar hozzászólására (») Máj 16, 2007 /
 
Én nem vagyok nagy C guru, de programlista nélkül senki nem tud neked segíteni, azt megjósolhatom!
(#) HubaBuba hozzászólása Máj 16, 2007 /
 
HY

en el szeretnek kezdeni PCI-ozni és az lenne a kérdésem hogy egy kezdőnek milyen választás a COM84-es égető igy ránézésre egyszerunek tunik. A másik kerdesem meg az hogy a com84-es hez csak 16f84-et lehet vele egetni?

Előre is kösz a válaszokat ha leszenek

kosz
(#) Norberto válasza HubaBuba hozzászólására (») Máj 16, 2007 /
 
Hali!

1. Ez nem PCI, mint a számítógépekben lévő csatlakozó, hanem PIC...második és harmadik betű fel van benne cserélve...márcsak azért is, mert ez egy mozaikszó, ami a Programozható IC-ből következett...

2. COM84-es programozó nagyon rossz választás, akár kezdőnek, akár nem kezdőnek is

Ugyanis nem stabil a működése! Ajánlanám inkább a watt által tervezett égetőt megépíteni! Igaz, hogy, mint programozó eszköz, kicsit nagy "falat", de megbízhatóan fog működni, ha megépíted, és bármilyen PIC-et tudsz vele majd a későbbiekben is égetni...
(#) MaSTeRFoXX válasza Norberto hozzászólására (») Máj 16, 2007 /
 
Idézet:
„mozaikszó, ami a Programozható IC-ből következett...”

Valójában Peripherial Interface Controller vagyis Periféria illesztő vezérlőnek találták ki hajdanán a mikrocsipnél, csak aztán derült ki hogy miminden másra jó még.
De a te fordításod is találó
(#) HubaBuba hozzászólása Máj 16, 2007 /
 
Bocsi hogy felre irtam ara gondoltam csak a megszokás

Tudsz adni egy linket hogy hol nezhetem a wat pic égetőét?
(#) HubaBuba hozzászólása Máj 16, 2007 /
 
Ne fáradj megtaláltam koszi a segitseget
(#) HubaBuba hozzászólása Máj 16, 2007 /
 
háááááát nekem negyon bonyorultnak tunik a wat áltel tervezet égető. A Picall hoz mit szoltok?
(#) Prinner hozzászólása Máj 17, 2007 /
 
Üdv.
Egy pontos 1s időtartamú késleltetésre lenne szükségem. Eddig ez volt:

T1S ;c= 3*t1+770*t2+196355*t3-197116
movlw d'85' ;t1
movwf timer3
movlw d'119' ;t2
movwf timer4
movlw d'26' ;t3
movwf timer5
T1SB
decfsz timer3,1
goto T1SB
decfsz timer4,1
goto T1SB
decfsz timer5,1
goto T1SB
return

A képletből nem hozható ki egész számra az 1s (20M-ás órajel esetén). Sajnos a mérésen meglátszott a pontatlanság. A válaszokat előre is megköszönöm.
(#) watt válasza Prinner hozzászólására (») Máj 17, 2007 /
 
Számodra is kiderült, hogy nincs olyan osztás arány, ami megfelelő. Megoldás olyan kristály használata, aminél ez teljesül. De még ott is előfodulhat, hogy hangolni kell az oszcit kinti trimmerkondival.

Második megoldás a Timer külső oszcijának használata óra kvarcal.

Harmadik megoldás, külső precíz ütemadó, vagy komplett külső óra IC (I2C-s pl.)

(#) KoLa hozzászólása Máj 17, 2007 /
 
Sziasztok!
Message[302] D:\DOCUMENTS AND SETTINGS\PIROS\ASZTAL\MPLAB\LC_2\LC628A.ASM 636 : Register in operand not in bank 0. Ensure that bank bits are correct.
Ilyen üzenetek mellett jön létre a hex file, ami úgy tünik jól működik. (MPLABIDEv7.60) Mi a hiba, illetve miért jönnek ezek az üzenetek?
bsf BANKSEL ; Select Bank1
movlw 0x37 ; Option register
movwf OPTION_REG ; Port B weak pull-up enabled
Itt van a 634-636 sor.
Minden jót Laci
(#) Prinner válasza KoLa hozzászólására (») Máj 17, 2007 /
 
Nekem is mindíg kiírja ezt. Valószínűleg csak azért figyelmeztet, mert a regiszter nem bank0-ban van (függetlenül attól, hogy bankot váltottál).

Ha zavar az üzenet, írd be a progid elejébe: ERRORLEVEL-302
(#) watt válasza KoLa hozzászólására (») Máj 17, 2007 /
 
Prinner-t annyiban egészíteném ki, hogy nem valószínű, hanem biztos, hogy csak üzenet, és csak felhívja a figyelmet a bankváltásra, függetlenül attól, hogy megtörtént, vagy sem.
Következő: »»   32 / 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