Generator de semnal 107-DTMF pe ATtiny2313

Decizia de a asambla un astfel de dispozitiv a fost dictată de dorința de a încerca să implementeze semnale analogice complexe folosind un microcontroler. Nu a fost planificată nicio aplicație practică pentru acest dispozitiv, dar cine poate folosi un astfel de dispozitiv? Bucurați-vă!

este
107-keypad_dtmf_schem.spl7 - Schema generatorului de tonuri DTMF ATtiny2313

Funcționarea dispozitivului.

Dispozitivul generează un semnal complex cu două componente la apăsarea unui buton de pe o tastatură cu matrice 4x4, care este utilizat în mod obișnuit în astfel de scopuri. Am depanat dispozitivul folosind această tastatură cu membrană.

semnal

Pe lângă formarea tonului butonului, dispozitivul dublează apăsările de taste prin emiterea caracterelor corespunzătoare prin UART (cifre și litere mari latine). Dispozitivul generează, de asemenea, o secvență tonală în funcție de șirul de caractere trimis către UART. De exemplu, mesajul „4563245”. Dacă trebuie să întrerupeți tonul vocal, este folosit simbolul „P”. De exemplu, „8P097P111P22P33”. Parametri UART - Rată de transmisie: 9600, 8 date, 2 Stopbit, fără paritate

Puțină teorie.

Tonul generat prin apăsarea unei taste este suma a două semnale sinusoidale cu frecvențe, respectiv, ale rândului și, respectiv, coloanei tastei apăsate (aceste frecvențe sunt indicate în diagrama de mai sus). Algoritmul pentru generarea unui semnal mixt este destul de interesant, dar nu original și nu am reinventat roata într-un mod nou. Dacă sunteți interesat de modul în care se face acest lucru, puteți citi documentul Atmel corespunzător

doc1982.pdf - Apnot AVR314: Generator DTMF

Firmware pentru microcontroler.

Microcontrolerul poate funcționa: - ca de la un oscilator master intern de 8 MHz (nu este nevoie de un rezonator de cuarț - picioarele trebuie lăsate „atârnând în aer”, dar frecvențele de ieșire sunt mai puțin precise șidependență mai mare de factori externi), - și de un oscilator cu cristal master extern (cuarț la 8 MHz) pentru o funcționare mai precisă. La alegerea opțiunii de oscilator master, firmware-ul rămâne același, doar siguranțele vor fi diferite (siguranțele sunt similare cu articolul anterior, de unde au fost luate). keypad_dtmf_out.hex - Generator DTMF de firmware pe ATtiny2313

106-fuse_8in.png - Fusebits pentru oscilator master intern de 8MHz (fără cristal extern) Fusebytes: Low=$E4, High=$DF, Ext=$FF Fuse-bytes: Low=$FF, High= $DF, Ext=$FF Vă reamintesc: Pentru Algorithm Builder și UniProf, casetele de selectare sunt setate ca în imagine. Pentru PonyProg, AVR Studio, casetele de selectare SinaProg sunt setate inversate. Cum să programați microcontrolere citiți în întrebările frecvente.

keypad_dtmf_out_source.zip - Generator DTMF sursă

Acum să vedem ce avem.

Semnalul este generat folosind PWM și se folosește un circuit RC pentru a-i da forma dorită. Ca urmare, după lanțul RC, obținem următorul semnal (butonul 6 este apăsat):

semnal

De-a lungul curbei semnalului util, observăm un pieptene de înaltă frecvență (frecvența este mai mare decât cea audibilă, deci nu va crea zgomot) - aceasta este opera lanțului RC. Puteți face linia mai netedă prin creșterea capacității condensatorului sau a rezistenței rezistorului, dar în acest caz intervalul semnalului util va fi redus semnificativ.

Ne uităm la spectrul semnalului și ne asigurăm că există două frecvențe separate (frecvența PWM a depășit zona de afișare), așa că totul este în regulă - dispozitivul funcționează așa cum ar trebui.

107-dtmf

Soluții gata

Pentru sarcinile de generare și decodare a unui semnal DTMF, există gata făcutesolutii. Iată câteva fișe tehnice pentru aceste microcircuite.

TP5089N.pdf - Generator DTMF MT8870D.pdf - Decodor DTMF

P.S. Păcat că nu există ADC în ATtiny2313 - ați putea folosi și un decodor DTMF! Dar nimic, o sa repet pe mega, cu siguranta il voi atasa.

Un lucru foarte util.Nu este întotdeauna posibil să găsești un generator specializat sau un cip decodor.Și dacă TU scrii firmware-ul pentru generator și decodor, de exemplu, pentru ATmega8 (microcontroller comun și compact), atunci mulți pasionați de lipire vor fi extrem de recunoscători și recunoscător ție. NU va trebui să călcați în bazarurilor și magazinelor în căutarea mai multor. Am pus controlerul, am încărcat firmware-ul și am primit ce ai nevoie.

