Ir ao conteúdo
  • Cadastre-se

1hsouza1

Membro Pleno
  • Posts

    32
  • Cadastrado em

  • Última visita

Tudo que 1hsouza1 postou

  1. 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.
  2. 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
  3. 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); } }
  4. @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); } } "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.
  5. @kgin Valeu amigo ! Funcionou Funcionou conforme eu esperava
  6. 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){ } } Question_1.7z Question_1.7z
  7. @.if Opa ! + 1 para a conta, melhorou meu código ! Economizei linhas de código Valeu
  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); } }
  9. @.if Obrigado ! Agora funcionou 100% da forma que eu quero !
  10. @.if Amigo meu objetivo é concatenas essas variáveis: Ex: a = 1, b = 0, c = 0, d = 1, e = 1; Juntando elas em uma única variável ficariam assim 10011
  11. @.if Amigo na compilação em C funcionou, porém em CCS C compiler para microcontroladores não funcionou !
  12. 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) } }
  13. @.if Não vou trabalhar com torque, o meu objetivo é apenas encontrar uma equação matemática que se aplique a nesse código.
  14. Objetivo: Calcular e mostrar na interface a velocidade de um motor DC 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 !
  15. Valeu ! Deu certo aqui Valeu pessoal pela ajuda, mas consegui fazer. Peguei a referencia e apliquei no código. Abaixo segue como que ficou na simulação https://blogdaengenhariacotidiana.blogspot.com/2022/04/inserir-valor-analógico-com-display.html
  16. 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 !
  17. 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) ; }
  18. 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 16F877A ? Alguém poderia ajudar e postar seu código aqui !>
  19. Olá ! Preciso aprender como trabalhar com o GALS (emulador de análise léxica sintática para compiladores), mas na web não tem muita referência de como ensina a trabalhar com ele. Preciso fazer um algoritmo de fatorial com base na gramática na imagem do anexo: Um algoritmo bem simples de fatorial que fiz em C/C++ #include <stdio.h> int main(){ int valor = 5, fat = 1; while(valor > 0){ fat = fat * valor; valor = valor-1; } printf("%d",fat); }
  20. Já tive um problema com PC desligando a todo momento também (Sistema operacional Windows) , fiz restauração do sistema ei ele parou , formatando também resolve o problema.
  21. As formas de onda de entrada mostradas na figura 2 são aplicadas num somador de 2 bits. Determine as formas de onda para a soma e o carry de saída em relação às entradas construindo o diagrama de temporização. Minha resolução ficou da seguinte forma: Gostaria de saber se a minha resolução está correta , pois a minha dúvida é se é para fazer em relação a soma com A2 + B2 + Cin ou se é para fazer o gráfico em relação com A1 + B1 com Cin ou sem Cin.
  22. Dado o algoritmo abaixo incompleto do caso 4 e 5 faça a INSERÇÃO e REMOÇÃO de uma posição qualquer da lista. #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 - INSERIR EM POSICAO QUALQUER : "; cout<<"\n\t5 - REMOVER EM POSICAO QUALQUER: "; cout<<"\n\t6 - 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; int i=0; //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\t["<<(i=i+1) <<"] Valor : "<<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 > 6 )|| (*valorrecebido<1)){ cout<<"\n\tOpcao Invalida. Informe novamente : \n"; scanf("%d", &(*valorrecebido)); } return (*valorrecebido); }
  23. Sim eu entendi no escopo, mas eu só não estou conseguindo fazer no algoritmo e não encontro referencias nos livros nem na web.

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...