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 PHILCO MOD TPF 2940 COM DEFEITO NÃO TEM ÁUDIO
Hoje à(s) 07:54 por Nill

» TV CEE32" stile d3201 defeito:Não Liga
Hoje à(s) 04:43 por Gilson Macedo

» Forno de microondas Brastemp mod. BMG 35ABHNA Def. Porta aberta ventilador e motor do prato liga.
Hoje à(s) 01:16 por Santinho

» Modulo Taramps TS 1200 2 ohms - saida de audio ruim
Hoje à(s) 00:31 por BETO GOMES

» Mini System Panasonic Sa Akx12 - audios com estalos
Ontem à(s) 22:17 por tomate

» Aparelho som Philips FWM9000 abre gaveta
Ontem à(s) 20:37 por Aslem

» Amplificador Ampeg BA115 Problema: esquentando as saídas
Ontem à(s) 14:13 por Marciel Dias

» TV SEMP MAX COLOR 2080E CAPACITOR CERAMICO 500
Ontem à(s) 11:33 por MARIO Y. SEGAWA

» Fonte Assimétrica Icel PS-1001 oscilando direto a tensão e a corrente
Ter 20 Fev 2018, 19:16 por Márcio Higashi

» Home theater samsung ht c 550 entrando em proteção
Ter 20 Fev 2018, 19:04 por gilmar viana de souza

» System LG CM4450 - s-protec
Ter 20 Fev 2018, 16:56 por César Araújo

» Módulo B-buster bb-2400gl sem resistores do crossover
Ter 20 Fev 2018, 14:40 por zinafmx

» TV CCE HPS-2991 - Mudando de canal sozinha ao ligar
Ter 20 Fev 2018, 13:36 por Nill

» Tv Panasonic TC-26LX80LB imagem negativa
Ter 20 Fev 2018, 13:35 por Nill

» MULTÍMETRO ANALÓGICO YU FONG 370 - ESCALA X10 NÃO FUNCIONA
Ter 20 Fev 2018, 13:14 por ramao m luciano martins

» recepto Century não liga
Ter 20 Fev 2018, 11:45 por Nill

» Power Click F10 - CI de amplificação queimado.
Ter 20 Fev 2018, 10:13 por fabimborem

» TV panasonic LED tc-l42et5b não liga
Ter 20 Fev 2018, 01:20 por Oinotna

» Maquina de lavar Consul - CWC10ABANA20 não centrifuga
Seg 19 Fev 2018, 23:26 por lasiluz

» microondas eletrolux mef28,,ao ligar,,lampada ventoinha,e prato nao funcionam
Seg 19 Fev 2018, 22:48 por jesus membribes

» Modulo Taramps HD3000 não sai som
Seg 19 Fev 2018, 22:27 por zinafmx

» tv lg 42lk450 liga e desliga
Seg 19 Fev 2018, 20:00 por jose ronaldo coelho

» Mini System Sony,Modelo HCD - GTR6H, defeito: Ao ligar apesenta, PLEASE WAIT,e desliga.
Seg 19 Fev 2018, 18:52 por jailton da silva santos

» CARREGADOR DE BATERIAS OKEI CL10B- PRECISO DE AJUDA!
Seg 19 Fev 2018, 12:51 por CARLOS AMARAL

» TV LG 20B84 não liga
Seg 19 Fev 2018, 10:17 por Carmo pardinho

» Dvd Automotivo H-buster Hbd9550av Não funciona nada
Dom 18 Fev 2018, 18:14 por augusto muniz dos santos

» tv cce - hps2997fs - def: liga e desliga
Dom 18 Fev 2018, 09:39 por MARIO Y. SEGAWA

» TV SHARP C-2999 NÃO LIGA
Sab 17 Fev 2018, 23:46 por felixtec

» TV cce HPS1471 tela branca e linhas horizontal
Sex 16 Fev 2018, 19:00 por Eletronica Martins2017

» Monitor with dvd receiver JVC KW AV68BT não sai som
Sex 16 Fev 2018, 16:37 por computiniki

Quem está conectado
335 usuários online :: 23 usuários cadastrados, 1 Invisível e 311 Visitantes :: 2 Motores de busca

ademir feil, Bruske, CACÁ, Danieldobreluthier, edson15, ELETRONICA FOX, Eletronicafernando, ferreira, ffbim2, jailton da silva santos, LIU, Marcos Santos, milton vitorino, news services, nilson10, OTAVIO EP, Porto, preto som, rafaelsilvatec, reginaldorr, Ricardo Luis Bomfim, ted silva, Victor

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 : 1702
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 : 1702
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