Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Microcontrolador PIC18F4520, Notas de estudo de Microcontroladores

Estudo de microcontroladores pic18f4520

Tipologia: Notas de estudo

2019

Compartilhado em 22/09/2019

mestre-jogos
mestre-jogos 🇧🇷

4

(2)

3 documentos

1 / 13

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Errata - Editora Érica Ltda. 1
Errata
Livro: Microcontroladores PIC18 com Linguagem C
Uma Abordagem Prática e Objetiva
Edição: 1ª edição
Código: 285A
Autor: Wagner da Silva Zanco
Página 7 - Dedicatória
Onde se lê:
Aos meus professores e amigos Dr. Andrés Pablo López Barbero e Dr. Ricardo Marquez Ribeiro. Ao meu amigo M.Sc.
Odair da Silva Xavier.
Leia:
Aos meus professores e amigos Dr. Andrés Pablo López Barbero e Dr. Ricardo Marques Ribeiro. Ao meu amigo M.Sc.
Odair da Silva Xavier.
Página 8 - Quinto parágrafo
Onde se lê:
Aos meus professores Dr. Andrés Pablo e Dr. Ricardo Marques e a todos os meus colegas do mestrado, em especial
aos amigos Odair José e Nelson de Assis, pelo apoio no desenvolvimento desta obra.
Leia:
Aos meus professores Dr. Andrés Pablo e Dr. Ricardo Marques e a todos os meus colegas do mestrado, em especial
aos amigos Odair Xavier e Nelson de Assis, pelo apoio no desenvolvimento desta obra.
Página 34 - Terceiro parágrafo
Onde se lê:
Um oscilador externo pode ser conectado ao pino OSC1 com uma das seguintes opções: HS, XT ou LP habilitada.
Leia:
Um oscilador externo pode ser conectado ao pino OSC1 com uma das seguintes opções: EC, ECIO ou HS habilitada.
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Pré-visualização parcial do texto

Baixe Microcontrolador PIC18F4520 e outras Notas de estudo em PDF para Microcontroladores, somente na Docsity!

Errata

Livro: Microcontroladores PIC18 com Linguagem C

Uma Abordagem Prática e Objetiva

Edição: 1ª edição

Código: 285A

Autor: Wagner da Silva Zanco

Página 7 - Dedicatória

Onde se lê:

Aos meus professores e amigos Dr. Andrés Pablo López Barbero e Dr. Ricardo Marquez Ribeiro. Ao meu amigo M.Sc.

Odair da Silva Xavier.

Leia:

Aos meus professores e amigos Dr. Andrés Pablo López Barbero e Dr. Ricardo Marques Ribeiro. Ao meu amigo M.Sc.

Odair da Silva Xavier.

Página 8 - Quinto parágrafo

Onde se lê:

Aos meus professores Dr. Andrés Pablo e Dr. Ricardo Marques e a todos os meus colegas do mestrado, em especial

aos amigos Odair José e Nelson de Assis, pelo apoio no desenvolvimento desta obra.

Leia:

Aos meus professores Dr. Andrés Pablo e Dr. Ricardo Marques e a todos os meus colegas do mestrado, em especial

aos amigos Odair Xavier e Nelson de Assis, pelo apoio no desenvolvimento desta obra.

Página 34 - Terceiro parágrafo

Onde se lê:

Um oscilador externo pode ser conectado ao pino OSC1 com uma das seguintes opções: HS, XT ou LP habilitada.

Leia:

Um oscilador externo pode ser conectado ao pino OSC1 com uma das seguintes opções: EC, ECIO ou HS habilitada.

Página 35-36 - Bit 1:

Onde se lê:

Bit 1:0: SCS1:SCS0 : bits de seleção do sistema de clock

1x: osciladores internos x1:

oscilador secundário

11: oscilador principal

Leia:

Bit 1:0: SCS1:SCS0 : bits de seleção do sistema de clock

1x: osciladores internos

01: oscilador secundário

00: oscilador principal

Página 45 - Item 3.

Onde se lê:

Em funcionamento normal, o pino /MCLR (Master Clear) precisa estar recebendo nível '1'. Quando o nível lógico

nele é forçado a '0', o microcontrolador é resetado e só sai do Reset quando o nível lógico retornar a '1'. A Figura

3.2 é uma proposta para o hardware a ser conectado ao pino /MCLR, incluindo o botão Reset. Observe que o

