Saudaçoes,

Gostaria q alguem me ajudasse a mudar esse circuito de Pic para Arduino, no caso só mudar a programação, esse circuito irei usar no meu trabalho ja venho a uns 6 meses tentando, sou hobista e o que sei aprendi tentando  montar esse circuito.

No caso queria usar o Arduino Mini, pis vou precisar de no minimo 30 circuito.

Os leds sao só para facilitar a visao no proteus, o circuito vai trabalhar com 18v, mas essa parte depois dos leds ja esta resolvida com ULN2803.

Agradeceria muito pela ajuda.

Exibições: 2818

Anexos

Responder esta

Respostas a este tópico

Oi

José, é verdade, só que eu pensei em usar 7 pinos para o LCD e 3 pinos para os CD4017.

Pois acho que um LCD I2C  custa mais caro do que o LCD básico, mas não tenho certeza.

Rui

Sim, preciso disso mesmo.

Oi José,

A programação do mega é diferenta daquela do UNO ou Mini?

Rui

Siim pode ser, no começo ja usei o 4017 com 555, alias tenho até uma placa montada com eles mas o problema é q o controle de tempo tive q fazer com switch e resistor e mesmo assim nao ficou exato; Por isso fui para o Pic.

É valida a sua ideia, o mini controlaria o lcd e o tempo e mandaria puslo para os 4017, é isso?

Ok, me faz um favor, v desse jeito para mim, com o 4017 e tbm usando o Mega.

https://www.youtube.com/watch?v=7MrJaA1GWDc

Carlos.

Camarada, eu tinha esta mesma idéia, só que o custo de um I2C em relação a um Arduino Mega é muito mais caro. Veja que sai 30,00 o mini como I2C. Vantagem (e que estou usando em todos meus projetos) vc diminui o numero de fios e se tuver que montar não corre o risco daquele monte de trilha. 

Valeu.

Oi Carlos,  

vou testar a  idéia do mini com CD4017, pois eu não tenho mega.

Ps. já converti o código do PIC que é C da CCS para C da hi-tech  que é o que uso.

Agora vou escrever em arduino .

Rui

Rui para utilizar o arduino com o I2C tem de acrescentar a biblioteca 

LiquidCrystal_I2C.h só isto. Quer um exemplo:

http://pastebin.com/hqi4G2Vg

olha o esquema: 

e olha onde encontrar:

http://produto.mercadolivre.com.br/MLB-630822921-arduino-mini-5vcc-...

Valeu Carlos

Rui

Ok, Rui

Mas se der me faza o codigo para o mega tbm, pois conforme for compro um para testar.

Carlos

Oi Carlos,

voce tem razão, tb pode ser usado.

Eu uso muito o 595 e gosto muito dele,

Veja o que fiz  com ele no natal de 2010 na fachada casa do meu cunhado:

 https://www.youtube.com/watch?v=Y0uh9ptUWUM 

Eles também são opção.

Obrigado

Rui

Oi Carlos,

Segue abaixo o arquivo C para PIC16F877A, para ser usado com Hi-tech.

Preferi reescrever o código ao invés de só converte-lo.

Como havia alguns "bugs", preferi reescrever o código ao invés de só converte-lo.

Procurei descrever a atividade de cada  instrução.

Agora vou para o Arduino e CD 4017 ou 74HC595.

Rui

#include <htc.h> // Biblioteca Hi-tech para PIC16F877A
#include "lcd.c" // Comandos para o LCD

#ifndef _XTAL_FREQ //
#define _XTAL_FREQ 4000000 // Calculo de tempo para a função __delay_xx(x)
#endif //

// Configuração do microprocessador
__CONFIG(FOSC_XT & WRT_OFF & CPD_OFF & WDTE_OFF & PWRTE_OFF & BOREN_OFF & LVP_OFF & CP_OFF);

// Variáveis
unsigned long tempo = 100;
unsigned long Atraso = 0;

// Função para usar delay com variavel
// Gera um delay de 1ms não é preciso
//***************************************************
void newdelay()
{
Atraso = tempo;
while(Atraso) // delay parametrizado
{ //
__delay_us(973); //
Atraso--; //
} //
}
//***************************************************
void main ()
{
TRISA = 0xFF; // Todo Port A entrada
TRISC = 0; // Todo Port C saída
TRISD = 0; // Todo Port D saída
lcd_init(); // Inicializa LCD display
ADCON1 = 0x06; // Disable analog pins on PORTA 16F877A Porta em digital mode
ADON = 0; // Desliga ADC
PSPMODE = 0; // Desliga PSPmode
PORTC = 0; // Zera Port C
PORTD = 0; // Zera Port D

lcd_puts("\f LED SEQUENCIAL"); // Envia mensagem para o LCD
lcd_puts("\nDELAY=>%lums "); // Envia mensagem para o LCD
lcd_putch(tempo); // Envia mensagem para o LCD

PORTC = 0x01; // Acende o LED em Port C bit 0

while(1) // Do forever
{
if(RA1) // Se o pino RA1 colocado em nivel alto aumenta o tempo
{
tempo = tempo+50; // soma 50 à tempo
if (tempo >=10000)tempo = 10000; // limite maximo de tempo 10000ms
lcd_puts ("\nDELAY=>%lums ") ; // Envia mensagem para o LCD
lcd_putch(tempo); // Envia mensagem para o LCD
__delay_ms(250); // delay de 250 ms
} // End if RA1
if(RA2) // Se o pino RA2 colocado em nivel alto diminui o tempo
{
tempo = tempo-50; // Subtrai 50 de tempo
if (tempo <= 50)tempo = 50; // Limite minimo de tempo 20ms
lcd_puts ("\nDELAY=>%lums "); // Envia mensagem para o LCD
lcd_putch(tempo); // Envia mensagem para o LCD
} // End if RA2
if(RA0) // Se o pino RA0 for colocado em nível alto a sequência terá iníci
{
newdelay(); // Chama a rotina de delay extendido = (tempo * 1ms)

PORTC = PORTC1; // Desloca 1 bit para esquerda no Port C
PORTD = PORTD + CARRY; // Soma CARRY ao Port D (Se não houve CARRY é = 0)
if (PORTD == 1) newdelay(); // Se Port D = 1, (Houve carry de C) faça um delay
PORTD = PORTD1; // Desloca 1 bit para esquerda no Port D
PORTC = PORTC + CARRY; // Soma CARRY ao Port C (Se não houve CARRY é = 0)
} // End if RA0
} // End while()
} // End main()

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço