roboprog - automatizari, aparate de masura · web viewca sa fie si mai simplu, vom numara de la 255...

14
BEEP Cum producem sunete utilizind un buzzer piezoceramic sau alt dispozitiv sonor. 1.Gnerarea unui sunet continuu 2.Generarea unui sunet pe o durata scurta 3.Generarea unui sunet la apasarea unui buton 4.Generarea unui sunet scurt la apasarea unui buton In cele ce urmeaza presupunem ca utilizam un modul PIC-AP16 sau PIC-PD16 ce are inclus buzzer si intrerupator. Se poate utiliza si alt modul PIC-AP. Pentru aceasta se va aloca alt buton (eventual extern) si se va conecta un buzzer (sau alt dispozitiv – casca, difuzor). Stim ca un buzzer va produce sunete daca este alimentat cu o tensiune cu o anumita valoare si frecventa. Tensiunea de 5V livrata de modul este suficienta pentru buzzer-ul inclus pe modul. Frecventa poate avea valori intre 1-5 KHz. Semnalul aplicat va avea forma de unda aproximativ asa : Am notat cu T durata unei semiperioade a semnalului fiindca ne va fi mai usor sa intelegem programarea bazata pe intirzieri realizate cu instructiuni de timp (Timer). Va trebui sa generam acest semnal cu microcontrolerul nostru . Nu ne punem probleme cu amplitudinea acestuia: ea va fi automat 5V(sau aproximativ 5V), atit cit livreaza maxim o iesire digitala din PIC. Desi nu dorim sa intram in calcule (prea savante) reamintim ca un semnal dreptunghiular cu frecventa de 1 KHz (1000Hz) are perioada de 1mS (f=1/T). La noi T este de fapt 2T. Deci, daca

Upload: others

Post on 18-Mar-2021

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

BEEP

Cum producem sunete utilizind un buzzer piezoceramic sau alt dispozitiv sonor.1.Gnerarea unui sunet continuu2.Generarea unui sunet pe o durata scurta3.Generarea unui sunet la apasarea unui buton4.Generarea unui sunet scurt la apasarea unui buton

In cele ce urmeaza presupunem ca utilizam un modul PIC-AP16 sau PIC-PD16 ce are inclus buzzer si intrerupator. Se poate utiliza si alt modul PIC-AP. Pentru aceasta se va aloca alt buton (eventual extern) si se va conecta un buzzer (sau alt dispozitiv – casca, difuzor).

Stim ca un buzzer va produce sunete daca este alimentat cu o tensiune cu o anumita valoare si frecventa. Tensiunea de 5V livrata de modul este suficienta pentru buzzer-ul inclus pe modul. Frecventa poate avea valori intre 1-5 KHz.Semnalul aplicat va avea forma de unda aproximativ asa :

Am notat cu T durata unei semiperioade a semnalului fiindca ne va fi mai usor sa intelegem programarea bazata pe intirzieri realizate cu instructiuni de timp (Timer).

Va trebui sa generam acest semnal cu microcontrolerul nostru . Nu ne punem probleme cu amplitudinea acestuia: ea va fi automat 5V(sau aproximativ 5V), atit cit livreaza maxim o iesire digitala din PIC.

Desi nu dorim sa intram in calcule (prea savante) reamintim ca un semnal dreptunghiular cu frecventa de 1 KHz (1000Hz) are perioada de 1mS (f=1/T). La noi T este de fapt 2T. Deci, daca perioada T+T are valoarea de 1mS atunci frecventa generata va avea 1KHz.

Cum va artata programul: vom activa o iesire (= logic 1) vom astepta sa treaca 0,5mS (utilizam un timer), dezactivam iesirea (= logic 0) , asteptam sa treaca 0,5mS si apoi o luam de la capat.In acest fel vom genera un semnal dreptunghiular atita timp cit modulul este alimentat.Semnalul acesta se aplica unui buzzer care va produce sunetul.

In folderele atasate veti gasi schema si programele. Deschideti schema cu ezCircuit si fiecare program cu CoreChart.

Page 2: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

1.Generarea unui sunet continuu

Mai intii desenam schema in ez Circuit. Fiindca vrem sa dezvoltam proiectul includem si un buton (SW-A0). Selectam butonul de tip Pull Up (active LOW).

