Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
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 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.
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!
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.
Ü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 .......
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.
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
Hát igen, szerintem sem embernek találták ki ezeket a formulákat!
Ü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
Első blikkre nem engedélyezed az RBIE-t, helyette a RBIF-et kapcsolod be! (RBIE a 3. bit, nem a 0.!)
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
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.
ü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
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.
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.
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!
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
Én nem vagyok nagy C guru, de programlista nélkül senki nem tud neked segíteni, azt megjósolhatom!
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
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...
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ó
Bocsi hogy felre irtam ara gondoltam csak a megszokás
Tudsz adni egy linket hogy hol nezhetem a wat pic égetőét?
háááááát nekem negyon bonyorultnak tunik a wat áltel tervezet égető. A Picall hoz mit szoltok?
Ü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.
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.)
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
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
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.
|
Bejelentkezés
Hirdetés |