sexta-feira, 5 de junho de 2020

Pickit2 Clone (eGB)

É um gravador para microcontroladores PIC da Microchip Semicondutores. Na verdade o Pickit2 é produzido por esta empresa e vendida a valores acessíveis para desenvolvedores de circuitos microcontrolador, mas o propósito deste artigo é descrever uma versão clone deste programador.

O Pickit2 Clone utiliza um microcontrolador PIC18F2550 ou 18F4550, neste caso em especial foi utilizado um 18F4550 pela disponibilidade dele na versão SMD TQFN de 44 pinos o que torna o gravador extremamente pequeno e confiável.

A técnica aplicada no layout de confecção da placa foi utilizado o processo de placa dupla interligada por barra de pinos, processo em que tornou sua espessura aumentada tornando um dispositivo mais sólido, excluindo uso de cabo USB, transformou-se num dispositivo pratico.

Outra necessidade foi usar a montagem em dupla superfície pois separa a placa lógica da placa de step-up, que eleva a tensão dos 5V da porta USB para 11,5V para o MCLR (VPP) (Voltagem de Programação). A montagem em duas camadas com interior separado por barra de pinos abriga o indutor responsável por fazer o levante desta tensão, e como sabe-se, indutores são frágeis já que possuem corpo de ferrite, o que se tornou um ponto forte neste projeto em especial.

Nas imagens abaixo temos o layout das duas placas desta versão peculiar do Pickit2 Clone, ambas em imagem superfície cobreada (para impressão deve se espelhar).

O circuito é completamente compatível na versão do Pickit2 Versão 02.32.00 cujo arquivo hex já vem para os formatos do 18F2550 e 18F4550 (PK2V023200.HEX). Vale ressaltar que no projeto foi eliminado o pino de saída VDD, que constantemente dava erro tendo que reprogramar o Pickit2 com o software pois gerava erro de compatibilidade quando alimentado pelo VDD da porta ICSP e desconectado da porta USB. Para alimentar os microcontroladores a serem programados por ele foi elaborado um adaptador que fornece tensões escravas de 3,3V, 5V e 12V e a pinagem ICSP foi elaborada de acordo com o autor cujo desenvolveu cabos e pinagens exclusivas, não seguindo as especificações do Pickit2 da Microchip.

No diagrama esquemático abaixo temos o esquema completa do circuito, totalmente testado com a versão 02.32.00 mencionado anteriormente.

A imagem acima é o layout principal, onde se encontra o microcontrolador, porta USB, leds de status e botão de gravação. Na imagem abaixo vemos a placa driver, esta por sua vez, faz a interligação da placa principal e faz o levante de tensão para MCLR.

Abaixo uma imagem comparativa do tamanho final do Pickit2 Clone com PIC18F4550. Mais abaixo imagem com o Pickit2 inserido em um notebook.

Layouts feitos no Express PCB V7.8.0, já com o encaixe preciso das interconexões com barra de pinos e dimensionamento dos componentes SMD devidamente organizados.

A impressão deve ser feita em "Button copper layer" no Express PCB.


Clique no link abaixo para baixar os arquivos de layout, pdf do esquema e o hex para firmware do Pickit2 Clone, armazenado no 4Shared.
TODOS ARQUIVOS (rar):  Download
HEX firmware:          Download
Layer Principal:       Download
Layer Potencia:        Download
Esquema elétrico:      Download

O arquivo esta formatado em formato RAR e sem senha, bom proveito!
Os arquivos de layout já estão formatados e é só imprimir a laser e executar a transferência térmica, link de download do Express PCB. Download

HEF4094

Apesar de ser mais simples que o visto anteriormente, o HEF4094 também é um conversor serial/paralelo de 8 bits. A diferença é em sua ferramenta de expansão pois possui duas portas seriais implementáveis a outros circuitos.

Nele temos quatro portas principais de controle, entrada de Dados (D), sinal de Clock (CP), Strobe (STR) e Enable (OE).