Trecem la CoreChart si stergem rutina de test. Apoi selectam Change Mode, Options, Chip Configuration, debifam Before intializing port A…. Apasam Apply Changes.Apasam Change Mode.

Pentru Timer : selectam Numbers apoi TimeDelay si dublu click pe imaginea [3] si apoi pe [5].

In noua fereastra introducem 5 la TEN THOUSANDS. Aceasta va reprezenta 0,5mS.

Ulterior vom putea modifica aceat numar intre 1 si 10. Vom obtine diferite frecvente intre 5KHz (1) si 500Hz (10).

Testarea : conectati jumperul BUZ_ON (pentru buzzer) si JP1-A0 pe PU (pentru butonul SW-A0). Transferati programul. Alimentati modulul. Trebuie sa se auda sunetul generat de buzzer. Modificati intirzierea in imaginea fiecarui timer (TimeDelay0 si TimeDelay1).Puteti incerca si valori diferite.

Page 3: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Vom modifica acum programul dar nu esential. Vom grupa aceste instructiuni. In urma acestei operatiuni se va crea un grup de instructiuni. Avantaje: se poate utiliza cind mai avem nevoie in program (daca avem doua butoane si dorim sa avem confirmarea apasarii).

Mai intii stergeti instructiunea GOTO START.

Selectati instructiunea 2 si in timp ce tineti apasata tasta SHIFT selectati si instructiunea 5. Toate instructiunile de la 2 la 5 vor fi incadrate de o linie subtire. Apasati Group in bara de instrumente din dreapta. Redenumiti grupul : BEEP. Apasati Create New Group.Se va crea un grup ce va fi reprezentat de o singura instructiune [2].

Putem vedea grupul daca dam dublu-click pe aceasta instructiune [2].

Pentru a reveni la programul principal dam click pe prima sau ultima instructiune a grupului.

Grupul se poate modifica dupa dorinta si necesitati la fel ca orice program.

2.Generarea unui sunet pentru o durata scurta

In continuare ne propunem sa modificam programul astfel incit sunetul sa se auda doar pentru o durata scurta.Aceasta inseamna ca trebuie sa generam semnalul dreptunghiular pentru o anumita durata de timp si apoi trebuie sa il oprim. Vom face ceva mai simplu: vom genera semnalul si vom numara ciclurile de executie. Dupa un numar de cicluri executate vom opri generarea (executia programului).Numararea ciclului o vom face cu un contor de numarare pe care il vom alege noi.Daca stim ca o perioada a semnalului este de 1mS (plus timpul pierdut de microcontroler pentru alte operatii in cadrul programului – dar insesizabil, fiind extrem de mic la frecventa cesului intern de 8MHz) atunci daca numaram 255 de cicluri, durata sunetului generat va fi de : 255*1mS=255mS=0,255S. Va fi un beep scurt dar perfect pentru scopul nostru.

Ca sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul.Contorul se va scade cu o unitate la fiecare trecere a programului prin grupul BEEP.

Vom defini o variabila denumita contor si ii vom da valoarea 255 chiar de la inceput.Ii vom scadea valoarea de la 255 la 0 prin operatii aritmetice ( contor = contor-1).La sfirsit se va testa daca “contor” a ajuns la 0. Totul este inclus intr-o singura imagine grafica.

Page 4: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Apasati Change Mode ,Edit, Variables…In cimpul Type new variable…scriem “contor” si apsam Add Variable.Inchidem fereastra (Close). Am creat in acest fel un contor pe care il vom utiliza la numararea ciclurilor de generare a semnalului.Dati dublu-click pe grupul BEEP [2].Se va deschide grupul (subrutina/Sub) BEEP si o vom edita.

Apasati Change Mode.

Apasati Numbers, Set_Number si introduceti instructiunea sub titlul grupului.

Veti obtine imaginea alaturata.Dati dublu-click pe instructiunea [2] si completati conform inaginii alaturate. La SAVE AS selectati “contor” din lista derulanta . Apasati OK.

Page 5: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Apasati Address , Apply Changes si introduceti adresa noua (Addreess_1) in locul indicat [3].

Selectati Change Mode.

Selectati instructiunea “Count and Decide” si completati cimpurile de mai jos.Alegeti “contor” din lista derulanta si selectati operatorul – (minus).Apasati apply.

