Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
http://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br
.
Menu de navegação


Clique nas imagens abaixo para acessar os fóruns desejados.

Fóruns:





---------------------------

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

================

Clique nos banners:




================

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» dvd automotivo positron modelo sp4211av liga mas sem audio
Hoje à(s) 09:14 por Conserto De TV

» Multímetro Hikari HM2090 danificado.
Hoje à(s) 06:13 por BlackWidow

» TV TOSHIBA MODELO CCP3400 ACENDE O LED DE STANDBAY MAS A TV NÃO LIGA.
Hoje à(s) 00:27 por jojo16

» Curso do software Proteus para iniciantes
Ontem à(s) 23:24 por CACÁ

» MICRO SYSTEM PHILIPS FWM452X/78 SEM ÁUDIO
Ontem à(s) 20:02 por WALTER JANSEN

» Som Sony HCD-GT55 mensagem EJECT desligando
Ontem à(s) 14:46 por mario satake

» PHILCO PLATINUM TP-1452N ITAUTEC - SÓ FICA EM STAND BY
Ontem à(s) 13:58 por MARIO Y. SEGAWA

» tv lg 21fj6rb em standby nao liga
Ontem à(s) 11:49 por verino

» MInisistem LG CJ44 - Fonte queimada.
Ontem à(s) 11:41 por Admilson Augusto

» APARELHO DE SOM PHILIPS FWM-416 NÃO ACIONA A FUNÇÃO CD
Ontem à(s) 08:45 por ctl

» som multilaser sp250 sem audio
Dom 19 Ago 2018, 00:18 por Teimoso

» Microondas Panasonic NN-S50BH inoperante
Sab 18 Ago 2018, 15:34 por Paranista

» micro ondas electrolux MEF28
Sab 18 Ago 2018, 10:37 por manoel geovani

» Reparo em Solda Inversora Balmer Maxxiarc 162DV
Sab 18 Ago 2018, 10:24 por Marcos Piva

» Gradiente AT 51 sem som e com zumbido
Sab 18 Ago 2018, 08:47 por Nill

» Como Prolongar vida util da Ponteira do Ferro de Solda
Sex 17 Ago 2018, 17:22 por kir

» som aiwa modelo cxz51lh defeito sem som
Sex 17 Ago 2018, 14:33 por gerldo

» como você pode transformar um antigo alicate em uma ferramenta multifuncional.
Sex 17 Ago 2018, 10:28 por kir

» Como fazer um Mancal caseiro.facilita seus projetos!
Sex 17 Ago 2018, 10:12 por kir

» cd player Pionner 2350UB saida queimada
Sex 17 Ago 2018, 08:16 por Nill

» video cassete
Sex 17 Ago 2018, 08:15 por Nill

» Tv mitsubishi TC2098 sem imagem, som e caracteres normais.
Qui 16 Ago 2018, 17:24 por CARLOS AMARAL

» No-break Hagtech easy pro 1200 inverter não arma.
Qui 16 Ago 2018, 16:10 por Paranista

»  mini system philco ph 650, travando as funcoes depois de 1 minuto ligado
Qui 16 Ago 2018, 15:09 por Oficina do SOM

» System lg // cm 8330 // sem som e não modula
Qui 16 Ago 2018, 14:51 por DANTEX

» Como fazer um Buzzer de Speaker Simples na Falta !
Qui 16 Ago 2018, 10:14 por kir

» playstation 2 slim scph 90006 nao le e cooler nao gira
Qua 15 Ago 2018, 19:38 por shergio

» microondas cônsul cms25abhna diodo duplo = Resolvido
Qua 15 Ago 2018, 14:56 por Roberto Soares

» tv de tubo sony (kv29fs100) imagem cortando
Qua 15 Ago 2018, 13:24 por Edwilson

» Home Theater LG HT306SU - Sem som
Qua 15 Ago 2018, 11:44 por brlac3rda

Quem está conectado
308 usuários online :: 19 usuários cadastrados, 2 Invisíveis e 287 Visitantes :: 2 Motores de busca

beto00, CACÁ, computiniki, Conserto De TV, echevengua, eletronica do valmir, eletrosys, isaias teixeira sobrinho, jailton da silva santos, jaireletronica, joaoalmeida, marcio.kikugawa, marcio2009, Marcos Piva, mario satake, nostalgico, Paulo Lins, Roberto Soares, silnei

O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41

PROGRAMAÇÃO PARA PIC16F628A

Ir em baixo

PROGRAMAÇÃO PARA PIC16F628A

Mensagem por g.marquees em Qua 20 Set 2017, 01:10

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.

[Você precisa estar registrado e conectado para ver este link.] <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) (Razão : títulos coloridos são contra a regra)
avatar
g.marquees
NOVATO
NOVATO

DESCRIÇÃO: : Técnico em Eletrônica
TEMPO DE EXPERIÊNCIA : 1 ano
Sexo : Masculino
Número de Mensagens : 1
Idade : 26
Cidade/Estado: : Eldorado/SP
Data de inscrição : 20/09/2017

Voltar ao Topo Ir em baixo

Re: PROGRAMAÇÃO PARA PIC16F628A

Mensagem por nagkiller em Sab 23 Set 2017, 01:47

Usando CCS C Compiler para PIC:

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) (Razão : Comentarios e edicão)

_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
avatar
nagkiller
Moderador do fórum
Moderador do fórum

DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo : Masculino
Número de Mensagens : 1767
Idade : 37
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

Re: PROGRAMAÇÃO PARA PIC16F628A

Mensagem por nagkiller em Sab 23 Set 2017, 01:54

Enviando a primeira mensagem para o display lcd:

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!!!
avatar
nagkiller
Moderador do fórum
Moderador do fórum

DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo : Masculino
Número de Mensagens : 1767
Idade : 37
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

Re: PROGRAMAÇÃO PARA PIC16F628A

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum