Who is Fábio Pereira?

130523-101756

Hello!

My name is Fábio Pereira and this is my technical blog. I have a technical degree in electronics, bachelor  degree in law, a post-graduation degree on electronics projects design (CEFET-SC, Brazil) and another post-graduation on embedded systems development (Conestoga College – Canada). I am mostly an autodidact guy, questioning, curious, experimenter and enthusiast of several areas including microcontrollers, mobile programming, programmable logic, etc.

My interest on electronics and programming started very early: I got my first microcomputer (a CP400 Color II, a Brazilian version of the TRS-80 Color Computer, powered by the 6809 microprocessor) when I was about 12 years-old. I learned BASIC programming language from the user’s manual and also by reading Brazilian programming magazines of that age: Input and Micro Sistemas. Some time later I asked my father to buy me a Portuguese version of Steve Ciarcia’s “Build Your Own Z80 Computer” book.

Some years later, when I was 15, I got my first PC microcomputer, an IS-30 from Itautec (a Brazilian clone of the IBM-PC XT but using a NEC V30 microprocessor), on that machine I learned more about BASIC language (Turbo BASIC) and also Pascal (Turbo Pascal). At that time I wrote my very own Z-80 assembler (there was no Internet and the access to programming tools in Brazil was very very difficult). Always as an autodidact I also studied EGA/VGA video programming, 8086 assembly programming, TSR (terminate and stay resident) programming, etc.

Years later I had my first contact with C language (Turbo C) and some years later I had my very first contact with a microcontroller: the PIC 16F84. I bought a kit from a local school and started studying the device’s datasheet, some years later I wrote my first book on PIC programming (Microcontroladores PIC: Técnicas Avançadas or PIC Microcontrollers: Advanced techniques) and the rest is history!

I would like to thank my father Pedro and my grandmother Juçá. Him because he always supported me and gave me the best possible education and tools to learn and develop myself. Her because she supported and took care of me when I went to study in Curitiba at CEFET-PR (currently UTF-PR) when I was 14.

Here are all books I have published to this date (since 2002):

       rl78

My LinkedIn account: https://www.linkedin.com/in/fabiojve

I am currently living in London, ON, Canada and working at Geotab, inc as a Senior Embedded Systems Developer.

