Danilo Morais Pagano Mestrando  em Mecânica Computacional - UNICAMP
Microprocessadores: 4 bits, 8 bits, 16... É um chip: com alta integração de componentes RAM externa  memória EEPROM externa HD para armazenamento de programas outros diversos periféricos. Ou seja, você usa um microprocessador dentro de um  microcomputador e ele, em conjunto com um monte de outros CIs, trabalham direitinho.
Microcontrolador é um componente completo por si só.  Basta um programa e ele executa uma função específica.  Dentro do microcontrolador temos memória RAM, FLASH, EEPROM ou E2PROM.
Vamos simplificar resumindo a lógica em dois números ou como falamos muito, em dois dígitos: O 0 (zero) e o 1 (um).  Quando falamos em 0 (zero), estamos nos referindo a zero Volt DC e quando falamos em 1 (um) estamos falando em + Vcc.  No caso dos microcontroladores PIC, geralmente, estaremos falando que:  0 = GND e 1 = 5Vcc
Memória ROM  Memória RAM  Memória EPROM Memória EEPROM ou E2PROM Memória FLASH
É um endereço na memória Formados por 8 números, ou  melhor, 8 bits.  Estes bits podem ser 0 (zero) ou 1 (um).  Muitas vezes chamamos estes bits de Flags. Flag então é um bit dentro de um registrador.
Imaginemos 8 posições: Cada posição pode ter um valor de 0 (zero) ou 1  (um). Esta posição com um valor é um bit, ou  melhor, bit é o valor que há dentro da posição.  Quando juntamos 8 bits, como no exemplo a seguir:  “ 00110011”  ⇒ Chamamos isto de byte. Um byte então é um conjunto de 8 bits.
Às vezes os bits podem ser agrupados em números de 4, veja:  “ 0101”  ⇒ Damos a isto o nome de “nibble”.  Outras vezes os bits podem se agrupar com números maiores que 8, veja:  “ 001100110011”  ⇒ Chamamos isto de “Word”:  16 bits ou 2 bytes
Nos PICS existem registradores especiais Podemos através dos bits ou  flags destes registradores “ ajustar” o funcionamento do PIC ou saber como ele está operando, para isto basta escrever ou ler os flags destes registradores.
Os primeiros microcontroladores usavam uma estrutura interna que tinha apenas um caminho para trafegar os dados e endereços.  Lembre-se,  dados são informações e  endereços são os locais onde serão armazenados os dados.  O nome mais correto para este “caminho” é  Bus. Com apenas um bus tínhamos que trafegar hora  endereços, hora dados.  Esta arquitetura de construção recebe o nome de “Von Neumann”.
Hoje em dia, os  PICs particularmente, trabalham com dois  bus. Um para dados e outro para  endereços.  Este tipo de arquitetura recebe o nome de “Harvard”.  Os  PICs possuem ainda um outro recurso, chamado de “Pipeline”.
“ CISC” : possuía mais de  100 instruções, o que dificultava a memorização do programador.  “ RISC”: Este set tem entre  33 a  35 instruções dependendo do PIC. Isto ajuda na memorização, mas, exige mais do programador. É como falar fluentemente um outro idioma, conhecendo poucas palavras, all right?  C omplex I nstruction  S et C omputer R educed  I nstruction  S et  C omputer
Introdução à arquitetura interna  e suas configurações
Fabricado pela Microchip ( www.microchip.com ) Possui 18 pinos Possui 35 instruções Clock até 20MHz Memoria de programa tipo Flash de 2k words 224 bytes de memoria RAM de dados
128 bytes de memoria EEPROM para dados Instruções de 14 bits com 200ns de execução Dados de 8 bits 15 registradores especiais 16 pinos de entrada/saida (I/O) ICPS, timer interno, watchdog, CPP, USART, etc...
 
 
 
 
 
 
0 0 1  1  1   1   0  0 0 0 0  0  1   1   1  1
Com 8 níveis (imagine que você quer guardar 8 caixas iguais uma sobre a outra, cada caixa contém algumas coisas. Pois bem, cada caixa é um nível). Há de se ter cuidado para não “derrubar” esta pilha ou como se diz em programação, estourar a pilha (vai que dentro de uma pilha você colocou dinamite.).
O Watch dog é um contador independente de tudo dentro do PIC, que reseta o mesmo, após um certo período.  Para que serve isto? Digamos que você fez um projeto com um PIC para controlar  um elevador, de repente um pico de tensão o PIC trava-o fazendo com que o elevador pare. Depois  de um curto período o Watch dog reseta o PIC, o programa volta a funcionar e o elevador volta a funcionar também.  Há de saber como se travar bem este cão, mas isto é, literalmente, outro capítulo...
Uma USART serial, mas o que é isto?  É um recurso que permitirá que você converse com outros equipamentos, como uma porta serial de um microcomputador.  USART significa “Universal Synchronous Asynchrous Receiver transmiter” ou Transmissor Universal Síncrono ou Assíncrono.
Só para lembrar PWM quer dizer modulação por largura de pulso, com este recurso você conseguirá variar o brilho de uma lâmpada, a velocidade de um motor DC ou até fazer uma fonte chaveada.
2 comparadores analógicos com referência interna, programável, de tensão. Quem gosta de amplificadores operacionais prepare-se para se divertir, e quem não os conhece vamos ler um livro sobre AOPs.
É um sinal de onda quadrada que serve para fazer um circuito lógico funcionar ou para sincronizar diversos dispositivos ou circuitos.  O nível alto do clock =+Vcc O nível baixo = zero volt. O período alto (+Vcc) é chamado de “Ton” e o período baixo de “Toff”.  Ton = Toff. É  melhor que sejam iguais T = Ton + ToFF  ( a soma resulta no periodo) T = 1  F
Ao usarmos um cristal de 4MHz teremos uma freqüência de 4MHz e o período de:  T = 1  =  1  = 250ns ou 250 nano segundos  F  4.000,000  Ou 0,000. 000.25 segundos.
Divide-se clock por quatro, formando as fases Q1, Q2, Q3 e Q4 PIPELINE: Busca a informação em um ciclo e a executa no próximo Para um clock de 4MHz, cada instrução é executada 1  s, desde que não afete o Program Counter
RC_CLKOUT  = oscilador RC externo que deve estar ligado no pino 16. No pino 15 teremos este sinal dividido por 4. RC_I/O  = Oscilador externo mais que usa o pino 15 como I/O.
XT = cristal de 200kHz até 4MHz HS = cristal acima de 4MHz LS = cristal abaixo de 200kHz INTOSC_I/O  = oscilador interno com o pino 15 operando como I/O. INTOSC_CLKOUT  = o pino 15 teremos este sinal dividido por 4
 
 
O nome registrador W vem de “Registrador Work”, que traduzindo, quer dizer trabalho.  É através dele que carregamos os outros registradores com valores diversos e corretos para um perfeito funcionamento de nosso projeto.  Caso desejamos colocar um determinado valor em um registrador de uso geral (GPR), primeiro temos que “carregar” o registrador W e depois passar para o outro registrador.
O início  de tudo...
Fique atento!
 
LIST p=16f628a #INCLUDE "P16F628.INC"
Abrir arquivo do word. Exemplo: __CONFIG _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _LVP_OFF & _MCLRE_OFF
#DEFINE BANK0 BCF STATUS, RP0 #DEFINE BANK1 BSF STATUS, RP0 #DEFINE BOTAO PORTB, 4 #DEFINE LED PORTB, 0
ORG 0X00  ; inicio do programa GOTO INICIO  ; pula para o label INICIO ORG 0X04 ; inicio da interrupção RETFIE  ; retorna da interrupção
INICIO CLRF PORTA CLRF PORTB BANK1 MOVLW B‘00000000' MOVWF TRISA MOVLW B'00110000' MOVWF TRISB
MOVLW B'10000011' MOVWF OPTION_REG MOVLW B'00000000' MOVWF INTCON BANK0 MOVLW B'00000111' MOVWF CMCON CLRF PORTA CLRF PORTB
MAIN BTFSS  BOTAO GOTO   BOTAO_LIB GOTO   BOTAO_PRES BOTAO_LIB BCF   LED GOTO   MAIN BOTAO_PRES BSF  LED GOTO  MAIN END
1º passo: Abra o proteus Isis 2º passo: Monte o circuito (fique atento!) 3º passo: Adicione um source. 4º passo: Edite o source.asm que você criou com o código apresentado 5º passo: Compile o programa pelo comando BUILD 6º passo: Carregue o programa para a memória do microcontrolador 7º passo: Execute o programa.
Agora sim é pra valer... Cuidado ao errar, pois pode ser que você erre somente uma vez, pois o PIC é frágil...
1º passo: Abra o IC-PROG 2º passo: Mude o idioma para portugues. 3º passo: Ative o driver para windows XP 4º passo: Utilize a API do Windows  5º passo: Selecione o PIC 6º passo: Carregue o programa em HEX para a memória do IC-PROG 7º passo: Configure os Fuses, caso necessário 8º passo: Apague a memoria do PIC e faça a gravação do novo programa.
Agora chega de baixaria... Somos de alto nível... Serão apresentados 3 programas: Liga simples Pisca Pisca Sequencial de 4 LEDs Temos tempo ainda? SIM NÃO
#include "16f628a.h“ #fuses INTRC_IO, NOMCLR, NOWDT
Void main (){ SET_TRIS_A(255); SET_TRIS_B(0); while(true) { output_bit( PIN_B0, input(PIN_A0));  } }
#include "16f628a.h" #use delay(clock=4000000) #fuses INTRC_IO, NOMCLR, NOWDT
void main() { byte i=1; SET_TRIS_A(255); SET_TRIS_B(0); while(true){ OUTPUT_LOW(PIN_B0); delay_ms(1000); OUTPUT_HIGH(PIN_B0); delay_ms(1000);  } }
#include "16f628a.h" #fuses INTRC_IO, NOMCLR, NOWDT void main() { static boolean led=0; SET_TRIS_A(255); SET_TRIS_B(0); OUTPUT_B(0); while(true) { if(input(PIN_A0)) { output_bit(PIN_B0, led); //Quando pressiona A0, manda o bit da variável led para o B0 led=!led; //inverte o bit da variável led while(input(PIN_A0)) //Este laço deixa o microcontrolador sem fazer nada enquanto {// o botão A0 ainda estiver pressionado, só voltando a rodar o programa quando soltar }// o botão A0. Isto evita totalmente que o programa pense que o botão foi }// pressionado sem querer... } }
Com o código compilado, você pode carregá-lo para a memória do microcontrolodor tanto do Proteus quanto o real.
Aumentando o nível ainda mais... Temos tempo ainda? SIM NÃO
Abra o programa Ldmicro Escolha no menu configurações o modelo do microcontrolador
Insira um contato em série com uma saída. Xbotao   YLamp |----]  [---------------------------(  )----| Dê um nome ao contato e um nome à saída. Determine um pino (bit de um port) para corresponder àquela instrução Compile e carregue para a memória do uC (Proteus ou real).
Onde pesquisar... Site da Microchip – www.microchip.com Livros: Desbravando o PIC – (Davi José) Microcontroladores PIC: Técnicas avançadas ( Fábio Pereira) PIC: Programação em C (Fábio Pereira) Buscar no google...
Esta foi a ponta do Iceberg... Agora cabe a cada um buscar/aprofundar mais no assunto... Danilo Pagano Departamento de Mecanica Computacional Faculdade de Engenharia Mecanica  Universidade Estadual de Campinas - UNICAMP

Programação básica de microcontroladores

  • 1.
    Danilo Morais PaganoMestrando em Mecânica Computacional - UNICAMP
  • 2.
    Microprocessadores: 4 bits,8 bits, 16... É um chip: com alta integração de componentes RAM externa memória EEPROM externa HD para armazenamento de programas outros diversos periféricos. Ou seja, você usa um microprocessador dentro de um microcomputador e ele, em conjunto com um monte de outros CIs, trabalham direitinho.
  • 3.
    Microcontrolador é umcomponente completo por si só. Basta um programa e ele executa uma função específica. Dentro do microcontrolador temos memória RAM, FLASH, EEPROM ou E2PROM.
  • 4.
    Vamos simplificar resumindoa lógica em dois números ou como falamos muito, em dois dígitos: O 0 (zero) e o 1 (um). Quando falamos em 0 (zero), estamos nos referindo a zero Volt DC e quando falamos em 1 (um) estamos falando em + Vcc. No caso dos microcontroladores PIC, geralmente, estaremos falando que: 0 = GND e 1 = 5Vcc
  • 5.
    Memória ROM Memória RAM Memória EPROM Memória EEPROM ou E2PROM Memória FLASH
  • 6.
    É um endereçona memória Formados por 8 números, ou melhor, 8 bits. Estes bits podem ser 0 (zero) ou 1 (um). Muitas vezes chamamos estes bits de Flags. Flag então é um bit dentro de um registrador.
  • 7.
    Imaginemos 8 posições:Cada posição pode ter um valor de 0 (zero) ou 1 (um). Esta posição com um valor é um bit, ou melhor, bit é o valor que há dentro da posição. Quando juntamos 8 bits, como no exemplo a seguir: “ 00110011” ⇒ Chamamos isto de byte. Um byte então é um conjunto de 8 bits.
  • 8.
    Às vezes osbits podem ser agrupados em números de 4, veja: “ 0101” ⇒ Damos a isto o nome de “nibble”. Outras vezes os bits podem se agrupar com números maiores que 8, veja: “ 001100110011” ⇒ Chamamos isto de “Word”: 16 bits ou 2 bytes
  • 9.
    Nos PICS existemregistradores especiais Podemos através dos bits ou flags destes registradores “ ajustar” o funcionamento do PIC ou saber como ele está operando, para isto basta escrever ou ler os flags destes registradores.
  • 10.
    Os primeiros microcontroladoresusavam uma estrutura interna que tinha apenas um caminho para trafegar os dados e endereços. Lembre-se, dados são informações e endereços são os locais onde serão armazenados os dados. O nome mais correto para este “caminho” é Bus. Com apenas um bus tínhamos que trafegar hora endereços, hora dados. Esta arquitetura de construção recebe o nome de “Von Neumann”.
  • 11.
    Hoje em dia,os PICs particularmente, trabalham com dois bus. Um para dados e outro para endereços. Este tipo de arquitetura recebe o nome de “Harvard”. Os PICs possuem ainda um outro recurso, chamado de “Pipeline”.
  • 12.
    “ CISC” :possuía mais de 100 instruções, o que dificultava a memorização do programador. “ RISC”: Este set tem entre 33 a 35 instruções dependendo do PIC. Isto ajuda na memorização, mas, exige mais do programador. É como falar fluentemente um outro idioma, conhecendo poucas palavras, all right? C omplex I nstruction S et C omputer R educed I nstruction S et C omputer
  • 13.
    Introdução à arquiteturainterna e suas configurações
  • 14.
    Fabricado pela Microchip( www.microchip.com ) Possui 18 pinos Possui 35 instruções Clock até 20MHz Memoria de programa tipo Flash de 2k words 224 bytes de memoria RAM de dados
  • 15.
    128 bytes dememoria EEPROM para dados Instruções de 14 bits com 200ns de execução Dados de 8 bits 15 registradores especiais 16 pinos de entrada/saida (I/O) ICPS, timer interno, watchdog, CPP, USART, etc...
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
    0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1
  • 23.
    Com 8 níveis(imagine que você quer guardar 8 caixas iguais uma sobre a outra, cada caixa contém algumas coisas. Pois bem, cada caixa é um nível). Há de se ter cuidado para não “derrubar” esta pilha ou como se diz em programação, estourar a pilha (vai que dentro de uma pilha você colocou dinamite.).
  • 24.
    O Watch dogé um contador independente de tudo dentro do PIC, que reseta o mesmo, após um certo período. Para que serve isto? Digamos que você fez um projeto com um PIC para controlar um elevador, de repente um pico de tensão o PIC trava-o fazendo com que o elevador pare. Depois de um curto período o Watch dog reseta o PIC, o programa volta a funcionar e o elevador volta a funcionar também. Há de saber como se travar bem este cão, mas isto é, literalmente, outro capítulo...
  • 25.
    Uma USART serial,mas o que é isto? É um recurso que permitirá que você converse com outros equipamentos, como uma porta serial de um microcomputador. USART significa “Universal Synchronous Asynchrous Receiver transmiter” ou Transmissor Universal Síncrono ou Assíncrono.
  • 26.
    Só para lembrarPWM quer dizer modulação por largura de pulso, com este recurso você conseguirá variar o brilho de uma lâmpada, a velocidade de um motor DC ou até fazer uma fonte chaveada.
  • 27.
    2 comparadores analógicoscom referência interna, programável, de tensão. Quem gosta de amplificadores operacionais prepare-se para se divertir, e quem não os conhece vamos ler um livro sobre AOPs.
  • 28.
    É um sinalde onda quadrada que serve para fazer um circuito lógico funcionar ou para sincronizar diversos dispositivos ou circuitos. O nível alto do clock =+Vcc O nível baixo = zero volt. O período alto (+Vcc) é chamado de “Ton” e o período baixo de “Toff”. Ton = Toff. É melhor que sejam iguais T = Ton + ToFF ( a soma resulta no periodo) T = 1 F
  • 29.
    Ao usarmos umcristal de 4MHz teremos uma freqüência de 4MHz e o período de: T = 1 = 1 = 250ns ou 250 nano segundos F 4.000,000 Ou 0,000. 000.25 segundos.
  • 30.
    Divide-se clock porquatro, formando as fases Q1, Q2, Q3 e Q4 PIPELINE: Busca a informação em um ciclo e a executa no próximo Para um clock de 4MHz, cada instrução é executada 1  s, desde que não afete o Program Counter
  • 31.
    RC_CLKOUT =oscilador RC externo que deve estar ligado no pino 16. No pino 15 teremos este sinal dividido por 4. RC_I/O = Oscilador externo mais que usa o pino 15 como I/O.
  • 32.
    XT = cristalde 200kHz até 4MHz HS = cristal acima de 4MHz LS = cristal abaixo de 200kHz INTOSC_I/O = oscilador interno com o pino 15 operando como I/O. INTOSC_CLKOUT = o pino 15 teremos este sinal dividido por 4
  • 33.
  • 34.
  • 35.
    O nome registradorW vem de “Registrador Work”, que traduzindo, quer dizer trabalho. É através dele que carregamos os outros registradores com valores diversos e corretos para um perfeito funcionamento de nosso projeto. Caso desejamos colocar um determinado valor em um registrador de uso geral (GPR), primeiro temos que “carregar” o registrador W e depois passar para o outro registrador.
  • 36.
    O início de tudo...
  • 37.
  • 38.
  • 39.
    LIST p=16f628a #INCLUDE"P16F628.INC"
  • 40.
    Abrir arquivo doword. Exemplo: __CONFIG _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _LVP_OFF & _MCLRE_OFF
  • 41.
    #DEFINE BANK0 BCFSTATUS, RP0 #DEFINE BANK1 BSF STATUS, RP0 #DEFINE BOTAO PORTB, 4 #DEFINE LED PORTB, 0
  • 42.
    ORG 0X00 ; inicio do programa GOTO INICIO ; pula para o label INICIO ORG 0X04 ; inicio da interrupção RETFIE ; retorna da interrupção
  • 43.
    INICIO CLRF PORTACLRF PORTB BANK1 MOVLW B‘00000000' MOVWF TRISA MOVLW B'00110000' MOVWF TRISB
  • 44.
    MOVLW B'10000011' MOVWFOPTION_REG MOVLW B'00000000' MOVWF INTCON BANK0 MOVLW B'00000111' MOVWF CMCON CLRF PORTA CLRF PORTB
  • 45.
    MAIN BTFSS BOTAO GOTO BOTAO_LIB GOTO BOTAO_PRES BOTAO_LIB BCF LED GOTO MAIN BOTAO_PRES BSF LED GOTO MAIN END
  • 46.
    1º passo: Abrao proteus Isis 2º passo: Monte o circuito (fique atento!) 3º passo: Adicione um source. 4º passo: Edite o source.asm que você criou com o código apresentado 5º passo: Compile o programa pelo comando BUILD 6º passo: Carregue o programa para a memória do microcontrolador 7º passo: Execute o programa.
  • 47.
    Agora sim épra valer... Cuidado ao errar, pois pode ser que você erre somente uma vez, pois o PIC é frágil...
  • 48.
    1º passo: Abrao IC-PROG 2º passo: Mude o idioma para portugues. 3º passo: Ative o driver para windows XP 4º passo: Utilize a API do Windows 5º passo: Selecione o PIC 6º passo: Carregue o programa em HEX para a memória do IC-PROG 7º passo: Configure os Fuses, caso necessário 8º passo: Apague a memoria do PIC e faça a gravação do novo programa.
  • 49.
    Agora chega debaixaria... Somos de alto nível... Serão apresentados 3 programas: Liga simples Pisca Pisca Sequencial de 4 LEDs Temos tempo ainda? SIM NÃO
  • 50.
    #include "16f628a.h“ #fusesINTRC_IO, NOMCLR, NOWDT
  • 51.
    Void main (){SET_TRIS_A(255); SET_TRIS_B(0); while(true) { output_bit( PIN_B0, input(PIN_A0)); } }
  • 52.
    #include "16f628a.h" #usedelay(clock=4000000) #fuses INTRC_IO, NOMCLR, NOWDT
  • 53.
    void main() {byte i=1; SET_TRIS_A(255); SET_TRIS_B(0); while(true){ OUTPUT_LOW(PIN_B0); delay_ms(1000); OUTPUT_HIGH(PIN_B0); delay_ms(1000); } }
  • 54.
    #include "16f628a.h" #fusesINTRC_IO, NOMCLR, NOWDT void main() { static boolean led=0; SET_TRIS_A(255); SET_TRIS_B(0); OUTPUT_B(0); while(true) { if(input(PIN_A0)) { output_bit(PIN_B0, led); //Quando pressiona A0, manda o bit da variável led para o B0 led=!led; //inverte o bit da variável led while(input(PIN_A0)) //Este laço deixa o microcontrolador sem fazer nada enquanto {// o botão A0 ainda estiver pressionado, só voltando a rodar o programa quando soltar }// o botão A0. Isto evita totalmente que o programa pense que o botão foi }// pressionado sem querer... } }
  • 55.
    Com o códigocompilado, você pode carregá-lo para a memória do microcontrolodor tanto do Proteus quanto o real.
  • 56.
    Aumentando o nívelainda mais... Temos tempo ainda? SIM NÃO
  • 57.
    Abra o programaLdmicro Escolha no menu configurações o modelo do microcontrolador
  • 58.
    Insira um contatoem série com uma saída. Xbotao YLamp |----] [---------------------------( )----| Dê um nome ao contato e um nome à saída. Determine um pino (bit de um port) para corresponder àquela instrução Compile e carregue para a memória do uC (Proteus ou real).
  • 59.
    Onde pesquisar... Siteda Microchip – www.microchip.com Livros: Desbravando o PIC – (Davi José) Microcontroladores PIC: Técnicas avançadas ( Fábio Pereira) PIC: Programação em C (Fábio Pereira) Buscar no google...
  • 60.
    Esta foi aponta do Iceberg... Agora cabe a cada um buscar/aprofundar mais no assunto... Danilo Pagano Departamento de Mecanica Computacional Faculdade de Engenharia Mecanica Universidade Estadual de Campinas - UNICAMP