Mostrando postagens com marcador PIC. Mostrar todas as postagens
Mostrando postagens com marcador PIC. Mostrar todas as postagens

quarta-feira, 25 de julho de 2012

Flowcode - Sequêncial de Led´s Controlado por Chaves

Mais um programinha, ou melhor fluxograma, outro sequêncial, mas agora por chaves, são 8 chaves e 8 Led´s, cada chave aciona um Led, utilizei o microcontolador PIC 16f877A e determinei que toda a Porta C fossem as chaves e toda a Porta B fossem os Leds.

Na imagem é possível ver a programação, o fluxograma de funcionamento, é bem básico, sendo até mais simples que o anterior. 

A imagem abaixo mostra a simulação e o correto funcionamento do fluxograma.


Veja como o programa gerou o código em C:



//Declarações da variável
char FCV_VERIFICA;
char FCV_TESTE;



//Implementações Macro

void main()
{

//Iniciação
adcon1 = 0x07;


//Código de iniciação de interrupção
option_reg = 0xC0;


//Comentário:
//Programa Sequêncial de Led´s Acionados Por Chaves
//Ciclo eterno...


//Ciclo
//Ciclo: Enquanto1
while (1)
{
//Comentário:
//Como determinei que toda Porta C seriam minhas as Chaves,
//a variavel VERIFICA recebe o estado atual do Porta C...


//Entrada
//Entrada: PORTO C -> VERIFICA
trisc = trisc | 0xff;
FCV_VERIFICA = portc;


//Comentário:
//Verifico a Porta C continua no mesmo estado, testo se a variável
//VERIFICA(estado atual) está igual a variável TESTE(estado anterior).
//Se for igual o programa pula os próximos dois passos...


//Decisão
//Decisão: VERIFICA = TESTE?
if (FCV_VERIFICA == FCV_TESTE)
{
} else {
//Comentário:
//Como não são iguais, coloco na variável TESTE o valor da variável VERIFICA...


//Cálculo
//Cálculo:
//  TESTE = VERIFICA
FCV_TESTE = FCV_VERIFICA;


//Comentário:
//Como os Led´s estão relacionados a toda Porta B,
//basta apenas direcionar o valor da variável TESTE
//para a Porta B que os led´s serão acionados ou desligados
//conforme o estado da Porta C...


//Saída
//Saída: TESTE -> PORTO B
trisb = 0x00;
portb = FCV_TESTE;


}


//Comentário:
//Um atraso só para evitar problemas...


//Atraso
//Atraso: 300 ms
delay_ms(255);
delay_ms(45);


}


mainendloop: goto mainendloop;
}




Para baixe o fluxograma aqui.



terça-feira, 24 de julho de 2012

Flowcode - Sequêncial Automático de Led´s

Opa, voltando as postagens... vamos com algumas coisas mais práticas... Neste post temos uma demonstração de utilização do Flowcode, a programação para microcontroladores utilizando fluxogramas.

Achei muito interessante, principalmente para quem está iniciando no mundo da programação e para quem também entende a lógica, mas não tem tanta intimidade assim com programação, consegue otimizar muito o tempo de um programa. Utilizando o Flowcode v4.2.3.58 da Matrix Multimedia fiz um pequeno programa sequencial automático para 10 leds, utilizei o microcontolador PIC 16f877A e determinei que toda a Porta D fossem os Leds de 1 a 8 e os pinos 1 e 2 da Porta B fossem os Leds 9 e 10.

Na imagem é possível ver a programação, o fluxograma de funcionamento, é um básico fluxograma lógico, dos mesmos que encontramos nas aulas de lógica de programação. A única dificuldade é definir as portas correspondentes ao que deseja fazer, acionar Leds, botões,..., mas o programa trata isso de forma fácil e prática, além de ser possível simular o funcionamento de toda programação. No final do post tem o link para download do fluxograma que está bem comentado.


Mas como seria em c?... é possível ver o código que o programa gera, inclusive em Assembler e com os comentários que foram feitos...

