Busque no blog

terça-feira, 30 de outubro de 2012

Zilog - Z8 encore  gravação, debugagem  e circuito de conversor por transistor comum... 



       

          Vamos agora abordar a parte de gravação dos microcontroladores da Zilog usando um conversor serial para TTL transistorizado e integrado todos os circuitos que são necessários para que a gravação seja perfeita.
          Na figura abaixo podemos perceber que temos componentes simples e fáceis de serem encontrados na loja www.cleapseletroeletronica.com e o que não encontrar basta deixar um aviso ou comentário no próprio site. Perceba que o circuito é muito simples e foi criado em um programa opensource chamado KICAD PCB e que pode ser baixado e usado livremente no site www.kicad-pcb.org . Desenvolvemos este gravador para que as pessoas possam fazer em casa de maneira prática e fácil.


          Observe que a alimentação vem da placa com o microcontrolador e é só plugar o gravador ou desplugar sem comprometer nenhum pino do MCU o que é fantástico quando se está trabalhando com gravação de microcontrolador. 
         Neste contexto, sempre que perdermos um gravador, comprado e caro e um debugador também, temos a infelicidade de comprar novos sempre que perdemos ou temos de atualizar algo pagando algum tipo de licença e com os microcontroladores da Zilog, isso não acontece. 
          É importante observar que não é comum achar esses microcontroladores no Brasil, mas é possível conseguir amostras para seus experimentos e usando nosso circuito de gravação e debugagem de custo baixo é possível diminuir, drasticamente, os riscos com investimentos altos em produtos caros. 
          Bom, a zilog não tem uma política de marketing no Brasil devido ao número pequeno de desenvolvedores e de usuários, vamos ver se isso muda com a divulgação dos seus chips e da empresa e assim poder desmistificar a ideia de empresa que sumiu. O que não é verdade e que está mais forte que nunca. 
          Observamos na figura a seguir que o pino DBG é o único pino que fica separado somente para a função de carregar e descarregar o programa feito no ZDSII. Sendo muito importante essa característica quando estamos desenvolvendo algum projeto ou trabalho e precisamos ficar preocupados com que pino usar e que não ofereça conflito com nossos periféricos, ou do microcontrolador, ou externos. 
          Na figura abaixo criamos um circuito também simples e que deve ser alimentado com 3.3V, lembrando que os microcontroladores da zilog são tolerantes a tensão de 5V somente nos pinos no modo entrada e evitados nos pinos de alimentação. 
          No nosso caso, colocamos dois diodos 1N4007 em série para reduzir os 5V de entrada para perto de 4.0 V sem carga e para perto de 3.4V com carga. e não tivemos nenhum problema no nosso laboratório, inclusive acendendo leds e acionando relés. 

          Quero, aqui comunicar, que saibam da intenção de criar um kit que a pessoa simplesmente só precisa baixar o ZDSII da zilog e plugar no computador ou no laptop o tal kit e já começar a digitar os códigos e ir criando seus projetos e trabalhos. Se for de interesse, se manifestem para eu poder saber da dimensão do interesse das pessoas nessa linha de microcontroladores e assim poder saber quantos kits poderei criar. 
          Por hora é só e até a próxima aventura .... 
          andrepereira@ig.com.br 
          www.cleapseletroeletronica.com 

          


sábado, 27 de outubro de 2012

Zilog - MCU de fácil debugagem/gravação ...

