Conforme falado no Post anterior ( Monte suas próprias placas para teste dos PICs! (03) ), vamos agora mostrar um pequeno projeto de confecção de uma placa que permite a gravação tanto de PICs como de memórias seriais I²C.
Este circuito tem como características: não precisar de fonte de alimentação externa (usa a voltagem fornecida pela interface serial do computador – COM1 – por exemplo), ter três LEDs (vermelho, verde e amarelo) com uma chave liga-desliga para eles, que permitem monitorar o funcionamento do circuito (a saber – vermelho: pino 3 TX, verde: pino 7 RTS, amarelo: pino 4 DTR –> que são todos os PINOS DE SAÍDA DA SERIAL DO PC – os outros são de ENTRADA), e facilitam o desenvolvimento de programas que manipulam os pinos das interfaces seriais no computador (por exemplo, no Windows pode se utilizar o C#.NET para esta tarefa - Microsoft Visual Studio 2010 Express ).
O circuito foi idealizado para utilizar a técnica ICSP (gravação no circuito – In Circuit Serial Programming) permitindo uma grande facilidade de uso, utilizando para isto 5 pinos a saber: VCC (em torno de +5V – obtido do pino 3 TX), GND (negativo/terra – pino 5 GND), VPP (+13V –> ideal, o PIC pode ser programado de +10V (mínimo) à +13V (máximo) – obtido do pino 3 TX), PGD (Dados – DTR do circuito – pino 4) e PGC (Clock - RTS do circuito – pino 7).
Existe um artigo interessante na web ( Details of pic ICSP and how to use it for pic microcontrollers ) que mostra como proteger o circuito de teste quando for gravar com o circuito ICSP, e também um pdf da Microchip sobre o assunto ( In-Circuit Serial Programming™ ). Neste projeto, para simplificar, existe uma pequena placa, que possui um soquete de 14 pinos com um PIC ( PIC16F688 ) e um conector em barra com 5 pinos para o gravador, simplificando a demonstração do gravador – este serve para qualquer PIC, desde que se conecte os 5 pinos da placa aos respectivos sinais do gravador – veja a documentação e pinagem do PIC que se quer utilizar.
Importante é a escolha do software que irá fazer uso do gravador – existem várias opções, vamos citar algumas:
1 – IC-Prog Prototype Programmer;
2 – winpic800;
3 – WinPicProg;
4 – WinPic – A PIC Programmer for Windows;
5 – PonyProg – serial device programmer;
6 – PICPgm – PIC Development Programmer;
7 – MPLAB IDE da Microchip;
Vamos então escolher o WinPic800 para a nossa demonstração. Baseado no arquivo .hex do artigo ( Projeto-Lanterna-de-5-LEDs.zip ), vamos então abrí-lo:
A – Executar o programa (Note que já está configurado para Hardware JDM – Mensagem no rodapé, e também já escolhido o PIC16F688 – canto superior direito): – clique na imagem para ampliar!
B - Carregar o programa (arquivo .hex – observe a mensagem no rodapé): – clique na imagem para ampliar!
C - Por motivo de segurança, vamos apagar o que estiver no PIC: – clique na imagem para ampliar!
D - Agora, a programação do PIC: – clique na imagem para ampliar!
E - Agora, a etapa de verificação para saber se ele foi corretamente gravado no PIC: – clique na imagem para ampliar!
Vamos então escolher agora o IC-Prog para a nossa demonstração da gravação no CI de memória ( 24C16 ). Vou criar no PC um arquivo no formato Hexadecimal com o utilitário Hex Editor Neo 4.95 (da HHD Software ) a ser gravado no 24C16 (o tamanho é de 2kBytes = 16KBits), preenchido com “ok”:
A – Executar o programa Hex Editor Neo (gerar o arquivo a ser gravado!): – clique na imagem para ampliar!
B - Executar o programa IC-Prog ( já escolhido o 24C16 – canto superior direito e já está configurado para Hardware JDM – rodapé): – clique na imagem para ampliar!
- Observar também a seguinte configuração (Settings–> Options –> aba I²C) – clique na imagem para ampliar!
C - Carregar o arquivo hex (exemplo – teste24c16.hex): – clique na imagem para ampliar!
D - Gravar o arquivo hex (teste24c16.hex) na memória (I²C – 24C16): – clique na imagem para ampliar!
E - Mensagem de sucesso: – clique na imagem para ampliar!
F - Feche e abra novamente o programa IC-Prog: – clique na imagem para ampliar!
G - Opção de leitura do dispositivo (IC-Prog): – clique na imagem para ampliar!
H - Arquivo lido com sucesso, e comprova a gravação da memória (conteúdo gravado = conteúdo lido): – clique na imagem para ampliar!
Figura 01 – placas: Gravador, soquete para PIC 14 Pinos (por exemplo), Memórias I²C e cabo de ligação: (Vista Superior) – clique na imagem para ampliar!
Figura 02 - Gravador: (Lado A) – clique na imagem para ampliar!
Figura 02 - Gravador: (Lado B) – clique na imagem para ampliar!
Figura 03 e 04 - Gravador: (Lados C e D) -a sequencia dos pinos de saída são: (Lado D)
1- Vpp (+13V); 2- Vcc (+5V); 3- SCL (clock); 4- SDA (dados); 5-GND (terra/negativo)
– clique na imagem para ampliar!
Figura 05 - Gravador: (Verso) – clique na imagem para ampliar!
Figura 06 - Soquete PIC 14 Pinos: (Lado A) – clique na imagem para ampliar!
Figura 07 - Soquete PIC 14 Pinos: (Verso) – clique na imagem para ampliar!
Figura 08 - Memórias 24C16 (x3) e seus soquetes, conector em barra 5 pinos e LED que indica alimentação ligada (+5V): (Lado A) – clique na imagem para ampliar!
Figura 09 - Memórias 24C16 (x3) e seus soquetes, conector em barra 5 pinos e LED que indica alimentação ligada (+5V): (Verso) – clique na imagem para ampliar!
Figura 10 - Circuito montado, para uso como gravador de PICs – clique na imagem para ampliar!
Figura 11 - Circuito montado, para uso como gravador de Memória protocolo I²C – clique na imagem para ampliar!
Abaixo, o diagrama esquemático dos circuitos criados para esta montagem – OBS: no diagrama aparece para simplificar, somente um CI de memória, para mais de um, conectar os pinos respectivos entre si: – clique na imagem para ampliar!
Segue agora, testes que podem ser feitos na placa, para controle individual dos LEDs (vermelho, verde e amarelo), utilizando o C#.NET da Microsoft:
- Tela do programa de controle dos LEDs: – clique na imagem para ampliar!
- Link do arquivo contendo o programa de controle, e o código fonte (ProgramaControlePortaSerial.zip):
- Código Fonte do Programa:
// ————————————————————
// Programa: ControlePortaSerial
// Autor: Dimensão By Net
// Data: 25/11/2010
// Versão: 1.0
// ————————————————————
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
SerialPort port = new SerialPort(“COM1″, 9600, Parity.None, 8, StopBits.One);
bool ledvermelho = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
bool x;
if (port.IsOpen == false)
return;
else
{
port.BreakState = true;
ledvermelho = true;
x = port.CtsHolding;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
return;
else
{
if (port.DtrEnable == false)
port.DtrEnable = true;
if (ledvermelho == true)
port.BreakState = true;
else
port.BreakState = false;
}
}
private void button3_Click(object sender, EventArgs e)
{
if (port.IsOpen == true)
label1.Text = “Já Conectado”;
else
{
port.Open();
label1.Text = “Conectado”;
}
}
private void button5_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
return;
else
{
if (port.RtsEnable == false)
port.RtsEnable = true;
if (ledvermelho == true)
port.BreakState = true;
else
port.BreakState = false;
}
}
private void button4_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
{
label1.Text = “Já Desconectado”;
}
else
{
port.DiscardInBuffer();
port.DiscardOutBuffer();
port.RtsEnable = false;
port.DtrEnable = false;
port.BreakState = false;
port.Close();
label1.Text = “Desconectado”;
}
}
private void button6_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
return;
else
{
if (port.DtrEnable == true)
port.DtrEnable = false;
if (ledvermelho == true)
port.BreakState = true;
else
port.BreakState = false;
}
}
private void button7_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
return;
else
{
if (port.RtsEnable == true)
port.RtsEnable = false;
if (ledvermelho == true)
port.BreakState = true;
else
port.BreakState = false;
}
}
private void button8_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
return;
else
{
port.BreakState = false;
ledvermelho = false;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
}
}
// ————————————————————
Em resumo, este pequeno projeto pode ser aproveitado para uma série de testes, controlar dispositivos (por exemplo relês), a partir da serial. Com este hardware simples, também pode ser implementado o uso de componentes como o DS1307 – Serial Real-Time - Clock 2-wire serial data bus, e o DS18S20 – High Precision 1-wire Digital Thermometer, que, se necessário, podem ser configurados e lidos a partir do PC sem o uso de controladores, mas contribuindo para a facilidade de interfaceamento entre o PC (configurando o dispositivo) e o Microcontrolador (fazendo uso deste).
Por enquanto é só, aguardem o próximo Post!