Em aplicação geral, as portas CP e STR são ligadas em paralelo para entrada do Clock e caso não seja necessario o controle Enable (OE) deve ser ligado ao GND.

O Protocolo de comunicação em sua simplicidade não foge do 74HC595 que são basicamente identicos. Abaixo temos o diagrama de timing da comunicação SPI:

Os níveis lógicos de entrada para transição devem ser inferior a +1,5V para 0 (baixo) e superior a +3,5V para 1 (alto).

O que diferencia este circuito integrado também é a voltagem de operação, que pode ser de no máximo +18V e a corrente em cada saída Qs deve ser de no máximo 10mA contínuo.

Na próxima imagem temos o diagrama esquemático interno do circuito lógico empregado no HEF4094:

A imagem seguinte mostra a pinagem encontrada e aplicada ao HEF4094 de 16 pinos:


Símbolo

Pino

Descrição

STR

1

Strobe

D

2

Data

CP

3

Clock

QP0 a QP7

4 a 7, 14 a 11

Saída Paralela

VSS

8

Terra (0V)

QS1

9

Saída Serial 1

QS2

10

Saída Serial 2

OE

15

Enable

VDD

16

Fonte (+V)


Para implementarmos este integrado serial/paralelo em um circuito devemos prestar a atenção em na alimentação do circuito, pois os valores de nível lógico de entrada dependem da voltagem aplicada em VDD, pois ele é relativo. Deve ser consultada a folha de dados do componente para mais informações.

Para implementar mais circuitos em uma mesma linha de comunicação deve-se definir um CI como Controle Continuo e posteriormente os outros como escravos assumindo o diagrama seguinte.

Abaixo temos o exemplo de rotina baseada em linguagem C para microcontroladores PIC da Microchip feitos em CCS.


<main.c>

#include <18F4550.h>

#use delay(clock=20000000)

#fuses INTHS,NOWDT,NOPROTECT

 

#define DAT PIN_B0

#define CLK PIN_B1

 

unsigned int j;

unsigned int Valor;

const char Segments[1][8] = {{

   0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f

}};

 

const char Valores[1][7] = {{

   0x01,0x02,0x03,0x04,0x05,0x06,0x07

}};

 

void Escreve4094(char Dados){

   for(j = 0x40; j > 0; j = j >> 1) {

     if(Dados & j){

       output_high(DAT);

     }else{

       output_low(DAT);

     }

     output_high(CLK);

     output_low(CLK);

  }

}

 

void main() {

   setup_oscillator(OSC_8MHZ | osc_intrc);       

   delay_ms(1000);

   while(TRUE) {

      output_low(DAT);

      output_low(CLK);

      Valor = 1;

      Escreve4094(Segments[0][Valor]);

      delay_ms(1);

   }

}


Em caso de utilização de microcontroladores com portas Open-Drain é aconselhado o uso de resistores Pull-Up para fornecer as tensões de nível lógico alto (+V) para as linhas de Data, Clock, Strobe  e Enable do HEF4094.

Seguindo com o estudo do HEF4094, podemos encontrar diversas aplicações para ele, desde a controle de periféricos, displays, luminosos,etc. Sua aplicação é de importante valor para microcontroladores de baixo numero de portas I/O, onde podemos multiplicar de duas portas no micro para oito ou mais portas dependendo de quantos HEF4094 empregarmos.

Exemplo de utilização do HEF4094 para controle de um display LCD 16X2:

No esquema acima podemos implementar o codigo feito em linguagem C para microcontroladores PIC desenvolvidos na plataforma CCS.


<main.c>

#include <18F4550.h>

#use delay(clock=4000000)

#fuses INTHS


#include <3wire_lcd.c>


void main(void){

   lcd_initialize();

   lcd_cmd(LCD_CLEAR);

   delay_ms(2000);

   while( true ){  

      lcd_cmd(LCD_CLEAR);

      lcd_goto(1, 1); 

      printf(lcd_out, "EletroGB!");

      delay_ms(1000);

   }

}


<3wire_lcd.c>