circuito é o mesmo da Figura 3.2, com a adição do botão Reset, cuja função é resetar o microcontrolador quando

for pressionado.

Leia:

Em funcionamento normal, o pino /MCLR (Master Clear) precisa estar recebendo nível '1'. Quando o nível lógico nele é forçado a '0', o microcontrolador é resetado e só sai do Reset quando o nível lógico retornar a '1'. A Figura

3.2 é uma proposta para o hardware a ser conectado ao pino /MCLR, incluindo o botão Reset. Observe que o

circuito é o mesmo da Figura 3.1, com a adição do botão Reset, cuja função é resetar o microcontrolador quando

for pressionado.

Página 50 - Quarto parágrafo

Onde se lê:

No POR porque bit /RBPU é inicializado com nível lógico '1', que desabilita os resistores de pull-up. Os pinos do Port

B são configurados como entradas digitais. A fração de código a seguir mostra como inicializar o Port B. Veja que

todos os pinos do Port B foram configurados como pinos de saída. Observe que mesmo o registrador INTCON

não tendo sido inicializado, os resistores de pull-ups estão desabilitados no POR porque bit /RBPU é inicializado

com nível lógico '1', que desabilita os resistores de pull-up.

Página 115 - Item 8.1.

Onde se lê:

Switch(expressão) { case constante1: sequência de comandos; break;

case constante2: sequência de comandos; break; . .

. default: sequência de comandos; }

Leia:

switch(expressão) { case constante1: sequência de comandos; break;

case constante2: sequência de comandos; break; . .

. default: sequência de comandos; }

Página 117 - Função trata_tec()

Substituir por:

void trata_tec (int x) { int y = 0; { case 1: 2: 3: menor ou igual a 3 \n "); break;

case 4: y = 1;

case 5: If(y==1) printf("x eh igual a 4 \n "); printf("x eh igual a 5 \n "); //sair do comando switch

default: printf("valor de x desconhecido \n"); } }

//função trata_tec

//declaração de variável local inicializada switch(x)

//sequência de comando em comum case // sequência de comando em comum case // sequência de comando em comum printf("x eh //envia p ara a UART que x <= 3. //sair do comando switch

//valor de x =4? //sim, y = 1

//valor de x =5? //sim, envia para a UART que x = 4 se y=1. else //não, envia para a UART que x = 5 se y=0 break;

// não houve coincidência //envia p ara a UART q ue valor de x é desconhecido.

Página 221 - Fluxograma

  • Página 274 - Bit 2: Substituir por:
    • Bit 2:0: T0PS2:T0PS0: bit de seleção do fator de prescaler do TMR Onde se lê:
      • 000 - 1:
      • 000 - 1:
      • 000 - 1:
      • 000 - 1:
      • 000 - 1:
      • 000 - 1:
      • 000 - 1:
      • 000 - 1:

Página 281

Onde se lê:

//configura TMR1 para operar como temporizador e estourar a cada 4ms T1CON = 0b10110001; //Timer1 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR1<0> TMR1H = 0xFC; TMR1L = 0x17; //inicializa TMR1 com FC17h }//*******************************************************************

Leia:

//configura TMR1 para operar como temporizador e estourar a cada 4ms T1CON = 0b10110001; //Timer1 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR1<0> TMR1H = 0xFC; TMR1L = 0x17; //inicializa TMR1 com FC17h //*******************************************************************

Página 283

Onde se lê:

//configura TMR2 para operar como temporizador e estourar a cada 4ms T2CON = 0b00011110; //fator de postscaler de 1:4 <6:3> //fator de prescaler de 1:16<1:0> //liga TMR2<1> TMR1L = 0; //inicializa TMR PR2 = 125; //PR2 = 125 }//******************************************************************

Leia:

//configura TMR2 para operar como temporizador e estourar a cada 4ms T2CON = 0b00011110; //fator de postscaler de 1:4 <6:3> //fator de prescaler de 1:16<1:0> //liga TMR2<1> TMR1L = 0; //inicializa TMR PR2 = 125; //PR2 = 125 //******************************************************************

Página 286

Onde se lê:

//configura TMR3 para operar como temporizador e estourar a cada 4ms T3CON = 0b10110001; //Timer3 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR3<0> TMR3H = 0xF8; TMR3L = 0x2F; //inicializa TMR3 com F82Fh }//*******************************************************************

