dom
7
nov
2010

Microcontroladores PIC da Microchip

Bem-vindo ao site da Dimensão By Net, que esperamos que seja bastante útil, e tenha muitas informações à respeito das famílias de Microcontroladores PIC da Microchip.

Dimensão By Net    

qua
24
nov
2010

Monte um gravador de PICs e de Memórias I²C Bus EEPROM

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!

seg
15
nov
2010

Monte suas próprias placas para teste dos PICs! (03)

Vamos apresentar agora, um outro modelo de placa, para servir como dica de montagem. Esta placa é voltada mais para a comunicação com o PC (serial e USB),  boa para uso com o bootloader e também recebe os sinais de gravação normais de uma outra placa dedicada para a gravação dos PICs (a ser apresentada no próximo post). Como itens a serem destacados, possui relógio-calendário (2-wire / I²C), sensor de temperatura (1-wire), conexão à placa de gravação de PICs (ICSP), conexão serial (Exemplo: COM1), conexão USB, e conexão para a placa dos módulos de memória 24C16 (I²C) . Vamos lá!

Placa 03: (Lado A) – clique na imagem para ampliar!

Placa 03: (Lado B) – clique na imagem para ampliar!

Placa 03: (Verso) – clique na imagem para ampliar!

Placa 03: (Conexão aos outros circuitos: placa com memórias 24C16 e ao Gravador de PICs) – clique na imagem para ampliar!

Características:

1 – Aceita microcontroladores PIC de 40 pinos (o da foto é o PIC18F4550 PIC18F4550);

2 – O clock é gerado por um cristal de 20Mhz (necessário para a comunicação USB);

3 – Um display com 10 LEDs vermelhos em linha, uso livre, pode monitorar a saída de uma porta (PORTB por exemplo) ou a saída de uma conversão ADC de 10 bits (precisão de 1024), acionado com sinal positivo;

4 – Um LED miniatura verde, indica que está conectado na porta USB;

5 – Um LED miniatura vermelho, indica que está ligado (+5V);

6 – Um circuito integrado max232 – Datasheet:
http://www.datasheetcatalog.org/datasheet/texasinstruments/max232.pdf ), para comunicação serial com o computador (PC), com quatro capacitores eletrolíticos de 1uF x 50V (para o seu correto funcionamento);

7 – Um circuito integrado DS1307 – Datasheet: ( http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf ), para relógio/calendário serial (RTC – Real-Time Clock) / (BCD – binary-coded decimal) I²C, conforme a documentação, utiliza três resistores de 4k7, um cristal de 32.768kHz, e uma bateria de 3V Lithium (maxell cr2032 – 3V);

8 – Um circuito integrado DS1820 – Datasheet: ( http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf ), para termômetro digital de alta precisão, 1-Wire, conforme a documentação, utiliza um resistor de 4k7;

9 – Um conector (plug P4) para alimentação(+5V), sem regulador de voltagem (apenas um capacitor de 220uF 16V);

10 – Um conector db-9 para comunicação serial com o PC;

11 – Seis botões, sendo 5 de uso livre (com resistores de 10k conectado no Vcc +5V, e um de reset /MCRL);

12 – Um conector USB para uso com um PIC que suporte o USB (por exemplo o PIC 18F4550);

13 - Cinco pinos (conector em barra) para os sinais de gravação vindos da placa de gravação (Terra, Vpp,Vcc, PGD e PGC);

14 – Conector modul para 6 pinos (para a conexão de outras placas – Exemplo: memórias I²C).

Existem também, mais duas chaves liga-desliga (opcionais), que foram acrescentadas para: a primeira, desconectar o pino /MCLR do circuito de teste (para a gravação com a placa externa), e a outra, para um teste que aterra o pino 13 –> OSC1/CLKI (causando uma parada imediata no clock do PIC).