#define LCD_DATA_PIN        PIN_b0
#define LCD_CLOCK_PIN        PIN_b1
#define LCD_EN_PIN        PIN_b2
#define LCD_FIRST_ROW          0x80
#define LCD_SECOND_ROW         0xC0
#define LCD_THIRD_ROW          0x94
#define LCD_FOURTH_ROW         0xD4
#define LCD_CLEAR              0x01
#define LCD_RETURN_HOME        0x02
#define LCD_CURSOR_OFF         0x0C
#define LCD_UNDERLINE_ON       0x0E
#define LCD_BLINK_CURSOR_ON    0x0F
#define LCD_MOVE_CURSOR_LEFT   0x10
#define LCD_MOVE_CURSOR_RIGHT  0x14
#define LCD_TURN_ON            0x0C
#define LCD_TURN_OFF           0x08
#define LCD_SHIFT_LEFT         0x18
#define LCD_SHIFT_RIGHT        0x1E
short RS;

void lcd_write_nibble(unsigned int8 n){
   unsigned int8 i;
   output_low(LCD_CLOCK_PIN);
   output_low(LCD_EN_PIN);
   for( i = 8; i > 0; i = i >> 1){
     if(n & i){
        output_high(LCD_DATA_PIN);
     }else{
        output_low(LCD_DATA_PIN); }
     Delay_us(10);
     output_high(LCD_clock_PIN);
     Delay_us(10);
     output_low(LCD_clock_PIN);
   }
   if(RS){
      output_high(LCD_DATA_PIN);
   }else{
      output_low(LCD_DATA_PIN); }
   for(i = 0; i < 2; i++){
      Delay_us(10);
      output_high(LCD_clock_PIN);
      Delay_us(10);
      output_low(LCD_clock_PIN);
   }
   output_high(LCD_EN_PIN);
   delay_us(2);
   output_low(LCD_EN_PIN);
}

void LCD_Cmd(unsigned int8 Command){
  RS = 0;
  lcd_write_nibble(Command >> 4);
  lcd_write_nibble(Command & 0x0F);
  if((Command == 0x0C) || 
     (Command == 0x01) || 
     (Command == 0x0E) || 
     (Command == 0x0F) || 
     (Command == 0x10) || 
     (Command == 0x1E) || 
     (Command == 0x18) || 
     (Command == 0x08) || 
     (Command == 0x14) || 
     (Command == 0x02))
    Delay_ms(50);
}

void LCD_GOTO(unsigned int8 col, unsigned int8 row){switch(row){
      case 1: LCD_Cmd(0x80 + col-1); break;
      case 2: LCD_Cmd(0xC0 + col-1); break;
      case 3: LCD_Cmd(0x94 + col-1); break;
      case 4: LCD_Cmd(0xD4 + col-1); break;
   }
}

void LCD_Out(unsigned int8 LCD_Char){
   RS = 1;  
   lcd_write_nibble(LCD_Char >> 4);
   delay_us(10);
   lcd_write_nibble(LCD_Char & 0x0F);
   break;
}

void LCD_Initialize(){
   RS = 0;
   output_low(LCD_DATA_PIN);
   output_low(LCD_CLOCK_PIN);
   output_low(LCD_EN_PIN);
   output_drive(LCD_DATA_PIN);
   output_drive(LCD_CLOCK_PIN);
   output_drive(LCD_EN_PIN); 
   delay_ms(40);
   lcd_Cmd(3); delay_ms(5);
   lcd_Cmd(3); delay_ms(5);
   lcd_Cmd(3); delay_ms(5);
   lcd_Cmd(2); delay_ms(5);
   lcd_Cmd(0x28); delay_ms(50);
   lcd_Cmd(0x0C); delay_ms(50);
   lcd_Cmd(0x06); delay_ms(50);
   lcd_Cmd(0x0C); delay_ms(50);
}


74HC595

