Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   352 / 1319
(#) szigetivan válasza watt hozzászólására (») Dec 2, 2008 /
 
szia.
köszi így már érthetőbb...igen jól emlékszel én feszegettem ezt témát, de mivel nem kaptam anno számomra, mint aki először csinál ilyet kielégítő választ, ezért kérdeztem tovább..szenzornak lineáris függyvénye van -40 és +125 között mér(MCP9700/9700A típusú).adatlapján 8.oldal 2-16-os ábra, azaz 0 fokra ad 0,5 V-t 50 fokra 1 V-ot 100 fokra 1,5 V-t 125 fokra kb 1,75 V-ot...értem nagyjából,h.mit írtál le követhető.
A kérdésem még mindig ua.jó az a képlet mit Icserny küldött 1,5 V referenciával vagy inkább számoljam át 5 V-ra?????? és így milyen lesz a képletem, 1,5 V helyére csak írjak be 5 V-ot és frankó??de akkor nekem nem szép számok jönnek ki..bocsi,h.ha sokat és felelőtlenül kérdezek, de sürget az idő..
Köszi
(#) szigetivan válasza icserny hozzászólására (») Dec 2, 2008 /
 
de akkor poti hiányában hogy tom megadni hogy egy Vref pin-ről vegye a feszt és ne Vdd-ről, mint referencia??hogy lesz a képletem???mert ezt még nekem BCD-znem kell,h.decimálisba lássam a soros portomon..
(#) G-Lex válasza icserny hozzászólására (») Dec 2, 2008 /
 
ajjaj. Akkor nem jót üzleteltem
gondolom rá tudom hegeszteni valahogy a pic-emre ezt a szerkezetet, de tudnál adni segítséget, hogy hogyan is lehetne ezt rákötni?
(#) trudnai válasza szigetivan hozzászólására (») Dec 2, 2008 /
 
Idézet:
„A kérdésem még mindig ua.jó az a képlet mit Icserny küldött 1,5 V referenciával vagy inkább számoljam át 5 V-ra??????”


Ezeket mar megvalaszoltuk, csak nem szeretunk helyetted szamolni Megegyszer a lenyeg:

1. Mekkora a max-max-max ho amit merni kell ill ami elofordulhat?

2. Ennel mekkora feszultseget ad le az eszkoz?

3. Milyen referencia feszultseget tudsz eloallitani? Pl gondolkodtahtsz a belso 0.6 vagy Vdd - ill kulso referenciakon, ami akar 2-3 sorbakotott dioda is lehet...

Ha pl van ket diodad 0.75V forward droppal akkor a kettobol lehet neked ugye 1.5V Vref belole... Hasonlo aramkort kell epitened mint egy zeneres fesz oszto. Vagy akar hasznalhatsz egy LED-et is aminek jonak tunik a forward dropja, csak merd le minden szempontbol jo-e...

Ha ez megvan lehet eldonteni, hogy kell-e ill ha kell hova kell a muszeren mert szignalon alakitani. Ha az is megvan akkor mar adott, hogy hogy szamolod ki a meresbol a feszultseget - BCD-vel ne foglalkozz, egyenlore mukodjon anelkul, pl egy LED sorra tedd ki a szamot igy binarisan latni fogod...

Amugy nezd, ez eleg jo kiindulasi alap a homerseklet szenzorokra - hogy meg is ertsd mirol van szo:

Wikipedia:Thermocouple
(#) icserny válasza szigetivan hozzászólására (») Dec 2, 2008 /
 
Idézet:
„milyen lesz a képletem, 1,5 V helyére csak írjak be 5 V-ot és frankó?”

Hát persze, hogy frankó!

Ha i-vel jelölöm az ADC-ból kiolvasott 10 bites számot, és 5 V-os referenciát feltételek, akkor:

T=(Vout-Vo)/Tc = (5*i/1023-0,5)/0,01

Most bővítsünk 102400-nel!

T = (500*i*1024/1023 - 50*1024)/1024

Az 500*1024/1023-at veheted 500-nak is (de inkább 500.5 kellene!), ekkor:
  1. T=(500*i-50*1024)/1024


vagy a valamivel pontosabb:

  1. T=(500*i +i/2 -50*1024)/1024

Idézet:

de akkor nekem nem szép számok jönnek ki”

Tökéletes számról meg bájos kvarkról már hallottam. A "nem szép szám" az milyen?

(#) icserny válasza G-Lex hozzászólására (») Dec 2, 2008 /
 
Idézet:
„hogyan is lehetne ezt rákötni?”

Az OSC1/CLKIN bemenetre be kell vezetni az oszcillátor kimenőjelét (nyilván a földet is közösíteni kell!), s a PIC konfigurációjában a külső órajelforrás (EC) üzemmódot kell megadni.
(#) szigetivan válasza trudnai hozzászólására (») Dec 2, 2008 /
 
sziasztok.

nehezen, de kicsit elmélyülve az egészbe úgy érzem,h.megértettem ezt a részt.tényleg elmondtátok, kezdőként elég homályosnak tűnt
Ha most jól leírom és nektek is tetszik akkor azt jelenti,h.tényleg megértettem.
5 V-ot választottam mind A/D mind Képletbe azaz Ta=25*(10*i-1024)/512 lett a képletem. mivel a szenzor függvénye alapján kimeneti feszültsége 0,5 V=0 fok 1,75 V=125 fok (0,15 V= -40 fok) ez azt jelenti,h.szinte csak ezt a tartományt használjuk ki a 0-5 V helyett, tehát így nekem 0 fok lesz 102 bináris érték mit az A/D kiad és 125 fok lesz 358 bináris. tehát i maximálisan bináris 358 lehet. Ezt így kipróbáltam és kis pontatlansági hibával kijött
csatoltam az eredményt

output.JPG
    
(#) icserny válasza szigetivan hozzászólására (») Dec 2, 2008 /
 
Idézet:
„hogy tom megadni hogy egy Vref pin-ről vegye a feszt”


MEGADNI úgy tudod, hogy ADCON0-ban VCFG=1-et írsz.
Inkább aza kérdés, hogy potméter hiányában honnan veszel referencia feszültséget, amit a Vref (RA1) lábra ráköthetsz? Használhatsz pl. két fix ellenállást, és csinálhatsz egy osztót...
(#) icserny válasza szigetivan hozzászólására (») Dec 2, 2008 /
 
Igen, ez így egy kicsit pontatlan (a közelítő képlet miatt), de a lényeget megértetted!
(#) szigetivan válasza icserny hozzászólására (») Dec 2, 2008 /
 
ő hát igen mivel 100 fokra és 125 fokra próbáltam és 1 fok lett a hiba..ez most nekem elég egyszer, még úgyis van 2 képletem
(#) trudnai válasza szigetivan hozzászólására (») Dec 2, 2008 /
 
Amugy azt csak halkan jegyzem meg, hogy bizonyos hatarok kozott egy diodaval is tudnal homersekletet merni...
(#) Jobbagyag válasza trudnai hozzászólására (») Dec 2, 2008 /
 
Sejtettem, hogy alapvetoen rossz az egesz
Igen olvastam amit irtal, de sajnos nem vagyok nagyon jaratos a PIC-ekben, viszont annal lelkesebb. Bevallom egy resze kinaiul volt nekem.
Eddig include-olassal bontottam szet a kodokat(minden gond nelkul), mire kaptam egy szelid dorgalast a forumon. Az volna nagy segitseg ha latnek egyszer legalabb egy mukodo, egynel tobb forrasfile-bal allo asm programot. Utana at tudnam szabni az enyem formailag olyanra. Megtenned, hogy pl amit kuldtem kijavitod ahol kell (pl CBLOCK helyett udata stb), vagy ha ugy egyszerubb, kuldenel a sajatjaid kozul egy valami egyszerut amin latszik a lenyeg(mi hogy van deklaralva, definialva stb).
Koszonom elore is.
(#) watt válasza trudnai hozzászólására (») Dec 2, 2008 /
 
Idézet:
„Ha pl van ket diodad 0.75V forward droppal akkor a kettobol lehet neked ugye 1.5V Vref belole...”

Egy LEDel könnyebb 1,5V-ot csinálni, de ismétlem magam, nem lehet 1,5V a referencia fesz, így ez a megoldás nem jöhet szóba, esetleg egy 2,5V-os referencia IC.
(#) watt válasza trudnai hozzászólására (») Dec 2, 2008 /
 
Úgy van, és méghozzá milyen jól! Kettőt sorba kötve még könnyebben. Csak kisebbre kell venni a referenciafeszt, és be kell tenni egy filléres OPA-t. ennyi. Biztosan hasonló megoldás van abban az IC-ben is..
(#) szilva válasza szigetivan hozzászólására (») Dec 2, 2008 /
 
Erre a tartományra (0.5-1.75V) én lehet, hogy külső referenciát használnék, méghozzá 2.5V-osat. Az MCP1525 ponto ilyenre való. Azt sajnos nem fogod megúszni, hogy a "nem szép" számokkal számolj.
(#) watt válasza Jobbagyag hozzászólására (») Dec 2, 2008 /
 
Egész projectet nem tudom elküldeni, de talán ez is segít: csatoltam
(#) szilva válasza trudnai hozzászólására (») Dec 2, 2008 /
 
A belső, 0.6V vagy 1.2V-os referenciát nem tudod referenciaként használni az A/D-nél. Ilyenkor azt lehet tenni, hogy Vdd referenciával A/D-zel, és megméred a mérendőt majd rögtön utána a fix belső referenciafeszültséget. Ebből vissza lehet számolni a mért lábon lévő abszolút feszültségértéket, persze ez kemény számolással jár.
(#) lidi hozzászólása Dec 2, 2008 /
 
Bár nem én kérdeztem, de érdekes a téma.



Akkor ezekszerint 5V -os tápfesz mellett Vref+ az minimum 2.5V kell legyen. És ez estben a Vref- pedig 0.5V lehet max ? Tehát minimum 2V kell legyen a kettő között ?

vref.png
    
(#) szilva válasza Jobbagyag hozzászólására (») Dec 2, 2008 /
 
Ha jól emlékszem, az volt a hibaüzenet, hogy az abszolút szegmensből túllógsz.

Nos, a minap épp ennek néztük utána trudnai-val, ugyanis én is emlékeztem rá, hogy volt ilyenem régebben. Arról van ugyanis szó, hogy a Microchip lkr filejában van egy rövid szegmens deklarálva 0-ra, ahová az abszolút kódot (reset és irq vektorok) kellene tenni, majd az ez utáni rész van deklarálva relokálhatónak. Ha a programodat úgy írod meg, hogy az elején elkezded "startup code 0x0" -val a szegmenst, és ebbe akarod az egész progit beletenni, akkor ha nagyobb lesz, mint amekkora a lkr-ben meghatározott, 0-ról induló abszolút szegmens mérete, akkor kapsz egy ilyen hibaüzenetet. A megoldás az, hogy ebbe a részbe csak a "resvec goto start" és az "intvec goto isr" jellegű utasításokat teszed be, majd nyitsz egy relokálható szegmenst ("code") a többinek.

És most jön a csavar: ez az újabb MPLAB-okra azért nem igaz, mert azokban már az lkr fileokban nincs ez a memória elején lévő abszolút szegmens! Azaz pl. a 8.10-es MPLAB-bal szerintem simán fordulna a Te programod is.

Direkt megnéztem egy régi, 7.60-as és a most fennlévő 8.10-es lkr filejait és az újabbakban teljesen ki lett írtva ez a kezdeti, abszolút szegmensdefiníció.
(#) icserny válasza lidi hozzászólására (») Dec 2, 2008 /
 
Igen, úgy tűnik. Viszont a témát felvető projektben PIC16F690 szerepel, aminek csak egy Vref bemenete van, s az adatlap szerint 2.2V a minimális érték, amivel használható, vagy min. 2.5V-ha az 1 LSB-re spcifikált hibánál nem akarunk többet kapni...
(#) papirhajo hozzászólása Dec 3, 2008 /
 
Üdv Urak!

Egy 16f4620-on szeretném használni az AD átalakítót, a configgal nincs gond, az AD átalaítás is megy, egyedül a felbontást nem értem.

A specifikáció szerint az AD átalakítás 11Tad időt vesz igénybe. A Tad minimum 0.7us kell, hogy legyen.

Ebből kiindulva 1 ad átalakítás 7.7us, azaz nagyjából 130kS/s a felbontás elvi határa.

Én 25MHz-en használom a procit és ADCON2 értékét váltotatgatva a legjobb esetben is csak kb 48kS/s amit ki tudok hozni belőle.(minimum a másfélszeresére lenne szükségem.)

Hol a hiba?
(#) trudnai válasza Jobbagyag hozzászólására (») Dec 3, 2008 /
 
Na itt van atalakitva - nem csak a linkerrel volt gondod ahogy latom

Na ugye, hogy nem nehez? Nezd meg a MAP file-t mit hova pakolgatott a linker... Erdekessegkepp betettem a modulod LST file-jat is, nezd meg milyen szep kerdojeleket pakolgat bele a fordito - fogalma sincs mi hova fog kerulni es mit hogyan kell kezelni, az majd a linker gondja igy nem tudja azokat a cimeket kitolteni... Erre valo a MAP file hogy majd mindent leellenorizz hogy minden okes-e. Ja, ugye a 16F877.LKR benne van a projectedben?
(#) Jobbagyag válasza trudnai hozzászólására (») Dec 3, 2008 /
 
Ha ezt tudom előre, hogy ennyi munkát adok Neked .....
Azt hittem csak par cimke atírása az egész. De nagyon köszönöm a részletes magyarázatokat, abból tanul az ember.
A main.asm lemaradt ugyan, de átírtam az én eredetimet a main.lst alapján, remélem nem rosszul.
Szóval a mellékelt main.asm a project Source Files, a pergesmentesites.asm pedig a Header Files mappaban foglal helyet. A Linker Script mappában benne a 16F877.lkr
Build All-ra a következő hibát jelzi:
Error - could not find definition of symbol 'pergesmentesites' in file 'D:\PIC Projects\több forrásfile t\MAIN.o'.
Errors : 1
Link step failed
Néztem az MPLAB IDE helpjét, probáltam az Object File-ok közt (MPASM Suite) valami okosságra lelni, de csak nem akart összejönni. Magát a MAIN.o-t megnyitni érdemben nem tudom.
Mi lehet rossz?
Kösz
ui: igen egy return hiányzott az eredeti main.asm-ből de csak azért, mert egy nagyobb (egyébként működő) programot próbáltam az épp elégséges minimumig leredukálni, hogy ne kelljen sokat olvasnotok
(#) p_istvan válasza papirhajo hozzászólására (») Dec 3, 2008 /
 
Szervusz!

Az A/D konverzió két részből tevődik öszze:
1; mintavételezés --> egy kondenzátor töltődik egy ellenáláson keresztűl (ennek az ideje is biztos benne van az adatlapban, néhány us, nem nagyon függ az órajeltől)

2; maga a konverzió, ami itt 11Tad (egyszerű A/D átalakítóknál nem megy párhuzamosan a mintavételezéssel)

plusz még fel is kell dolgozni a végeredményt (kiolvasni, eltárolni), ami 8 bitnél nagyobb felbontás esetén szintén számottevő idő lehet.

Nem néztem ugyan az adatlapot, de szerintem ettől a MCU-tól sokkal tőbb nem várható.

Üdv: P István
(#) watt válasza trudnai hozzászólására (») Dec 3, 2008 /
 
Nekem undorom van ettől a linkertől. Na mindegy, biztosan ez a korszerű. Majd én is váltok, ha egyszer nem sikerül követnem mit hová teszek!
(#) jano36 válasza papirhajo hozzászólására (») Dec 3, 2008 /
 
Ha már segítséget kérsz, akkor legalább annyit tegyél meg, hogy pontosan meghatározod a PIC típusát. Ugyanis a PIC16F4620 nem létezik. Helyette használd a PIC18F4620at .
Az IC 100ks/s- tud vedd figyelembe a P István által leírtakat. Használj (10MHz HSPLL ) 40MHz-es órajelet.

Üdv. Jano36
(#) trudnai válasza Jobbagyag hozzászólására (») Dec 3, 2008 /
 
Tenyleg lemaradt, az asm-et szerettem volna betenni ehelyett az lst-t tettem be, elnezest

Lenyeg, hogy a forditot meg kell nyugtatni egy 'extern' kulcsszoval, hogy a cimke letezik, csak kulso modulban.... Majd a linker kiokoskodja a globalis cimke definiciokbol hol van a cimke - ill. hogy letezik-e egyaltalan.

main.asm
    
(#) trudnai válasza watt hozzászólására (») Dec 3, 2008 /
 
Idézet:
„Nekem undorom van ettől a linkertől. Na mindegy, biztosan ez a korszerű. Majd én is váltok, ha egyszer nem sikerül követnem mit hová teszek!”


Hat nem tudom mi valtja ki beloled ezt, az, hogy nem tudod hova kerul majd a cimked ill. valtozoid? Ki tudod kenyszeriteni a cim megadasaval a 'code' ill 'udata' utan, ekkor is figyelni fog a linker, hogy atfedes ne legyen, meg ne logj tul a rendelkezesre allo teruleten.

Amugy nekem az includalas az ami idegesit - foleg akkora projecteknel amekkorat mutattal azon a kepen - na ott mar kifejezetten kenyelmesnek tartom a linkert, hiszen nem nekem kell eszben tartanom a pakolgatast, hanem a forditonak - tudod, dolgozzon o helyettem Ja es nembeszelve arrol, hogy a linkerrel az egyes modulokban lehetnek ugyanolyan nevu lokalis valzoim vagy cimkeim, csinalhatok overlayed RAM terulet foglalast ami mar eleg bonyas lehet enelkul
(#) trudnai válasza Jobbagyag hozzászólására (») Dec 3, 2008 /
 
Uh, nagyon reggel van es keson fekudtem le, ki kell nyitnom a szemem Szoval latom a main.asm-ben jol irtad le a dolgokat, ott az extern. Azonban a modulodat nem INC-nek kellene hivni hanem ASM-nek, mivel innen tudja a fordito, hogy dolga van vele, le kell forditani. Es termeszetesen be kell tenni a projectbe azt a file-t is! A modulhoz tartozo globalis definiciokhoz letre lehetne hozni egy INC file-t (tehat MODULNEV.ASM melle egy MODULNEV.INC) amiben az extern kulcsszavak vannak, es azt beinkludalni a MAIN.ASM elejen. Ekkor hasonlo lesz a helyzet mint egy C nyelvu project eseteben ahol a modulokhoz mellekelnek header fileokat is (MODULNEV.H).

Amugy a T2 ele azert nem kell banksel, mert azt ugyan nem tudjuk, hogy T1 es T2 hova kerul, de azt igen, hogy:

1. Ugyanarra a szekciora fog kerulni ami jelenleg a 'pervalt' nevet kapta

2. Ugyanarra a bankra fog kerulni, mivel ha megnezed az LKR filetminden bankra kulon data szekcio van definialva, azaz nem tud atlapoltan helyet foglalni meg ha megszakadna sem. Ha nem elegendo a 0-s bankon a hely meg fogja probalni automatan az 1-es bankon es igy tovabb, ha sehol sem tud foglalni akkor sikit.

3. Azt is tudjuk meg, hogy egymas moge fognak kerulni a memoriaban, bar erre alapozni sem szokas. Ha inicializalt valtozokat definialunk akkor az inicializalo rutin megirasakor ezt ugyan ki lehet hasznalni, de azt amugy is maskent kell megirni. De ezeket egyenlore hagyjuk, az inicializalast kulonben is celszerubb egy 16F eseteben 'manualisan' elvegezni - azaz valtozonkent, hagyomanyos modszerrel.
(#) watt válasza trudnai hozzászólására (») Dec 3, 2008 /
 
Idézet:
„Hat nem tudom mi valtja ki beloled ezt, az, hogy nem tudod hova kerul majd a cimked ill. valtozoid?”

Igen. Jobban szeretem kézben tartani a dolgokat.

Idézet:
„Amugy nekem az includalas az ami idegesit - foleg akkora projecteknel amekkorat mutattal azon a kepen”

Pedig nagyon kényelmes. Csak arra kell ügyelni, hogy egyikből a másikba semmilyen ugró utasítás ne legyen. A függvényhívásokkal nincs gond ugye.
Egyébként nem úgy indult a program, hogy includolva lesz, csak a végén már képtelen voltam átlátni az egészet ezért bontottam részekre. Így megoldható, hogy több mint két ablakot nyissak, ami egyben lehetetlen, mivel az MPLAB nem hajlandó kétszer megnyitni ugyanazt a fájlt, ami némileg érthető is.

Idézet:
„Ja es nembeszelve arrol, hogy a linkerrel az egyes modulokban lehetnek ugyanolyan nevu lokalis valzoim vagy cimkeim, csinalhatok overlayed RAM terulet foglalast ami mar eleg bonyas lehet enelkul”

Igazad van, nem is vitatom, de én nem hiszem, hogy egy kezdőnek linkeléssel kéne bíbelődni, illetve hogy nem lehet nélküle kényelmesen áttekinthetően programozni(leszámolva, ha csapatban készülnek a különböző részek!). Biztosan bennem van a hiba, de olyan idegen tőlem az egész, hogy csak na! Ez hasonló mint amikor C-ben úgy progizok egy perifériát, mint ha ASM-ban írnám. Ritka, ha használom az Open-t! Az is ritka, ha nem működik valami, amit az adatlap szerint bitenként beállítok.
Nem is akarok ebből vitát gerjeszteni(nem mintha eddig ilyen irányba ment volna bármi!), mert ez nagyon ízlés függő dolog.
Egyébként amit képet betettem, azt tévedésből tettem be, mert nem értettem a kérdést pontosan.
Következő: »»   352 / 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