Buscar

elt024 11 TimerReproducaoSons

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Timer e Reproduc¸a˜o de Sons
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba´
rodrigomax@unifei.edu.br
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 1 / 1
Serial, PWM e ADC
Revisa˜o
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 2 / 1
Comunicac¸a˜o Serial
Para dois dispositivos se comunicarem e´ necessa´rio compatibilizar o
sistema f´ısico e o sistema lo´gico.
F´ısico (Hardware)
Tipo de conector
Pinagem do conector
N´ıveis de tensa˜o
Lo´gico (Software)
Codificac¸a˜o utilizada
Tamanho da palavra
Tamanho do stop/start bits
Bit de paridade
Taxa de transmissa˜o
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 3 / 1
Serial
1 #include "serial.h"
2 #include "basico.h"
3 v o i d EnviaSerial ( uns igned char c ) {
4 w h i l e ( ! BitTst ( PIR1 , 4 ) ) ; // aguarda o r e g i s t r o f i c a r d i s p o n ı´ v e l
5 TXREG=c ; // c o l o c a o v a l o r para s e r e n v i a d o
6 }
7 uns igned char RecebeSerial ( v o i d ) {
8 i f ( BitTst ( PIR1 , 5 ) ) // V e r i f i c a s e e x i s t e dado d i s p o n ı´ v e l
9 {
10 r e t u r n RCREG ; // r e t o r n a o v a l o r
11 }
12 r e t u r n 0 ; // c o n d i c¸ a˜ o de e r r o
13 }
14 v o i d InicializaSerial ( v o i d ) {
15 TXSTA = 0b00101100 ; // c o n f i g u r a a t r a n s m i s s a˜ o de dados
16 RCSTA = 0b10010000 ; // c o n f i g u r a a r e c e p c¸ a˜ o de dados
17 BAUDCON = 0b00001000 ; // c o n f i g u r a s i s t e m a de v e l o c i d a d e
18 SPBRGH = 0b00000000 ; // c o n f i g u r a para 56 k
19 SPBRG = 0b00100010 ; // c o n f i g u r a para 56 k
20 BitSet ( TRISC , 6 ) ; // p i n o de r e c e p c¸ a˜ o de dados
21 BitClr ( TRISC , 7 ) ; // p i n o de e n v i o de dados
22 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 4 / 1
Serial
1 #include "basico.h"
2 #include "config.h"
3 #include "serial.h"
4 v o i d main ( v o i d ) {
5 uns igned i n t i , j=0;
6 char msg [ ] = "Hello World!" ;
7 uns igned char resp ;
8 TRISD = 0x00 ; // a c e s s o aos l e d s
9 InicializaSerial ( ) ;
10 f o r ( ; ; ) {
11 f o r ( i = 0 ; i < 65000 ; i++) ; // d e l a y
12 EnviaSerial ( msg [ j ] ) ; // e n v i a dados
13 j++;
14 i f ( j > 11) {
15 j=0;
16 EnviaSerial ( 1 3 ) ; // e n v i a quebra de l i n h a
17 }
18 resp = RecebeSerial ( ) ; // r e c e b e dados
19 i f ( resp !=0){
20 PORTD = resp ;
21 }
22 }
23 } ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 5 / 1
Conversor AD
Toda conversa˜o AD exige um determinado tempo. Para que o
microcontrolador realize corretamente a conversa˜o e´ necessa´rio seguir os
seguintes passos:
1 Configurar o conversor
2 Iniciar a conversa˜o
3 Monitorar o final da conversa˜o
4 Ler o valor
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 6 / 1
Conversor AD
1 #include "adc.h"
2 #include "basico.h"
3 v o i d InicializaAD ( v o i d )
4 {
5 BitSet ( TRISA , 0 ) ; // s e t a o b i t 0 como e n t r a d a
6 ADCON0 = 0b00000001 ; // s e l e c i o n a o c a n a l 0 e l i g a o AD
7 ADCON1 = 0b00001110 ; // s o´ AN0 e´ a n a l o´ g i c o , r e f e r eˆ n c i a baseada ←↩
na f o n t e
8 ADCON2 = 0b10101010 ; //FOSC/32 , Al inhamento a` d i r e i t a e ←↩
t c o n v = 12 TAD
9 }
10
11 i n t LeValorAD ( v o i d )
12 {
13 uns igned i n t ADvalor ;
14 BitSet ( ADCON0 , 1 ) ; // i n i c i a c o n v e r s a˜ o
15 w h i l e ( BitTst ( ADCON0 , 1 ) ) ; // e s p e r a t e r m i n a r a c o n v e r s a˜ o ;
16 ADvalor = ADRESH ; // l eˆ o r e s u l t a d o
17 ADvalor <<= 8 ;
18 ADvalor += ADRESL ;
19 r e t u r n ADvalor ;
20 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 7 / 1
Conversor AD
1 #include "basico.h"
2 #include "config.h"
3 #include "disp7seg.h"
4 #include "adc.h"
5 v o i d main ( v o i d ) {
6 uns igned i n t i ;
7 i n t temp = 0 ;
8 InicializaDisplays ( ) ;
9 InicializaAD ( ) ;
10 f o r ( ; ; ) {
11 temp = LeValorAD ( ) ;
12 MudaDigito ( ( temp / 1000) %10, 3) ;
13 MudaDigito ( ( temp / 100 ) %10, 2) ;
14 MudaDigito ( ( temp / 10 ) %10, 1) ;
15 MudaDigito ( ( temp ) %10, 0) ;
16 AtualizaDisplay ( ) ;
17 f o r ( i = 0 ; i < 1 0 0 0 ; i++) ;
18 }
19 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 8 / 1
PWM
Vantagens
Mais barato que uma sa´ıda analo´gica
Pode ser transformado numa sa´ıda analo´gica atrave´s de um filtro passa
baixa
Para algumas situac¸o˜es o filtro na˜o e´ necessa´rio1
Desvantagens
Na˜o e´ uma sa´ıda analo´gica
1Quando o dispositivo a ser controlado ja´ possui um filtro passa baixa, normalmente
por causa da sua construc¸a˜o f´ısica. Ex: aquecimento por resisteˆncias
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 9 / 1
Conversor PWM
1 #include "pwm.h"
2 #include "basico.h"
3
4 v o i d SetaPWM1 ( uns igned char porcento ) {
5
6 // f o r m u l a do duty c y c l e :
7 // DC porcento = V / ( ( PR2+1) *4 ;
8 //V = DC/100 * (PR2+1) * 4 = DC * (PR2+1) /25
9
10 uns igned i n t val = ( ( uns igned i n t ) porcento ) *( PR2+1) ;
11 val = val / 2 5 ;
12
13 // g a r a n t e que tem apenas 10 b i t s
14 val &= 0x03ff ;
15
16 // os 8 p r i m e i r o s b i t s s a˜o c o l o c a d o s no CCPR1L
17 CCPR1L = val >> 2 ;
18
19 // os u´ l t i m o s d o i s s a˜o c o l o c a d o s na p o s i c¸ a˜ o 5 e 4 do CCP1CON
20 CCP1CON |= ( val & 0x0003 ) << 4 ;
21 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 10 / 1
Conversor PWM
1 v o i d SetaPWM2 ( uns igned char porcento )
2 {
3 uns igned i n t val = porcento * PR2 ;
4 val /= 2 5 ;
5 val &= 0x03ff ;
6 CCPR2L = val >> 2 ;
7 CCP2CON |= ( val & 0x0003 ) << 4 ;
8 }
9 v o i d SetaFreqPWM ( uns igned i n t freq )
10 {
11 //PR2 = f o s c /( fpwm*4* p r e s c a l e r )−1 = (8000000/( f r e q *4*16) ) − 1
12 PR2 = (125000/( freq ) ) {}− 1 ;
13 }
14 v o i d InicializaPWM ( v o i d )
15 {
16 BitClr ( TRISC , 2 ) ; // c o n f i g u r a os p i n o s como s a ı´ d a s
17 BitClr ( TRISC , 3 ) ;
18 T2CON |= 0b00000011 ; // c o n f i g u r a o p r e s c a l e do t i m e r 2 para ←↩
1 : 1 6
19 BitSet ( T2CON , 2 ) ; // L i g a o t i m e r 2
20 CCP1CON |= 0b00001100 ; // c o n f i g u r a CCP1 como um PWM
21 CCP2CON |= 0b00001100 ; // c o n f i g u r a CCP2 como um PWM
22 } ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 11 / 1
Conversor PWM
1 #include "config.h"
2 #include "basico.h"
3 #include "pwm.h"
4 #include "adc.h"
5 // i n i c i o do programa
6 v o i d main ( v o i d )
7 {
8 i n t temp ;
9 InicializaPWM ( ) ;
10 InicializaAD ( ) ;
11 f o r ( ; ; ) {
12 temp = LeValorAD ( ) ;
13 // a j u s t a n d o a f r e q u eˆ n c i a de acordo com e n t r a d a a n a l o´ g i c a
14 SetaFreqPWM ( temp ) ;
15 // a j u s t a n d o o duty−c y c l e para 50%
16 SetaPWM1 ( 5 0 ) ;
17 }
18 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 12 / 1
Timers
Timers
http://www.zontikgames.com/dalnegro-deluxetimer.html
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 13 / 1
Timers
Timers
Sa˜o circuitos eletroˆnicos que realizam a contagem do tempo, podendo ou
na˜o disparar eventos em determinados instantes.
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 14 / 1
Timers
Timers sa˜o circuitos/hardwares dedicados a realizar a contagem do
tempo
Geralmente utilizam o valor do clock ou mu´ltiplos/submu´ltiplos deste
valor como frequeˆncia de incremento
Cada microcontrolador possui uma certa quantidade de timers
dispon´ıveis
O PIC18f4550 possui
1 timer configura´vel 8 ou 16 bits (Timer0)
1 timer de 8 bits (Timer2)
2 timers de 16 bits (Timer1 e Timer3)
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 15 / 1
Timers
Ao inve´s de contarmos a quantidade de ciclos quequeremos esperar e
utilizar um loop for vazio, podemos utilizar os timers
Modo de operac¸a˜o
Inicializam-se as configurac¸o˜es necessa´rias
Prescaler
Fonte de clock
Quantidade de bits (Timer0 apenas)
Configura-se o timer com o valor desejado2
Dispara o hardware
Aguarda overflow
Reinicia o timer
2O valor deve ser o complemento com base na quantidade de bits dispon´ıveis
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 16 / 1
Timers
Circuito esquema´tico
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 17 / 1
Timer
1 #include "basico.h"
2 #include "timer.h"
3 char FimTimer ( v o i d ) {
4 r e t u r n BitTst ( INTCON , 2 ) ;
5 }
6
7 v o i d AguardaTimer ( v o i d ) {
8 w h i l e ( ! BitTst ( INTCON , 2 ) ) ;
9 }
10
11 v o i d ResetaTimer ( uns igned i n t tempo ) {
12 uns igned ciclos = tempo * 2 ; // para 8MHz, 1 ms = 2 c i c l o s
13 ciclos = 65535 − ciclos ; // o v e r f l o w 2ˆ15−1 (16 b i t s )
14 ciclos −= 1 4 ; // s u b t r a i tempo do o v e r h e a d
15 TMR0H = ( ciclos >> 8) ; // s a l v a a p a r t e a l t a
16 TMR0L = ( ciclos & 0x00FF ) ; // s a l v a a p a r t e b a i x a
17 BitClr ( INTCON , 2 ) ; // l i m p a a f l a g de o v e r f l o w
18 }
19
20 v o i d InicializaTimer ( v o i d ) {
21 T0CON = 0b00001000 ; // c o n f i g u r a sem p r e s c a l e r
22 BitSet ( T0CON , 7 ) ; // l i g a o t i m e r 0
23 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 18 / 1
Timer
Tempo de overhead
E´ o tempo necessa´rio para executar a chamada de uma func¸a˜o
Pode alterar o valor na configurac¸a˜o do timer
Depende do compilador
Maior impacto na contagem de tempos pequenos
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 19 / 1
Timer
1 #ifndef TIMER_H
2 #define TIMER_H
3 char FimTimer ( v o i d ) ;
4 v o i d AguardaTimer ( v o i d ) ;
5 // tempo em ms
6 char ResetaTimer ( uns igned i n t tempo ) ;
7 v o i d InicializaTimer ( v o i d ) ;
8 #endif //TIMER H
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 20 / 1
Timer
1 // i n i c i o do programa
2 v o i d main ( v o i d )
3 {
4 uns igned i n t cont ;
5 TRISD=0x00 ;
6 InicializaTimer ( ) ;
7 ResetaTimer (10000) ;
8 cont = 0 ;
9 f o r ( ; ; )
10 {
11 AguardaTimer ( ) ;
12 ResetaTimer (10000) ;
13 cont ++;
14 i f ( cont >= 50) // 50 * 10ms = 0 ,5 s
15 {
16 PORTD ˆ= 0xFF ;
17 cont = 0 ;
18 }
19 }
20 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 21 / 1
Reproduc¸a˜o de Sons
Reproduc¸a˜o de Sons
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 22 / 1
Timers
A sa´ıda PWM permite va´rias frequeˆncias de trabalho
Para o conjunto PIC/Cristal utilizado conseguimos gerar frequeˆncias a
partir de 488,3 Hz
A frequeˆncia aud´ıvel e´ de 20 a` 20.000 Hz.
Com esses valores optamos por trabalhar com as notas musicais da
quinta e sexta oitavas de um piano, comec¸ando em C5 ou Do´ Tenor
que equivale a` 523 Hz.
Para representar a auseˆncia de som sera´ utilizado o valor de 125.000
Hz
A durac¸a˜o da nota sera´ feita em mu´ltiplos de 1ms, utilizando o timer0
como base de tempo
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 23 / 1
Reproduc¸a˜o de Sons
1 #include "config.h"
2 #include "basico.h"
3 #include "pwm.h"
4 #include "timer.h"
5
6 // f r e q u eˆ n c i a das n o t a s m u s i c a i s
7 #define C 523
8 #define CS 554
9 #define D 587
10 #define DS 622
11 #define E 659
12 #define F 698
13 #define FS 740
14 #define G 784
15 #define GS 830
16 #define A 880
17 #define AS 932
18 #define B 987
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 24 / 1
Reproduc¸a˜o de Sons
1 // segunda o i t a v a
2 #define C2 C*2
3 #define C2S CS*2
4 #define D2 D*2
5 #define D2S DS*2
6 #define E2 E*2
7 #define F2 F*2
8 #define F2S FS*2
9 #define G2 G*2
10 #define G2S GS*2
11 #define A2 A*2
12 #define A2S AS*2
13 #define B2 B*2
14
15 //sem som
16 #define v 125000
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 25 / 1
Reproduc¸a˜o de Sons
1 v o i d main ( v o i d )
2 {
3 // i n i c i a l i z a c¸ a˜ o
4 uns igned char cont=0;
5 uns igned char pos=0;
6 // I m p e r i a l March (SW E p i s o d e V)
7 uns igned char tempo [ ] =
8 {50 , 10 , 50 , 10 , 50 , 10 , 50 , 5 , 25 , 5 ,
9 50 , 5 , 50 , 5 , 25 , 5 , 50 , 50 , 50 , 10 ,
10 50 , 10 , 50 , 10 , 50 , 5 , 25 , 5 , 50 , 5 ,
11 50 , 5 , 25 , 5 , 50 , 50 , 100 , 5 , 25 , 5 ,
12 25 , 10 , 100 , 5 , 50 , 5 , 25 , 2 , 10 , 2 ,
13 10 , 2 , 100 , 2 5 0} ;
14 uns igned i n t notas [ ] =
15 {G , v , G , v , G , v , E , v , B , v ,
16 G , v , E , v , B , v , G , v , D2S , v ,
17 D2S , v , D2S , v , E2 , v , B , v , FS , v ,
18 E , v , B , v , G , v , G2S , v , G , v ,
19 G , v , G2S , v , G2 , v , F2S , v , F2 , v ,
20 E2 , v , F2S , v } ;
21 InicializaPWM ( ) ;
22 InicializaTimer ( ) ;
23 // cont .
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 26 / 1
Reproduc¸a˜o de Sons
1 SetaFreqPWM ( notas [ 0 ] ) ;
2 SetaPWM1 ( 5 0 ) ; // g a r a n t e duty−c y c l e de 50%
3 // p l a y e r
4 f o r ( ; ; )
5 {
6 AguardaTimer ( ) ;
7 ResetaTimer (10000) ;
8 cont ++;
9 i f ( cont >= tempo [ pos ] )
10 {
11 i f ( pos<54){
12 pos++;
13 }
14 SetaFreqPWM ( notas [ pos ] ) ;
15 SetaPWM1 ( 5 0 ) ;
16 cont=0;
17 }
18
19 }
20 }
ELT024 Timer e Reproduc¸a˜o de Sons rodrigomax@unifei.edu.br 27 / 1

Outros materiais