Page 6: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Introduceti instructiunea in locul indicat [8].

Selectati sageata GOTO BEEP si in cimpul cu instrumente selectati GoTo Address_1.Apasati Apply Changes.Instructiunea se va modifica (GoTo BEEP).

Page 7: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Programul final va fi asa :

[2] initilizam contorul cu 255 (reprezinta numarul de teceri prin rutina de sub Address_1 si de fapt durata generarii sunetului).

[4]-[7] se genereaza sunetul

[8] se decrementeaza contorul cu o unitateDaca contorul nu este inca 0 se va dirija executia pe ramura N si se va merge prin [9] la [3] Address_1. Acolo se va genera iarasi un ciclu de oscilatie (A2=1, intirziere 0,5mS, A2=0, intirziere 0,5mS) si se va decrementa iar contorul.

Dupa 255 de cicli 0/1 contorul va avea valoarea 0 si executia se va dirija pe ramura Y iesindu-se din subrutina BEEP [10] si revenind in programul principal exact dupa instructiunea care a chemat subrutina BEEP.

Acum la fiecare conectare a alimentarii se va genera un sunet pentru o durata de 0,255 secunde.

Puteti modifica durata inlocuind numarul 255 cu orice numar intre 1 si 254. Pentru durate mai mari chemati subrutina de mai multe ori sau modificati subrutina .

3.Generarea unui sunet la apasarea unui buton

Page 8: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

In continuare vom modifica programul pentru a genera sunet pe durata apasarii unui buton.

Selectati Inputs, Digital_In, si introduceti instructiunea inainte de grupul BEEP. Dati dublu-click pe instructiunea adaugata [2].

In noua imagine selectati SW_A0 si ON. Apasati OK.

In acest fel daca nu se apasa pe buton se obtine 1 logic la intrare

iar programul va fi dirijat pe ramura [Y] spre START. Nu se va executa grupul BEEP.

Daca insa se apasa pe butonul SW_A0 atunci executia se va dirija pe ramura [N] si se va produce un sunet.

Insa va trebui sa redirijam programul de la inceput dupa ce se apasa butonul.Introducem o instructiune de salt la START dupa grupul BEEP.Programul final arata asa :

Page 9: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Cu acest program sunetul se va auzi atita timp cit este apasat butonul.

4.Generarea unui sunet scurt la apsarea unui buton

Pentru arealiza acest proiect trebuie sa modificam programul de mai sus.Avem doua posibilitati:

a) Stergem instructiunea [6] – dupa producerea sunetului programul se va opri la END MAIN. Pentru a relua functionarea trebuie sa oprim alimentarea si sa o repornim. Aceasta operatiune se numeste Reset. Nu este exact o procedura excelenta pentru un sistem real.

b) Adaugam alte instructiuni – dupa generarea sunetului asteptam ridicarea butonului.Dupa ce se ridica butonul se reia executia de la inceput (START). Modul acesta de lucru e mai profesionist. Il vom utiliza in cele ce urmeaza.

Page 10: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

Introduceti o adresa: selectati Address si redenumiti in cimpul de jos (Adr_Din_nou).

Introduceti o noua citire a intrarii A0 (la fel ca prima data).

Dublu-click pe [7] si selectati SW_A0 apoi ON apoi OK.

Page 11: ROBOprog - Automatizari, aparate de masura · Web viewCa sa fie si mai simplu, vom numara de la 255 spre 0. Cind contorul va ajunge la 0 vom incheia programul. Cind contorul va ajunge

La sfirsit adaugati si o instructiune GOTO catre adresa Adr_Din_nou.

Dupa apasarea butonului se asteapta ridicarea acestuia si abia atunci se reia executia de la START. De aceea se va genera doar un sunet scurt.

NOTA

Toate butonele au aceeasi problema: nu fac contact perfect la apasare. De aceea apare o oscilatie la intrarea microprocesorului. Aceasta oscilatie poate deranja functionarea conform programului. De aceea se introduce o intirziere dupa citirea intrarii. Intirzierea depinde de caracteristicile butonului si se poate situa intre 10-200mS. La fel se intimpla si la intreruperea contactului.

Daca aveti probleme cu acest program va trebui sa il rescrieti resspectind cele de mai sus.

In literatura de specialitate rutina de mascare a oscilatiei unui buton se numeste debouncing.