Fórum témák

» Több friss téma
Fórum » DTMF jel írása olvasása
 
Témaindító: intersec, idő: Jan 24, 2009
Témakörök:
Lapozás: OK   1 / 1
(#) intersec hozzászólása Jan 24, 2009 /
 
Sziasztok olyan feladat elött állok amivel soha nem foglalkoztam, frekvenciát kellene olvasnom és irnom at mega 8 al
Egy siemens terminálról érkező dtmf jeleket (de van kivétel is 1400HZ) kellene digitalizálnom egyéb illesztő áramkor nélkül. a kimenet osc1 lábon az ok az működik, de hallanom is kellene. Másik kérdés hogy lehet a négyszögjelet kisimítani szinusz jellé rc tagokkal hogy a gsm központon zaj és hiba nélül átmenjen a dtmf jelszint.
Köszönöm a segítséget!!!!
(#) Kera_Will válasza intersec hozzászólására (») Jan 24, 2009 /
 
DTMF dekoder / koder cél áramkört találsz ... azt felesleges lenne ujra feltalálni ... de ha nagyon tudsz uC progizni akkor sok sikert hozzá .

Dekoder IC 4 biten tolja ki az aktuális vett kombinációt.

1400 Hz dekódolásához pedig vmi pll szerű programot kell írni ami behúz erre.

De találtam hasonló problémára nullátmenet figyelő algoritmust is ... ott 1200/ 2200 Hz figyelése volt a megoldandó probléma AX25höz.


ZCD decoder forrása az alsó "gombok " mögötti zip filében

Jó tanulmányozást és sok sikert !
(#) intersec hozzászólása Jan 24, 2009 /
 
igen ez amit irtál ok , van is cm8870 ic-m amit ezt tökéletesen végzi viszont ez egy CID (dontact id) communikáció ahol a handshake és a kissoff jel nem szabvány dtmf ez az egyik ami miatt nem tudom illeszteni a másik pedig hogy egy kész már a panel ahol nincs ez az ic csak az illesztés a controllerrre az a/d bemenetre
emiatt kellene nekem program rutin
(#) GLaszlo válasza intersec hozzászólására (») Jan 24, 2009 /
 
Üdv!

FFT-re keress rá. Azzal dekódolható a dtmf jel, kérdés, hogy mennyi idő alatt. Ha megvan a spektrumod, onnantól kezdve már nyert ügyed van, így a nem szabványos jeleket is kezelni tudod. Lehet, hogy van egyszerűbb megoldás is, nekem hirtelen ez jutott eszembe, mint alternatíva.

üdv:
GLaszlo
(#) GWily válasza GLaszlo hozzászólására (») Jan 26, 2009 /
 
Hali

Szerintem az FFT nagyon bonyolult, nem kell verébre ágyúval lőni.
Egyszerűen csak figyelni kell az analóg jelet 1 komparátorral úgy, hogy mondjuk ha eléri a max feszültség a 95%-át akkor ad egy 1-est, ez pl egy interruptot eredményez a uC-nak, és TIMER segítségével ki tudod számolni azt, hogy ez most mekkora frekvencia.
A négyszögjelből szinuszt szerintem nem jó ötlet RC tagokkal csinálni, mert a frekvenciaátfogás nagyobb mint 2, és ami jó a 1600 Hz-hez az nagyon nem lesz jó a 700-hoz. Viszont az meg lehet csinálni - és oszcillátor se kell hozzá - hogy feláldozol 4-5 lábat és R2R hálózattal csinálsz D/A konvertert. A kimeneti jelalak így egy lépcsős szinusz lesz, na oda kell 1 RC tag, hogy kisimítsa, de egy kb 10-20KHz határfrekvenciás RC tag bőven jó.
(#) intersec hozzászólása Jan 27, 2009 /
 
igen egy rutin elég lenne de soha sem foglalkoztam ezzel a témával csak a digitál rész megy nekem , ha valaki tudna küldeni egy bascom részletet at8 ra megköszönném. a jel előállitása megy a osc1 lábon ez szépen müködik ha kisimitom a jelet mivel négyszögjelben nem vesz semmit a vevő.
(#) pucuka válasza intersec hozzászólására (») Jan 27, 2009 /
 
Bocsánat, hogy beleszólok, én ugyan nem értek a mikrovezérlők programmozásához, de találtam egy alkalmazást, hátha a hozzáértőknek segít, szerintem ötlet szinten jó

AN1771.pdf
    
(#) szilva válasza GWily hozzászólására (») Jan 27, 2009 /
 
Szerintem nem úszod meg a digitális szűrőzést vagy az FFT-t, mivel a DTMF pont arról szól, hogy nem egy, hanem két freki van egyszerre jelen. Ott meg aztán nézheti az ember timerekkel a jelalak bizonyos pontjainak a távolságát, én azt gondolom, hogy abból nemigen lehet megállapítani a két összetevőt.

Nekem még az FFT mellett az jutott eszembe, hogy a bejövő jelből vett mintákat párhuzamosan keresztülfuttatnám digitális sávszűrőkön és azoknak a kimenetét figyelném a progiban, hogy melyiken jelenik meg a jel. Sajnos ez DTMF esetén 8 sávszűrőt jelent, az extra 1400Hz miatt meg még egy kilencediket is, valószínűleg eléggé kérdéses, hogy elég-e egy Mega8 teljesítménye hozzá.
(#) Gafly válasza intersec hozzászólására (») Jan 27, 2009 /
 
Mar ketszer (marmint tobb nap elteressel :*) ) futottam neki (ami azt illeti mindketo nekifutas tobb, a teljes aktualis topic atolvasasat jelenteti..) ennek a topic-nak, hogy megprobaljam ertelmezni hogy mire is lenne szukseged. Meg most sem ertem hogy pontosan mit es miert szeretnel, viszont korrekt, hasznalhato es segito szandeku hozzaszolasokat kaptal (bar gyanitom hogy ezzel nem vagy kisegitve). Valoszinuleg en sem tudok segiteni, de nehany kerdest azert nem artana tisztazni:

#1 Miert nem hasznalhatsz erre kifejlesztett cel aramkoroket a DTMF adas es vetel celjara. MT8870 maig is klasszikus DTMF kodvevo. MT8880 DTMF kod ado es vevo, raadasul meg tarcsahang erzekelesre is alkalmas. Sot olyan "Application Note" (AN) -> is van hozza, ahol beszedet peldaul "Hallo" azositanak ("handshake/kissoff-ra is jo lehet", melyik szabvany melyik valtozatarol beszelunk, csak nem kulfoldre fejlesztunk valamit, mert akkor az mar nem "hobbi" hanem "profi" elektronika )?

#2 Ami a negyszogjel kisimitasat illet, azzal nincs semmi gond. Pucuka linkje peldaul egyszeruen tokeletes
De mar "anno" miota feltalaltak a 8253 timer IC-t (mar az elso PC-kben is volt) azota sima ujjgyakorlat a a DTMF jel eloallitasa" Elso timer az egyik freki, masodik a masik freki, harmadik pedig a DTMF jel hossza... De ket timerrel is meg lehet csinalni (jobb erzesu kontrollerben van is ketto ), ekkor sajnos szamolni kell a ciklusok szamat... Tobb szamolassal persze egy timerrel is meg lehet csinalni. GWily "lepcsos kozelito jel" eloallitasa szintem megfontolando (ezzel mar "merojel" szintet lehet elerni. Ami azt illeti DTMF jelek simitasahoz maximum 4KHz hatarfreki es bemeno negyszogjel is elegendo volt a gyakorlatban).

#3 Ami az FFT es DSP kerdest illeti: Persze igy csinaljak profi alkalmazasoknal (pl. DSP pool a telefonkozpontban kartyan...).
Viszont az MT8870 (mint cel IC) peldaul ugy csinalja hogy van benne ket savszuro, egyik also csoport frekvencia savra, a masikba pedig felso savra. Mindket savot negyszogesitik, majd digtalis logikaval ertekelik. Ami azt illeti szokott is hibazni. Egyreszt ha van zavaro jel akkor mellette az ervenyes kodot sem ismeri fel. Ugyanakkor beszedjelbol hajlamos hajlamos hamis DTMF kodokat kidekodolni (valamiert "5" szokott gyakran elofordulni).

#4 Ez a GSM kozponton atmenjen onmagaban megerne egy miset...;
(#) intersec hozzászólása Jan 27, 2009 /
 
Ok leirom a teljes feladatot hogy lasd te is, van egy felugyeleti központ, ami riasztórendszerek jelzéseit fogadja, a protokol neve Contact ID formátum, ez többnyire dtmf jelekkel kommunikál az adat dtmf viszont a handshake és kissoff nem dszbványos dtmf jel, a handshake 1400Hz 400ms ig majd 100ms szunet, ezután 2300Hz, a kissoff pedig 400Hz 600ms ig
. A dtmf jeleket simán elő tudom állitani ezek a osc0 kimentről a siemens m20 mikrofon bemenetére megy egy rc tagos simittásal és egy végfokozattal, ez ok. de kell hallanom a 1400 és 2300 as frekit, amit szerintem ad lábra kötve egy müveleti erősitőn keresztül meg lehet oldani hogy programbol megszamolom a 1400 és 2300 as frekit +-5 % os türéssel. de soha nem programoztam ilyet és hiaba irtok nekem timer0 és timer 1 es osztasokat ha ez nem mond nekem sokat viszon t egy bascomos kódrészlet meg tudná oldani a problémámat. Digitális jelfeldologozás, modemvezérlés , lcd irás, sms küldés minden müködik kivéve ez a fele a dolognak, nagyon megköszönném neketek ha valaki tudna nekem ebben segiteni. Azt hiszem hiretelen ennyi, amugy a mega 8 simán lekezeli ezt is szerintem, rajta van egy lcd modul egy ps2 es billenytűzet megszakitassal, egy siemens modem soros porton, ami hiv és smst küld, egy usb port, és most vagyok 22 % nál a programmemóriában , az eeprom pedig 1% on áll szerintem még szinte üres proci.
(#) GLaszlo válasza intersec hozzászólására (») Jan 27, 2009 /
 
Üdv!

Az m20 GSM terminállal adatlapja szerint lehet dtmf jeleket előállítani, legalábbis szabványosat.
m20 adatlap
Ennek az adatlapnak a 89-es oldalának az alján ott is van a szükséges AT parancs. Ha ha handshake is kell, akkor nem tudom, hogy ezt hogy tudnád megoldani. A konkrét adatátvitel hogy megy? Először jönnek szimplán ezek a frekik, aztán a dtmf jelek?

üdv:
GLaszlo
(#) GLaszlo válasza intersec hozzászólására (») Jan 27, 2009 /
 
Idézet:
„de kell hallanom a 1400 és 2300 as frekit, amit szerintem ad lábra kötve egy müveleti erősitőn keresztül meg lehet oldani hogy programbol megszamolom a 1400 és 2300 as frekit +-5 % os türéssel”


Ezt ki tudod fejteni, hogy hogy érted?

Én értelmezésem szerint: Ebben a formában úgy tudod megcsinálni, hogy a bejövő jelet erősítőkkel úgy formázod meg, hogy, hogy az AD-t teljes mértékben kivezérelje. Ha nincs más jel a rendszerben, csak a pl tisztán 1400Hz szinusz, akkor folyamatosan AD-zol pl interruptosan, és amikor eléri az AD értékének a felét /nullátmenet/, akkor elindítasz egy timert valamilyen időalappal. A timer addig ketyeg, amíg az AD-n megint nem méred a kivezérlési tartomány felét. Esetleg úgy tudsz triggerelni a szinusz felfutóélére, hogy az előző néhány mintát is mindig figyeled, és ha alulról közelítenek a kivez tartomány feléhez, akkor felfutó él volt, ezáltal a teljes periódusidőt méred -> megvan a freki, ha viszont csak azt figyeled, hogy 2.5V van, akkor csak a félperiódust fogod mérni, de ebből is megkülönböztethető az 1400 illetve 2300 Hz, mivel elég távol vannak egymástól.


Pl: AD ref 5V, akkor olyankor indítod el a timert, amikor 2.5V-ot mérsz, majd akkor állítod le, amikor megint 2.5V-ot mérsz valamilyen pontossággal.

üdv:
GLaszlo
(#) intersec hozzászólása Jan 27, 2009 /
 
Nem egyről beszélünk szerintem leirom pontosabban.
1. Hivás
2. Handshake a vevőtől 1400 szunet 2300 herc 200ms mulva kell küldenen m aj eleket
3. küldöm a jeleket 14 szám megy el
4 kisoff ha ez jön 400 herz akkor ok
ha 600 hez szunet 600 herz jön akkor kell küldenem megint az adatokat.
tehát
1400 2300 400 600 ezeket kell hallanom te nem tudok ad programozni ezért kértem vbalakinek a segitségét, na meg elolvastam kb 30 leirast erről éls nem értem szerintem ez a legnagyobb baj, mit osszak mivel és ha megszakitásban csinalom akkor nem e fog miunden szar jelre megszakitást generálni? szerintem van erre valami egszeru megoldás de rá fogok jönni.
pl pic16f877 nél asseml kodban láttam ezt ez 8 sor afrekiszámlálás, itt se lehet bonyolult de a vbascom helpben ezt nem talolom, de ugy latom senki sem.
(#) GLaszlo válasza intersec hozzászólására (») Jan 27, 2009 /
 
Kezdem érteni, hogy mi a gondod.
Ha jól értem: A vevőtől akkor nem dtmf kódok jönnek, hanem csak ezek a bizonyos frekvenciájú handshake jelek. Ezeknek kellene tudnod a frekvenciáját meghatározni. Azt meg tudod tenni, hogy valamennyit erősítesz a jelen, a beérkező jelet egyenirányítod egy soros diódával (csak az első félperiódus lesz ekkor meg, a másodikban 0 a jel). Ezt az egyenirányított jelet ráteszed egy hiszterézises komparátorra -> ennek a kimenete már digitálissá alakítható... Nem kell ilyenkor AD-zni semmit. A létrejövő impulzussorozat impulzusszélessége arányos lesz a frekvenciával.

Ha a frekvenciamérés elve nem lenne meg:
1. visszavezethető periódusidő mérésre, jelen esetben ez a legegyszerűbb.
Megvalósítás jelen esetben: Egy számlálót addig kell hagyni pörögni, amíg a félperiódus véget nem ér (a komparátor kimenete vissza megy 0-ba). Tehát, ha a komparátor kimenete 1, akkor timer elindít, az számolgat magában, majd amikor a komparátor kimenete 0, akkor timer megállít. A timer értéke fogja ekkor a mért jel periódusidejének a felét tartalmazni.

Egy lehetőség szoftveres megvalósításra:

pl Timer0-al 10us-enként generálsz egy megszakítást, megvizsgálod, hogy a bemenet 1-e, ha igen, akkor egy változót növelsz (akármekkora lehet, csak beleférjen akkora szám, mint a legnagyobb periódusidő fele), ha pedig 0, akkor nem növeled tovább ezt a változót. Ahhoz, hogy a programban ezt kezelni tudd, egy flag-et célszerű definiálni hozzá, és akkor a programban is tudod detektálni, hogy volt valami a vonalon, a változót ilyenkor kiolvasod-> megvan a freki közvetetten, tudsz rá handlert írni.

üdv:
GLaszlo

ui: nem tudom, hogy mennyire volt érthető, hogy mire gondoltam, én így csinálnám a frekimérést, ha tisztán szinuszos jel van. Komparátor lehet schmitt triggeres inverter is akár, akkor nem kell sokat szívni a kiegészítő áramkörrel, csak a hozzá való illesztéssel.
A DTMF jel generálás meg szerintem a legegyszerűbb, ha AT paranccsal próbálod meg, a terminálod támogatja, feltéve, hogy jó adatlapot néztem meg...
(#) Gafly válasza intersec hozzászólására (») Jan 28, 2009 / 4
 
Gondoltam

Azt mar most rogton felejtsd el, hogy a GSM modul mikrofon bemenetere generalsz kontrollerrel DTMF kodot. Az a korrekt megoldas amit GLaszlo is irt: A GSM modult kell paranccsal megkerni hogy kuldjon DTMF kodot (AT+VTS=). Trukkos lehet am a mobil halozat! Ha jol betomoriti a GSM terminal kodekje akkor a tuloldalon kodvevo legyen a talpan aki ertelmezi Raadasul adott esetben a halozat lazan donthet barmikor hogy "Je, ez egy DTM kod. Vagjuk ki es kuldjuk el savon kivul." Ez ellen meg az sem segit ha kiprobalod es ugy latod hogy mukodik. Nos uzembiztosan nem fog mindig (kozpont, halozat, viszonylat es forgalmi viszonyoktol fuggoen vagy megy, vagy nem)...

A fix frekvencias szinuszjel az lehet hogy altalaban atmegy, de itt is azert a kodekek megviccelhetnek.
Legjobb lenne ha ra tudnad beszelni a terminalt hogy "tiszta" tomorites mentes csatornat hasznaljon (ha jol latom ezt az M20 nem tudja).

Ujra veggigondolva az MT8880 nem szerencses a handshake es a kisoff detektalasara, vegyuk csak egy peldanak a DTMF ado/vevo cel IC-nek.
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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