Ir ao conteúdo
  • Cadastre-se

1hsouza1

Membro Pleno
  • Posts

    26
  • Cadastrado em

  • Última visita

posts postados por 1hsouza1

  1. 5 horas atrás, Mega Blaster disse:

    Oh Yeh! Agora sim! Não é assim que funciona! Precisa por um sensor de nível que indicará o que a bomba deve fazer com ela cheia ou vazia. O DSJ é só a proteção desta automação. Aumente para 12 ou 24 V na saída e use uma contactora com relé térmico de acordo com a capacidade do motor. Dá para fazer só com boias também, dependendo do tamanho da bomba.

     

    esquema-ligacao-bomba-agua-automatica-bo

     

    21fd797c3c396f462de6eb672620066a.jpg

     

    Valeu !

    Resolvido 

  2. Em 26/04/2023 às 23:15, 1hsouza1 disse:

    Pessoal estou fazendo um projeto com microcontrolador, mas o PIC trabalha com faixas de no máximo 5V de tensão e nesse projeto preciso desligar o disjuntor quando a condição for OK. Então gostaria de saber se existe alguma forma de desarmar um disjuntor com apenas 5V de saída na tensão. Abaixo segue a ilustração do circuito.

     

    1- Ao ligar o disjuntor estará ligando o motor e enviando água para a caixa d' água

    2- Ao atingir o limite de água na caixa d' água ela fica derramando

    3- O motor só desliga pelo disjuntor

    4- Ao atingir o limite o sensor envia um sinal para o PIC

     

    O problema é que o PIC só trabalha na faixa dos 5 V e isso não desarma o disjuntor

     

    Sem título.png

  3. Pessoal estou fazendo um projeto com microcontrolador, mas o PIC trabalha com faixas de no máximo 5V de tensão e nesse projeto preciso desligar o disjuntor quando a condição for OK. Então gostaria de saber se existe alguma forma de desarmar um disjuntor com apenas 5V de saída na tensão. Abaixo segue a ilustração do circuito.

     

    Sem título.png

  4. Em 06/02/2023 às 16:31, Lucas Ricci disse:

    Para converter decimal para octal, basta pegar um número decimal e o dividir por 8 até que não seja mais possível. Como visto na imagem abaixo, o conceito é o mesmo com números binários, alterando o 8 por 2.

    image.png.fc6cb4feb973bc5ae587e7609b61b0a5.png

     

    Desculpa, errei ! 

    É para conversão em hexadecimal, gostaria de saber se alguém conhece algum método próprio do CCS C que realiza essa conversão direta sem precisar ter que fazer aquela tabela de hexadecimal

  5. Preciso converter o bit digitado de binário para octal no microcontrolador usando o CCS C Compiler, alguém sabe como realizar essa conversão ?

     

    MEU CÓDIGO FICOU DA SEGUINTE FORMA

    #include <16F877A.h>
    #include <math.h>
    #use delay(clock = 20M)
    #define size 10
    #include <lcd.c>
    #use fast_io(b)

     

    int a, b, c, d, e, f, g, decimal;
    unsigned int8 aux, dezena, unidade;

    void main(void){
       
        lcd_init();
        
       while(TRUE){      
          //aqui captura os bits digitados nos pinos B
          a = input(PIN_B0);
          b = input(PIN_B1);
          c = input(PIN_B2);
          d = input(PIN_B3);
          e = input(PIN_B4);
          f = input(PIN_B5);
          g = input(PIN_B6);
          
          // aqui converte para decimal 
          decimal = (a<<6)|(b<<5)|(c<<4)|(d<<3)|(e<<2)|(f<<1)|(g<<0);
          
          printf(lcd_putc,"\fBINARIO = %u%u%u%u%u%u%u \nOctal = %u"a, b, c, d, e, f, g, decimal);
          delay_ms(100);
          
          aux = decimal / 10;
          dezena = (int)floor(aux);
          
          aux = decimal - (10 * dezena);
          unidade = (int)floor(aux);
          
          output_c(matriz[dezena][unidade]);
          delay_ms(100);
          
       }
    }

     

     

    Sem título.png

     

  6. @aphawk segue abaixo a resolução:

    #include <16F877A.h>
    
    #include <math.h>
    
    #use delay(clock = 20M)
    
    #define size 10
    
    #include <lcd.c>
    
    
    
    const unsigned char matriz[size][size] = {
    
        {0, 16, 32, 48, 64, 80, 96, 112, 128, 144},
    
        {1, 17, 33, 49, 65, 81, 97, 113, 129, 145},
    
        {2, 18, 34, 50, 66, 82, 98, 114, 130, 146},
    
        {3, 19, 35, 51, 67, 83, 99, 115, 131, 147},
    
        {4, 20, 36, 52, 68, 84, 100, 116, 132, 148},
    
        {5, 21, 37, 53, 69, 85, 101, 117, 133, 149},
    
        {6, 22, 38, 54, 70, 86, 102, 118, 134, 150},
    
        {7, 23, 39, 55, 71, 87, 103, 119, 135, 151},
    
        {8, 24, 40, 56, 72, 88, 104, 120, 136, 152},
    
        {9, 25, 41, 57, 73, 89, 105, 121, 137, 153}   
    
    };
    
    
    
    int a, b, c, d, e, f, g, decimal;
    
    unsigned int8 aux, dezena, unidade;
    
    
    
    void main(void){
    
       
    
        for(int i = 0; i < size; i++){
    
          for(int j = 0; j < size; j++){
    
             output_c(matriz[i][j]);
    
             delay_ms(100);
    
          }
    
        }
    
        delay_ms(500);
    
        
    
        lcd_init();
    
        
    
       while(TRUE){      
    
          
    
          a = input(PIN_B0);
    
          b = input(PIN_B1);
    
          c = input(PIN_B2);
    
          d = input(PIN_B3);
    
          e = input(PIN_B4);
    
          f = input(PIN_B5);
    
          g = input(PIN_B6);
    
          
    
          decimal = (a<<6)|(b<<5)|(c<<4)|(d<<3)|(e<<2)|(f<<1)|(g<<0);
    
          
    
          printf(lcd_putc,"\fBINARIO = %u%u%u%u%u%u%u \nDECIMAL = %u"a, b, c, d, e, f, g, decimal);
    
          delay_ms(100);
    
          
    
          aux = decimal / 10;
    
          dezena = (int)floor(aux);
    
          
    
          aux = decimal - (10 * dezena);
    
          unidade = (int)floor(aux);
    
          
    
          output_c(matriz[dezena][unidade]);
    
          delay_ms(100);
    
          
    
       }
    
    
    
    }

     

     

    2.gif

    "Eu sei daria para usar multiplexador ou um vetor com 10 valores e outra forma, mas o meu objetivo era outro método porque na web nunca encontrei resoluções com matrizes, então resolvi dessa forma para compartilhar conhecimento."

    Talvez o interessados futuramente possa aplicar ou usar em algo bem útil.

    • Amei 1
  7. Preciso usar uma matriz de 10x10 em CCS C Compiler, mas na hora de executar o Compilador está pedindo + memória !  

    Alguém sabe como resolver isso ? 

    Meu código ficou da seguinte forma abaixo: 

    #include <16F877A.h>
    #include <stdio.h>
    #include <stdlib.h>
    #use delay(clock = 20MHz)
    #use fast_io(b)
    
    unsigned int8 a, b, c, d, e;
    
    int *mat[10][10] = {    {0, 16, 32, 48, 64, 80, 96, 112, 128, 144}
                            {1, 17, 33, 49, 65, 81, 97, 113, 129, 145}
                            {2, 18, 34, 50, 66, 82, 98, 114, 130, 146}
                            {3, 19, 35, 51, 67, 83, 99, 115, 131, 147}
                            {4, 20, 36, 52, 68, 84, 100, 116, 132, 148}
                            {5, 21, 37, 53, 69, 85, 101, 117, 133, 149}
                            {6, 22, 38, 54, 70, 86, 102, 118, 134, 150}
                            {7, 23, 39, 55, 71, 87, 103, 119, 135, 151}
                            {8, 24, 40, 56, 72, 88, 104, 120, 136, 152}
                            /*{9, 25, 41, 57, 73, 89, 105, 121, 137, 153, 169}
                            };*/
    
    void main(void){
           
       
       while(TRUE){
                     
          
       }
    }

     

    esquemático_modulo_ADS1256.PNG

    esquemático_modulo_ADS1256.PNG

    Question_1.7z Question_1.7z

  8. @.if

    #include <16F877A.h>
    #device adc = 8
    #use delay(clock = 20MHz)
    #use fast_io(b)
    #include <lcd.c>

    unsigned int8 a, b, c, d;   
    byte decimal;

    void main(void){
       lcd_init();
       
       while(TRUE){
          
          if(input(PIN_B0) == 1){
             a = 1;
          }else{ a = 0; }
          
          if(input(PIN_B1) == 1){
              b = 1; 
          }else{ b = 0;}
          
          if(input(PIN_B2) == 1){
             c = 1;
          }else{ c = 0; }
          
          if(input(PIN_B3) == 1){
             d = 1; 
          }else{ d = 0; }
                                        
          decimal = (a<<3)|(b<<2)|(c<<1)|(d<<0);
                
          output_c(decimal);
                
          printf(lcd_putc,"\fBINARIO = %u%u%u%u  \nDECIMAL = %u"a, b, c, d, decimal);
          delay_ms(200);
                
       }
    }

     

     

    1726681687_gifdecodificador2.gif

  9. Pessoal gostaria de transformar a entrada dos botões nos pinos B para um codificador, estou com 2 problemas:

    O 1° é que eu fiz variáveis separadas a, b, c, d, e . Logo depois preciso junta-las e converter para decimal

    O 2° problema é que eu preciso converter na porta C na forma output_c(0x..) ; Que não faço a menor ideia em como fazer isso !

    Meu código ficou da seguinte forma:

     

    #include <16F877A.h>
    #device adc = 8
    #use delay(clock = 20MHz)
    #include <lcd.c>

    int a, b, c, d, e, decimal;

    void main(void){
       lcd_init();
         
       while(TRUE){
          
          if(input(PIN_B0) == 1){
             a = 1;
          }else{ a = 0;}
          
          if(input(PIN_B1) == 1){
              b = 1;
          }else{ b = 0; }
          
          if(input(PIN_B2) == 1){
             c = 1;
          }else{ c = 0;}
          
          if(input(PIN_B3) == 1){
             d = 1;
          }else{ d = 0;}
          
          if(input(PIN_B4) == 1){
             e = 1;
          }else{ e = 0;}
          
          //decimal = a, b, c, d; junta esses bits e converte em decimal 
          printf(lcd_putc,"\fBINARIO = %u%u%u%u%u \nDECIMAL = %u"a, b, c, d, e, decimal);
          delay_ms(200);
          
          output_c(0x07); // aqui preciso imprimir o decimal (substituir o 0x07 pelo decimal como exemplo)
       }
    }

     

     

    1.gif

  10. Objetivo: Calcular e mostrar na interface a velocidade de um motor DC 

    image.png.ab36a0c5fb49012c4cb943522558995d.png

     

    Meu código feito no CCS C Compiler

     

    #include <16F877A.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #device ADC = 10
    #use delay(clock = 20M)
    #include <lcd.c>

    unsigned int16 i ;
    unsigned int8 velocidade ;

    void main(){
      setup_adc(ADC_CLOCK_DIV_32);           // Set ADC conversion time to 32Tosc
      setup_adc_ports(AN0);                  // Configure AN0 as analog
      set_adc_channel(0);                    // Select channel AN0
      setup_ccp1(CCP_PWM);                   // Configure CCP1 as a PWM
      setup_timer_2(T2_DIV_BY_16, 250, 1);   // Set PWM frequency to 500Hz
      delay_ms(100);                         // Wait 100ms
      lcd_init();
      
      while(TRUE){
        i = read_adc();                      // Read from AN0 and store in i
        set_pwm1_duty(i);                    // PWM1 duty cycle set
        printf(lcd_putc,"\fV = %u RPM",velocidade);
        delay_ms(10);                        // Wait 10ms
       }
    }

     

    Alguém poderia me auxiliar em como inserir os cálculos da velocidade do motor, sendo que a velocidade muda de acordo com o potenciômetro !

    • Curtir 1
  11. Existe alguma forma de truncar um valor no CCS C Compiler ? 
    Meu objetivo é truncar cada caractere de um valor analógico.

    - Por exemplo: Valor = 247 ; 

    Depois armazenar esse valor truncado em um vetor nas suas devidas posições. 

    - int vetor [ ] = {2, 4, 7} ;

     

    Se alguém souber a solução, por favor poste aqui a sua solução com o esquemático do PIC.

    Ou se alguém alguma outra forma de fazer, poste aqui a sua solução !

    Sem título.png

    • Obrigado 1
  12. Em 08/04/2022 às 00:39, 1hsouza1 disse:

    Como que eu faço para acionar 3 LEDS com frequência 90Hz, 70Hz e 150Hz usando interrupção no PIC 16F877A ? 

    Alguém poderia ajudar e postar seu código aqui !

    Minha resolução ficou da seguinte forma, porém não sei se está correto.

    CÓDIGO FEITO EM CCS C Compiler

     

    #include <16F877A.h>
    #FUSES NOWDT
    #FUSES HS
    #FUSES NOPROTECT
    #FUSES NODEBUG
    #FUSES NOBROWNOUT
    #FUSES NOLVP
    #FUSES NOCPD
    #FUSES NOWRT
    #use delay(crystal = 20MHz)

    // PISCAR NAS FREQUENCIAS F1 = 90Hz, F2 = 70Hz e F3 = 150Hz
    // FREQUENCIA = 1/T 

    unsigned int8 tempo1 = 1000/90, tempo2 = 1000/70, tempo3 = 1000/150;

    #INT_RTCC
    void  RTCC_isr(void) {
       output_toggle(PIN_B0); //pisca a cada 13.1 ms
       delay_ms(tempo1);
       
       output_toggle(PIN_B1);
       delay_ms(tempo2);
       
       output_toggle(PIN_B2);
       delay_ms(tempo3);
       
    }

    void main(){
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);
       setup_psp(PSP_DISABLED);
       setup_spi(SPI_SS_DISABLED);
       
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //overflow en 13.1 
       
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED, 0, 1);
       setup_comparator(NC_NC_NC_NC);
       setup_vref(FALSE);
       enable_interrupts(INT_RTCC); // habilita a chave RTCC
       enable_interrupts(GLOBAL);   // habilita a chave geral

       while(TRUE) ; 

    }
     

     

     

     

    Em 08/04/2022 às 00:39, 1hsouza1 disse:

     

    <Como que eu faço para acionar 3 LEDS com frequência 90Hz, 70Hz e 150Hz usando interrupção no PIC 16F877AAlguém poderia ajudar e postar seu código aqui !>

     

     

    image.png

    • Confuso 1
  13. Como que eu faço para acionar 3 display com frequência 90Hz, 70Hz e 150Hz usando interrupção no PIC 16F877A ? 

    Alguém poderia ajudar e postar seu código aqui !

     

    <Como que eu faço para acionar 3 display com frequência 90Hz, 70Hz e 150Hz usando interrupção no PIC 16F877AAlguém poderia ajudar e postar seu código aqui !>

     

  14. O objetivo é:

    1 Inserir nó no final da lista

    2 Remover nó no final da lista

    3 Inserir nó em posição qualquer da lista;
    4 Remoção de nó em posição qualquer da lista;

     

    A 1 e a 2 eu consegui fazer, mas não encontro referência de como inserir e remover nó em posição qualquer da lista.

    O meu algoritmo ficou da seguinte forma:

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <cstdlib>
    #include <iostream>
    using namespace std;

    typedef struct celulalista{
        int informacao;
        struct celulalista *proximo;
    }celula;

    void initlista(celula *pRecebido);
    void insertlista(celula *pRecebido);
    void buscalistasimples(celula *pRecebido);
    void removeelementolistasimples(celula *pRecebido);
    int levalor(int *valorrecebido);

    int main()
    {
        //Declaracoes
        celula *pLista;
        int opcao=0;
        
        //pLista = (celula *)malloc(sizeof(struct celulalista));
        
        pLista = new celulalista;
        initlista(pLista);
        for(;;)
        {
            cout<<"\n\t1 - Inserir : ";
            cout<<"\n\t2 - Consultar : ";
            cout<<"\n\t3 - Remover : ";
            cout<<"\n\t4 - Sair : \n\t";
            cin>>opcao;
            opcao = levalor(&opcao);
            switch(opcao)
            {
                    case 1:
                        insertlista(pLista);
                        break;
                    case 2:
                        buscalistasimples(pLista);
                        break;
                    case 3:
                        removeelementolistasimples(pLista);
                        break;
                    case 4:
                        exit(0);
            }
        }
        return 0;
    }

    /*
        Inicializacao da lista encadeada
    */

    void initlista(celula *pRecebido){
        (pRecebido)->proximo = NULL;
    }

    /*
        Funcao para insercao no inicio
    */

    void insertlista(celula *pRecebido){
    //Declaracoes
        celula *temporario;
        int valor;
    //Instrucoes
        cout<<"\n\tInforme um valor a ser inserido : ";
        cin>>valor;
        temporario = (celula * )malloc(sizeof(celula));
        temporario->informacao = valor;
        temporario->proximo = (pRecebido)->proximo;
        (pRecebido)->proximo = temporario;
    }

    /*
        Funcao para percorrer elementos
    */

    void buscalistasimples(celula *pRecebido){
        //Declaracoes
        celula *temporario;
        //Instrucoes
        if((pRecebido)->proximo == NULL){
            cout<<"\tLista Vazia!\n";
        }else{
            temporario = (celula * )malloc(sizeof(celula));
            temporario = (pRecebido)->proximo;
            system("cls");
            while(temporario!=NULL){
                cout<<"\n\tValor : "<<temporario->informacao<<"\n";
                temporario = temporario->proximo;
            }
        }
    }
    /*
        Remove elemento da cabeca
    */

    void removeelementolistasimples(celula *pRecebido){
        //Declaracoes
        celula *temporario;
        //Instrucoes
        if((pRecebido)->proximo == NULL){
            cout<<"\n\tLista Vazia!";
        }else{
            temporario = (pRecebido)->proximo;
            (pRecebido)->proximo = temporario->proximo;
            free(temporario);
        }
    }

    int levalor(int *valorrecebido){
        //Declaracoes
        //Instrucoes
        while((*valorrecebido > 4 )|| (*valorrecebido<1)){
            cout<<"\n\tOpcao Invalida. Informe novamente : \n";
            scanf("%d", &(*valorrecebido));    
        }
        return (*valorrecebido);
    }

     

     

    Alguém poderia me ajudar nesse algoritmo de como ele ficaria ?

  15. teste

    adicionado 1 minuto depois
    10 horas atrás, MOR disse:

    Minha política de respostas é a seguinte:

    Se for solução de problemas aparentemente escolares E se o membro se cadastra no dia que expõe sua dúvida, evito responder.

    Exceção. Quando o membro apresenta o seu desenvolvimento, mostrando que realmente tentou fazer o trabalho.

    MOR_AL

    Na verdade é uma atividade da faculdade, fiz 3 resolução, mas o prof disse que estava errada e os demais também não acertaram. Então fiquei muito tempo preso nessa atividade tentando resolver e deixava de estudar as outras disciplinas, ai me cadastrei nesse blog para saber se alguem consegue resolver ela.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!