Dacă cineva intenționează să implementeze un decodor DTMF akv, acesta a fost deja făcut (pe mega8) http://www.forum.getchip.net/viewtopic.php?f=9&t=394& start=10

Buna seara Eugene.Te rog sa dezvolti un decodor DTMF pentru generatorul tau DTMF.Doar unul cu drepturi depline.Ca la mt8870.Daca poti implementa o tastatura pe el.Te intreb foarte mult.Il voi testa imediat in hardware.

Există o idee de a face „totul într-unul”, dar nu știu încă când vine vorba de implementare.

Bună seara GetChiper. Am testat generatorul DTMF în Proteuse. Produce aceeași formă ca în figura (graficul) de mai sus. Dar acest semnal primit nu dorește să fie determinat de decodorul DTMF. Am testat decodorul în sine pe un semnal real înregistrat (de la un microfon) și a dat întotdeauna rezultatul corect. Nu vreau să spun că DTMF este generat incorect, doar ajută-mă să-mi dau seama ce este în neregulă. Poate că frecvența de generare este deplasată sau pieptene de pe semnal afectează cumva. Cel mai interesant lucru este că dacă se aplică PWM fără RCdecodor, apoi detectează DTMF, dar incorect...

Controler cu cuarț? Deviația de frecvență este posibilă dacă MK este alimentat de un oscilator master intern. Este posibil să vizualizați spectrul semnalului de ieșire? Cele 2 frecvențe de ieșire se potrivesc cu butonul apăsat?

Pentru a scoate pieptene, puteți crește rezistența din lanțul RC (cel care este 2k7). Dar atunci nivelul semnalului va scădea semnificativ.

Apropo, nivelul semnalului este suficient pentru decodor? Sugerează o funcționare eronată, dar totuși fără lanț RC, când nivelul semnalului este maxim

GetChiper, mulțumesc pentru sfat. Problemă rezolvată, DTMF a detectat 100%. Totul este simplu - sigurante greșite :). Apropo, mi-a plăcut foarte mult ideea de a forma un semnal. Deci puteți face orice formă. Dacă este timp, voi combina generatorul și decodorul, totul este acolo pentru asta.

Mulțumesc pentru schemă și program, totul a funcționat deodată. Am avut un decodor DTMF construit mai devreme, de asemenea, nu ATtiny2313 cu indicatori 2x16. Toate ok. Adevărat, am pus un transformator diferențial la ieșire (pentru că semnalul este transmis prin multiplexor prin canale de joasă frecvență) iar la capătul opus totul este decodat normal.

GetChiper, sau puteți aranja biblioteca de elemente pentru splan, schemele sunt dureros de frumoase)

Nu există bibliotecă ca atare (voi aduna totul, dar nu pot să ies să o fac). Dar toate elementele pot fi preluate în bibliotecă din fișierele de proiect.

GetChoper'y: Așa cum a spus tovarășul Saakhov: „Totul este corect, lucrarea este scrisă corect…”. Tocmai s-a strecurat o greșeală nefericită. Așa-numitul circuit RC din fața tranzistorului de ieșire, care se numește filtrul de trecere jos de primă ordine în cercurile experților, este calculat foarte prost. Frecvența de tăiere a unui astfel de filtru este: Fav=1/2πRC, (Hz) Înlocuiți 2700(Ω) și 0,0000001(Farad) în formulă șiobținem 589 Hz. Între timp, frecvențele semnalului DTMF se află în regiunea 697...1633 Hz, adică filtrul nostru (sau mai degrabă, al tău) suprimă chiar și frecvențele semnalului util. De aceea unii cetățeni se plâng de instabilitatea funcționării decodorului DTMF. Ce să faci? Puneți doar un filtru cu o frecvență de tăiere kosher și o a doua sau a treia comandă ar fi bine. Pe scurt, da-mi e-mailul tau si vei primi un fisier cu poze.

Problema cu filtrul de ordinul întâi este că are o degradare lină, iar frecvența PWM nu este atât de îndepărtată de frecvențele semnalului DTMF, așa că trebuie să faceți compromisuri - apăsați mai tare frecvențele PWM și nu reduceți semnalul util. foarte mult.

În ceea ce privește filtrele de ordin a N-a, sunt de acord cu tine, ar fi mai bine, dar cred că toată lumea le poate implementa „pentru ei înșiși”.

Opțiunea din stânga S >

Apropo, pentru cei care vor să aibă un decodor DTMF, sfătuiesc: http://www.qrz.ru/schemes/contribute/constr/dtmf.shtml Winchester nu se va prăbuși.