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!
https://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

Participe do fórum, é rápido e fácil

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!
https://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
Fórum Eletrônica2002 (Brasil)
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
.

Menu de navegação


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

Fóruns:






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

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

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



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

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» Tv toshiba Chassi U13 sem imagem e com som
PROGRAMAÇÃO PARA PIC16F628A EmptyOntem à(s) 16:29 por Gilanio Matias

» PORFAVOR! ESQUEMA CAIXA DE SOM PHILCO MOD. PCX20000
PROGRAMAÇÃO PARA PIC16F628A EmptyOntem à(s) 14:17 por elisondeus2024

» Esquema do minisystem cce modelo md3280
PROGRAMAÇÃO PARA PIC16F628A EmptyOntem à(s) 12:08 por francisco constantino

» TV AOC 32s5195/78g precisso esquema fonte
PROGRAMAÇÃO PARA PIC16F628A EmptyOntem à(s) 11:02 por everardes

» Som cce modelo md3280 parou de funcionar nem o stanby acende
PROGRAMAÇÃO PARA PIC16F628A EmptyOntem à(s) 09:35 por MARIO Y. SEGAWA

» Prolongar a vida util das lampadas led.
PROGRAMAÇÃO PARA PIC16F628A EmptyDom 17 Mar 2024, 14:14 por MARIO Y. SEGAWA

» tv semp toshiba 2085 U1 tela azul sem imagem sem caracteris
PROGRAMAÇÃO PARA PIC16F628A EmptyDom 17 Mar 2024, 02:52 por MARIO Y. SEGAWA

» Vamos expor aqui nossas experiências em retirada e reposição de DISPLAYS.
PROGRAMAÇÃO PARA PIC16F628A EmptySáb 16 Mar 2024, 00:25 por CACÁ

» TV LG 32LM3400 defeito na fonte os 3,5v oscilando
PROGRAMAÇÃO PARA PIC16F628A EmptySex 15 Mar 2024, 18:35 por Jorgerodrigues

» Pq alguns projetos nao funciona na pratica ?
PROGRAMAÇÃO PARA PIC16F628A EmptySex 15 Mar 2024, 16:40 por nagkiller

» Estou precisando do esquema da caixa de som JBL, modelo,DJ Xpear J2515.
PROGRAMAÇÃO PARA PIC16F628A EmptySex 15 Mar 2024, 16:30 por jailton da silva santos

» caixa de som pulse sp362
PROGRAMAÇÃO PARA PIC16F628A EmptyQui 14 Mar 2024, 22:54 por Rafael2

» [Resolvido]---Microndas Panasonic NN-ST254w depois de um tempo de funcionamento trava!
PROGRAMAÇÃO PARA PIC16F628A EmptyQui 14 Mar 2024, 10:33 por Paranista

» TV AOC LE32D0330, NÃO LIGA.
PROGRAMAÇÃO PARA PIC16F628A EmptyQui 14 Mar 2024, 08:51 por lweizemann

» Tv TCL Semp 49 SEMP 49K1US - Firmware
PROGRAMAÇÃO PARA PIC16F628A EmptyQua 13 Mar 2024, 08:49 por Serafim

» Positivo All In One 520 TV - 71r-c14cu6-t810 onde está a bios?
PROGRAMAÇÃO PARA PIC16F628A EmptyTer 12 Mar 2024, 23:17 por nagkiller

» [Resolvido]Tv Philco PH24T21DMT LED Problema: Led do Standby piscando não Liga.
PROGRAMAÇÃO PARA PIC16F628A EmptySeg 11 Mar 2024, 22:03 por Marciel Dias

» Mixer DJX 700 sem sinal no canal master e com vazamentos
PROGRAMAÇÃO PARA PIC16F628A EmptyDom 10 Mar 2024, 23:11 por Anderson B Cunha

» DEFEITO MECANISMO TOCA DISCOS DO PHILCO - HITACHI PRDT 300
PROGRAMAÇÃO PARA PIC16F628A EmptySex 08 Mar 2024, 15:15 por sugeda