void main()
{

//Iniciação
adcon1 = 0x07;


//Código de iniciação de interrupção
option_reg = 0xC0;


//Cálculo
//Cálculo:
//  contador = 1
FCV_CONTADOR = 1;


//Comentário:
//Coloca o valor 1 na variável contador...


//Ciclo
//Ciclo: Enquanto1
while (1)
{
//Comentário:
//loop infinito


//Saída
//Saída: contador -> PORTO D
trisd = 0x00;
portd = FCV_CONTADOR;


//Comentário:
//PortD recebe o valor da variável contador


//Atraso
//Atraso: 3 s
delay_s(3);


//Decisão
//Decisão: contador = 128?
if (FCV_CONTADOR == 128)
{
//Comentário:
//Vem para esta condição quando a variável contador chega a 128
//atingindo o ultimo Led do PortD e sendo necessário acionar os
//dois leds do PORTB


//Comentário:
//Esta condição só é acionada para ativar os dois ultimos leds da sequência


//Saída
//Saída: 0 -> PORTO D
trisd = 0x00;
portd = 0;


//Comentário:
//Zera o PortD para mudar o valor dos ultimos dois Leds


//Saída
//Saída: 1 -> PORTO B
trisb = 0x00;
portb = 1;


//Comentário:
//Aciono o Led 9


//Atraso
//Atraso: 3 s
delay_s(3);


//Saída
//Saída: 2 -> PORTO B
trisb = 0x00;
portb = 2;


//Comentário:
//Desligo o Led 9 e aciono o led 10


//Atraso
//Atraso: 3 s
delay_s(3);


//Saída
//Saída: 0 -> PORTO B
trisb = 0x00;
portb = 0;


//Cálculo
//Cálculo:
//  contador = 1
FCV_CONTADOR = 1;


//Comentário:
//Mudo o valor da variavel contador para 1


} else {
//Cálculo
//Cálculo:
//  contador = contador*2
FCV_CONTADOR = FCV_CONTADOR*2;


//Comentário:
//O contador tem seu valor multiplicado por 2(2, 4, 8, 16, 32, 64, 128)
//é utilizada a lógica de números binários com a variável contador,
//assim, quando mandar o valor para o portD será mostrado o valor da variável
//2(01000000)
//4(00100000)
//8(00010000)
//16(00001000)
//32(00000100)
//64(00000010)
//128(00000001)


}


}


mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}
Mais um programa simples e muito funcional para auxiliar o programador...já gravei PIC's para testar e funcionaram perfeitamente... Quem quiser pode baixar o fluxograma aqui...e por hoje é só pessoal...

domingo, 5 de fevereiro de 2012

Simulação e Testes - USB 18f4550


