Escolar Documentos
Profissional Documentos
Cultura Documentos
Rodrigo Almeida
rodrigomax@unifei.edu.br
Revisão
Display de LCD
1
Para melhor uso é interessante retornar os terminais para o valor que tinham antes
de chamar a rotina, já que eles estão multiplexados com outros dispositivos
ECOP04 Conversor AD e Saı́das PWM rodrigomax@unifei.edu.br 3 / 37
Revisão
Display de LCD
Display de LCD
Definições
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
Display de LCD
Desenvolvimento da biblioteca
Criação de rotinas de delay (2ms e 40us)
Função para enviar comandos
Função para enviar dados
Função de inicialização
Display de LCD
Conversor AD
Conversor AD
Transdutores
Processo de conversão analógico digital
Utilização de comparadores de tensão
Discretização do sinal
Conversor AD
Sensor de ângulo (passivo)
VS ∗ R2 R2
VRL = = VS ∗ ( )
R1 + R2 RPot
ECOP04 Conversor AD e Saı́das PWM rodrigomax@unifei.edu.br 10 / 37
Conversor AD
Conversor AD
Conversor AD
5 5,00
Limites da comparação
11
4
3 10
2,50
2 01
1,25
1
00
Valor convertido
para binário
Conversor AD
LM35
Sensor ativo de temperatura
Entrega um sinal proporcional à temperatura
Possui diversos circuitos internos de estabilização e correção
Mais simples e mais caro
Evita uso de CPU’s mais caras ou circuitos de interface (NTC/PTC)
mV
VS = T ∗ 0.5( oC
)
Conversor AD
Conversor AD
Conversor AD
comparador memória
controle
início
entradas
analógicas
incremento do valor
valor
conversor tensão
canal
Conversor AD
Conversor AD
Conversor AD
1 # ifndef ADC_H
2 # define ADC_H
3 void adcInit ( void ) ;
4 int adcRead ( void ) ;
5 # endif // A D C H
Conversor AD
Saı́das PWM
Saı́das PWM
Início do
Baixo: Saída desligada
ciclo
Alto: Saída ligada
10%
50%
90%
Saı́das PWM
Vantagens
Mais barato que uma saı́da analógica
Pode ser transformado numa saı́da analógica através de um filtro passa
baixa
Para algumas situações o filtro não é necessário2
Desvantagens
Não é uma saı́da analógica
2
Quando o dispositivo a ser controlado já possui um filtro passa baixa, normalmente
por causa da sua construção fı́sica. Ex: aquecimento por resistências
ECOP04 Conversor AD e Saı́das PWM rodrigomax@unifei.edu.br 24 / 37
Saı́das PWM
Saı́das PWM
Saı́das PWM
Saı́das PWM
Frequência do PWM
Depende do circuito que implementa o PWM
Quanto mais alta melhor para simular uma saı́da analógica
Pode ser utilizada para sinalização sonora
Cálculo:
FOSC
FrequenciaPWM =
[(PR2 ) + 1] ∗ 4 ∗ (TMR2 Prescaler )
Saı́das PWM
log( FFPWM
OSC
)
Resolucao PWM (max) = bits
log(2)
3
Frequência máxima com um clock de 8MHz
ECOP04 Conversor AD e Saı́das PWM rodrigomax@unifei.edu.br 28 / 37
Saı́das PWM
Saı́das PWM
4
Na realidade 1023=99,95%, devido aos efeitos de discretização do circuito digital
ECOP04 Conversor AD e Saı́das PWM rodrigomax@unifei.edu.br 29 / 37
Saı́das PWM
Saı́das PWM
memória
reinicia início
VCC controle
>
reiniciar
>
ligar
GND
Saı́das PWM
5
O prescaler foi configurado para 16 bits de modo a obter a maior faixa de frequência
audı́vel.
ECOP04 Conversor AD e Saı́das PWM rodrigomax@unifei.edu.br 32 / 37
Criação da biblioteca para as saı́das PWM
Saı́das PWM
1 # include " pwm . h "
2 # include " pic18f4520 . h "
3
4 void pwmSet1 ( unsigned char porcento ) {
5
6 // formula do duty cycle :
7 // D C p o r c e n t o = V / (( PR2 + 1 ) ∗ 4 ) ;
8 // V = DC / 100 ∗ ( PR2 + 1 ) ∗ 4 ) = DC ∗ ( PR2 + 1 ) / 25
9
10 unsigned int val = (( unsigned int ) porcento ) *( PR2 + 1 ) ;
11 val = val / 25 ;
12
13 // garante que tem apenas 10 bits
14 val &= 0x03ff ;
15
16 // os 8 p r i m e i r o s bits s~
a o c o l o c a d o s no CCPR1L
17 CCPR1L = val >> 2 ;
18
19 // os últimos dois s~
a o c o l o c a d o s na posiç~
a o 5 e 4 do CCP1CON
20 CCP1CON |= ( val & 0x0003 ) << 4 ;
21 }
Saı́das PWM
1 void pwmSet2 ( unsigned char porcento ) {
2 unsigned int val = porcento * PR2 ;
3 val /= 25 ;
4 val &= 0x03ff ;
5 CCPR2L = val >> 2 ;
6 CCP2CON |= ( val & 0x0003 ) << 4 ;
7 }
8 void pwmFrequency ( unsigned int freq ) {
9 // PR2 = fosc /( fpwm ∗ 4 ∗ p r e s c a l e r )−1 = ( 8000000 /( freq ∗ 4 ∗ 16 ) ) ←-
− 1
10 PR2 = ( 125000 /( freq ) ) - 1 ;
11 }
12
13 void pwmInit ( void ) {
14 BitClr ( TRISC , 2 ) ; // c o n f i g u r a os pinos como saı́das
15 BitClr ( TRISC , 1 ) ;
16 T2CON |= 0b00000011 ; // c o n f i g u r a o p r e s c a l e para 1 : 16
17 BitSet ( T2CON , 2 ) ; // Liga o timer 2
18 CCP1CON |= 0b00001100 ; // c o n f i g u r a CCP1 como um PWM
19 CCP2CON |= 0b00001100 ; // c o n f i g u r a CCP2 como um PWM
20 }
Saı́das PWM
1 # ifndef PWM_H
2 # define PWM_H
3 void pwmSet1 ( unsigned char porcento ) ;
4 void pwmSet2 ( unsigned char porcento ) ;
5 void pwmFrequency ( unsigned int freq ) ;
6 void pwmInit ( void ) ;
7 # endif // P W M H
Saı́das PWM
Saı́das PWM