Zilog - Z8encore e outras MCUs , gravação e debugagem pela serial do PC.


          Olá pessoal, quero falar agora sobre a sacada fenomenal da Zilog na forma de como podemos escrever os códigos, compilar e descarregar no chip com uma simples porta serial e aceitando, inclusive, conversores de porta usb para serial, inclusive encontrada no site www.cleapseletroeletronica.com para uso em laptops ou computadores sem porta serial física ou por hardware na placa mãe.
          A zilog, como disse, tem um portifólio de microcontroladores e outros dispositivos de memória e sistemas on chip e é uma empresa norte americana que ficou esquecida por aqui no Brasil desde os vídeos games em que eram usados com o microprocessador de nome Z80 e que deu alegria a muitas crianças e adultos com video games tipo ZX spectrum e outros da SEGA.
          Com o tempo a empresa e seus produtos acabaram ficando restritos a poucos desenvolvedores aqui no Brasil em virtude de falta de informação e de produtos a venda no mercado nacional associado a isso outros fatores como investimentos mais pesados de seus concorrentes por aqui, como a www.ti.com e www.microchip.com que praticamente ofuscaram e fizeram com que a zilog deixasse de existir.
          Depois de algum tempo eles resolveram otimizar os CHIPS e o software de programação, criando as linhas Z8 encore e Z8 encore XP, além de outras. Essas duas linhas de microcontroladores são de alta performance e programáveis on chip com uma simples porta serial e conversores seriais Cmos para TTL de 3.3V. Isso mesmo, os chips da Zilog são de baixo consumo e baixa voltagem com uma maior performance comparado com a arquitetura antiga do Z80, mas seguindo a mesma linha de programação em assembler.
          Depois de receber algumas amostras do modelo Z8F6423FT020EG e fazer alguns testes, percebi que programar nele é uma tarefa fácil e confortável e o fato de poder usar um pino apenas de debugem  e gravação, fiquei muito feliz. Fiz o famoso "hello world" dos microcontroladores que é o acender dos leds e a manipulação dos dados internos e dos periféricos da MCU com a maior desenvoltura. Achava eu que teria que ter uma paciência maior e não foi assim.
          Aqui no Brasil eu não sei quem vende ou revende Zilog, mas se houver interessados eu importo alguns kits ou microcontroladores dessa empresa para poder ofertar ao mercado. Se manifestem, se gostaram da novidade.
          Conforme se vê no exemplo de um gravador por porta serial é, somente, por um pino que o microcontrolador recebe os dados que serão gravados nele e debugar as informações contidas nele. É percebível a facilidade e a genialidade de quem criou essa forma de gravar o microcontrolador pois libera os outros pinos de serem sacrificados para essa função como acontece com muitos outros microcontroladores de concorrentes. Querendo deixar claro que não existe microcontrolador melhor um do outro, pois cada um tem suas características que se enquadram no problema a ser resolvido associando a isso as ferramentas e os softwares que vão compor a solução de algum problema, sendo assim, fuja de profissionais que alegam que os micros que eles conhecem são melhores, pois isso é o ponto de vista deles e não a realidade em questão.
          Para efeito de exemplo, a linha Z8 encore e Z8 encore XP contam com um leque de periféricos como, UART, TIMERS,I2C e outras funções que compõem outras famílias de microcontroladores dos concorrentes. O diferencial é ter o software para linguagem assembler e totalmente ilimitado para ANSI C, se comparado com alguns softwares dos concorrentes que limitam o tamanho do código de suas MCUs, o que permite escrever códigos complexos sem se preocupar com tamanho do código com relação a essas limitações do programa, se preocupando com a quantidade de memória do microcontrolador.
          Na figura abaixo temos um diagrama em blocos dos periféricos que compõem essa linha e podemos tirar como exemplo o modelo Z8F6423FT020EG que é um microcontrolador de 20Mhz, funcionando com 3.3V, 64Kb de memória flash, 4Kb de RAM,Conversor AD de 10bits em 12 canais, até 4 timers de 16bits com capacidade de manipular PWM, WDT com oscilador interno, até três canais de DMA, até 60 I/Os, 24 interrupções com prioridades configuráveis, OCD que permite usar um pino para gravação e debugagem, Brown out protect, Power-on reset e funciona com 3.3V tolerante a aceitar sinais de entrada de 5volts.


          Tentaremos fazer um kit e escrever alguns códigos para apresentar o produto como mais uma alternativa para quem trabalha, vive de ou gosta de eletrônica pura e simplesmente. Mas preciso que se manifestem a fim de poder sensibilizar o pessoal da Zilog nos EUA para olharem mais para o mercado brasileiro. Quero que lembrem que este tipo de produto e dessa empresa embarcou muitos videos games nas nossas casas e projetar e programar esses microcontroladores hoje em dia seria muito gratificante e desafiador em virtude de ser uma novidade mesmo existindo a mais de 40 anos essa empresa. 
          No mais é isso e queria receber comentário, dicas ou sugestões. Meu email de contato é andrepereira@ig.com.br e meu site de produtos é www.cleapseletroeletronica.com e muito obrigado a todos .... 

quinta-feira, 25 de outubro de 2012

Zilog MCU uma abordagem ...