Semelhante ao 74HC164 e HEF4094, este circuito integrado nada mais é que um conversor serial para paralelo, onde recebe 8 bits na porta serial e converte para oito portas paralelas (pinos). O tipo de comunicação é SPI diretamente com o microcontrolador, onde são enviados os bits (DS) em cada ciclo de clock (SHCP e STCP) e ainda podem ser implementados os controles Output Enable (OE) e Reset (MR). Abaixo temos uma imagem com o diagrama funcional do circuito:

 

O circuito consiste de diversos circuitos lógico para executar essa conversão serial/paralela e para expansão ainda temos Q7S que é uma saída serial para ligação entre outros CIs da mesma família, onde vemos as etapas lógicas na próxima figura:

 

Para que ocorra a conversão devemos seguir critérios de comunicação pré estabelecidos, onde o CI recebe pulsos lógicos, na família 74HC recebe sinais nível CMOS e na 74HCT recebe sinais a nível TTL, os CIs podem ser alimentados em até +7V e a corrente de saída é de até 35mA em Qn e 25mA em Q7S. A corrente de consumo fica em torno dos 70mA para operação. A voltagem de transição entre nível alto e nível baixo se dá em +2,6V com o circuito operando a +5V VDD.

No diagrama seguinte temos o formato de dados a ser enviado e interpretado pelo 74HC595:

 

 As ligações do CI também devem obedecer uma certa ordem, caso não seja necessário utilizar OE e MR, devemos conectar OE ao GND e MR ao VCC. Outra variável para receber o pulso de clock, onde sempre ocorre na porta SHCP, que de acordo com cada finalidade do circuito pode se unir SHCP a STCP ou utilizar STCP como porta Strobe.

Microcontroladores que tem portas Open-Drain em sua arquitetura devem receber um resistor de Pull-Up em sua linha de comunicação, este resistor pode ser disposto de 3,3KΩ à 10KΩ ligado a VCC.

A seguir veremos o protocolo de comunicação e execução microcontrolador para que o 74HC595 realize a conversão de serial para paralelo.

Primeiramente, com SHCP e DS ligados ao microcontrolador já podemos enviar informações de forma serial ao circuito integrado, a cada pulso positivo do clock enviado para SHCP ocorre o registro de 1 bit para determinada porta de saída paralela. Para determinar o nível lógico das 8 portas de saída do ci devemos então enviar 8 bits em DS com 8 clocks em SHCP.

Primeiramente definimos que 0 é nível lógico 0V (baixo) e 1 nível lógico +5V (alto), ou low e high como preferir.

Para o protocolo se realizar começamos a rotina do microcontrolador colocando SHCP e DS em nível lógico 0, logo após disparamos o nível lógico da primeira porta paralela Q0, que pode ser 0 ou 1, depois disparamos nível lógico alto (1) no pino de clock (SHCP) e posteriormente nível baixo em SHCP registrando assim o primeiro ciclo de escrita para a porta Q0 do 74HC595, repetindo este processo estabelecemos Q1, e assim a cada ciclo definimos Q2, Q3 e assim por diante até Q7.  Depois de enviarmos os 8 bits seriais o registrador interno do 595 reinicia para nova intrução de Q0 onde se reinicia o processo novamente de escrita.

Abaixo temos o exemplo de rotina baseada em linguagem C para microcontroladores PIC da Microchip feitos em CCS.


<main.c>

#include <18F4550.h>

#use delay(clock=20000000)

#fuses INTHS,NOWDT,NOPROTECT

 

#define DAT PIN_B0

#define CLK PIN_B1

 

unsigned int j;

unsigned int Valor;

const char Segments[1][8] = {{

   0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f

}};

 

const char Valores[1][7] = {{

   0x01,0x02,0x03,0x04,0x05,0x06,0x07

}};

 

void Escreve595(char Dados){

   for(j = 0x40; j > 0; j = j >> 1) {

     if(Dados & j){

       output_high(DAT);

     }else{

       output_low(DAT);

     }

     output_high(CLK);

     output_low(CLK);

  }

}

 