Bom, entre uma obra e outra e depois de algumas especificações, consegui tempo para a simulação das placas de controle de entrada e saídas, mais rápido do que imaginado por usar como base uma simulação que achei na internet, não me lembro o site, mas com algum tempo dedicado a pesquisar é possível achar muita coisa sobre conexão usb utilizando pic, principalmente 18f4550 e 18f2550, além de uma infinidade de possibilidades.
Fiz uma modificação na simulação que utiliza o proteus para o hardware e o ccs para a programação do pic, como a intenção é utilizar todas os pinos possíveis como entradas e saídas digitais foram necessárias duas simulações independentes, uma só para as entradas utilizando chaves e outra só para as saídas utilizando leds, mas nada complicado.
Então fiz duas programações, para a comunicação usb utilizei a Human Interface Device - HID(http://en.wikipedia.org/wiki/Human_interface_device), dá trabalho para conseguir compilar a primeira vez e entender como tudo funciona, mas depois que consegue compilar a primeira, tudo fica mais fácil e funciona perfeitamente.
Código básico:

#include <18F4550.h>
//achei melhor configurar os fuses de forma individual
#FUSES HSPLL
#FUSES WDT//Habilita o Watchdog Timer(WDT) - Não tive problemas usando o WDT
#FUSES NOPROTECT
#FUSES NODEBUG
#FUSES NOLVP
#FUSES PLL5
#FUSES CPUDIV1
#FUSES USBDIV
#FUSES VREGEN
#FUSES WDT128 //Período do WDT

#use delay(clock=48000000) //valor do clock obrigatório

#define USB_HID_DEVICE TRUE //Utilizando a classe HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //Habilitando o(EndPoint1) para In bulk
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //Habilitando o(EndPoint1) para OUT bulk
#define USB_EP1_TX_SIZE 32 //tamanho reservado para a transferência
#define USB_EP1_RX_SIZE 32

//Declarações necessárias
#include
#include //Arquivo de configuração USB para o dispositivo deve conter o PID e o VID que identificam o dispositivo quando conectado
#include
//Função para conexão, serve para a numeração do dispositivo
void USB_debug() {
static int8 last_connected;
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;

new_connected=usb_attached();
new_enumerated=usb_enumerated();
usb_wait_for_enumeration();

last_connected=new_connected;
last_enumerated=new_enumerated;
}

void main(void) // Função principal
{
//Declarando as variáveis e especificando seu tamanho
int8 envia[USB_EP1_TX_SIZE];
int8 recebe[USB_EP1_RX_SIZE];

usb_init(); // Inicializa a comunicação USB.

setup_wdt(wdt_ON); //Reinicia o WDT

while (TRUE) // while infinito.
{
//Funções de comunicações devem ser constantemente executadas para evitar a desconexão do dispositivo
usb_task();

USB_debug();

if(usb_enumerated()) //se o dispositivo está numerado, está conectado.
{
//Pronto, agora é só mandar ou receber informações e reiniciar o WDT
usb_put_packet(1, envia, 32, USB_DTS_TOGGLE); //enviando pacote de dados
if (usb_kbhit(1)) //testa se um pacote foi recebido
{
usb_get_packet(1, recebe, USB_CONFIG_HID_RX_SIZE); //as informações recebidas são colocadas na variável "recebe"
}
restart_wdt();//Reinicia o WDT
}
}









Pronto, depois foi apenas necessário programar como necessário e compilar, utilizei a IDE CCS 4.057.
E depois modifiquei o software, fiz com que identifica-se automaticamente o dispositivo e por meio de PictureBox e CheckBox identifiquei as chaves acionadas e acionei os leds... e funcionou perfeitamente como as imagens.















Então é isso, agora vamos para a parte mais complicada, o controle central e a IHM...


quinta-feira, 15 de setembro de 2011

Placa de Desenvolvimento PIC USB














Estava com dificuldades para desenvolver e testar o software para as placas do projeto Servidor, então procurei por kits de desenvolvimento USB, achei algumas de baixo custo montada, mas como gosto de desafios, achei uma rápida de confeccionar e que já tinha todo material em mãos. Esta é uma placa de desenvolvimento PIC USB que encontrei no site PicTronics porém, fiz algumas alterações no lay-out e no Hardware utilizado:

- Substitui a barra de pinos de conexão com o gravador PicKit2 da Microchip por um RJ11 fêmea, utilizado no PicKit2 da PersonalPic e que também é um ótimo gravador(assunto para outro tópico);
- Utilizei apenas capacitores cerâmicos de disco;
- Substitui os diodos 1N5817 por 1N4148, mais lentos, mas que também funcionam.

Uma placa simples, fácil de montar e que permite fazer testes e simulações de forma prática e rápida. Tem como ponto positivo:

- Não precisa de fonte externa para simular e nem para gravar, mas recomendo utilizar fonte estabilizada esterna se estiver simulando em protoboard, este aliás é outro ponto forte;
- Pode conectar facilmente a placa com um protoboard e montar um circuito de desenvolvimento próprio;
- Como utiliza o PicKit2, não é necessário bootloader;
- O tamanho reduzido é outra praticidade, se mecher no lay-out mais um pouquinho ela cabe no bolso.

Para confecção utilizei o método térmico, rápido e prático
No site da PicTronics você consegue baixar o esquema eletrônico e o Lay-out da Placa, mas no link abaixo, segue o Esquema, o Lay-out original e o que eu adaptei.

Baixar Arquivos da Placa

Protótipo Servidor Placa de Entradas














Protótipo Servidor Placa de Entradas
Versão: 1.0 02/2011
Projeto: Wendell B. Silva
Desenho: Wendell B. Silva
Método de confecção: Silk-screen
Montagem e Solda: Kayque R. Araujo
Laboratório LabSYN
Placa de controle de entradas e comunicação de dados com as seguintes características:
Tamanho - 14,1x13,0cm;
Tipo da Placa - Face Simples;
Conectores - DB9 Fêmea para placa, conectores kk grande de 2 e 10 pinos e barra de pinos simples;
Principais componentes - Microcontrolador PIC 16f877a/18f4550 e Max485;
Acionamento por negativo nas entradas, base dos transistors.
Confecção inicial rápida para verificação de possíveis erros de lay-out e hardware.
Aprovação: Em fase de testes

Protótipo Servidor Placa de Saídas














Protótipo Servidor Placa de Saídas
Versão: 1.0 09/2011
Projeto: Wendell B. Silva
Desenho: Wendell B. Silva
Método de confecção: Silk-screen
Montagem e Solda: Kayque R. Araujo
Laboratório LabSYN
Placa de controle de saídas e comunicação de dados com as seguintes características:
Tamanho - 16,7x17,0cm;
Tipo da Placa - Face Simples;
Conectores - DB9 Fêmea para placa, conectores kk grande de 2 e 10 pinos e barra de pinos simples;
Principais componentes - Microcontrolador PIC 16f877a/18f4550 e Max485;
Liberação de negativo nas saídas, base dos transistors.

Confecção inicial rápida para verificação de possíveis erros de lay-out e hardware.
Aprovação: Em fase de testes

sábado, 10 de setembro de 2011

CUSCOPIC


No mercado/internet é possível encontrar várias plataformas para o desenvolvimento de aplicações com microcontroladores, principalmente para quem está iniciando neste mundo e que além de desenvolver a parte de software pode implementar a parte de hardware, o que é fundamental para quem está pensando em criar aplicações no futuro, principalmente se forem comerciais...
Uma destas plataformas é a CUSCOPIC, um kit prático de desenvolvimento, ideal para quem pensa em iniciar neste mundo. Tem algum tempo que adquiri o kit e montei sem maiores dificuldades, principalmente por ser muito bem documentado e com muitos exemplos que podem ser encontrados no site do equipamento http://www.mecatronica.org.br/disciplinas/cuscopic/index.html.
A CUSCOPIC é uma plataforma bastante didática e simples, os desenhos da placa foram muito bem elaborados e o kit separado em partes, o que o torna prático para o transporte já que pode levar para onde quiser apenas o que for utilizar.

Os pontos fracos são a necessidade de gravação do bootloader pela porta paralela e a necessidade de porta serial (pode ser utilizada com um conversor USB-serial externo) para gravação da programação, ruim porque praticamente nenhum notebook tem essas portas hoje em dia. Outro ponto, não diria negativo, mas problemático, seria a dificuldade de se utilizar os programas de gravação nos novos sistemas operacionais, mas tudo pode ser resolvido com um gravador USB externo.
O idealizador do projeto é o professor Daniel Corteletti, Bacharel em Ciência da Computação pela Universidade de Caxias do Sul (UCS) – RS e Instrutor de Educação Profissional de Nível Técnico - Centro Tecnológico de Mecatrôncia do SENAI. Ele também mantém um fórum de discussão da plataforma no Yahoo e comunidade no Orkut.
Como a ultima atualização foi em 2009, nos resta saber quando estará disponível uma nova atualização, quem sabe USB, SD e RTC a vista. Se precisar de ajuda professor, estamos a disposição...
Uma ótima opção, apesar de ainda não ter utilizado todas as funcionalidades da plataforma, mas recomendo, depois abordarei alguns experimentos.