Você está na página 1de 10

Prof.

Celso Villela - IFPR/TB

TEMPORIZADORES

Timer 0 Timer 2
configura T0CON configura T2CON
conta TMR0L e/ou TMR0H (8 ou 16 bits) compara TMR2 (8 bits) com PR2
avisa INTCON.TMR0IF avisa PIR1.TMR2IF
Compara TMR2 com PR2 e avisa se iguais e reinicia o TMR2
T0CON
B7 TMR0ON liga(1) ou desliga(0) o timer T2CON
B6 T08BIT 16 bits (0) ou 8 bits(1) B6 TOUTPS3 valor do postscaler de 1x até 16x (b6b5b4b3)
B5 T0CS clock interno(0) ou externo(1) - T0CKI(6) B5 TOUTPS2 0000 - 1x 0011 - 4x 0110 - 7x ...
B4 T0CE ativo na borda de descida(1) ou subida(0) B4 TOUTPS1 0001 - 2x 0100 - 5x 0111 - 8x 1110 - 15x
B3 PSA prescaler habilitado(0) ou não(1) B3 TOUTPS0 0010 -3x 0101 - 6x 1000 - 9x 1111 - 16x
B2 T0PS2 valor do prescaler de 2x até 256x (2^(b2b1b0 B2 TMR2ON liga(1) ou desliga(0) o timer
B1 T0PS1 000 - 2x 010 - 8x 100 - 32x 110 - 128x B1 T2CKPS1 valor do prescaler de 00 - 1X 10 - 16X
B0 T0PS0 001 - 4x 011 - 16x 101 -64x 111 - 256x B0 T2CKPS0 1x até 16x (2^b1b0) 01 - 4X 11 - 16X

tempo = (65536 - TMR0) * PRE * 4/Fosc tempo = PR2 * PRE * POST * 4/Fosc

Timer 1 Timer 3
configura T1CON configura T3CON
conta TMR1H e TMR1L (16 bits) conta TMR3H e TMR3L (16 bits)
avisa PIR1.TMR1IF avisa PIR2.TMR3IF

T1CON T3CON
B7 RD16 habilita leitura/escrita em 16 bits B7 RD16 habilita leitura/escrita em 16 bits
B6 T1RUN sinaliza que o timer está ativo B6 T3CCP2 conexão dos timers 1 e 3 aos módulos CCP
B5 T1CKPS1 valor do prescaler de 00 - 1X 10 - 4X B5 T3CKPS1 valor do prescaler de 00 - 1X 10 - 4X
B4 T1CKPS0 1x até 8x (2^b1b0) 01 - 2X 11 - 8X B4 T3CKPS0 1x até 8x (2^b1b0) 01 - 4X 11 - 8X
B3 T1OSCEN habilita osc. ext. - T1OSO(15) T1OSI(16) B3 T3CCP1 conexão dos timers 1 e 3 aos módulos CCP
B2 T1SYNC sincroniza (0) ou não(1) c/ clock int(Q4:Q1) B2 T3SYNC sincroniza (0) ou não(1) c/ clock int(Q4:Q1)
B1 TMR1CS clock interno(0) ou externo(1) - T13CKI(15) B1 TMR3CS clock interno(0) ou externo(1) - T13CKI(15)
B0 TMR1ON liga(1) ou desliga(0) o timer B0 TMR3ON liga(1) ou desliga(0) o timer

tempo = (65536 - TMR1H:TMR1L) * PRE * 4/Fosc tempo = (65536 - TMR3H:TMR3L) * PRE * 4/Fosc

Funções especiais do C18 (timers.h): Funções especiais do C18 (delays.h):


CloseTimerX() Delay1TCY() 1 ciclo de máquina
ReadTimerX() Delay10TCYx(n) 10*n ciclos de máquina
WriteTimerX() Delay100TCYx(n) 100*n ciclos de máquina
OpenTimerX(.....) Delay1KTCYx(n) 1000*n ciclos de máquina
Delay10KTCYx(n) 10000*n ciclos de máquina
ClrWdt() - Reinicia contador do WDT tempo = XX.n.CM
Delay<XX>TCYx ( n ) ==> define Fosc ou Tosc
n = tempo(s)/(XX.CM) CM = 4*Tosc

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

INTERRUPÇÃO
Celso Villela
Rotina de Tratamento de Interrupção (RTI): 2014/1
#pragma interrupt <identificador da função de retorno>
#pragma interruptlow <identificador da função de retorno>

#pragma code <id_alta> = 0x08 #pragma code <id_baixa> = 0x18


função primária função primária
#pragma code #pragma code

As RTI's não podem retornar nada, ou seja, devem ser declaradas como void.
Elas também não podem receber nada, ou seja, sem parâmetros.

A função primária pode fazer o tratamento da interrupção, mas normalmente não o faz.
Normalmente a função primária chama a rotina de tratamento propriamente dita.
A função primária pode analisar o motivo da interrupção e chamar a função correta para tratá-la.
Para chamar a função correta utiliza-se os comandos em assembly "BRA" ou "GOTO"
A função que efetivamente irá retornar para o fluxo normal do programa deverá ser declarada com "interrupt"
#pragma interrupt <função_retorno>
RCON.IPEN - Habilita(1) ou desabilita(0) as prioridades.

* Algumas interrupções necessitam que o bit INTCON.PEIE seja setado, habilitando as interrupções de periféricos.

INTCON INTCON2
B7 GIE/GIEH habilita as interrupções(1) B7 RBPU desabilita os pull-ups do PORTB
B6 PEIE/GIEL hab. as int. de periféricos ou baixas B6 INTEDG0 INT0: borda de subida(1)/descida(0)
B5 TMR0IE habilita a interrupção do TIMER 0 B5 INTEDG1 INT1: borda de subida(1)/descida(0)
B4 INT0IE habilita a int. externa 0 (INT0/RB0) B4 INTEDG2 INT2: borda de subida(1)/descida(0)
B3 RBIE hab. a int. por mudança de estado PORTB B3 -
B2 TMR0IF sinaliza a ocorrência da int. do TIMER 0 B2 TMR0IP prior. da int. TIMER 0: alta(1)/baixa(0)
B1 INT0IF sinaliza a int. externa 0 (INT0/RB0) B1 -
B0 RBIF sinaliza a int. no PORTB (RB7:RB4) B0 RBIP prior. da int. PORTB: alta(1)/baixa(0)

INTCON3 EVENTO FLAG ENABLE PRIORITY


B7 INT2IP prior. da int. INT2: alta(1)/baixa(0) INTCON INTCON INTCON2
B6 INT1IP prior. da int. INT1: alta(1)/baixa(0) INT0 INT0IF INT0IE -
B5 - TIMER 0 TMR0IF TMR0IE TMR0IP
B4 INT2IE habilita a int. externa 2 (INT2/RB2) PORTB RBIF RBIE RBIP
B3 INT1IE habilita a int. externa 1 (INT1/RB1) INTCON3 INTCON3 INTCON3
B2 - INT1 INT1IF INT1IE INT1IP
B1 INT2IF sinaliza a int. externa 2 (INT2/RB2) INT2 INT2IF INT2IE INT2IP
B0 INT1IF sinaliza a int. externa 1 (INT1/RB1)

EVENTO FLAG ENABLE PRIORITY EVENTO FLAG ENABLE PRIORITY


PIR1 PIE1 IPR1 PIR2 PIE2 IPR2
R/D PARALELA PSPIF PSPIE PSPIP FALHA OSCILADOR OSCFIF OSCFIE OSCFIP
A/D COMPLETA ADIF ADIE ADIP COMPARADOR CMIF CMIE CMIP
RX SERIAL USART RCIF RCIE RCIP TÉRM. ESC. E²PROM EEIF EEIE EEIP
TX SERIAL TXIF TXIE TXIP COL. BUSS SPI BCLIF BCLIE BCLIP
TX/RX COMP. MSSP SSPIF SSPIE SSPIP BAIXA TENSÃO HLVDIF HLVDIE HLVDIP
MÓDULO CCP1 CCP1IF CCP1IE CCP1IP TIMER 3 TMR3IF TMR3IE TMR3IP
TIMER 2 TMR2IF TMR2IE TMR2IP MÓDULO CCP2 CCP2IF CCP2IE CCP2IP
TIMER 1 TMR1IF TMR1IE TMR1IP

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

LCD - Display de Cristal Líquido

Pinagem
Pino Nome Função
15 A Anodo da iluminação de Fundo (+)
16 K Catodo da iluminação de Fundo (-)
1 VSS Alimentação negativa (GND)
2 VDD Alimentação positiva (+5Vcc)
3 VD Ajuste de contraste
4 RS Registro de Seleção (0-comando / 1-dado)
5 RW ReadWrite (0 - Escrita / 1 -Leitura)
6 E Enable (habilita dado na borda descida)
7 DB0 SEM CONEXÃO 80 81 ............... 8E 8F

Barramento de dados
8 DB1 SEM CONEXÃO C0 C1 ............... CE CF
9 DB2 SEM CONEXÃO

(8 bits)
10 DB3 SEM CONEXÃO 1º DB 0...7 DADO
11 DB4 2º Enable 1

Barramento
de dados
(4 bits)
12 DB5 3º RS 0/1
13 DB6 4º RW 0
14 DB7 5º Enable 0

OPERAÇÃO D7 D6 D5 D4 D3 D2 D1 D0
Nenhuma 0 0 0 0 0 0 0 0
Limpa LCD e posiciona no início(80) 0 0 0 0 0 0 0 1
Posiciona no início(80) 0 0 0 0 0 0 1 X
Direção(ID) e deslocamento(S) 0 0 0 0 0 1 ID S
Liga LCD(D), cursor(C) e piscante(B) 0 0 0 0 1 D C B
Move dsp ou cursor(SC) na direção(RL) 0 0 0 1 SC RL X X
Nº de bits(DL), linhas(N), fonte(F) 0 0 1 DL N F X X
Seta o endereço da GGRAM 0 1 endereço CGRAM
Seta o endereço da DDRAM 1 endereço DDRAM

LEGENDA INICIALIZAÇÃO - 8 BITS


ID incrementa(1) / decrementa(0) aguarda 20ms ESTABILIZAÇÃO
S desloca automático do display(1) envia 30h CONFIGURAÇÃO
D display ligado(1) ou desligado(0) envia 38h LARGURA DADOS E MATRIX
C cursor ligado(1) ou desligado(0) envia 0Fh LIGA DISPLAY E CURSOR
B cursor picando(1) envia 06h DESLOCAM. DSP E CURSOR
SC move display(1) ou cursor(0) envia 01h LIMPA DDRAM E POSICIONA
X irrelevante INICIALIZAÇÃO - 4 BITS*
RL desloca p/ direita(1) ou esquerda(0) aguarda 20ms ESTABILIZAÇÃO
DL comunicação 8 bits(1) ou 4 bits(0) envia 32h CONFIGURAÇÃO
N 2 linhas(1) ou 1 linha(0) envia 28h LARGURA DADOS E MATRIX
F matrix de caracteres 5x10(1) ou 5x7(0) envia 0Fh LIGA DISPLAY E CURSOR
DDRAM memória de dados do display envia 06h DESLOCAM. DSP E CURSOR
CGRAM geração gráfica de caracteres envia 01h LIMPA DDRAM E POSICIONA
* Em 4 bits, primeiramante enviamos a parte alta e
depois a parte baixa

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

Conversor A/D
Tempo de Aquisição (Taq) : tempo necessário para carga do capacitor de amostragem Taq = 1.75 uS
Resolução de 10 bits
Tempo de conversão de cada bit (Tad): Para o 18F4520 ===> Tad = 0.7uS Usar Tad = 1uS

Taq = 2*Tad Utilizamos : Taq = 4*Tad

Tad = n * Tosc = n * 1/Fosc = n/Fosc n > Fosc * Tad Tad(total) = 11 * Tad

Para n=1 utilizar oscilador RC interno fad = 1/Tad ---> clock do ADC fad < 1.43MHz

ADCON0 ADCON1
B5 CHS3 B5 VCFG1 Vref(-) externo(1)=AN2 / Vss(0)
B4 CHS2 Seleção do canal analógico B4 VCFG0 Vref(+) externo(1)=AN3 / Vdd(0)
B3 CHS1 (AN0 - AN12) B3 PCFG3 (15-n) conversores habilitados
B2 CHS0 B2 PCFG2 Ex.: n=1000 = 8 --> 15-8 = 7 conversores
B1 GO/DONE Estado da conversão / Início da conversão B1 PCFG1 AN0 a AN6 --> entradas analógicas
B0 ADON Habilita o conversor A/D B0 PCFG0 AN7 a AN12 --> entradas digitais

ADCON2 V(1bit) = Vref / ( 2^(nº bits) - 1 )


B7 ADFM Formato conversão: dir(1) / esq(0) V(1bit) = Vref / 1023 ----> resolução de 10 bits
B6 -
B5 ACQT2 Tempo de Aquisição (Taq) Conversão ---> ADRES ou ADRESH:ADRESL
B4 ACQT1 n = 0,2,4,6,8,12,16 ou 20 Para 8 bits usar ADRESH c/ ADCON2.ADFM=0
B3 ACQT0 Taq = n * Tad
B2 ADCS2 clock do ADC = Fosc/n Vin = ADRES * Vref / 1023
B1 ADCS1 n = 2,8,32,RC,4,16,64 ou RC
B0 ADCS0 Depende do Tad ADRES = 1023 * [Vin - Vref(-)] / [Vref(+) - Vref(-)]

Configuração do A/D: Conversão:


1 - Clock do ADC --> ADCON2 1 - Habilita e seleciona o canal --> ADCON0
2 - Formato da conversão --> ADCON2 2 - Dispara a conversão --> ADCON0.GO = 1
3 - Tempo de aquisição --> ADCON2 3 - Aguarda o fim da conversão:
4 - Desabilita interrupção --> PIE1.ADIE ADCON0.DONE=0
5 - Vref(+) --> ADCON1.VCFG0 ou PIR1.ADIF=1
6 - Vref(-) --> ADCON1.VCFG1 4 - Ler registro ADRES (ADRESH : ADRESL)
7 - Quantidade de canais --> ADCON1
8 - Portas do AD como entradas --> TRISx

Comunicação Serial - UART (software)

getcUART char getcUART() Lê um byte da USART


C18 - sw_uart.h

getsUART void getsUART(char *string, comprimento) Lê uma string da USART


OpenUART void OpenUART() Configura a USART
putcUART void putcUART(char data) Envia um byte pela USART
putsUART void putsUART(char *data) Envia uma string pela USART
ReadUART char ReadUART( void ) Lê um byte da USART
WriteUART void WriteUART( char data ) Envia um byte pela USART

void DelayTXBitUART() void DelayRXHalfBitUART()

atraso = − 11.5 atraso = − 8.5


∗ ∗

void DelayRXBitUART() PINOS


RxD RB5
atraso = − 13.5
∗ TxD RB4

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

1,2
1
0,8
Tensão Eficaz (rms)
0,6 em função do
0,4
ângulo de disparo
Amplitude

0,2
0
do TRIAC
-0,2 0 45 90 135 180 225 270 315 360

-0,4 α
-0,6
-0,8
-1
= ( − + )
-1,2
ângulo

ângulo(º) Vrms Percentual ângulo(º) Vrms Percentual ângulo(º) Vrms Percentual


0 127,0 100,0% 65 110,8 87,2% 130 44,2 34,8%
5 127,0 100,0% 70 107,3 84,5% 135 38,3 30,1%
10 126,9 99,9% 75 103,4 81,4% 140 32,5 25,6%
15 126,8 99,8% 80 99,2 78,1% 145 26,9 21,2%
20 126,4 99,6% 85 94,6 74,5% 150 21,6 17,0%
25 125,9 99,1% 90 89,8 70,7% 155 16,5 13,0%
30 125,2 98,5% 95 84,7 66,7% 160 11,9 9,4%
35 124,1 97,7% 100 79,3 62,5% 165 7,8 6,1%
40 122,8 96,7% 105 73,7 58,1% 170 4,3 3,3%
45 121,1 95,3% 110 68,0 53,5% 175 1,5 1,2%
50 119,1 93,8% 115 62,1 48,9% 180 0,0 0,0%
55 116,7 91,9% 120 56,2 44,2%
60 113,9 89,7% 125 50,2 39,5%

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

COMUNICAÇÃO SERIAL - USART


Paralela
Comunicação : Síncrona: I²C, SPI, EUSART(half-duplex) RS-232
Serial +25V
0
Assíncrona: EUSART(full-duplex) +3V
-3V
1
TXSTA - Controle e status de transmissão -25V
RCSTA - Controle e status de recepção
BAUDCON - Controle da taxa de transmissão/recepção (baud rate) DB9 - MACHO
TXREG - Buffer de transmissão MICRO ( DTE )
RCREG - Buffer de recepção RxD 2
SPBRG - Gerador de taxa de transmissão - parte baixa TxD 3
SPBRGH - Gerador de taxa de transmissão - parte alta caso BRG16=1 GND 5

TXSTA DB9 - FÊMEA


B7 CSRC seleção da fonte de clock no modo síncrono: mestre(1) ou escravo(0) MODEM ( DCE )
B6 TX9 habilita a transmissão em 9 bits RxD 3
B5 TXEN habilita a transmissão TxD 2
B4 SYNC seleção do modo de operação: síncrono(1) ou assíncrono(0) GND 5
B3 SENDB envia caracter de sincronismo (55h) na próxima transmissão
B2 BRGH habilita alta velocidade no modo assíncrono VELOCIDADE
B1 TRMT situação do registrador de deslocamento: vazio(1) ou ocupado(0) BRG16 0
B0 TX9D nono bit de dado, que pode ser o de paridade BRGH 0

RCSTA ∗ +
B7 SPEN habilita a porta serial --> pinos RC6 e RC7 são configurados.
B6 RX9 habilita a recepção em 9 bits VELOCIDADE
B5 SREN como mestre no modo síncrono, habilita a recepção unitária BRG16 0
B4 CREN habilita a recepção BRGH 1
B3 ADDEN em 9 bits e modo assíncrono, habilita o sistema de endereçamento
B2 FERR sinaliza erro no recebimento do "stop bit" ∗ +
B1 OERR erro de "overrun" ou transbordamento
B0 RX9D nono bit de dado, que pode ser o de paridade VELOCIDADE
BRG16 1
BAUDCON BRGH 0
B7 ABDOVF sinaliza erro na auto-detecção da taxa de transmissão
B6 RCIDL sinaliza o estado da recepção: livre(1) ou ativo(0) ∗ +
B5 RXDTP configura RX ou DT invertidos de polaridade
B4 TXCKP configura TX ou CK invertidos de polaridade VELOCIDADE
B3 BRG16 habilita registrador de baud rate de 16 bits (SPBRGH:SPBRG) BRG16 1
B2 - BRGH 1
B1 WUE habilita a saída do modo sleep através de uma borda de desc. em RX
B0 ABDEN habilita o modo de detecção da taxa de transmissão (baud rate) ∗ +

PIR1.RCIF - SINALIZA A RECEPÇÃO SERIAL BRG16 BRGH Vmín Vmáx


PIR1.TXIF - SINALIZA A TRANSMISSÃO SERIAL 0 0 732 187500
PIE1.RCIE - HABILITA A INTERRUPÇÃO PARA A RECEPÇÃO 0 1 2930 750000
PIE1.TXIE - HABILITA A INTERRUPÇÃO PARA A TRANSMISSÃO 1 0 11 750000
IPR1.RCIP - PRIORIDADE DA INTERRUPÇÃO DA RECEPÇÃO 1 1 46 3000000
IPR1.TXIP - PRIORIDADE DA INTERRUPÇÃO DA TRANSMISSÃO * Fosc = 12MHz

COMPIM -COMPONENTE DO PROTEUS PARA COMUNICAÇÃO SERIAL

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

USART
Fosc(MHz) 20
Baud(bps) 19200
BAUDCON TXSTA SPBRG
BRG16 BRGH CALCULADO UTILIZADO VELOC. ERRO
0 0 15,3 15 19531,3 1,7%
0 1 64,1 64 19230,8 0,2%
1 0 64,1 64 19230,8 0,2%
1 1 259,4 259 19230,8 0,2%

A partir da velocidade desejada(baud rate)


determina-se o valor teórico do registrador
. .
SPBRG. Com o valor real de SPBRG e % =
.
recalculasse a velocidade. O erro não pode
ser superior a 5%.

TRANSMISSÃO
1 Carregar o registrador SPBRG e setar os bits BRG16 e o BRGH;
2 Habilitar o modo assíncrono: TXSTA.SYNC = 0;
3 Habilitar os pinos para comunicação: RCSTA.SPEN = 1;
4 Caso utilize interrupções, configurar PIE1.TXIE, INTCON.GIE e INTCON.PEIE;
5 Configurar transmissão em 8 ou 9 bits em TXSTA.TX9;
6 Habilitar a transmissão: TXSTA.TXEN = 1. O bit PIR1.TXIF irá para '1';
7 Caso utilize 9 bits, carregar TXSTA.TX9D;
8 Carregar byte de dado em TXREG para começar a transmissão.

RECEPÇÃO
1 Carregar o registrador SPBRG e setar os bits BRG16 e o BRGH;
2 Habilitar o modo assíncrono: TXSTA.SYNC = 0;
3 Habilitar os pinos para comunicação: RCSTA.SPEN = 1;
4 Caso utilize interrupções, configurar PIE1.RCIE, INTCON.GIE e INTCON.PEIE;
5 Configurar recepção em 8 ou 9 bits em RCSTA.RX9;
6 Habilitar a recepção: RCSTA.CREN = 1. PIR1.RCIF irá para '1' assim que RX ocorrer;
7 Ler o nono bit em RCSTA.RX9D e verificar se há algum erro;
8 Ler dado recebido em RCREG;

C18 - usart.h
BusyUSART char BusyUSART() "1" se a USART está transmitindo
CloseUSART void CloseUSART() Desabilita a USART
DataRdyUSART char DataRdyUSART() Retorna "1" se um byte foi recebido
getcUSART char getcUSART() Lê um byte da USART
getsUSART void getsUSART(char *string, comprimento) Lê uma string da USART
OpenUSART void OpenUSART(config, spbrg) Configura a USART
putcUSART void putcUSART(char data) Envia um byte pela USART
putsUSART void putsUSART(char *data) Envia uma string pela USART
putrsUSART void putrsUSART( const rom char *data ) Envia um string da FLASH pela USART
ReadUSART char ReadUSART( void ) Lê um byte da USART
WriteUSART void WriteUSART( char data ) Envia um byte pela USART
baudUSART baudUSART(char config) Configura a taxa de transmissão

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

ACESSO À EEPROM
Tamanho: 256 bytes - Endereço de 8 bits ( 0 - 255);

Registradores:
EECON1 - Registrador de controle: memória, operação e ERRO;
EEADR - Registrador de endereçamento para leitura e escrita;
EEDATA - Registrador com dado lido ou a ser escrito;

EECON1
B7 EEPGD Acesso à memória Flash(1) ou EEPROM(0);
B6 CFGS Acesso ao registro de CONFIG(1) ou às memórias(0) EEPROM ou Flash;
B5 -
B4 FREE Seleciona operação de apagamento de uma linha da memória Flash;
B3 WRERR Sinaliza ERRO durante o processo de escrita;
B2 WREN Habilita a escrita(1) ou a leitura(0) da memória;
B1 WR Inicia a escrita(1) e sinaliza a conclusão do ciclo de escrita(0);
B0 RD Inicia a leitura(1) e sinaliza a conclusão do ciclo de leitura(0);

Gravação
1 Carregar o registrador EEADR com o endereço de gravação (8bits - 0 a 255);
2 Carregar o byte a ser escrito no registrador EEDATA;
3 Selecionar o tipo de memória: EECON1.EEPGD = 0 e EECON1.CFGS = 0;
4 Habilitar a escrita na memória: EECON1.WREN = 1;
5 Desabilitar a interrupção global: INTCON.GIEH = 0;
6 Carregar a senha de acesso: EECON2 = 55h e EECON2 = AAh sequencialmente;
7 Dispara a escrita: EECON1.WR = 1;
8 Habilitar a interrupção global: INTCON.GIEH = 1;
9 Aguardar até que o bit EECON1.WR vá para zero (0) --> 2mS;
10 Verificar se houve erro: EECON1.WRERR = 1;

Leitura
1 Carregar o registrador EEADR com o endereço de leitura (8bits - 0 a 255);
2 Selecionar o tipo de memória: EECON1.EEPGD = 0 e EECON1.CFGS = 0;
3 Habilitar a leitura na memória: EECON1.WREN = 0;
4 Dispara a leitura: EECON1.RD = 1;
5 Aguardar até que o bit EECON1.RD vá para zero (0) --> 1 ciclo de máquina;
6 Ler dado em EEDATA;

PIR2.EEIF - Sinaliza conclusão da escrita na memória EEPROM;


PIE2.EEIE - Habilita a interrupção de gravação na EEPROM;
IPR2.EEIP - Seta a prioridade da interrupção de escrita na EEPROM;

Obs.: Como a escrita na EEPROM é um processo lento, aconselha-se utilizar uma rotina de
interrupção quando desejar gravar uma conjunto de bytes na nela.

celsovillela@hotmail.com
Prof. Celso Villela - IFPR/TB

PWM
1
=
T PWM = (PR2+1) * PRE * CM

f PWM = 1/T PWM

2=0 2= 2
2 = CONTROLE

Prof. Celso Villela - IFPR/TB


Prof. Celso Villela - IFPR/TB

## 64 32 16 8 4 2 1

ANODO COMUM
a símbolo pd g f e d c b a hexa dec
0 1 1 0 0 0 0 0 0 C0 192
f b 1 1 1 1 1 1 0 0 1 F9 249
2 1 0 1 0 0 1 0 0 A4 164
g 3 1 0 1 1 0 0 0 0 B0 176
4 1 0 0 1 1 0 0 1 99 153
e c 5 1 0 0 1 0 0 1 0 92 146
6 1 0 0 0 0 0 1 0 82 130
d 7 1 1 1 1 1 0 0 0 F8 248
pd 8 1 0 0 0 0 0 0 0 80 128
9 1 0 0 1 0 0 0 0 90 144
A 1 0 0 0 1 0 0 0 88 136
B 1 0 0 0 0 0 1 1 83 131
C 1 1 0 0 0 1 1 0 C6 198
D 1 0 1 0 0 0 0 1 A1 161
E 1 0 0 0 0 1 1 0 86 134
F 1 0 0 0 1 1 1 0 8E 142
- 1 0 1 1 1 1 1 1 BF 191
º 1 0 0 1 1 1 0 0 9C 156
N 1 0 1 0 1 0 1 1 AB 171
I 1 1 0 0 1 1 1 1 CF 207

## 64 32 16 8 4 2 1
CATODO COMUM
símbolo pd g f e d c b a hexa dec
0 0 0 1 1 1 1 1 1 3F 63
1 0 0 0 0 0 1 1 0 6 6
2 0 1 0 1 1 0 1 1 5B 91
3 0 1 0 0 1 1 1 1 4F 79
4 0 1 1 0 0 1 1 0 66 102
5 0 1 1 0 1 1 0 1 6D 109
6 0 1 1 1 1 1 0 1 7D 125
7 0 0 0 0 0 1 1 1 7 7
8 0 1 1 1 1 1 1 1 7F 127
9 0 1 1 0 1 1 1 1 6F 111
A 0 1 1 1 0 1 1 1 77 119
B 0 1 1 1 1 1 0 0 7C 124
C 0 0 1 1 1 0 0 1 39 57
D 0 1 0 1 1 1 1 0 5E 94
E 0 1 1 1 1 0 0 1 79 121
F 0 1 1 1 0 0 0 1 71 113
- 0 1 0 0 0 0 0 0 40 64
º 0 1 1 0 0 0 1 1 63 99

celsovillela@hotmail.com

Você também pode gostar