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
» tv philips 21pt54338r nao liga
Ontem à(s) 23:16 por saitam

» tv cce hps-1403
Ontem à(s) 22:50 por tomate

» microondas panasonic nn-st341wrun não funciona lampada ventilado e prato com display aceso
Ontem à(s) 22:31 por tomate

» Modulo Taramps HD 10000 2 ohms - Defeito na fonte
Ontem à(s) 20:29 por BETO GOMES

» [Resolvido]tv de progesao samsung sp-50L3hr nao liga só fica piscando o stand by
Ontem à(s) 19:47 por WALTER JANSEN

» TV Toshiba tv2958ffs fs3 led aceso e não liga
Ontem à(s) 18:29 por Gustavo machado costa

» modulo stetsom 5kes armando proteção após reparo
Ontem à(s) 17:27 por wandsonpiane

» home theater philips hts2500 so aparece philips no display
Ontem à(s) 17:23 por Chagas Moura

» SOCORRO AMIGOS estou com uma tv LG modelo 42pj250 se imagem com som (defeito na Y sUS)
Ontem à(s) 15:16 por edson nunes

» Caixa amplificada oneal ocm 1060 zumbido no effect level
Ontem à(s) 15:11 por Juninho Silva

» som philips fwm 396-bk,,volume no ultimo,,audio bem baixinho,so da pra ouvir se colocar o ouvido na
Ontem à(s) 09:02 por jesus membribes

» TV SEMP 2052 U19 FONTES BAIXA
Ontem à(s) 02:14 por MARIO Y. SEGAWA

» System Sony modelo LBT-A495 com problema no stand by
Ter 17 Out 2017, 19:14 por Eduardo Toda

» tv gradiente TFH-2970 faixas na horizontal
Ter 17 Out 2017, 17:31 por Nill

» Aiwa NSX T96 Display fraco
Ter 17 Out 2017, 17:19 por ki susto

» modulo taramps HD10000 1ohm transistor de saida queimado
Ter 17 Out 2017, 15:41 por juliocddc

» Monitor LCD- Marca AOC - Mod. 2219V1 Sem Contraste.
Ter 17 Out 2017, 14:03 por Nill

» TV Toshiba 2079fms sem caracteres
Ter 17 Out 2017, 13:55 por baltazar alves da silva

» TV SONY KDL-40R485A
Seg 16 Out 2017, 23:09 por CACÁ

» Ap. de som philips carrocel - Mod: 593/BK - defeito: INTERMITENCIA.
Seg 16 Out 2017, 22:35 por QUIQUE

» MÀQUINA DE LAVAR ROUPAS ESMALTEC EW50 NÂO CENTRIFUGA
Seg 16 Out 2017, 20:56 por flavio aguiar

» midia box century shd 7100n nao sai do boot
Seg 16 Out 2017, 13:42 por Teimoso

» [encerrado]tv sharp c14 rs03 com piado na fonte
Seg 16 Out 2017, 13:05 por Paranista

» Nobreak sms modelo sm1400BfX (NAO SEGURA BATERIA )
Seg 16 Out 2017, 08:11 por Conserto De TV

» som sony HCD GTR8 , USB não faz leitura
Seg 16 Out 2017, 00:39 por Teimoso

» modulo som banda 9.8 980 wrms voltagem da fonte alterada
Dom 15 Out 2017, 20:24 por luiz da eletronica

» receptor century mediabox modelo SH7100 não sai de boot
Dom 15 Out 2017, 10:05 por Nill

» SOM PHILIPS modelo FWM9000 não liga
Dom 15 Out 2017, 10:03 por Nill

» tv philips saida horizontal em curto
Sab 14 Out 2017, 19:35 por saitam

» Caixa Oneal amplificada queimada por ter ligada em 220
Sab 14 Out 2017, 18:54 por tomate

Quem está conectado
43 usuários online :: 2 usuários cadastrados, Nenhum Invisível e 41 Visitantes :: 2 Motores de busca

Jandui Cavalcante, MAURO BRANDAO

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

PROGRAMAÇÃO PARA PIC16F628A

Ver o tópico anterior Ver o tópico seguinte 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 : 25
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 : 1643
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 : 1643
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

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


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