Zilog MCU uma abordagem ... 
Achou interessante e quer ajudar com um valor simbólico ? Clique !


            A ZILOG é uma empresa fundada por Federico Faggin em 1974 sendo ele um dos inventores dos primeiros microprocessadores do mundo.
          A empreza produz produtos em semicondutores para usuários de engenharia, técnicos e entusiastas em eletrônica para a criação de projetos inovadores e criativos.
          A ZiLOG é, também, uma empresa ganhadora de prêmios mundiais na sua categoria e já produziu mais de 1 bilhão de microprocessadores e microcontroladores das linhas Z80 e Z8. Desenvolvedores e empresas podem conseguir maiores possibilidades de colocarem no mercado produtos mais inovadores muito mais rápido devido às ferramentas de desenvolvimento e depuração em hardware e software que ajudam na criação dessas possibilidades na construção de máquinas diversas, telecomunicações, máquinas de venda sistemas de automação residencial e industrial, controles remotos e diversas outras possibilidades.
          Dentre as possibilidades, a empresa conta com uma produção em massa de semicondutores diversos e para vários segmentos. Podemos dizer que seu foco é em microprocessadores, microcontroladores, memórias e processadores de informações digitais que podem ser programados de acordo com a necessidade do desenvolvedor e do problema a ser resolvido.
          Seus produtos são de uso geral e para aplicações específicas (ASSAPs). Os produtos de aplicações específicas não são proprietárias para simples usuários isso por que os produtos de uso geral não são nem para aplicações e nem para desenvolvedor específico, podendo cada um desenvolver o que a imaginação permitir  pois os microcontroladores e microprocessadores possuem áreas internas para se gravar o código que quiser. 
          A Zilog fornece produtos para as mais variadas aplicações, incluindo aí eletrônica de consumo e aplicações, automação de fábricas processos de transações bancárias, periféricos para computador e automotiva dentre várias outras aplicações. 
           O número total de modelos de semicondutores é muito amplo e somente uma visita ao site www.zilog.com poderia sanar algumas dúvidas e escolher o que mais se adequa as suas necessidades. 
           O histórico de modelos de produtos é muito rico e permite sempre inovação de acordo com o mercado e na otimização de firmware na programação desses micros. Eles reinventam continuamente os cores dos seus produtos e, recentemente, introduziram a linha Z8 encore e eZ80 Acclaim!  de microcontroladores. Essas famílias oferecem uma excelente performance e facilidade de uso e aprendizagem. A empresa se preocupa em fornecer continuamente produtos com um número cada vez maior e melhor de funcionalidades permitindo ao mercado ter um produto cada vez mais do tipo SoC ou "system on chip". Essas funcionalidades incluem funções analógicas como conversores analógico para digital, funções de comunicação do tipo UARTs, SPI, I2C e Ethernet, além de funções de auto diagnóstico e proteção, como WDT, Brown out detect e power on reset, simultaneamente, a empresa procura desenvolver cada chip com áreas maiores de memórias RAM e memórias de programa para a execução de programas mais complexos e facilidade com interação com códigos feitos em linguagem C.




          A algum tempo a zilog fez um grande investimento na atualização da sua ferramenta de desenvolvimento por software criando o Developer Studio II, um conjunto de programas em uma IDE,  com melhores e maiores quantidades de bibliotecas, linkadores, assembladores, debugador e compilador C e tudo isso compatível para a maioria das famílias de microcontroladores e microprocessadores. A Zilog também aceita uma variedade grande de ferramentas de terceiros.
          Seus novos planos e melhoramentos estão, agora, no desenvolvimento de programas e códigos de licença grátis para serem usados em sua linha de microcontroladores focando em protocolos de comunicação como TCP/IP e IrDA.  
          Seu principal software de desenvolvimento é o Developer Studio I e II, conhecidos como ZDSII e podem ser encontrados no site da própria ZILOG e é de uso ilimitado quanto a código e aceita tanto assembler quanto compilador C e programa a maioria dos microcontroladores com um pino apenas, o chamado DBG que aceita, inclusive ser reconhecido por uma porta serial emulada por USB-SERIAL. Nem todos, mas conseguimos gravar o CHIP com um modelo HL-340 que usa um prolific 2303 qualquer. 

          Se você gostou desse post e quer mais informação sobre os produtos da Zilog, pode acessar o site deles. Tentaremos postar alguns projetos e assuntos correlatos para que este maravilhoso microcontrolador possa fazer parte do nosso portifólio e assim aumentar o leque de opções para nossos futuros e atuais desenvolvedores de projetos eletrônicos e merecer um país mais desenvolvido e criativo. 
          Comentem, é muito importante ....           



sábado, 20 de outubro de 2012

Ferramentas de desenho de PCB - KICAD

Ferramentas de desenho de PCB - KICAD 

Achou interessante e quer ajudar com um valor simbólico ? Clique !


          Olá nobres leitores, gostaria de comentar sobre um programa opensource para desenho de placa de circuito impresso de nome KICAD que pode ser baixado em www.kicad-pcb.org e é um programa que roda em Lnux, windows e MAC e que vem crescendo muito em virtude do acréscimo de novos desenvolvedores ao redor do mundo que o faz um software potente para trabalhos industriais e profissionais. Até a presente data não consta a inclusão de simuladores mas já existem grupos de usuários que já colocaram scripts SPICE nele para efetuarem algumas simulações, uma glooglada deve levar a algum grupo de desenvolvedores com outras funcionalidades e plugins, além de bibliotecas feitas por usuários.
          O KICAD é hoje um programa de desenho de placas de circuito impresso e esquemários  de eletrônica e elétricos e serve para uso eletrônico e de circuitos elétricos, sendo útil para eletricistas e eletrônicos.
          Kica gera arquivos gerber, postcript e vetoriais do tipo SVG. Seu aprendizado é muito rápido e a criação de desenho muito eficiente, permitindo que o programa seja de acesso rápido para escolas técnicas e universidades com cursos de sistemas e engenharias elétricas e eletrônicas.
          Um coadjuvante do KICAD para a criação de peças em 3D é o www.wings3d.org , um programa de modelagem 3D opensource e o escolhido para gerar arquivos .wrl que o kicad aceita.  Existe a possibilidade de termos como programa 3D o www.blender.org  que é mais completo e de difícil aprendizado e que pode dar maior realismo para as peças criadas.

          Desenhar com o kicad é muito fácil e rápido. Brevemente tentarei postar um tutorial bem básico de Kicad e transferência térmica para que o leitor possa criar suas plaquinhas  e assim fazer alguns projetos em eletrônica.
          No mais é interessante conhecer este programa pela potencialidade dele que permite fazer projetos profissionais com qualidade industrial. Qualquer meio capaz de trazer inovações e ser gratuito, ou mesmo baixo custo, é importante para alavancar a profissão ou o trabalho de quem dependa dessas ferramentas.
          A muito tempo o programa favorito dos projetistas era o EAGLE pcb, gratuito com limitações de tamanho das placas e até dois layers. Então surge o KICAD com limitações profissionais de programa e após anos de aperfeiçoamento, se tornou uma ferramenta de grandes qualidades e potencialidades.
          Se você gostou e quer dar sua opinião ou tem dúvidas sobre o programa e deseja maiores informações, fique a vontade para perguntar.