Leia:

//configura TMR3 para operar como temporizador e estourar a cada 4ms T3CON = 0b10110001; //Timer3 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR3<0> TMR3H = 0xF8; TMR3L = 0x2F; //inicializa TMR3 com F82Fh //*******************************************************************

Página 302 - Último parágrafo

Onde se lê:

Quando se deseja cofigurar um ou mais pinos do microcontrolador como entrada analógica é preciso configurar os pinos em

questão como entrada. Para configurar como entrada um determinado pino, é preciso setar o respectivo bit do registrador

TRISx. Caso o respectivo bit do registrador TRISx de um pino configurado como entrada analógica estiver apagado, são

convertidos apenas os níveis de tensão correspondentes aos níveis lógicos '1' e '0'. No Exemplo 2, é necessário fazer o bit

TRISA<0> =1 para que a conversão A/D do sinal aplicado no pino RA0/AN0 seja efetuada com sucesso. Não se pode

esquecer de que uma tensão analógica aplicada em um pino configurado como digital pode fazer com que a intensidade de

corrente elétrica no pino exceda as especificações máximas, podendo trazer danos permanentes ao microcontrolador. A

Figura 18.13 mostra o diagrama em blocos do conversor A/D do PIC18F4520.

Leia:

Quando se deseja configurar um ou mais pinos do microcontrolador como entrada analógica, é preciso configurar os pinos

em questão como entrada. Para configurar como entrada um determinado pino, é preciso setar o respectivo bit do registrador

TRISx. Caso o respectivo bit do registrador TRISx de um pino configurado como entrada analógica esteja apagado, são

convertidos apenas os níveis de tensão correspondentes aos níveis lógicos '1' e '0'. No Exemplo 2, é necessário fazer o bit

TRISA<0> =1 para que a conversão A/D do sinal aplicado no pino RA0/AN0 seja efetuada com sucesso. Não se pode

esquecer de que uma tensão analógica aplicada em um pino configurado como digital pode fazer com que a intensidade de

corrente elétrica no pino exceda as especificações máximas, podendo trazer danos permanentes ao microcontrolador. A

Figura 18.13 mostra o diagrama em blocos do conversor A/D do PIC18F4520.