void main() {

   setup_oscillator(OSC_8MHZ | osc_intrc);       

   delay_ms(1000);

   while(TRUE) {

      output_low(DAT);

      output_low(CLK);

      Valor = 1;

      Escreve595(Segments[0][Valor]);

      delay_ms(1);

   }

}


Estes conversores seriais/paralelos podem ser bem empregados para economizar portas em microcontroladores, pois usando minimamente duas portas do microcontrolador já podemos expandir para oito portas paralelas, tanto para acionamento de periféricos, LEDs, e até displays segmentos LED  ou LCD. A aplicação para estes é infinita e depende de cada projeto em si.

HEF4053

Relé eletrônico duplo de pólo duplo, similar ao HEF4052 em aspecto elétrico, mas tanto o esquema de chaveamento quanto as portas de entrada e saída são diferentes, na imagem abaixo vemos nitidamente sua diferença e esquema de chaveamento.

As portas Z e Y são ambas entrada ou saída dependendo de sua aplicação no circuito a ser implementado. E para seu controle temos E (Enable input) e portas dedicadas para cada relé eletrônico denominados S1, S2 e S3. Na tabela abaixo temos seu funcionamento:


E
Sn
Chaveamento
L
L
Y0 para Z
L
H
Y1 para Z
H
X
Todos deslidados

*Sn - Porta de Controle S1, S2 ou S3.

Suas tensões de trabalho são idênticas ao HEF4052, também trabalhando em tensões máximas de +18V e corrente de entrada e saída máximo de 10mA. Da mesma forma se aplicado em circuitos microcontrolados, deve se aterrar (0V) VEE e VSS juntos e aplicar +5V em VDD.

No gráfico a seguir vemos amplamente a tensão de operação do circuito em condições recomendadas:

 

Abaixo temos seu esquema de pinagem referente a todos tipos de encapsulamento deste CI, desde para superfície PCB perfurada quanto SMD:

  

Ainda mais abaixo temos a disposição elétrica de cada porta e esquema de chaveamento tipo relé para melhor entendermos como este circuito integrado opera e realiza o chaveamento


HEF4052

Duplo relé eletrônico de quatro portas onde as portas são comutadas por dois controles (S1 e S2) que dependendo do nível lógico destas portas de controle comutam as portas de entrada e saída.
Na imagem abaixo temos o esquema elétrico relativo a uma porta de controle:
O gatilho E (Enable), serve para ou ligar ou desligar completamente o modo de saída/entrada, e os níveis lógicos devem seguir os critérios da tabela abaixo:

E
S2
S1
Chaveamento
L
L
L
Y0 para Z
L
L
H
Y1 para Z
L
H
L
Y2 para Z
L
H
H
Y3 para Z
L
X
X
Todos desligados

Outros dados técnicos devem ser mantidos como regras como voltagem máxima de +18V e corrente de entrada e saída máxima de 10mA.
Para aplicação em circuitos onde usamos microcontroladores e em geral tensões operacionais abaixo dos +5,5V, os pinos VEE e VSS são ligados ao circuito terra (0V). O tempo de transição entre a comutação é menor que 20ns em tensões de +5V e para tensões acima de +10V o tempo fica abaixo dos 10ns.
O HEF4052 é largamente utilizado tanto em circuitos digitais quanto circuitos analógicos já que responde muito bem em altas freqüências que ficam entre 13 e 70MHz.
Na figura abaixo temos o esquema de pinagem do circuito integrado:
Na próxima figura temos uma idéia ilustrativa de como funciona o circuito em forma de relé, o que simplifica o entendimento de seu chaveamento e assim facilitando a prática e utilização do mesmo:
Em resumo, o HEF4052 é um ótimo circuito para chaveamento de sinais de áudio e vídeo onde no circuito devem se usar capacitores de baixos valores para acoplamento (entrada) e desacoplamento (saída), estes capacitores podem ser no máximo até 10µF. Podemos também usar este CI para chaveamento de sinais digitais, como portas RS232, USB, instrumentos de medição, etc.