terça-feira, 16 de outubro de 2012

LaunchPad MSP430G2 no UBUNTU

Rodando a Launchpad da Texas instruments no Linux UBUNTU 

Achou interessante e quer ajudar com um valor simbólico ? Clique !


   
          Para quem usa linux para rodar esses programas que usam qualquer dispositivo plugado na porta USB como a nossa launchpad, deve ficar atento quando não tiver nada funcionando ao instalar o programa e achar ser algo anormal e difícil de resolver. Como todos os usuários de Linux deve saber, as portas do computador são protegidas e só liberadas pelo usuário segundo regras que este define e que para muitos usuários é complicado de definir. Motivo pelo qual o LINUX é um sistema operacional destinado a pessoas que querem desenvolver seja lá como for e o que for pois é destinado a pessoas que querem uma liberdade de deixar seus trabalhos dos seus jeitos e é deixado de lado de imediato por pessoas ainda viciadas no windows que é só ligar e usar e que já vem com várias portas e até programas abertos para qualquer invasão ou inclusão de vírus.
          Bom, com relação a nossa plaquinha, vamos começar ensinando como habilitar a porta USB para que o ENERGIA possa ver a launchpad e, assim, gravar o programa que você deseja.
          Se você teve o seguinte erro ao iniciar um projeto no ENERGIA e ficou frustrado, não se preocupe, tem solução :


                        Trying to open interface 1 on 033
rf2500: warning: can't detach kernel driver: Operation not permitted
rf2500: can't claim interface: Operation not permitted
rf2500: failed to open RF2500 device

          Primeiro vamos abrir o terminal. Acho que todos sabem abrir o terminal, se não, basta ir no menu do UBUNTU e procurar por acessórios -> Terminal que deve parecer com o que se vê a seguir : 


          A partir daqui vamos falar de terminal da forma como se apresenta acima, ok ? 
          Se observar, sempre que falarmos em entrarem modo root ou não, sempre acrescente a palavra 'sudo' para poder entrar com a senha do computador e poder trabalhar em modo administrador e, assim, proceder com o projeto. 
          Primeiro conecte sua launchpad na porta USB disponível e no terminal digite 'lsusb' e teremos o Vendor ID e product ID de quem estiver conectado. Se somente a launchpad for a felizarda, aparecerá a relação de dispositivos. 
          No caso aqui no computador, temos VID e PID como sendo 0451:f432 e usaremos essa informação para habilitar a launchpad e assim ela poder funcionar perfeitamente. 

Bus 005 Device 005: ID 0451:f432 Texas Instruments, Inc. eZ430 Development Tool

          Agora, digitando no terminal  : sudo nano /etc/udev/rules.d/46-TI_launchpad.rules  
          Abriremos o nano, um programa de configuração e criação de regras de funcionamento de muitas funcionalidades do LINUX Ubuntu e Mint e digitamos o que se segue : 

ATTRS{idVendor}==0451, 
ATTRS{idProduct}==f432, 
MODE=0660, 
GROUP=plugdev                                      
                 
          Para salvar e sair basta apertar CTRL-O e CTRL-X e novamente entramos no terminal e digitamos 'sudo restart udev' saímos do terminal e com a launchpad plugada abrimos o energia na pasta onde este foi baixado e descompactado e instalado. Diferentemente de programas windows, para abrir o ENERGIA clicamos no script e escolhemos executar, a partir de então sua launchpad pode ser usada para gravar seus programas pŕediletos. 
          Vamos abrir o energia e digitar o seguinte código e salvar, depois gravar e ver os efeitos nos dois leds da placa : 


*
 LED pisca
 Liga e desliga os leds conectados em P1.0 e P1.6 por aprocimadamente um segundo repetidamente.
 Este trecho de código é de uso público .
 */
void setup() {                
  // Inicializa os pinos digitais como saída.
  // Pino 2 e 14 possuem leds conectados :
  pinMode(14, OUTPUT);  
  pinMode(2, OUTPUT);    
}

