Universidade Federal de Itajub´a
Rotina para envio de dados/comando para o LCD Para comando RS = 0; Para dados RS = 1; Habilitar a escrita (RW=1) ou leitura (RW=0) Acionar terminal EN (enable)
Delay para o LCD entender o comando Desabilita o terminal EN
Instru¸c˜ao RS RW Dados (bit) Tempo (m´ax.) 7 6 5 4 3 2 1 0 Limpa 0 0 0 0 0 0 0 0 0 1 37 us Reset 0 0 0 0 0 0 0 0 1 - 1.5ms Config. 0 0 0 0 0 0 0 1 ID S 37 us Config. 0 0 0 0 0 0 1 D C B 37 us Movim. 0 0 0 0 0 1 SC RL - - 37 us Config. 0 0 0 0 1 DL N F - - 37 us Move(l,c) 0 0 1 X 0 0 Coluna 37 us Ocup. 0 1 BF - - - 10 us
Defini¸c˜oes
ID: 1 – Incrementa, 0 – Decrementa
S: 1 – O display acompanha o deslocamento SC: 1 – Desloca o display, 0 – Desloca o cursor RL: 1 – Move para direita, 0 – Move para esquerda DL: 1 – 8 bits, 0 – 4 bits
N: 1 – 2 linhas, 0 – 1 linha
F: 1 – 5x10 pontos, 0 – 5x8 pontos BF: 1 – Ocupado, 0 – Dispon´ıvel X: 1 – 2a linha, 0 – 1a linha Coluna: nible que indica a coluna
Desenvolvimento da biblioteca
Cria¸c˜ao de rotinas de delay (2ms e 40us) Fun¸c˜ao para enviar comandos
Fun¸c˜ao para enviar dados Fun¸c˜ao de inicializa¸c˜ao
1 # i n c l u d e " b a s i c o . h " 2 # i n c l u d e " c o n f i g . h " 3 # i n c l u d e " lcd . h " 4 5 // i n ´ı c i o do p r o g r a m a 6 v o i d m a i n (v o i d) { 7 u n s i g n e d int i , j ; 8 c h a r msg [] = " H e l l o W o r l d ! "; 9 l c d I n i t () ; 10 for( i =0; i <11; i ++) { 11 l c d D a t a ( msg [ i ]) ; 12 for( j = 0; j < 6 5 0 0 0; j ++) ; 13 } 14 for( ; ; ) ; 15 }
Transdutores
Processo de convers˜ao anal´ogico digital Utiliza¸c˜ao de comparadores de tens˜ao Discretiza¸c˜ao do sinal
Sensor de ˆangulo (passivo)
Potenciˆometro como divisor de tens˜ao
VRL = VS∗ R2 R1+ R2 = VS∗ ( R2 RPot )
Conversor anal´ogico digital de 2 bits
5 4 3 2 1 00 01 10 11 Valor convertido para binário 3,75 2,50 1,25 5,00 V al or o rig in al , e m V ol ts Li m ite s d a co m pa ra çã o
LM35
Sensor ativo de temperatura
Entrega um sinal proporcional `a temperatura
Possui diversos circuitos internos de estabiliza¸c˜ao e corre¸c˜ao Mais simples e mais caro
Evita uso de CPU’s mais caras ou circuitos de interface (NTC/PTC)
VS = T ∗ 0.5(
mV
Lendo o sensor com um AD de 10 bits: Faixa de temperatura = -40 `a 150 graus
Faixa de tens˜ao do sensor = -400 `a 1500 milivolts Faixa de convers˜ao = 0 `a 1023
Faixa de tens˜ao do AD = 0 `a 5 volts Calcular fator de convers˜ao.
memória controle canal
>
valor término da conversão início conversor tensão incremento do valor entradas analógicas comparadorToda convers˜ao AD exige um determinado tempo. Para que o
microcontrolador realize corretamente a convers˜ao ´e necess´ario seguir os seguintes passos:
1 Configurar o conversor
2 Iniciar a convers˜ao
3 Aguardar o final da convers˜ao 4 Ler o valor
3 v o i d a d c I n i t (v o i d) { 4 B i t S e t ( TRISA ,0) ; // s e t a o b i t 0 c o m o e n t r a d a 5 A D C O N 0 = 0 b 0 0 0 0 0 0 0 1; // s e l e c i o n a o c a n a l 0 e l i g a o AD 6 A D C O N 1 = 0 b 0 0 0 0 1 1 1 0; // s´o A N 0 ´e a n a l ´o g i c o , r e f e r ^e n c i a na ←-f o n t e 7 A D C O N 2 = 0 b 1 0 1 0 1 0 1 0; // F O S C / 32 , A l i n h a d o `a d i r e i t a , t c = 12 ←-T A D 8 } 9 10 int a d c R e a d (v o i d) { 11 u n s i g n e d int A D v a l o r ; 12 B i t S e t ( ADCON0 ,1) ; // i n i c i a c o n v e r s ~a o 13 w h i l e( B i t T s t ( 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 ; 14 A D v a l o r = A D R E S H ; // l^e o r e s u l t a d o 15 A D v a l o r < <= 8; 16 A D v a l o r += A D R E S L ; 17 r e t u r n A D v a l o r ; 18 }
1 # i f n d e f A D C _ H
2 # d e f i n e A D C _ H
3 v o i d a d c I n i t (v o i d) ;
4 int a d c R e a d (v o i d) ;
3 # i n c l u d e " ssd . h " 4 # i n c l u d e " adc . h " 5 v o i d m a i n (v o i d) { 6 u n s i g n e d int i ; 7 int t e m p = 0; 8 s s d I n i t () ; 9 a d c I n i t () ; 10 for( ; ; ) { 11 t e m p = a d c R e a d () ; 12 s s d D i g i t (( t e m p / 1 0 0 0) %10, 3) ; 13 s s d D i g i t (( t e m p / 100 ) %10, 2) ; 14 s s d D i g i t (( t e m p / 10 ) %10, 1) ; 15 s s d D i g i t (( t e m p / 1 ) %10, 0) ; 16 s s d U p d a t e () ; 17 for( i = 0; i < 1 0 0 0; i ++) ; 18 } 19 }
10%
50%
Vantagens
Mais barato que uma sa´ıda anal´ogica
Pode ser transformado numa sa´ıda anal´ogica atrav´es de um filtro passa baixa
Para algumas situa¸c˜oes o filtro n˜ao ´e necess´ario2 Desvantagens
N˜ao ´e uma sa´ıda anal´ogica
2
Quando o dispositivo a ser controlado j´a possui um filtro passa baixa, normalmente por causa da sua constru¸c˜ao f´ısica. Ex: aquecimento por resistˆencias
Frequˆencia do PWM
Depende do circuito que implementa o PWM
Quanto mais alta melhor para simular uma sa´ıda anal´ogica Pode ser utilizada para sinaliza¸c˜ao sonora
C´alculo:
FrequenciaPWM = FOSC
[(PR2 ) + 1] ∗ 4 ∗ (TMR2Prescaler)
Para um cristal de 8 MHz podemos atingir frequˆencias de 488Hz at´e 2MHz
Problemas com frequˆencias muito altas: Perda de resolu¸c˜ao
ResolucaoPWM(max ) =
log(FOSC FPWM)
log(2) bits
Para frequˆencia de 2MHz3 a resolu¸c˜ao ´e de 2 bits, ou seja, podemos configurar o duty cycle apenas para 12.5%, 37.5%, 62.5% ou 87.5% do valor.
3
Conhecendo a quantidade de bits de resolu¸c˜ao dispon´ıveis para a frequˆencia escolhida podemos ajustar o duty-cycle de acordo com a express˜ao abaixo:
DutyCyclePWM = [CCPRxL : CCPxCON(5 : 4)]
(PR2 + 1) ∗ 4
O valor do duty cycle pode ser entendido como uma porcentagem do
memória reiniciar
>
controle início reinicia>
ligar VCC GNDPara configurar as sa´ıdas PWM devemos especificar: 1 Frequˆencia de trabalho atrav´es de PR25 e TCON2
2 Duty cycle em CCPR1L e CCPR2L
3 Configurar como sa´ıda em TRISC
4 Configurar a sa´ıda como PWM em CCP1CON e CCP2CON
5
O prescaler foi configurado para 16 bits de modo a obter a maior faixa de frequˆencia aud´ıvel.
3 4 v o i d p w m S e t 1 (u n s i g n e d c h a r p o r c e n t o ) { 5 6 // f o r m u l a do d u t y c y c l e : 7 // D C p o r c e n t o = V / (( P R 2 + 1 ) ∗ 4 ) ; 8 // V = DC / 1 0 0 ∗ ( P R 2 + 1 ) ∗ 4 ) = DC ∗ ( P R 2 + 1 ) / 25 9
10 u n s i g n e d int val = ((u n s i g n e d int) p o r c e n t o ) *( PR2 +1) ;
11 val = val / 25; 12 13 // g a r a n t e q u e t e m a p e n a s 10 b i t s 14 val &= 0 x 0 3 f f; 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 C C P R 1 L 17 C C P R 1 L = 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 C C P 1 C O N 20 C C P 1 C O N |= ( val & 0 x 0 0 0 3) < < 4;
1 v o i d p w m S e t 2 (u n s i g n e d c h a r p o r c e n t o ) { 2 u n s i g n e d int val = p o r c e n t o * PR2 ; 3 val /= 25; 4 val &= 0 x 0 3 f f; 5 C C P R 2 L = val > > 2; 6 C C P 2 C O N |= ( val & 0 x 0 0 0 3) < < 4; 7 } 8 v o i d p w m F r e q u e n c y (u n s i g n e d int f r e q ) { 9 // P R 2 = f o s c /( f p w m ∗ 4 ∗ p r e s c a l e r )−1 = ( 8 0 0 0 0 0 0 /( f r e q ∗ 4 ∗ 16 ) ) ←-− 1 10 PR2 = (1 2 5 0 0 0/( f r e q ) ) - 1; 11 } 12 13 v o i d p w m I n i t (v o i d) { 14 B i t C l r ( TRISC ,2) ; // c o n f i g u r a os p i n o s c o m o s a ´ı d a s 15 B i t C l r ( TRISC ,1) ; 16 T 2 C O N |= 0 b 0 0 0 0 0 0 1 1; // c o n f i g u r a o p r e s c a l e p a r a 1 : 16 17 B i t S e t ( T2CON ,2) ; // L i g a o t i m e r 2 18 C C P 1 C O N |= 0 b 0 0 0 0 1 1 0 0; // c o n f i g u r a C C P 1 c o m o um P W M 19 C C P 2 C O N |= 0 b 0 0 0 0 1 1 0 0; // c o n f i g u r a C C P 2 c o m o um P W M 20 }
1 # i f n d e f P W M _ H 2 # d e f i n e P W M _ H 3 v o i d p w m S e t 1 (u n s i g n e d c h a r p o r c e n t o ) ; 4 v o i d p w m S e t 2 (u n s i g n e d c h a r p o r c e n t o ) ; 5 v o i d p w m F r e q u e n c y (u n s i g n e d int f r e q ) ; 6 v o i d p w m I n i t (v o i d) ; 7 # e n d i f // P W M H
2 # i n c l u d e " p i c 1 8 f 4 5 2 0 . h " 3 # i n c l u d e " pwm . h " 4 # i n c l u d e " adc . h " 5 // i n ´ı c i o do p r o g r a m a 6 v o i d m a i n (v o i d) { 7 int v a l u e ; 8 p w m I n i t () ; 9 a d c I n i t () ; 10 for( ; ; ) { 11 v a l u e = a d c R e a d () ; 12 // a j u s t a n d o a f r e q u ^e n c i a de a c o r d o c o m e n t r a d a a n a l ´o g i c a 13 p w m F r e q u e n c y ( v a l u e ) ; 14 // a j u s t a n d o o duty−c y c l e p a r a 50 % 15 p w m S e t 1 (50) ; 16 } 17 }