/Esta funcao inicializa os resgistradores SFRs./ void Inic_Regs (void) { TRISA = 0x01; //RA0 como entrada e demais pinos do PORTA como saída TRISB = 0x01; //RB0 como entrada e demais pinos do PORTB como saída TRISC = 0x00; //PORTC saída TRISD = 0x00; //PORTD saída TRISE = 0x00; //PORTE saída ADCON1 = 0x0F; //configura pinos dos PORTA e PORTE como digitais PORTA = 0; //limp a PORTA PORTB = 0; //limp a PORTB PORTC = 0; //limp a PORTC PORTD = 0; //limp a PORTD PORTE = 0; //limp a PORTE //******************************************************************** } //******************************************************************** //esta função configura o conversor A/D void Configura_AD (void) ADCON0=0b00000001; /canal AN0 selecionado<5:2> Módulo conversor ligado<1>/ ADCON1=0b00001110; /Vref- = VSS<5> Vref+ = VDD<4> pino RA0/AN0 analógico e demais pinos digitais<3:0>/ ADCON2=0b10101001; /resultado justificado à direita<7> Tempo de aquisição de 12TAD<5:3> TAD = 1μs<2:0>/

//esta função efetua uma conversão A/D int Co nv_AD (void) { int Result_AD; //declaração de variável local ADCON0bits.GO = 1; //inicia conversão while (ADCON0bits.GO); //aguarda finalizar conversão Result_AD = (((int)ADRESH)<<8)|(ADRESL); //obté m valor da conversão return Result_AD; //retorna valor da conversão

//********************************************************************

} /********************************************************************/ /*Conversão de float para ASCII. Esta função converte valores float na faixa

de -65.535,998 a +65.535,998 em uma string. //*******************************************************************/ char *Conv_Float_String(float float_in) { unsigned int parte_inteira; //declaração de variável local

unsigned int parte_decimal; //declaração de variável local char sinal, *pt; //declaração de variável local unsigned

char x, y; //declaração de variável local //******************************************************************* if(float_in < 0) //valor é menor que 0? { sinal = '-'; //sim, sinal negativo float_in = float_in * (-1); //inverte o sinal de float_in } else sinal = ' '; //não, sinal positivo //******************************************************************* parte_inteira = float_in; //resg ata parte inteira do valor //******************************************************************* parte_decimal =(unsigned int)((float_in - parte_inteira) * AJUSTA_DECIMAL); //resgata parte fracionária do valor sprintf(buf," Temp = %c%u.%01uºC",sinal,parte_inteira,parte_decimal); //converte valor em string e armazena no vetor buf pt = buf; //passa para o ponteiro pt o endereço de buf

return (pt); //retorna o endereço de buf. }//****************************************************************** void Atual_LCD (void) //função Atual_LCD { EscInstLCD(0x01); //limp a display e mostra cursor piscando na p rimeira posição da primeira linha while(TesteBusyFlag()); //espera LCD controller terminar de executar instrução

EscStringLCD(buf); //escreve string no LCD while(TesteBusyFlag()); //espera LCD controller terminar de executar instrução }//*****************************************************************

Importante: Foi incluído no programa-fonte main_35.c o arquivo cabeçalho "LCD_8bits.h" , o qual permite o uso das

funções de acesso ao LCD. Para ter acesso a tais funções, no entanto, é preciso associar também ao projeto o arquivo-fonte

LCD_8bits.c juntamente com o programa-fonte main_35.c , em que se encontra a função main().

 O arquivo cabeçalho LCD_8bits.h precisa ser incluído no programa-fonte porque lá estão prototipadas as funções da

biblioteca de acesso ao LCD. Isso pode ser feito por meio da diretiva #include.

 O arquivo-fonte LCD_8bits.c precisa ser associado ao projeto para que as funções definidas nele possam ser

compiladas juntamente com a função main(). Isso pode ser feito clicando com o botão direito na pasta Source Files na

área de trabalho do projeto. O mesmo procedimento utilizado para associar ao projeto o arquivo-fonte que contém a

main().

A associação de mais de um arquivo-fonte ao projeto foi descrita no item 6.5.8, na qual, para mostrar a aplicação do

especificador extern , foi montada uma aplicação com dois programas-fonte adicionados ao projeto: main_05.c e soma.c.

Esse procedimento deve ser adotado sempre que se deseja utilizar funções definidas em arquivo diferente daquele em que

foi definida a função main(). É o caso dos arquivos-fonte com funções de biblioteca apresentados no livro. São eles:

DPS_7Seg_x4.c , I2C_Master.c , Keyboard_HEX.c e Lcd_8bits.c. Sempre que uma função definida em um desses arquivos

for utilizada em uma aplicação, ele precisa ser associado ao projeto, como mostrado no exemplo Teclado matriz aciona

LED , apresentado no capítulo 13. Neste exemplo, a função main() foi definida no programa-fonte main_30.c , o qual utiliza

funções definidas no arquivo-fonte Keyboard_HEX.c. Pode-se observar na Figura 13.11 que ambos os arquivos foram

associados ao projeto.

Página 329 - Figura 20.

Substituir por:

Página 438 - Tabela Caracteres de controle do código ASCII

Substituir por:

Hexa Caractere Nome Teclado 00 NUL Null, Idle ^@

01 SOH Start of header ^A

02 STX Start of text ^B

03 ETX End of text ^C

04 EOT End of transmission ^D 05 ENQ Enquirity ^E

06 ACK Acknowledgement ^F

07 BEL Bell or Beep ^G

08 BS Backspace ^H

09 HT Horizontal tab ^I

0 A^ LF^ Line feed^ ^J

0B VT Vertical tab ^K 0C FF Form feed ^L

0D CR Carriage return ^M

0E SO Shift out ^N

0F SI Shift in ^O

10 DLE Data link escape ^P

11 DC1 Device control 1 (XON) ^Q

12 DC2 Device control 2 - block-mode flow control ^R

13 DC3 Device control (XOFF) ^S

14 DC4 Device control 4 ^T

15 NACK Negative acknowledge ^U

16 SYN Synchronous idle ^V

17 ETB End of transmission block ^W

18 CAN Cancel ^X

19 EM End of medium ^Y

1A SUB Substitute ^Z 1B ESC Escape, Prefix, Altmode ^[

1C FS File separator ^\

1D GS Group separator ^]

1E RS Record separator ^^

1F US Unit separator ^-