void loop() {
  digitalWrite(14, HIGH);   // Led ligado
  delay(1000);              // espera 1 seg.
  digitalWrite(14, LOW);    // Led desligado
  delay(1000);              // Espera 1 segundo.

  digitalWrite(2, HIGH);   // Led ligado
  delay(1000);              // Espera 1 segundo
  digitalWrite(2, LOW);    // led desligado
  delay(1000);              // espera 1 seg.
}

          Depois de digitar o código acima no programa energia aberto, basta pressionar CTRL+U e em seguida ver os leds piscando. Com isso, acho que foi criado um modo específico de ajudar quem é usuário de arduino e acabou de conhecer a launchpad da Texas instruments e quer usar dentro do mesmo conceito do arduino só que em LINUXm, está aí a dica.
          Para maiores informações e onde eu consegui resolver a pendenga da Launchpad não funcionar, eu li e reli este blog magnífico que é o hackaday no link : 

          Neste link acima existem infinitas outras coisas de uso geral e útil, então procurem por mais soluções lá que tem repleto. 

          Muito obrigado e até a próxima.... 

     





domingo, 14 de outubro de 2012

TI launchpad MSP430G2 - A mais barata plataforma de desenvolvimento

TI launchpad MSP430G2
A mais barata plataforma de desenvolvimento
Para adoradores do caríssimo Arduino, uma alternativa.
             Olá, hoje vamos falar de uma alternativa ao arduino, muito mais barata e muito mais em conta e que usa o mesmo conceito do programa para arduino na programação, quero apresentar o ENERGIA. Uma plataforma de desenvolvimento de custo reduzido que permite o reaproveitamento de códigos para o caríssimo arduino na launchpad da Texas Instruments e maior flexibilidade em uma placa de menos de 40,00 reais que também pode ser adquirida na www.cleapseletroeletronica.com .


          Para maiores informações sobre o energia é possível acessar o github do google e obter todas as informações sobre o programa. Quem já programa em www.processing.org ou mesmo já digita códigos para arduino, estará muito a vontade no uso da launchPad da Texas instruments e poderá reutilizar os periféricos deste na launchpad e desenvolver muitos projetos nesta diminuta placa que já incorpora o debugador e o gravador e roda tanto em linux quanto em windows. 
          Um exemplo simples de programa usando a plataforma launchpad da Texas Instruments é o vídeo que fiz para mostrar a facilidade e a usabilidade do programa e do hardware sem muita complicação, simples fácil e rápido. Segue um breve exemplo : 


          Como podemos ver no vídeo acima é comum o uso da protoboard mas uma placa pronta para uso imediato é muito melhor. No exemplo acima eu criei a placa com leds e botôes somando a esta três sensores (temperatura, luz e potenciômetro) a fim de facilitar o uso e desenvolvimento sem ter de ficar retirando componentes eletrônicos da protoboard e facilitando o transporte além de outras comodidades e esta placa está a venda na wwwcleapseletroeletronica.com também.

_________________________________________________________________________________
Começando a usar o energia
_________________________________________________________________________________

          Depois de baixar e instalar o energia, é hora de usar o programa criando alguns exemplos como segue. Primeiro vamos abrir o programa. 
          Depois vamos selecionar a porta onde é conectado e a placa que estamos trabalhando. Se estiver usando linux é /dev/ttyS0 ou o que estiver mostrando na lista do programa na aba tools e se for windows é a COMx que estiver conectada. A placa escolhida é a launchpad versão 1.4 e, usando o microcontrolador que já vem nela, o MSP430G2231, escolhemos esta placa como segue. 



          
          Agora podemos escolher dentre vários exemplos e brincar com o programa e com a placa. No nosso exemplo vamos fazer o famoso 'hello world' que consiste em piscar um led o que é comum entre os microcontroladores quando se vai ter o primeiro contato com o mesmo. Vejamos a figura a seguir. 


Agora que o programa apareceu é só compilar e baixar na placa clicando no botão


          Após compilar e descarregar o programa e o led na launchpad começar a piscar é por que que tudo deu certo, caso contrário reveja as ligações e consulte o manual no site do grupo que criou e mantém o programa e aproveite para fazer novos projetos e novas ideias a serem expostas com este maravilhoso kit de custo reduzido. Novos posts a respeito deste assunto poderão vir a tona, por favor, comentem, ajudar ao blog com mais ideias e sugestões é sempre bem vindo e obrigado por ter tido a paciência de chegar até aqui. 


sábado, 13 de outubro de 2012

Controle remoto com PIC12f629 - parte2

andrepereira@ig.com.br 


Todo o conteúdo da apostila está escrito aqui no blog para quem quiser fazer este projeto que agora é free. Continuando o assunto ....


Uma outra observação é com relação ao capacitor eletrolítico de 10uF-16V, este deve ser considerado como polaridade descrita a baixo não esqueça disso.

Apêndice A

Receptor IR



Transmissor IR




Apêndice B

Receptor IR


Transmissor IR



Apêndice C


Código ASM do PIC12F629 do receptor

;___________________________________________________________________________
; Projeto controle remoto de três canais , adaptado para o PIC12F629
; oscilador interno de 4Mhz
; MPLAB 7.30 ou maior , assembler
; formato RC5 , 36Khz , 35% de ciclo ativo
; Endereço do dispositivo 0X0B -- 00001011 deve ser mudado ao gosto do usuário
; SW1 = GP1 = 0X01
; SW2 = GP3 = 0X02
; SW3 = GP2 = 0X03
; IR = GP0 = IR
; Bit Toggle sempre é lido como 0
; andrepereira@ig.com.br ,qualquer doação será bem vinda,em resposta ao reconhecimento
; desta obra, aperfeiçoada e adaptada para o português.
;
;----------------------------------------------------------------------------------------------------------------------
; Programa do receptor RX
;-----------------------------------------------------------------------------------------------------------------------

