Olá pessoal na falta de dinheiro para comprar um LCD Nokya 511, achei na minha sucata um Display usados nos Siemens o modelo que tinha em mãos é o LPH-9116-1.
Depois de muita pesquisa na net achei um driver para o modelo LPH8731-1C que são compatíveis.
O site do qual encontrei o driver é Russo, deu um pouco de trabalho para traduzir algumas coisas, mas o google translation deu uma ajuda..
links de referencias Russo: http://cxem.net/mc/mc218.php http://cxem.net/mc/mc221.php
Espero que ajude alguém! se gostou compartilhe e deixe seu comentário!
Compartilhe do canal no Youtube de um like e se inscrea-se https://www.youtube.com/user/MultiLumens
Montando engenhocas essa foi para enrolar bobinas usando material de sucata da oficina.
A intenção aqui é passar o código usado para controlar o driver L298. que serve como um ponte H
/*
sistema automatizado de enrolamento
de bobinas
TCC Automação Industrial 4º Modulo
Desenvolvido por Paulo R. R. Furlan
*/
#include <16f877a.h>
#use delay(clock=2000000)
#fuses HS,NOWDT,PUT,LVP,NOCPD
//#include <regs_16f87x.h>
#include <timer0.h>
//Led fim de curso sinalizacao
#define LED_BOTOES pin_D1
//Led Botoes presionados
unsigned long int hor=0;
int min=0;
int seg=0;
int seg2=0;
int min2=0;
int conta=0, conta1=0;
long int num_voltas_cont,num_espiras;
long int temp_bobina,temp_fiador;
buzzer
delay_us(400);
output_low(pin_a5);//sinal baixo
buzzer
}
return;
}
//inicio do programa
void main()
{
long int valor;
int pos, linha;
int32 val32;
int i;
//int b1= 1;
delay_ms(10);
set_tris_a(0x02);//Entrada sensor
ampraragem do CI L268
set_tris_b(0x00);//Saida para o CI
RTCC_DIV_128);
enable_interrupts(GLOBAL|int_timer0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
set_timer0(131);
num_espiras=0;//zera numeros de
espira
output_b(0x00);//zera saida port B
output_c(0x00);//zera saida port C
output_d(0x00);//zera saida port D
output_e(0x00);//zera saida port E
flag_encoder_M1=0;//desativa encoder
M1
flag_encoder_M1_ativo=1;//seta
encoder em ativo
num_voltas_cont=0;//zera o contador
de espiras
num_espiras=200;// inicia numero
minimo de espiras
flag_sentido_rotacao_M1=1; //inicia
rotação do motor M1 sentido horario
flag_stop_start=0; //inicia sistema
com stop ativado
temp_bobina=40;// seta minimo de
tempo para partida do motor M1
temp_fiador=80;// seta mnimo de tempo
para partida do motor M2
flag_desligado=0;
flag_ligado=0;
seg2=59;
min2=1;
lcd_ini();
delay_ms(10);
mensagem_apresenta();
//lcd_escreve("\f");
// loop enquanto true
output_low(ENA);//sinal Alto enable1
RB2
output_low(ENB);//sinal Alto enable2
RB3
output_low(IN1);//sinal baixo M1 RB4
output_low(IN2);//sinal baixo M1 RB5
output_low(IN3);//sinal baixo M2 RB6
output_low(IN4);//sinal baixo M2 RB7
delay_ms(300);
Olá pessoal!
Neste projetinho foi usado um PIC16F877A, fazendo a leitura do rpm de um motor AC e corrigindo a velocidade com o chaveamento de um triac BTA12
No calculo para a correção foi usado o sistema de malha fechada e controle PI (proporcional e Integral).
segue um link do primeiro teste:
Suporte do Sensor óptico:
Confecção da Placa
Partes do código:
//------------------------Disparo no triac-----------------------------------
void disparo()
{
//---------------------trata RPM------------------------------------
void trata_rpm()
{
if(input(pin_a1)) //ler pino RA0 se 1
{
if(flag_rpm) //testa flag1 se 1
{
rps++; //soma rpm +1
flag_rpm=0; //seta flag1 em 0
}
}
if(!input(pin_a1)) //ler pino RA0 se 0
{
flag_rpm=1; //seta flag1 em 1
}
return;
}
//------------------------Calculo ganho-----------------------------
void calcula(void)
{
sp=set_rpm*60; //carrega a variável sp para calculos
pv=v_rpm; //carrega a variável pv para calculos
if(sp>pv) // set_point maior que leitura de rpm
{ // a rotacao esta abaixo do valor desejado
dv=sp-pv; //calcula o desvio entre set_point e rpm lido
dv=dv/100; //divide por 100 segundos
mv=erro-(kp*(dv+(ki*dv))); //calcula a diferença que será subtraida do tempo de disparo
erro=mv*0.2; //calcula o erro como taxa de amortecimento para o próximo semi-ciclo
}
if(sp<pv) // set_point menor que leitura de rpm
{ // a rotacao esta acima do valor desejado
dv=pv-sp; //calcula o desvio entre set_point e rpm lido
dv=dv/100; //divide por 100 segundos
mv=erro+(kp*(dv+(ki*dv))); //calcula a diferença que será somada ao tempo de disparo
erro=mv*ta; //calcula o erro com taxa de amortecimento para o próximo semi-ciclo
}
tempo=tempo+mv; //tempo de dsiparo atualizado
if(tempo>80)tempo=tempo-mv; //verifica a variável tempo se esta dentro dos limites de disparo
if(tempo<5)
{
tempo=5; //verifica a variável tempo se esta dentro dos limites de disparo
if(sp>pv) // set_point maior que leitura de rpm
{
output_high(pin_a0);
}
if(hz>=120) //testa se ocorreu 120 pulsos entrada AC
{
v_rpm=(rps/2)*60; //tranforma valor de rps em rpm para calculos
if(v_rpm==set_rpm*60) //testa se valor setado = valor lido RPM
{
tempo=tempo; //tempo recebe tempo
}
led=!led;
output_bit(pin_b5,led);
if(flag_ld) //verifica se flag liga desliga= ligado
{
calcula();
}
lcd_putc('\f'); //limpa display
lcd_gotoxy(1,1); //direciona display coluna 1 linha 1
printf(lcd_putc,"SET RPM:%lu rpm\b",set_rpm*60); //apresenta no display valor set_rpm
lcd_gotoxy(1,2); //direciona display coluna 1 linha 2
printf(lcd_putc,"RPM:%lu Disparo:%lu\b",v_rpm,tempo);//apresenta no display valor v_rpm e tempo
lcd_gotoxy(1,4); //direciona display coluna 1 linha 4
printf(lcd_putc,"MV:%2.1f erro:%2.1f\b",mv,erro);//apresenta no display
//valor de mv e erro
if(flag_ld) //testa flag liga/desliga
{
lcd_gotoxy(1,3); //direciona display coluna 1 linha 3
printf(lcd_putc,"Ligado\b"); //apresenta no display ligado
output_high(pin_c0);
}
else
{
lcd_gotoxy(1,3); //direciona display coluna 1 linha 3
printf(lcd_putc,"Desligado\b"); //apresenta no display desligado
tempo=80; //carrega variável tempo com "80"x100us=8ms
mv=0; //zera variável mv
erro=0; //zera variável erro
output_low(pin_c0);
}
hz=0; //zera variável para contagem dentro de 1 segundo
rps=0; //zera variável para contagem dentro de 1 segundo
}