48 thoughts on “Who is Fábio Pereira?

  1. Bom dia!

    Gostaria de comprar o Livro Microcontroladores HCS08 Teoria e Prática mas não estou achando em nenhuma livraria, alguma dica?

  2. Boa Noite Fabio,
    Sou professor de Linguagem C na Etec Sao Jose dos Campos, e ensino C programando microcontrolador, assim uso seu livro com apoio didatico.
    eu e meus alunos estamos desenvolvendo um placa com pic 18F4550 e estakos querendo colocar um bootload para eliminar o uso do gravador ficando mais barato a aquisição desta placa por eles. Gostaria de saber se voce pode passar informações para criarmos estes bootload eu já consegui azer alguns tipos de bootload, porem na escola programamos com o CCS e gostaria de continuar ensinado com ele, no subdiretorio do ccs encontrei um bootload, compilei e gravei no pic, porem não estou sabendo qual programa transfere o arquivo hex para o pic. se voce puder nos ajudar fico muito grato.
    Att.
    Dimas

  3. Olá Dimroger,

    Há anos atrás eu escrevi um bootloader proprietário (no CCS) para uso com o 18F252, este bootloader é proprietário e não posso publicar o código. Sobre o bootloader da CCS, me parece que eles possuem uma aplicação específica para isso no site deles: http://www.ccsinfo.com/downloads/setup_bootloader.zip No mais, se eu puder ajudar esclarecendo dúvidas, coloco-me a disposição.@dimroger

  4. Fabio, tudo bem?

    Foi uma surpresa encontrar seu blog, por que tenho 2 dos seus livros e ( Técnicas Avançadas (16F628) e Programando PIC em C (16F877), e devo a eles grande parte do que aprendi sobre microcontroladores.
    Também sou formado em outra área (administração de empresas), mas a eletrônica é o meu maior hobby, para não dizer vício….

    Vi uma pequena matéria no seu blog que me interessou bastante, sobre os módulos wifi.

    Estou fazendo um projeto de um sensor que envia os dados para um AP e pretendo usar um módulo Microchip ( possivelmente o RN171 ou RN 131), mas tenho ainda muitas dúvidas sobre o uso desse dispositivo.

    Por acaso você sabe se alguém oferece algum curso/treinamento sobre isso?
    Sabe de algum livro ?
    Application Note?
    Exemplo de projeto (HW/SW) ?
    Sabe se posso usar o módulo sem nenhum outro HW adicional? Quero dizer, posso construir um sensor apenas com um PIC e um módulo wifi (fora outros componentes discretos)? Ou preciso ter um computador conectado ao circuito?
    O meu firmware deve ficar na memória do módulo ou no PIC, ou nos 2?
    Há a necessidade de se usar uma placa de desenvolvimento?

    Desculpe por tantas perguntas, mas sou iniciante nesseassunto.
    Agradeço desde já sua ajuda!

    Um abraço, Janos

    1. Olá Janos,

      Fico feliz que tenha encontrado o meu blog e que goste dos meus livros!

      Olha, sobre móbulos Wi-Fi, a maioria deles faz praticamente tudo sozinho, cabendo ao microcontrolador apenas enviar e receber os dados nas camadas mais altas da aplicação.

      Eu tenho a intenção de escrever um artigo sobre o uso de um módulo Wi-Fi com MCU, mas realmente falta tempo.

      Não conheço nenhum livro que trate sobre o assunto, mas a documentação que acompanha o kit do RL78/G14 possui bastante coisa. Veja em: http://am.renesas.com/products/tools/introductory_evaluation_tools/renesas_demo_kits/yrdkrl78g14/index.jsp

      Att.

      Fábio

  5. Boa tarde fábio

    Primeiramente parabéns pelos livros! Estou com um desafio em um novo emprego no qual usam apenas microcontroladores freescale, da linhda hcs08. Estou utilizando um livro seu como base para migrar meu conhecimento de PIC à linha MCU. Porém não consigo fazer com que funcionem as rotinas de gravação e leitura de Flash. Preciso armazenar um dado em um projeto, para que mesmo depois de desligado ele continue armazenado. Por isso preciso tanto aprender esta rotina. O micro que estou utilizando é um mc9s08pa16. Tem como me ajudar por favor?

    1. Olá Wenderson,

      O meu livro HCS08 Unleashed tem exemplos de gravação e leitura da flash dos HCS08.

      Fábio

  6. Como vai Fábio, é um prazer participar do seu blog, tenho 4 do seus livros (MSP430, PIC, HC908, e atualmente o RL78 que ganhei com muito alegria em mão do André Machado).
    Gostaria de completar minha biblioteca com seus livros, poderia me fornecer os livros faltantes por um preço mais acessível? diretamente do site estão muito caros e atualmente estou passando por uma dificuldade financeira daquelas. Poderia por favor me enviar seu email para que possamos trocar algumas ideias e poder pegar alguns conselhos? No mais agradeço a oportunidade que nos dá em conhecer este mundo tão interessante dos microcontroladores. abraços. Júlio

    1. Olá Julio,

      Em quais livros você tem interesse? Tenho alguns poucos exemplares comigo e posso verificar se tenho os que você deseja.

      T+

      Fábio

  7. ola fabio.

    estou tentando criar um relogio com um rtc(ds1307) usando o pic 18f4550 e xc18, e estou com varios problemas, primeiro não sei muito sobre programação, mas pesquisando consegui que a hora e a data seje mostrada no lcd, voce poderia me dar uma ajuda?

    att
    flavio

  8. O PROBLEMA QUE NAO ESTOU CONSEGUINDO FAZER O AJUSTE DA DATA/HORA NO RTC, E COMO USAR UMA INTRUPÇÃO EXTERNA PARA CRIAR UM MENU PARA AJUSTAR OS MESMO E TAMBEM UM ALARME.

    1. Eu já postei o código de um relógio, você pode aproveitar algumas idéias do mesmo. Sobre como acertar o horário no RTC, existe muito material sobre isso na internet.

  9. Prezado Fábio,

    gostaria de saber se é possível fazer contato com você por aqui para a retirada de algumas dúvidas que tenho sobre livro de vossa autoria.

    Iria me ajudar bastante a compreender alguns pontos.

    Por favor, aguardo seu contato.

    Humberto

  10. Olá Fábio

    Antes de mais nada parabéns pelo seu blog e livros. Eles tem me ajudado bastante nos meus primeiros passos no mundo da eletrônica.

    Comprei recentemente o livro Tecnologia ARM Microcontroladores de 32 bits mas estou tendo dificuldade para encontrar no mercado os kits que você especifíca (ARM7-KIT da ST e CPU STR711 da ScTec). Você tem alguma dica de onde posso adquirir-los?

    Obrigado, Ricardo

  11. Boa tarde Fábio. Aprendi bastante de PIC e linguagem C graças à seus livros.
    Comprei a um tempo atrás o “Microcontroladores PIC C detalhado”, mas só agora estou lendo com mais afinco. No entanto, ao menos nos exemplos finais, parece que há alguns erros nos códigos apresentados. No site da editora ÉRICA , o arquivo de errata (2717.exe) está corrompido. Poderia passar outro link para baixar as erratas ?
    Obrigado.

    1. Olá Ricardo,

      Eu imagino que você esteja falando sobre o livro PIC18 Detalhado. Bom, eu não tenho nenhuma errata dele aqui. Qual o problema que você encontrou?

  12. Fábio, obrigado por responder tão rápido.
    Atualmente programo utilizando o CCS, estou dando os primeiros passos no compilador C18 com seu livro (“Microcontrolador PIC18 detalhado”) .
    No exemplo de caracteres para LCD definidos pelo usuário (pag. 279) é usado o Timer1 (acredito que para fazer a atualização do gráfico), mas não vejo o tratamento desta interrupção.
    Além disso, na função “void ADC_ISR (void)”, na linha :” soma = soma+ADRES – media;” – Não entendi de onde vem a variável “ADRES” .
    Também está confusa a função “LCD_bargraph”, por exemplo na linha : “LCD_write_char(4);” – isto não fará escrever “4” no display ? Esta linha não deveria utilizar os índices da matriz “custon_char” ?

    Vamos por partes, tenho outras dúvidas nos outros códigos, mas dependendo de sua resposta, posso estar apenas interpretando errado.

    Agradeço a atenção e parabéns pela iniciativa de passar tanta informação.

    1. Olá Ricardo,

      Você chegou a testar o exemplo?
      Bom, o exemplo 13.37 (acredito que seja este exemplo, não tenho o livro aqui comigo agora) não utiliza o timer1, apenas o timer0. O símbolo ADRES (assim como outros registradores do PIC) é definido pelo arquivo p18f4520.h (que é o primeiro arquivo incluído no topo do programa). Sobre a função LCD_write_char(4), não ela não vai escrever o número 4 no display, para isso teria de ser LCD_write_char(‘4’). No caso, aquela função escreve no display o símbolo relativo a posição 4 da memória de caracteres do display, que é um caractere definido pelo usuário (aqueles definidos no array custom_char[]).

      Att.

      Fábio

  13. Olá Fábio, obrigado novamente.
    É o exemplo13.4, não cheguei a testá-lo, apenas estou tentando entender o código.
    Pelo que entendi ( hoje tentei novamente) o timer 1 é usado no modo comparação, fazendo disparar a interrupção do ADC.
    O símbolo ADRES não consigo encontrar em nenhum dos arquivos “include”.
    Quanto à função LCD_write_char, não consigo enxergar como ela consegue saber que aquele 4 é relativo à posição 4 do array.
    Até entendo que sejam dúvidas de principiante, mas tenho certeza que o professor irá saná-las.
    Grande abraço.

    1. Olá Ricardo,

      Bom, o arquivo p18f4520.h que eu tenho aqui no MPLAB possui a seguinte linha:
      extern volatile near unsigned ADRES;
      Sobre o exemplo 13.4, o timer1 é utilizado no modo de comparação fazendo o disparo da conversão do ADC. Esta funcionalidade é descrita no capítulo que trata do ADC.
      Com relação a função LCD_write_char(4), bom, ela escreve o caractere número 4 (0x04) no display. Se você olhar o mapa de caracteres do display (acho que é a figura 13.3) verá que o caractere 4 é um caractere definido pela CGRAM. A CGRAM é configurada através do array custom_char[]. O código está todo comentado.
      Observe que ao escrever LCD_write_char(‘4’), você de fato está escrevendo o valor 0x34 no display (que é o código ASCII para o número 4). Aí se você olhar a figura 13.3, verá que o código 0x34 é o símbolo do número 4. Isso porque a tabela de caracteres CGROM do display obedece aos códigos ASCII. Observe que os primeiros 16 caracteres do display são mapeados para os 8 caracteres definidos na CGRAM, isso permite que o usuário crie seus próprios caracteres. O texto do livro trata do assunto e demonstra como criar os seus próprios caracteres…

      T+

  14. Afe ! Acredita que não consigo localizar o bendito ADRES, nem no MPLAB nem no CCS, mas isso depois vou procurar com calma.
    Quanto ao restante das explicações, agora faz todo o sentido. Realmente não estava entendendo isso.
    Agradeço muito sua atenção. Continue sempre compartilhando estes seus dons.
    Boas Festas à você e à todos os leitores do seu blog.

  15. Fábio, só para finalizar, encontrei o símbolo ADRES. Eu estava procurando nos arquivos do compilador CCS, nem me dei conta que são diferentes do C18.
    Tudo certo (ao menos por enquanto).
    Obrigado pelas dicas.

  16. Ola Fábio tudo bem?
    Em primeiro lugar quero parabeniza-lo pelos seus livros,ou seja,seu trabalha na área de microcontroladores..
    Gostaria que você me indicasse um de seus livros para quem realmente não sabe nada,ou seja,desda arquitetura do microcontrolador ate a linguagem..
    Ficarei muito agradecido,ate porque,gostaria de começar do zero,mas do zero mesmo para quem não sabe nada…
    Mas uma vez parabéns pelo seu trabalho e obrigado por sua atenção.

    1. Olá Claudio,

      Olha, é difícil indicar um livro. Primeiro seria necessário você definir qual o microcontrolador pretende utilizar/estudar inicialmente, pois há vários modelos e vários fabricantes. Eu não sei se os meus livros seriam os mais indicados para alguém que está começando realmente do zero. Aliás, também não sei exatamente o que você entende por “zero”. Creio que para a leitura de qualquer livro na área você terá de ter algum conhecimento em eletrônica, lógica digital e programação.

      Fábio

  17. Professor, tudo bem ?

    Meu nome é Fabio, sou estudante de Engenharia Eletrônica e me interessei muito pelo assunto microcontroladores e microprocessadores depois que passei a estudar sobre arduíno.

    Gostaria de uma dica do sr, pois sou iniciante, gostaria de saber e o caminho a seguir após o arduíno seria arquitetura PIC ou ARM? Obrigado!

    1. Olá Fábio,

      Olha, depois do Arduino eu iria para uma arquitetura mais completa, então seria ARM ou outro MCU de 32 bits como o Renesas RX ou até mesmo o PIC32.

  18. Olá Fábio, gostaria de comprar um de seus livros más estou em dúvida entre qual eu escolho arm ou pic já tenho conhecimento intermediario em C e Arduino, gostaria da sua opinião estudo eletrônica por enquanto por hobbie más pretendo seguir essa carreira 🙂

    1. Olá Alan,

      Para ser sincero, o livro sobre ARM já está um tanto desatualizado, já que ele trata da arquitetura ARM7 e hoje o que se usa (em termos de MCU ARM) é Cortex-M. Você já deu uma olhada no livro sobre Renesas RL-78? São micros muito bons e o livro pode ser baixado gratuitamente em PDF.

      Fábio

  19. Bom dia!
    Fábio eu já comprei 03 livros teus (Carinha, tu é fera), agora estou com um pouco de dificuldades em atualizar do PIC16F877A para o PIC16F887!
    Tens alguma informação que possa me ajudar?
    Obrigado, Odair de Souza Rodrigues

    1. Olá Odair,

      Obrigado pelo elogio! Com relação a migração, que tipo de dificuldades você está enfrentando? A migração de um PIC para outro não deve apresentar grandes dificuldades.

      Att.

      Fábio

  20. Boa tarde!
    Programo em Assembly e não ando acertando muito bem os FSR. Principalmente com as mudanças nas configurações de ADC, RS232 e TIMER1. Eu estava muito viciadinho no 16F877A!!! Risos!!!
    Fico grato com sua atenção!
    Dica: Edita o Livro: Migando do 16F877a para o 16F887! – Eu compro um!!!
    Grato, Odair

  21. Olá Fábio, boa tarde!

    Estou utilizando o seu livro (Microcontroladores RL78 Guia Básico) como uma das referências para trabalhar com RL78: Parabéns, muito didático!!
    E com isso, estou com uma dúvida que talvez você possa me ajudar:
    – Em relação aos bits de configuração (opbyte0-1-2-3), eles podem ser definidos em arquivos diferentes? Exemplo: gostaria de deixar o opbyte0 no arquivo do watchdog e os outros em um outro arquivo, porém, quando faço isso, não funciona…Você teria alguma dica do que posso estar fazendo errado?

    Era isso então!
    Obrigado desde já pela atenção!
    Sds

    1. Olá Filipe,
      Olha, em tese deveria ser perfeitamente possível declarar os opbytes em arquivos separados mas isso depende muito da forma como o compilador e o linker estão lidando com os arquivos. Quando você diz “não funciona”, isto significa o que? Há um erro de compilação/linker ou o resultado não é o esperado? Uma possível solução seria você deixar os opbytes num mesmo arquivo e configurá-los através de símbolos definidos nos demais arquivos.
      T+
      Fábio

      1. Fábio, bom dia!

        A sugestão que você me passou funcionou (configurar os opbytes no mesmo arquivo mas através de definições dispostas em outros .h). Em relação ao que eu havia comentado de não funcionar, é que o programa até compila e grava normalmente, mas acaba não executando o código…é como se ficasse em modo reset ou travado…
        Bom, de qualquer modo, muito obrigado pelo rápido retorno! Me ajudou bastante!
        Abraço! :mrgreen:

  22. Fabio,

    tenho uma assistencia tecnica e estou querendo inicar um curso de pic.
    qual escola me recomenda,qual o livro que voce me recomenda de todos esses no seu blog? Pode me passar essas informações?
    Parabens pelo seu blog.

    Clodoaldo

    1. Olá Clodoaldo,

      Olha infelizmente não tenho como fazer indicação de cursos pois não conheço muitos em SP. Quanto aos livros, bom eles possuem conteúdos diferentes, o PIC: Programação em C aborda bastante o compilador CCS C, mas não aborda a arquitetura PIC propriamente dita. O livro Técnicas Avançadas aborda bastante arquitetura e assembly, mas não C. O livro sobre PIC18 aborda a arquitetura e C, mas é focado apenas nos PIC18!

      T+

      Fábio

  23. Fabio:

    Iniciei meus estudos com seus livros e suas macros me ajudaram muito.

    Teria como fazer com que cada um dos 256 bytes de um sinal correspondesse a um endereço, incrementando (INCF) um label, para poupar linhas de programa?

    MOVF      SINAL,W
    XORWF     COMPARE,W
    BTFSS    STATUS,Z
    GOTO    S1 ; teria como incrementar S1 usando uma instrução?
    INCFSZ    COMPARE,F
    GOTO     $-5

    1. Olá Paulo,

      Desculpe mas a sua pergunta não é clara. Você não pode incrementar um label de uma instrução GOTO pois o parâmetro dela é fixo e armazenado em flash.

      No entanto é possível fazer saltos relativos utilizando o contador de programa (nos PIC16 seria utilizando os registradores PCLATH e PCL). Basicamente seria algo como:

      MOVLW 10
      ADDWF PCL,F ; esta instrução soma 10 ao PC atual, provocando o desvio do programa 10 posições adiante da próxima instrução

      Note que este tipo de operação pode saltar para endereços indesejados se o resultado do valor atual do PCL somado com o valor em W ultrapassar 255. Neste caso é necessário ajustar o registrador PCLATH antes do salto:

      MOVWF WTEMP
      MOVF PCL,W
      ADDWF WTEMP,W
      BTFSC STATUS,C
      INCF PCLATH,F
      MOVF WTEMP,W
      ADDWF PCL,F

      O meu livro Microcontroladores PIC: Técnicas Avançadas mostra como utilizar tabelas no PIC16.

      1. Boa Noite, Fábio:

        O fato de eu não poder incrementar um label de uma instrução GOTO porque o parâmetro dela é fixo e armazenado em flash, responde a minha pergunta.

        Percebo agora que a rotina proposta por mim tem falhas e não funcionaria, mesmo que o label pudesse ser incrementado.

        Tenho dois exemplares do seu livro Microcontroladores PIC: Técnicas Avançadas e aprendi (com você) a usar tabelas manipulando o PCLATH e PCL.

        Agradeço a pronta resposta.

        Seus livros são muito bons, devo a eles boa parte dos meus conhecimentos sobre PICs e programação.

        Parabéns !

  24. Bom dia Fábio,

    Seus livros foram minha grande fonte de informação quando adentrei no mundo dos MCUs e fiquei muito feliz por descobrir esse canal direto com você.

    Gostaria de tirar uma dúvida e apenas para entender a aplicação, estou construindo um buffer externo para processamento digital de áudio em tempo real.

    Quando utilizo uma SRAM do tipo 23K256, gerenciada pelo DMA de um dsPIC33, realizando operações de R/W dos dados na frequência de amostragem de áudio.

    1 – O simples fato de enviar o endereço de leitura já garante que o dado previamente escrito será disponibilizado no buffer de transmissão da SRAM?

    2 – Na sequencia, enviando um outro endereço para escrita com o respectivo comando, será possível utilizar a comunicação em Full Duplex reduzindo meu tempo na operação?

    Atenciosmente.

    Alexandre Filardo.

    1. Olá Alexandre!

      Obrigado pelo contato! Olha, não conhecia essa memória RAM SPI, mas pelo que vi no datasheet, um comando de leitura aleatória (byte read) sempre inclui o endereço de 16 bits da posição a ser lida e após o envio dos primeiros 24 bits (8 do comando + 16 do endereço) a memória irá apresentar serialmente o conteúdo da posição desejada.

      Sobre a pergunta número 2, eu não entendi muito bem o que você quis dizer com Full Duplex nesse contexto. A comunicação SPI a quatro fios é sempre Full Duplex no sentido de que dados são enviados (do master para o slave) ao mesmo tempo em que o slave devolve algum tipo de informação (normalmente na parte final da palavra) para o master. Mas se vc se refere a possibilidade de ler e escrever simultaneamente, aí creio que essa memória não permita fazer isso. Imagino que seria o caso de utilizar uma memória dual-port (para se fazer acessos aleatórios de escrita e leitura).

      O ideal seria utilizar um MCU ou DSP com memória RAM interna suficiente para acomodar todo o seu buffer de amostras, de modo que o DMA transfira os dados lidos do ADC para a RAM e sinalize para o seu filtro o momento de processar as amostras salvas. Provavelmente também seria interessante utilizar um ping-pong buffer de forma que um dos buffers esteja disponível para o DMA enquanto o outro (contendo as últimas “n” amostras lidas do ADC) pode ser utilizado pelo código do filtro.

      1. Boa tarde Fábio, muito obrigado pelos esclarecimentos, foram de grande ajuda pra meu direcionamento e no momento que retomar o desenvolvimento desta parte do meu código, avaliarei e ponderarei todas as recomendações.

        Atenciosamente.

  25. Olá Fábio, estive procurando vc devido a um de seus livros , “PIC Tecnicas Avançadas”, pois procurei na Editora Erica o download dos fontes e não achei. Faz algum tempo que “mexi” com o PIC e resolvi revisitá-lo, começando com o PIC16F84, pois tenho alguns por aqui em meu “Laboratório”. Comecei a procurar por vc na internet e achei referencias suas no “Embarcados” e de lá aqui para o Embeddedsystems.io.

    Para minha surpresa, ao ler a sua história, descobri que vc está no Canadá e trabalhando na Geotab!
    Aqui no Brasil tenho trabalhado nos último anos com os produtos da Geotab, especificamente o GO7. Achamos o produto sensacional, uma solução muito bem eleborada.
    Por aí conhecemos o Eugenio, que já nos visitou aqui no Brasil e que de vez em quando nos dá algum suporte.
    Se quiser continuamos a conversa em privado.

    Abs

    Helio

Comments are closed.