» Televisores Philips CRT - SDM e SAM
PROGRAMAÇÃO PARA PIC16F628A EmptyQui 07 Mar 2024, 13:37 por demourarj

» tv semp 32s5300 atualizaçao
PROGRAMAÇÃO PARA PIC16F628A EmptyQui 07 Mar 2024, 07:54 por ednaldomoveis

» Philips Cineos HDTV 32PW8422/78 desligando ao entrar no menu de serviço
PROGRAMAÇÃO PARA PIC16F628A EmptyQua 06 Mar 2024, 14:00 por demourarj

» Banda 800.4 resistor carbonizado.
PROGRAMAÇÃO PARA PIC16F628A EmptyTer 05 Mar 2024, 17:07 por Francisco Coelho

» Esquema do Som Phillips 3 em 1 f1330/00
PROGRAMAÇÃO PARA PIC16F628A EmptyTer 05 Mar 2024, 10:40 por sugeda

» cliente fazendo eu comprar componentes atoa
PROGRAMAÇÃO PARA PIC16F628A EmptySeg 04 Mar 2024, 22:32 por MARIO Y. SEGAWA

» Tv Sansumg UN65AU7700GXZD Led piscando duas vezes
PROGRAMAÇÃO PARA PIC16F628A EmptySeg 04 Mar 2024, 21:01 por Rafael2

» cliente que não busca os aparelhos consertados, o que fazer
PROGRAMAÇÃO PARA PIC16F628A EmptySeg 04 Mar 2024, 19:28 por adriano cesar

» talvez esse amigo nao saiba que eu conserto aparelhos eletronicos
PROGRAMAÇÃO PARA PIC16F628A EmptySeg 04 Mar 2024, 19:17 por adriano cesar

» HOME THEATER PHILIPS HTS3152/55 defieto travado
PROGRAMAÇÃO PARA PIC16F628A EmptyDom 03 Mar 2024, 23:30 por gilmarcoso

» Alguém mais está com este problema aqui no fórum??
PROGRAMAÇÃO PARA PIC16F628A EmptyDom 03 Mar 2024, 15:22 por CACÁ

Quem está conectado?
134 usuários online :: 1 registrado, 0 invisíveis e 133 visitantes :: 2 motores de busca

leandronexttec

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

    Nenhum anúncio


    PROGRAMAÇÃO PARA PIC16F628A

    2 participantes

    Ir para baixo

    PROGRAMAÇÃO PARA PIC16F628A Empty PROGRAMAÇÃO PARA PIC16F628A

    Mensagem por g.marquees 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.

    #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
    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 : 32
    Cidade/Estado: : Eldorado/SP
    Data de inscrição : 20/09/2017

    Ir para o topo Ir para baixo

    PROGRAMAÇÃO PARA PIC16F628A Empty Re: PROGRAMAÇÃO PARA PIC16F628A

    Mensagem por nagkiller Sáb 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) (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
    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 : 2821
    Idade : 43
    Cidade/Estado: : Garça - São Paulo
    Humor : Depende
    Data de inscrição : 23/11/2011

    Ir para o topo Ir para baixo

    PROGRAMAÇÃO PARA PIC16F628A Empty Re: PROGRAMAÇÃO PARA PIC16F628A

    Mensagem por nagkiller Sáb 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!!!
    nagkiller
    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 : 2821
    Idade : 43
    Cidade/Estado: : Garça - São Paulo
    Humor : Depende
    Data de inscrição : 23/11/2011

    Ir para o topo Ir para baixo

    PROGRAMAÇÃO PARA PIC16F628A Empty Re: PROGRAMAÇÃO PARA PIC16F628A

    Mensagem por Conteúdo patrocinado


    Conteúdo patrocinado


    Ir para o topo Ir para baixo

    Ir para o topo

    - Tópicos semelhantes

     
    Permissões neste sub-fórum
    Não podes responder a tópicos