Últimos assuntos
Quem está conectado?
Há 134 usuários online :: 1 registrado, 0 invisíveis e 133 visitantes :: 2 motores de buscaleandronexttec
O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41
Tópicos semelhantes
Anuncios
Nenhum anúncio
PROGRAMAÇÃO PARA PIC16F628A
2 participantes
Página 1 de 1
PROGRAMAÇÃO PARA PIC16F628A
NECESSITO MUITO FAZER COM QUE ESSE CÓDIGO PARA ARDUÍNO SEJA REVERTIDO PARA SER GRAVADO EM UM PIC16F628A, PODE SER EM QUALQUER LINGUAGEM C, C++, ASSEMBLY...
QUEM PUDER ME AJUDAR FICAREI ETERNAMENTE GRATO, PROJETO PARA FINS ACADÊMICO.
#include <LiquidCrystal.h>
float vazao; //Variável para armazenar o valor em L/min
float media = 0; //Variável para fazer a média
int contaPulso; //Variável para a quantidade de pulsos
int i = 0; //Variável para segundos
int Min = 00; //Variável para minutos
float Litros = 0; //Variável para Quantidade de agua
float MiliLitros = 0; //Variavel para Conversão
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor( 0, 0);
lcd.print("Sensoriamento de");
lcd.setCursor( 0, 1);
lcd.print(" fluxo de Agua ");
delay(3000);
lcd.clear();
pinMode(2, INPUT);
attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupção 0) interrupção
}
void loop ()
{
contaPulso = 0;//Zera a variável
sei(); //Habilita interrupção
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupção
vazao = contaPulso / 5.5; //Converte para L/min
media = media + vazao; //Soma a vazão para o calculo da media
i++;
lcd.setCursor(0, 0);
lcd.print(vazao); //Escreve no display o valor da vazão
lcd.print(" L/min "); //Escreve L/min
lcd.setCursor(0, 1);
lcd.print(Min);
lcd.print(":"); //Escreve :
lcd.print(i); //Escreve a contagem i (segundos)
lcd.print("Min "); //Escreve :
MiliLitros = vazao / 60;
Litros = Litros + MiliLitros;
lcd.print(Litros);
lcd.print("L ");
// Neste conjunto de linhas fizemos a média das leituras obtidas a cada 1 minuto
if (i == 60)
{
Min++;
lcd.print(Min);
if (Min >= 60)
{
Min = 0;
}
media = media / 60; //faz a média
Serial.print("nMedia por minuto = "); //Imprime a frase Media por minuto =
Serial.print(media); //Imprime o valor da media
Serial.println(" L/min - "); //Imprime L/min
media = 0; //Zera a variável media para uma nova contagem
i = 0; //Zera a variável i para uma nova contagem
}
}
void incpulso ()
{
contaPulso++; //Incrementa a variável de pulsos
}
QUEM PUDER ME AJUDAR FICAREI ETERNAMENTE GRATO, PROJETO PARA FINS ACADÊMICO.
#include <LiquidCrystal.h>
float vazao; //Variável para armazenar o valor em L/min
float media = 0; //Variável para fazer a média
int contaPulso; //Variável para a quantidade de pulsos
int i = 0; //Variável para segundos
int Min = 00; //Variável para minutos
float Litros = 0; //Variável para Quantidade de agua
float MiliLitros = 0; //Variavel para Conversão
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor( 0, 0);
lcd.print("Sensoriamento de");
lcd.setCursor( 0, 1);
lcd.print(" fluxo de Agua ");
delay(3000);
lcd.clear();
pinMode(2, INPUT);
attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupção 0) interrupção
}
void loop ()
{
contaPulso = 0;//Zera a variável
sei(); //Habilita interrupção
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupção
vazao = contaPulso / 5.5; //Converte para L/min
media = media + vazao; //Soma a vazão para o calculo da media
i++;
lcd.setCursor(0, 0);
lcd.print(vazao); //Escreve no display o valor da vazão
lcd.print(" L/min "); //Escreve L/min
lcd.setCursor(0, 1);
lcd.print(Min);
lcd.print(":"); //Escreve :
lcd.print(i); //Escreve a contagem i (segundos)
lcd.print("Min "); //Escreve :
MiliLitros = vazao / 60;
Litros = Litros + MiliLitros;
lcd.print(Litros);
lcd.print("L ");
// Neste conjunto de linhas fizemos a média das leituras obtidas a cada 1 minuto
if (i == 60)
{
Min++;
lcd.print(Min);
if (Min >= 60)
{
Min = 0;
}
media = media / 60; //faz a média
Serial.print("nMedia por minuto = "); //Imprime a frase Media por minuto =
Serial.print(media); //Imprime o valor da media
Serial.println(" L/min - "); //Imprime L/min
media = 0; //Zera a variável media para uma nova contagem
i = 0; //Zera a variável i para uma nova contagem
}
}
void incpulso ()
{
contaPulso++; //Incrementa a variável de pulsos
}
Última edição por CACÁ em Qui 28 Set 2017, 19:48, editado 1 vez(es) (Motivo da edição : títulos coloridos são contra a regra)
g.marquees- NOVATO
- DESCRIÇÃO: : Técnico em Eletrônica
TEMPO DE EXPERIÊNCIA : 1 ano
Sexo :
Número de Mensagens : 1
Idade : 32
Cidade/Estado: : Eldorado/SP
Data de inscrição : 20/09/2017
Re: PROGRAMAÇÃO PARA PIC16F628A
Usando CCS C Compiler para PIC:
MAIN.C
Serial nos pinos TX PORTA0 e RX PORTA1:
Inicializar o display lcd:
Codigo para o flex_lcd.c
MAIN.C
Serial nos pinos TX PORTA0 e RX PORTA1:
- Código:
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,stream=NAGKILLER)
- Código:
#define LCD_DATA_PORT getenv("SFR:PORTB")
#include "flex_lcd.c"
Inicializar o display lcd:
- Código:
lcd_init();
lcd_putc("\fSensoriamento de"); // \f limpa o display
lcd_putc("\nfluxo de Agua"); // \n muda para a linha debaixo
delay_ms(3000);
lcd_putc("\f"); // limpa a tela
printf("\r\nTESTE DE SERIAL...\r\n");
Codigo para o flex_lcd.c
- Código:
//*****************************************************************************
// CCS C Compiler for PIC
//*****************************************************************************
// flex_lcd.c
// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver. Change these
// pins to fit your own board.
#define LCD_RS PIN_B0
#define LCD_E PIN_B1
#define LCD_DB4 PIN_B2
#define LCD_DB5 PIN_B3
#define LCD_DB6 PIN_B4
#define LCD_DB7 PIN_B5
// #define LCD_RW PIN_C2
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.
// #define USE_LCD_RW 1
//========================================
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note: !! converts an integer expression
// to a boolean (1 or 0).
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));
delay_cycles(1);
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine. For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.
#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3
retval = 0;
output_high(LCD_E);
delay_cycles(1);
retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);
output_low(LCD_E);
return(retval);
}
#endif
//---------------------------------------
// Read a byte from the LCD and return it.
#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;
output_high(LCD_RW);
delay_cycles(1);
high = lcd_read_nibble();
low = lcd_read_nibble();
return( (high<<4) | low);
}
#endif
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif
if(address)
output_high(LCD_RS);
else
output_low(LCD_RS);
delay_cycles(1);
#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif
output_low(LCD_E);
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//----------------------------
void lcd_init(void)
{
int8 i;
output_low(LCD_RS);
#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif
output_low(LCD_E);
delay_ms(15);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(5);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
// If the R/W signal is not used, then
// the busy bit can't be polled. One of
// the init commands takes longer than
// the hard-coded delay of 60 us, so in
// that case, lets just do a 5 ms delay
// after all four of them.
#ifndef USE_LCD_RW
delay_ms(5);
#endif
}
}
//----------------------------
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//-----------------------------
void lcd_putc(char c)
{
switch(c)
{
case '\f':
lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n':
lcd_gotoxy(1,2);
break;
case '\b':
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);
break;
}
}
//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;
lcd_gotoxy(x,y);
// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));
output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);
return(value);
}
#endif
Última edição por nagkiller em Dom 24 Set 2017, 10:11, editado 4 vez(es) (Motivo da edição : Comentarios e edicão)
_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller- Moderador do fórum
- DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo :
Número de Mensagens : 2821
Idade : 43
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Re: PROGRAMAÇÃO PARA PIC16F628A
Enviando a primeira mensagem para o display lcd:
Imprimir na serial:
Interrupção do PORTB (deverá usar os pinos da PORTB4 até PORTB7):
Configuração do PORTB para interrupção:
Exemplo de como configurar PORTs como entrada ou saida:
Exemplo para desabilitar a interrupção:
Usando a rotina de delay:
Configurar os Fuses e frequencia de oscilação (Interno a 4MHz Sem Reset de MCLR):
Deverá modificar para quais pinos do PORTA e PORTB serão entrada e saida!!!
Agora basta juntar as partes, modificar e testar!!!
Flw...
- Código:
lcd_putc("\fTESTE LCD\n");
Imprimir na serial:
- Código:
printf("Hello World!!!");
Interrupção do PORTB (deverá usar os pinos da PORTB4 até PORTB7):
- Código:
#int_RB
#INT_RB
void RB_isr(void)
{
if (input (PIN_B7))
{
contaPulso++; //Incrementa a variável de pulsos
}
}
Configuração do PORTB para interrupção:
- Código:
ext_int_edge(L_TO_H); // Interrupção na borda de subida
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
Exemplo de como configurar PORTs como entrada ou saida:
- Código:
set_tris_a(0x00); // Tudo entrada 00000000
set_tris_b(0x80); // Tudo Saida 10000000 exceto RB7 entrada
Exemplo para desabilitar a interrupção:
- Código:
disable_interrupts(INT_RB) ;
Usando a rotina de delay:
- Código:
delay_ms(1000);
Configurar os Fuses e frequencia de oscilação (Interno a 4MHz Sem Reset de MCLR):
- Código:
#FUSES NOWDT, INTRC_IO , PUT, PROTECT, BROWNOUT, NOMCLR, NOLVP, NOCPD
#FUSES NOLVP
#use delay(internal=4MHz)
Deverá modificar para quais pinos do PORTA e PORTB serão entrada e saida!!!
Agora basta juntar as partes, modificar e testar!!!
Flw...
_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller- Moderador do fórum
- DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo :
Número de Mensagens : 2821
Idade : 43
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Tópicos semelhantes
» Projeto programador de eeprom versao completa modelo serial RS232 PONYPROG2000
» Como fazer a programação do receptor elsys 2.0 para monoponto?
» [Resolvido]ln32c530 como tirar a senha para fazer a programação?
» Como fazer a programação do receptor elsys 2.0 para monoponto?
» [Resolvido]ln32c530 como tirar a senha para fazer a programação?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Ontem à(s) 16:29 por Gilanio Matias
» PORFAVOR! ESQUEMA CAIXA DE SOM PHILCO MOD. PCX20000
Ontem à(s) 14:17 por elisondeus2024
» Esquema do minisystem cce modelo md3280
Ontem à(s) 12:08 por francisco constantino
» TV AOC 32s5195/78g precisso esquema fonte
Ontem à(s) 11:02 por everardes
» Som cce modelo md3280 parou de funcionar nem o stanby acende
Ontem à(s) 09:35 por MARIO Y. SEGAWA
» Prolongar a vida util das lampadas led.
Dom 17 Mar 2024, 14:14 por MARIO Y. SEGAWA
» tv semp toshiba 2085 U1 tela azul sem imagem sem caracteris
Dom 17 Mar 2024, 02:52 por MARIO Y. SEGAWA
» Vamos expor aqui nossas experiências em retirada e reposição de DISPLAYS.
Sáb 16 Mar 2024, 00:25 por CACÁ
» TV LG 32LM3400 defeito na fonte os 3,5v oscilando
Sex 15 Mar 2024, 18:35 por Jorgerodrigues
» Pq alguns projetos nao funciona na pratica ?
Sex 15 Mar 2024, 16:40 por nagkiller
» Estou precisando do esquema da caixa de som JBL, modelo,DJ Xpear J2515.
Sex 15 Mar 2024, 16:30 por jailton da silva santos
» caixa de som pulse sp362
Qui 14 Mar 2024, 22:54 por Rafael2
» [Resolvido]---Microndas Panasonic NN-ST254w depois de um tempo de funcionamento trava!
Qui 14 Mar 2024, 10:33 por Paranista
» TV AOC LE32D0330, NÃO LIGA.
Qui 14 Mar 2024, 08:51 por lweizemann
» Tv TCL Semp 49 SEMP 49K1US - Firmware
Qua 13 Mar 2024, 08:49 por Serafim
» Positivo All In One 520 TV - 71r-c14cu6-t810 onde está a bios?
Ter 12 Mar 2024, 23:17 por nagkiller
» [Resolvido]Tv Philco PH24T21DMT LED Problema: Led do Standby piscando não Liga.
Seg 11 Mar 2024, 22:03 por Marciel Dias
» Mixer DJX 700 sem sinal no canal master e com vazamentos
Dom 10 Mar 2024, 23:11 por Anderson B Cunha
» DEFEITO MECANISMO TOCA DISCOS DO PHILCO - HITACHI PRDT 300
Sex 08 Mar 2024, 15:15 por sugeda
» Televisores Philips CRT - SDM e SAM
Qui 07 Mar 2024, 13:37 por demourarj
» tv semp 32s5300 atualizaçao
Qui 07 Mar 2024, 07:54 por ednaldomoveis
» Philips Cineos HDTV 32PW8422/78 desligando ao entrar no menu de serviço
Qua 06 Mar 2024, 14:00 por demourarj
» Banda 800.4 resistor carbonizado.
Ter 05 Mar 2024, 17:07 por Francisco Coelho
» Esquema do Som Phillips 3 em 1 f1330/00
Ter 05 Mar 2024, 10:40 por sugeda
» cliente fazendo eu comprar componentes atoa
Seg 04 Mar 2024, 22:32 por MARIO Y. SEGAWA
» Tv Sansumg UN65AU7700GXZD Led piscando duas vezes
Seg 04 Mar 2024, 21:01 por Rafael2
» cliente que não busca os aparelhos consertados, o que fazer
Seg 04 Mar 2024, 19:28 por adriano cesar
» talvez esse amigo nao saiba que eu conserto aparelhos eletronicos
Seg 04 Mar 2024, 19:17 por adriano cesar
» HOME THEATER PHILIPS HTS3152/55 defieto travado
Dom 03 Mar 2024, 23:30 por gilmarcoso
» Alguém mais está com este problema aqui no fórum??
Dom 03 Mar 2024, 15:22 por CACÁ