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
» Mini system Sony hcd ex8br dando protect(proteção)
Hoje à(s) 01:26 por tec.josé ferreira

»  Receptor Century supercolor JL3
Ontem à(s) 20:13 por jondas gonçalves

» Som Philips FWM-663-55 Não liga
Ontem à(s) 18:15 por alros

» Tv gradiente 2925 nao liga
Ontem à(s) 17:53 por ale51madureira

» mini system sony gtr888 liga e entra em protect
Ontem à(s) 17:46 por Marcos vinicius 007

» tv sony 29 modelo KV-29FS140 com imagem avermelhada opaca
Ontem à(s) 12:07 por Naldo Oliveira

» tv lg 50pa4500 não liga
Ontem à(s) 12:01 por Naldo Oliveira

» Som sony MHC-EC55 desarmando quando aumenta o volume
Ontem à(s) 11:56 por Naldo Oliveira

» tv cineral tc 1470 em standbay
Ontem à(s) 11:54 por Naldo Oliveira

» Tv Samsung cl29a551gq nao liga
Ontem à(s) 11:43 por Naldo Oliveira

» tv samsung cl-21z30mq não funciona
Ontem à(s) 09:58 por Paranista

» caixa amplificada Vicini vc-7300- nao muda as funções
Ontem à(s) 09:43 por João Paulo SENAI SUL

» modulo soundigital sd250.2d estourando capacitores de 470n/100v
Ter 12 Dez 2017, 21:40 por Elizeu Ramos

» Micro ondas Brastemp Jet Defrost 27 litros Erro 3
Ter 12 Dez 2017, 12:53 por Paranista

» [Resolvido]tv semp 2134(c) sl liga e desliga capacitor principal da fonte com carga
Ter 12 Dez 2017, 07:47 por reginaldorr

» Módulo subida/descida automatizada dos vidros Soft PW42L com 01 circuíto em curto
Seg 11 Dez 2017, 19:26 por nagkiller

» Forno de microondas Brastemp mod. BMG 35ABHNA Def. Porta aberta ventilador e motor do prato liga.
Seg 11 Dez 2017, 19:22 por jailton da silva santos

» Mini system Sony mhc-gtr66 com a intensidade do Led do volume e VU muito baixa(encerrado)
Seg 11 Dez 2017, 16:49 por tec.josé ferreira

» micro system panasonic sc-vk70dlb-s o canhão laser da unidade fica batendo
Seg 11 Dez 2017, 15:03 por eletmoraes

»  MicroOndas Electrolux MTD 30 que as teclas inico e cancela nao funcionam..
Seg 11 Dez 2017, 13:47 por fernandocsouza

» TV sony 32bx425 liga normal trava o painel se desligar nao iga
Seg 11 Dez 2017, 12:59 por uga_uga

» Som Sony LBT-36W Defeito: Barulho no bracinho do toca-discos
Dom 10 Dez 2017, 21:28 por Francisco Borges

» MICROONDAS PANASONIC-MOD NN-6952-APITO INTERMITENTE.
Sab 09 Dez 2017, 23:47 por souza raposa

» TV LG MOD.29FU6 TL - IMAGEM PULSANDO
Sab 09 Dez 2017, 14:58 por Viana*

» FONTE USINA 200A,,PÇ TORRADA..
Sab 09 Dez 2017, 14:16 por ELETRONICA FOX

» Módulo soundigital sd 3000.1d aquecendo fets da saída
Sex 08 Dez 2017, 08:01 por Nill

» TV SHARP C29ST58 Defeito: Sem caracteres, chuviscando
Sex 08 Dez 2017, 07:27 por WALTER JANSEN

» MINISITEM PANASONIC SA-AKX10 NÃO FUNCIONA
Qui 07 Dez 2017, 21:36 por rjmagno

» tv sharp c-2041b não liga
Qui 07 Dez 2017, 10:52 por Paranista

» som sony hcd gpx55 nao ativa o radio e o bluetooth
Qui 07 Dez 2017, 10:32 por jose ronaldo coelho

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

eletronica do valmir, Etherno_Crhistal, joaoalmeida, MARIO Y. SEGAWA, miguel, Nill, robusto58

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