list P=12F629
#include

#DEFINE    IR GPIO,3 ; Entrada do sinal RC5 com R de 10K pull-up para vcc
#DEFINE    OUT1 GPIO,0 ; controle da saída 1
#DEFINE    OUT2 GPIO,1 ; controle da saída 2
#DEFINE    OUT3 GPIO,2 ; controle da saída 3
#DEFINE    OUT1_M 0x01
#DEFINE    OUT2_M 0x02
#DEFINE    OUT3_M 0x04
#DEFINE    TOG_BIT TOGGLE,0
#DEFINE    ADDRS 0X0B  ; 0000 1011 ; 0000 1110 , verificar na tabela o endereço desejado
#DEFINE    CH1_CMD 0X01
#DEFINE    CH2_CMD 0X02
#DEFINE    CH3_CMD 0X03

CNT1 EQU  20H
CNT2 EQU  21H
CNT3 EQU  22H
CNT4 EQU  23H
TEMP EQU  24H
TOGGLE EQU 25H
ADDR EQU 26H
CMD EQU 27H

ORG 000

BSF STATUS,RP0
CALL 0X3FF
MOVWF OSCCAL
BCF STATUS,RP0
CALL DEBOUNCE
MOVLW 0X07
MOVWF CMCON ; Configura registro GPIO em digital
BSF STATUS,RP0
MOVLW 0X01
MOVWF OPTION_REG
MOVLW B'00001000'
MOVWF TRISIO
CLRF IOCB
BCF STATUS,RP0
BCF INTCON,GIE
CLRF GPIO ; Desliga todas as entradas
;
MAIN:
   CALL DELAY3500
   CALL GET_RC5
   BTFSC STATUS,C
   GOTO MAIN
;
MOVF ADDR,W
XORLW ADDRS
BTFSS STATUS,Z
GOTO MAIN ;endereço inválido
;
MOVF CMD,W
ANDLW 0X03 ; mascara 2 LSB
ADDWF PCL,F
GOTO MAIN ; COMMANDo 0X00 Não usado Ou comando errado
GOTO DO_CH1
GOTO DO_CH2
GOTO DO_CH3
DO_CH1: MOVLW OUT1_M
GOTO CHANGE
;
DO_CH2: MOVLW OUT2_M
GOTO CHANGE
;
DO_CH3: MOVLW OUT3_M
CHANGE: XORWF GPIO,F
GOTO MAIN

;======================================
; Leitura do formato RC5
; OUTPUT : TOGGLE.7 = TOGGLE BIT
; ADDR = endereço de 5 BIT
; CDM = comando de 6 BIT
; C = 0 sinal RC5 OK
; = 1 sinal RC5 inválido
;======================================
GET_RC5:BTFSC IR
GOTO GET_RC5 ; Aguarda início do sinal RC5
CLRF TMR0 ; Limpa timer0
NOP
BCF INTCON,T0IF ; limpa bit TOIF da interrupção TMR0
NOP
;
BTFSC INTCON,T0IF
GOTO ERR1
;
BTFSS IR
GOTO $-3
;
MOVF TMR0,W
;MOVLW 0xC8 ; só desabilite para testar
MOVWF TEMP
MOVLW 0XFF ; 1020 mS = 255*4
SUBWF TEMP,W
BTFSC STATUS,C
GOTO ERR1 ; inválido se Tempo > 1020 uS
MOVLW 0XC8 ; 800 mS
SUBWF TEMP,W
BTFSS STATUS,C
GOTO ERR1 ; inválido se Tempo < 800 uS (C8h * TM0 Prescaler = 800 uS )
;
BTFSC IR ; tempo de sinal válido 800uS-1020uS
GOTO $-1 ; Espera chegar a zero (Syn BIT)
CALL DELAY1252 ; atraso de 3/4 do BIT comprimento=1252 uS
;
BTFSS IR
BCF TOGGLE,7
BTFSC IR
BSF TOGGLE,7
;
BTFSS IR
GOTO $+4
BTFSC IR
GOTO $-1
GOTO READ
;
BTFSS IR
GOTO $-1

