Fórum témák

» Több friss téma
Fórum » Analóg jel feldolgozás PIC-el
 
Témaindító: Zsooti79, idő: Szept 27, 2007
Témakörök:
Lapozás: OK   1 / 1
(#) Zsooti79 hozzászólása Szept 27, 2007 /
 
Sziasztok!

Megpróbálom rövidre fogni!
A munkahelyemen szükségessé vált egy olyan mérőegység megépítése, ami több analóg jelet képes feldolgozni, majd kiértékelést készít. Mivel maga a gép (berendezés) olyan régi PLC-vel vezérelt, mellyel se kommunikálni nem lehet, se bővíteni (analóg bemeneti kártya). Így jött szóba nálam a PIC.
A lényeg az, hogy 16 analóg jelet kell feldolgoznom, majd kiértékelni. A kimeneten 16 két állapotú led lesz, ha a mért darab iO, akkor zölen világít mind a 16 led, viszont, ha valamelyik analóg jel értéke nem megfelelő, akkor az a led pirosan világít és a darabot nem engedi el.
Az analóg bemenő jeleket mérő taszterek adják (Taszter= útmérő). Nem tudom egyszerre mennyit szabad írni, így a kapcsolással kapcsolatos elképzelésemet külön üzenetbe írom le.
(#) Zsooti79 hozzászólása Szept 27, 2007 /
 
Nos. Úgy képzeltem el, hogy a taszterjeleket, persze miután erősítettem (0-10V), egy analóg multiplexeren (pl. DG406B) és egy feszosztón keresztül beküldöm egy PIC-be. Így csak egy analóg bemenetet kell hsználnom a PIC-en. Majd ott a kiértékelést követően egy Shift regiszteren (pl. 74F675A) keresztül kiküldöm a ledekre az eredményt. Lehet, hogy a Shift regiszter után kell majd a ledek elé erősítő fokozat is. pl. 4006, 4009.
Sajnos nem tudom az említett IC-k mennyire és mennyiért beszerezhetőek.
Valamint a problémám az, hogy már rég programoztam PIC-et és nem tudom, hogy álljak neki az analóg jel feldolgozásnak.
A működés elvét leírom a következő üzenetben...
(#) Zsooti79 hozzászólása Szept 27, 2007 /
 
A 16 taszter analóg jelét (Analóg multiplexer után 0-5V), dolgozom fel a PIC-ben. A mérést megelőzően lesz egy taszter nullázási funkció, amikor is a vizsgált anyagra, darabra rájárok a taszterekre majd lenullázom őket, azt a pontot veszem a nulla pontnak, referencia pont. Utána ahhoz képest kell pozitív és negatí irányba való eltérést mérni. Úgy is nézhetjük, hogy ez egy magasság mérés. A nullázás után be van állítva egy kódkapcsolóval egy tolerancia pl. +/- 0,1 mm és, ha azt meghaladja valamelyik irányba, akkor piros ledállapo, darab rosz, ha bent van a toleranciába mind a 16 taszter által küldött analóg jel eredméyne, akkor zöld ledállapot.
Tehát én pl. a nullázásnál mondjuk összejárt állapotban küldök a PIC-nek 0-5V-ból 2V-ot, amit aztán lenullázok. Utána nekem ez lesz a nulla és utána számolom az ettől való eltérést. Persze azt is meg kell oldanom, hogy hozzárendeljem a taszter útmozgás hány voltnak felel meg. Taszter nyugalmi állapot 0V, Pl 3 cm mozgás (taszter teljes benyomott állapota) 5V. Persze annyit nem fog mozogni hanem max. 1cm.
Ne tom menyire érthető amit leírtam ,majd ha lesz részetekről esetleg konkrét kérdés, akkor arra megpróbálok részletesebben felelni.
Mindennemű segítséget előre köszönök! Üdv.
(#) dcsabi válasza Zsooti79 hozzászólására (») Szept 27, 2007 /
 
Amit elmondtál azt a pic 16f877 egymaga megoldja.
8 analóg bemenetet lekezel és marad még több mint 20
I/O amit kimenetnek vagy nyomógombnak használhatsz.
Az áramkör megkettőzve 16 bemenetet lekezel. A program nagyon egyszerüen megírható, akár rövid időn belül. A bemeneteket célszerü 0-5V ra illeszteni,akár egy néhány kilós potival. A logikaifeltételek meg hasonló
a pic-nek nem gond. Ha megvan az áramköri környezet,
megírom a progit rá látatlanba is. Van direkt ilyenhez jö fejlesztő környezetem. esetleg egy LCD-n kilehet mutatni
az értékeket, és menüből állíthatók a szintek.
(#) Zsooti79 válasza dcsabi hozzászólására (») Szept 27, 2007 /
 
Én PIC16F871-el akarom megcsinálni, mert olyan épp rendelkezésemre áll. Amúgy nem sok a különbség köztük, a 871-nek kicsit kisebb a saját memóriája, de olyan hosszú progit úgyse írok, ami nem férne bele. Az analóg multiplexer IC-vel meg nincs szükségem 8 vagy annál több analóg bemenetre, mindössze egyre.
A bementet mind előbb is írtam én is 5V-ra szabályozom egy feszosztóval a PIC előtt. Kijelzővel viszont nem akarom túlbonyolítani a vezérlést, fölöslegesnek tartom + bonyolultá teszi csak a rendszert.
A progit egyébként szeretném én megírni én csak ötletet vagy mintaprogit várok az analóg jel feldolgozására, ill. a toleranciával való összehasonlításra...
(#) sirály12 válasza Zsooti79 hozzászólására (») Szept 27, 2007 /
 
Ha gyorsan és egyszerűen akarod megoldani, akkor basic. Ilyen egyszerű feladatokhoz felesleges mást használni.


Oshon féle pic ssimulator ide, ami tud basic-ben is.

Csatolok hozzá egy progit, most írtam neked, csak be kell fejezned.


0001.bas
    
(#) Zsooti79 válasza sirály12 hozzászólására (») Szept 27, 2007 /
 
Sajnos én nem tok basic-ban programozni csak Assembly-ben, azt hiszem az MPlab-ban írt programok ezen formátumuak. Én azt ismerem abban csinálom és nem sajnálom rá a PIC-et, mert ugyis kifizeti majd a cég.
A nagyobb költséget a cégnek ugyis majd a taszterek jelentik, nem is kicsit.
De azért köszi. Én elvi ötleteket várok a progihoz.
(#) dcsabi válasza Zsooti79 hozzászólására (») Szept 27, 2007 / 4
 
ha jól értelmezem viszonylag rövid időn belül kell 16 bemenetet kiértékelni. A pic-nek gyakorlatilag mindegy,
hogy mennyi bemenetét használjuk.A multiplexelést is
valahogy szinkronizálni kell na a kimeneti állapotokat említetted kijelezni. Ez számomra inkább bonyolítja a programot és a hardvert is. Az én progim a Parsic,
ezzel ez akár egy órán belül megírható. Viszont 873, 874,
876, 877, 628, 84-re jó. A pic simulator IDE-t is használom de ezzel 1 napom biztos rámenne MPLAB-ot nem is említem. Nem fontos kijelzó, de a szinteket állítani, meg a toleranciát, csak igy tudod közben jól követni .
Be lehet irni a progiba is de akkor mindig uja kell égetni a PIC-et ha valamit korrigálni akarsz. vagy bemeneti osztóval variálhatsz, de nem tudod "hol jársz" és elmászhat. Két PIC csak 1300+áfa/db és minimális külső alkatrész kell. A TE feladatod,... én ezen az uton látom egyszerüen megoldhatónak.
(#) dcsabi válasza dcsabi hozzászólására (») Szept 27, 2007 /
 
Szerintem elvi ötlet ha a PIC nek minden analógját használod, a multiplexelés megnehezíti a programod írását. Minden analóg bemeneten beállítasz egy szintet ami felül pl logikai 1-be vált egy bitet és ezeket és kapcsolatba figyeled. Ha nem egyszerre vannak jelen a jelek akkor egy bitet be set-elsz és a kiértékelés után törlöd. Ha kész az áramköri környezet egy progit irok neked rá aztán beleturhatsz ,ha variálni akarsz rajta.
ASM-be lesz.


(#) Zsooti79 válasza dcsabi hozzászólására (») Szept 27, 2007 /
 
Igen a kiértékelésre rövid idő van, max. 2 sec, de ha a PIC szemszögéből nézem, akkor ez nagy idő. A multiplexelés szinkronizációját a DG406B megoldja, persze ha lehet kapni.
Mit értesz azon, hogy a te Parsic programoddal ez a feladat egy óra? Ezt a progit te írtad? Ebben műveleti tagokkal dolgozol, mint a LOGO vagy a PLC FUP ill. KOP-ban történő programozásánál? Amúgy én a PIC Simulator IDE-t se ismerem én minden progimat MpLab-ban írtam. Azzal se volt semmi bajom.A szintállításon nem tudom mit értesz. én csak nullázom a tasztereket majd nézem, hogy egy +/- -os toleranciából kiesik-e. Sztem az se nagy feladat a PIC számára, hogy megnézi egyenként a 16 analóg jelet majd ez alapján a kimeneten kiküldi a led állapotokat. A toleranciát egyébként egy kódkapcsolóval állítanám, ami be van skálázva 1-10-ig. Ami mondjuk 0,1-0,9 mm jelente. Tizedes osztás nekem már tökéletes. Vagy rakok két kódkapcsolót és akkor századig tudom állítani. Amúgy mielőtt beépítésre kerül tesztelve lesz és később nem kell majd a programot módosítani. Ennek mindíg csak ennyi lesz a funkciója. De azért köszi az ötleteket.
(#) dcsabi válasza Zsooti79 hozzászólására (») Szept 27, 2007 /
 
Azzal a programmal (parsic) egy bemenet beolvasása 8 vagy 16 bitesként és összehasonlítása égy változóval vagy konstanssal, és az eredmény kezelése az előbb megvan mint ezt az üzenetet bepötyögtem.
(#) dcsabi hozzászólása Szept 27, 2007 /
 
ITT egy példa egy bemenetre egy nyomógomb állítja a kapcsolási küszöböt És lcd-n látod hol jársz.

An16-1.asm
    
(#) potyo válasza Zsooti79 hozzászólására (») Szept 27, 2007 /
 
A 16 bemenetet én két 4/1-es analóg multiplexerrel (74HC4052) és a pic négy analóg lábával oldanám meg. Talán ehhez kell a legkevesebb külső alkatrész. A 16F871-nek csak nyolc analóg bemenete van, így azokra nem alapozható a megoldás, négycsatornás 2/1-es analóg multiplexer pedig nem létezik, így 3drb 74HC4053 kellene.

Nemtudom, az analóg részt mekkora sebességgel kellene olvasni, 500 mérés csatornánként és másodpercenként nem probléma. Utána kellene számolni, de lehet, hogy fel lehet menni 2000-re is. Timer megszakításból néhány utasítás, hogy mindig egyel arrébbi analóg bemenetet kapcsolj rá a PIC konverterére. Amikor kész a konverzió, akkor pedig két kivonással megállapítható, hogy belül van a jel a tartományon vagy nem, és ettől függően kiadni a megfelelő jelzést.


Írhatsz nyugodtan hosszú hozzászólást, csak tedd több bekezdésbe a dolgot, és hagyj ki 1-2 sort közöttük.
(#) Gory válasza Zsooti79 hozzászólására (») Szept 27, 2007 /
 
Én csak pár megjegyzéssel tudok hozzájárulni. Először, hogy vedd számításba azt, hogy ha több analóg lábat használsz a PIC-en A/D konverternek, akkor azt a PIC-en belül is csak multiplexelve tudod használni, mert máshogy nem lehet. Ekkor pedig a csatornánkénti mintavételi sebességed az ugyanúgy csökken, mintha kint multiplexelnél. Tehát ennyi erővel bent is csinálhatod Én is potyo 4db 4/1-es megoldására szavazok. Vagy ha van akkor 2db 8/1, és 2 A/D lábra vezetve.

A másik, hogy számold össze hogy hány használható láb marad a PIC-en, ha már konkrétan tervezel majd. Ha kint multiplexelsz, akkor a 16 jelet 4 lábon tudod megcímezni plusz egy amire bevezeted az 5. Ha meg belül, akkor mondjuk 4 lábra vezeted be, kell még 2 a multiplexer címzéshez, az 6. Ha pedig 8 lábra vezeted, akkor is kell még egy a címzésre, az 9. Ha van 4 db 8 bites portod, akkor 32 láb, tehát akár még a LED-eket direktbe rá is kötheted mind a 2X16-t, és mégegy külső alkatréssszel kevesebb. (1 lábra ugye 2 LED jut egy a jónak egy a rossz szintnek a jelzésére)

Remélem valamit lendítettem előre a topikon
(#) potyo válasza Gory hozzászólására (») Szept 27, 2007 /
 
Annyival egészíteném ki, hogyha a két led közül egyik mindig világít, akkor 16 láb is elég a ledeknek. Illetve ha nagyon muszály, akkor lehet multiplexelni is, bár ezt inkább kerülném, mert zavart okoz, és így befolyásolja az AD konverziót.

Amit én írtam, ahhoz kell 4+2+16=22 láb. Ez épp ki lenne centizve egy 16F870-hez. Viszont mivel 16F871 már van, ezért maradt még 11 szabad láb további funkciókhoz.
(#) Zsooti79 hozzászólása Szept 28, 2007 /
 
Nem tudom végül mi lesz a megoldás, mert a főnököm inkább a PLC-t erölteti. Igaz, hogy a két gépből ahol ezt meg kellene oldani az egyiken az egyik állomás S7 PLC-vel vezérelt így ott azzal meg lehetne oldani. Csak kellene egy analóg bemeneti kártyát a buszra csatlakoztatnom. Egy 4 vagy 8 bites kártyát. Így valószinüleg a külső analóg multiplexerre ugyanúgy szükségem lesz. Valamint mivel a PLC kiementi kártyáján is max. 1 byte szabad így a Shift regisztert se hagyhatom el a PLC után...
(#) dcsabi válasza Zsooti79 hozzászólására (») Szept 28, 2007 /
 
az s7 nek nem olcsók a periferiái. 16 analóg bemenet nem kevés, ha multiplexeled akkoris kell analóg kártya.
A pic egy bemenetet 20 mikrosec alatt beolvas, de ha akár 100-al számolok 8x az 1ms sincs. két pic 16 bemenettel rendelkezik és csak 1300+áfa 2X. A progi meg nevetségesen egyszerű.
Én nem variálnék bizonytalan megoldásokkal.
(#) Friedlander hozzászólása Okt 8, 2010 /
 
Üdv!
Lenne nekem is egy kissebb analóg PIC problémám.
Egy betonba fektetett tekercsel szeretnék autót érzékelni egy analóg Pic segítségével (néztem a 16F871-et de az túl nagy lenne, elég lenne 4 analóg-4digit IO is). Ha valaki jártas a témában jó lenne ha tudnátok segíteni benne, mert ez az első ilyen projektem. Az érzékelést a tekercs végezné, kb. 6-8 kör (vagyis lesarkazott téglaalak) 36-45m rézhuzalból. Ezt úgy képzeltem hogy a PIC kapna egy 4MHz-s jelet, (16F871ből le lehet venni a negyedét azaz 1MHz-et) ami alapján kiszámolni a keletkezett tekercshez a megfelelő kondenzátort hogy rezonancia-frekvencián legyenek. f[sub]0=1/(2píXgyökLC) Tud valaki ajánlani hozzá PIC-et? esetleg ha valaki csinált már ilyet akkor hogyan dönti el azt h mennyi tekerccset használ? Tranzisztor kapcs üzemmódban legyen az LC kör és a PIC között?
Válaszotok előre is köszönöm!
(#) bubuc17 hozzászólása Jún 29, 2011 /
 
Nem lenne egyszerűbb, gyorsabb, olcsóbb sima komparátorral megoldani a dolgot?.
A referencia feszültség változtatásával lehet korrigálni is a munkadarabhoz.
Esetleg nem tud valaki leírást az analóg port használatáról?
Még sose használtam,pedig jól jönne néha..
(#) potyo válasza bubuc17 hozzászólására (») Jún 30, 2011 /
 
Idézet:
„Nem lenne egyszerűbb, gyorsabb, olcsóbb sima komparátorral megoldani a dolgot?”

Milyen dolgot?
Idézet:
„Esetleg nem tud valaki leírást az analóg port használatáról? Még sose használtam,pedig jól jönne néha..”

Adatlap?
(#) dini19 hozzászólása Szept 13, 2015 /
 
Üdv!
Szeretnék csinálni egy vu metert pic16f876-al de nem igazán értem hogyan kéne feldolgoznom az analóg jeleket vele. Tudnátok ebben segíteni hogy kezdjem el? Ha esetleg lenne valamilyen minta program valami hasonló alkalmazásra az is tökéletes lenne.
Nem vagyok túl jártas még pic programozásban eddig csak villogó ledeket meg futófényeket programoztam.
(#) bbalazs_ válasza dini19 hozzászólására (») Szept 13, 2015 /
 
Ja, ez a kezdo vagyok, atomeromuvet epitenek, segitsetek effektus...

Eloszor egy sima potmetert probalj meg beolvasni. Ehhez at kell allitani az adott labat analog bemenetre es utana beallitani a megfelelo parameterekkel az AD-t. Utana kivalasztani a csatonadat es inditani az AD-t. Az ADRESL/ADRESH regiszterekben lesz az eredmeny.
Az adatlapot kell olvasni a 10bit A/D converter resznel, illetve peldaprogramokat kellene tanulmanyozni.
Ha assemblyben programozol, valahol van valami KITT muszerfal futofenyem havernek, amit potmeterrel lehetett tekergetni, az 876A-ra keszult - ha az eleg, el tudom kuldeni.

Ha minden megvan, akkor a bemenetedet fel kell erositeni, hogy beleessen a rendes tartomanyba es merheted is.
(#) dini19 válasza bbalazs_ hozzászólására (») Szept 13, 2015 /
 
Köszönöm a válaszodat!
Természetesen nem az atomerőművel kezdeném ez csak a vége lenne a "célom".
Ha el tudnád küldeni a progit azt nagyon megköszönném mert nem találok sehol minta programokat ehez.
(#) bbalazs_ válasza dini19 hozzászólására (») Szept 13, 2015 /
 
Elkuldtem az email cimedre.

A programban azt latod, hogy 16x mintavetelezek, ket byteon osszeadom, utana 4 bittel letolom az eredmenyt. Ez pontosit es valamelyest levagja a poti bizonytalansagat.
A hozzászólás módosítva: Szept 13, 2015
Következő: »»   1 / 1
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