;====== Leitura de endereço de 5 BIT ===========
; ler primeiro os MSB
;
READ: MOVLW 5
MOVWF TEMP ; LOOP
CLRF ADDR
;
READ1: CALL DELAY1252
BTFSS IR
BCF STATUS,C
BTFSC IR
BSF STATUS,C
RLF ADDR,F ; rotaciona endereço para esquerda
;
BTFSS IR
GOTO $+4
BTFSC IR ; aguardar chegar a zero
GOTO $-1
GOTO $+3
;
BTFSS IR
GOTO $-1
;
DECFSZ TEMP,F
GOTO READ1
;
;====== leitura de comando de 6 BIT ===========
; ler primeiro os MSB
;
MOVLW 6
MOVWF TEMP ; LOOP
CLRF CMD
;
CMD1: CALL DELAY1252
BTFSS IR
BCF STATUS,C
BTFSC IR
BSF STATUS,C
RLF CMD,F ; Rotaciona comando a esquerda
;
BTFSS IR
GOTO $+4
BTFSC IR
GOTO $-1
GOTO $+3
;
BTFSS IR
GOTO $-1
;
DECFSZ TEMP,F
GOTO CMD1
;
MOVLW 0X3F ; 0011 1111
ANDWF CMD,F
MOVLW 0X1F ; 0001 1111
ANDWF ADDR,F
BCF STATUS,C ; C=0 válido
RETURN
;
ERR1: BSF STATUS,C ; C=1 inválido
RETURN

;======================================
; tratamento de DEBOUNCE
; atraso de 15 mS
;======================================
DEBOUNCE:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
DEL_1: MOVLW .20
MOVWF CNT2 ; 1
DEL_2: CLRF CNT3 ; 1
DEL_3: DECFSZ CNT3,F ; 1/2
GOTO DEL_3 ; 2
DECFSZ CNT2,F ; 1/2
GOTO DEL_2 ; 2
DECFSZ CNT1,F ; 1/2
GOTO DEL_1 ; 2
RETLW 0 ; 2

;======================================
; atraso de 1.252mS
;======================================
DELAY1252:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
REP_1: MOVLW .5
MOVWF CNT2 ; 1
REP_2: MOVLW .81
MOVWF CNT3 ; 1
REP_3: DECFSZ CNT3,F ; 1/2
GOTO REP_3 ; 2
DECFSZ CNT2,F ; 1/2
GOTO REP_2 ; 2
DECFSZ CNT1,F ; 1/2
GOTO REP_1 ; 2
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
RETURN ; 2 ciclos de máquina

DELAY3500:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
MOVLW .23
MOVWF CNT2 ; 1
MOVLW .50
MOVWF CNT3
DECFSZ CNT3,F ; 1/2
GOTO $-1 ; 2
DECFSZ CNT2,F ; 1/2
GOTO $-5 ; 2
DECFSZ CNT1,F ; 1/2
GOTO $-9 ; 2
RETLW 0 ; 2
END

Código ASM do PIC12F629 de transmissor

;___________________________________________________________________________
; Projeto controle remoto de três canais , adaptado para o PIC12F629
; oscilador interno de 4Mhz
; MPLAB 7.30 , assembler
; formato RC5 , 36Khz , 35% de ciclo ativo
; Endereço do dispositivo 0X0B -- 00001011 deve ser mudado ao gosto do usuário
; SW1 = GP1 = 0X01
; SW2 = GP3 = 0X02
; SW3 = GP2 = 0X03
; IR = GP0 = IR
; Bit Toggle sempre é lido como 0
; andrepereira@ig.com.br ,qualquer doação será bem vinda,em resposta ao reconhecimento
; desta obra,aperfeiçoada e adaptada para o português
;PROJETO : 3 Canais IR Transmissor MPLAB : 7.11
;--------------------------------------------------------------------------------------------

list P=12F629
#include
;__config _WDT_OFF & _XT_OSC & _CP_ON & _CPD_ON & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON

#DEFINE CH1 GPIO,0 ; CONECTA TRANSMISSÃO PELO CANAL 1
#DEFINE CH2 GPIO,1 ; CONECTA TRANSMISSÃO PELO CANAL 2
#DEFINE CH3 GPIO,3 ; CONECTA TRANSMISSÃO PELO CANAL 3
#DEFINE IR GPIO,2 ; SAÍDA DE SINAL INFRAVERMELHO
#DEFINE TOG_BIT TOGGLE,0 ; NÃO É USADO SEMPRE É LIDO COMO 0
#DEFINE CH1_CMD 0X01 ; COMANDO DO CANAL 1
#DEFINE CH2_CMD 0X02 ; COMANDO DO CANAL 2
#DEFINE CH3_CMD 0X03 ; COMANDO DO CANAL 3

CNT1 EQU 20H
CNT2 EQU 21H
CNT3 EQU 22H
CNT4 EQU 23H
TOGGLE EQU 24H
CMD EQU 25H ; Registro temporário do Commando IR

ORG 000
BCF IR
BSF STATUS,RP0
CALL 0X3FF
MOVWF OSCCAL
BCF STATUS,RP0
CALL DEBOUNCE
;
MOVLW 0X07
MOVWF CMCON ; Faz GPIO como sendo digital
BSF STATUS,RP0
BCF OPTION_REG,7 ; abilita WEAK PULL-UP
BCF WPU,2 ; desabilita WEAK PULL-UP para GPIO2
MOVLW B'00001011' ; GPIO<0> = entrada , GPIO 2 = saída
MOVWF TRISIO
BSF IOCB,IOCB0
BSF IOCB,IOCB1
BSF IOCB,IOCB3
BSF INTCON,GPIE
BCF STATUS,RP0
BCF INTCON,GIE
BCF TOG_BIT
;------------------------------------
; LOOP principal
MAIN: SLEEP ; entra no modo sleep para poupar energia
BTFSS CH1
GOTO DO_CH1
BTFSS CH2
GOTO DO_CH2
BTFSS CH3
GOTO DO_CH3
GOTO MAIN

;------------------------------------
DO_CH1:
CALL DEBOUNCE
BTFSC CH1
GOTO MAIN
MOVLW CH1_CMD ; Carrega comando para o canal 1
MOVWF CMD
CALL SEND_RC5
;
BTFSS CH1
GOTO $-1 ; espera botão ser solto
;
CALL DEBOUNCE ; atraso do botão solto (após apertá-lo)
GOTO MAIN

;------------------------------------
DO_CH2:
CALL DEBOUNCE
BTFSC CH2
GOTO MAIN
MOVLW CH2_CMD ; carrega comando para o canal 2
MOVWF CMD
CALL SEND_RC5
;
BTFSS CH2
GOTO $-1 ; espera botão ser solto
;
CALL DEBOUNCE ; atraso do botão solto (após apertá-lo)
GOTO MAIN
;
;------------------------------------
DO_CH3: CALL DEBOUNCE
BTFSC CH3
GOTO MAIN
MOVLW CH3_CMD ; carrega comando para o canal 3
MOVWF CMD
CALL SEND_RC5
;
BTFSS CH3
GOTO $-1 ; espera botão ser solto
;
CALL DEBOUNCE ; atraso do botão solto (após apertá-lo)
GOTO MAIN
;
;======================================
; envia lógica 0
;======================================
LOGIC0: MOVLW .32 ; 1
MOVWF CNT1 ; 1
;
LOG0_1: BSF IR ; 1 faz IR alto por 35% de ciclo ativo = 9 uS
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
;
;===================================
BCF IR ; 1 faz IR baixo por 17 uS
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
NOP ; 1
;
DECFSZ CNT1,F ; ½
GOTO LOG0_1 ; 2 26 uS
;
CALL DELAY_OFF
RETURN ; 2
;
;======================================
; envia lógica 1
;======================================
LOGIC1: CALL DELAY_OFF ; atraso de 899 uS
MOVLW .32 ; 1
MOVWF CNT1 ; 1
;
LOG1_1: BSF IR ; 1 Faz IR alto por 35% de ciclo ativo = 9 uS
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
;
;===================================
BCF IR ; 1 Faz IR baixo por 17 uS
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
NOP ; 1
;
DECFSZ CNT1,F ; ½
GOTO LOG1_1 ; 2
;
RETURN ; 2
;
;======================================
; Atraso de nenhum sinal
; de aproximadamente 835 uS
;======================================
DELAY_OFF:
MOVLW 5 ; 1
MOVWF CNT3 ; 1
MOVLW .54 ; 1
MOVWF CNT4 ; 1
DECFSZ CNT4,F ; ½
GOTO $-1 ; 2
DECFSZ CNT3,F ; ½
GOTO $-5 ; 2
RETURN ; 2
;======================================
; envia comando RC5 para o receptor
; entrada : CMD (comando IR de 6 BIT )
;======================================
SEND_RC5:
; SEND 2 START BIT
CALL LOGIC1
CALL LOGIC1
; SEND TOGGLE BIT
BTFSS TOG_BIT
GOTO $+3
CALL LOGIC1
GOTO $+2
CALL LOGIC0

; envia endereço de 5 BIT fixo em 01011 (0X0B) pode ser mudado pelo usuário
CALL LOGIC0 ; 0 primeiros MSB ( BIT 4)
CALL LOGIC1 ; 1
CALL LOGIC0 ; 0
CALL LOGIC1 ; 1
CALL LOGIC1 ; 1 LSB BIT 0
;
; envio de comando de 6 BIT(00HH LLLL) MSB
BCF STATUS,C
RLF CMD,F ; após primeira rotação 0HHL LLL0
RLF CMD,F ; após segunda rotação HHLL LL00
;
MOVLW 6
MOVWF CNT2
;
RLF CMD,F ; envia os primeiros MSB
BTFSS STATUS,C
GOTO $+3
CALL LOGIC1
GOTO $+2
;
CALL LOGIC0
DECFSZ CNT2,F
GOTO $-7
;
RETLW 0
;
;======================================
; atraso para DEBOUNCE
; de 15 mS
;======================================
DEBOUNCE:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
DEL_1: MOVLW .20
MOVWF CNT2 ; 1
DEL_2: CLRF CNT3 ; 1
DEL_3: DECFSZ CNT3,F ; ½
GOTO DEL_3 ; 2
DECFSZ CNT2,F ; ½
GOTO DEL_2 ; 2
DECFSZ CNT1,F ; ½
GOTO DEL_1 ; 2
RETLW 0 ; 2
END

Finalização


Se você gostou deste projeto , escreva um e-mail para que eu possa saber.Se desejar fazer alguma crítica ou mesmo dar uma sugestão ,me escreva .

Obrigado .

André Pereira da Silva
andrepereira@ig.com.br 
Técnico industrial / Eletrotécnico.
21 – 91267264
Rio de Janeiro.