-
Posts
22 -
Cadastrado em
-
Última visita
Reputação
3-
PIC Transformar entrada bit para saída em um codificador
1hsouza1 respondeu ao tópico de 1hsouza1 em Programação de microcontroladores
@.if Obrigado ! Agora funcionou 100% da forma que eu quero ! 👍- 7 respostas
- 272 visualizações
-
PIC Transformar entrada bit para saída em um codificador
1hsouza1 respondeu ao tópico de 1hsouza1 em Programação de microcontroladores
@.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- 7 respostas
- 272 visualizações
-
PIC Transformar entrada bit para saída em um codificador
1hsouza1 respondeu ao tópico de 1hsouza1 em Programação de microcontroladores
@.if Amigo na compilação em C funcionou, porém em CCS C compiler para microcontroladores não funcionou !- 7 respostas
-
- 1
-
- 272 visualizações
-
1hsouza1 começou a seguir Interrupção com PIC 16F877A , Transformar entrada bit para saída em um codificador , Velocidade de um motor com PIC e 1 outro
-
PIC Transformar entrada bit para saída em um codificador
1hsouza1 postou um tópico em Programação de microcontroladores
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) } }- 7 respostas
- 272 visualizações
-
PIC Velocidade de um motor com PIC
1hsouza1 respondeu ao tópico de 1hsouza1 em Programação de microcontroladores
@.if Não vou trabalhar com torque, o meu objetivo é apenas encontrar uma equação matemática que se aplique a nesse código.- 5 respostas
- 684 visualizações
-
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 !
- 5 respostas
-
- 1
-
- 684 visualizações
-
PIC Truncar valor no CCS C Compiler
1hsouza1 respondeu ao tópico de 1hsouza1 em Programação de microcontroladores
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- 8 respostas
- 929 visualizações
-
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 !
- 8 respostas
-
- 1
-
- 929 visualizações
-
PIC Interrupção com PIC 16F877A
1hsouza1 respondeu ao tópico de 1hsouza1 em Programação de microcontroladores
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) ; }- 6 respostas
-
- 1
-
- 1.201 visualizações
-
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 !>
- 6 respostas
- 1.201 visualizações
-
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); }
-
pc desligando sozinho (desligando)
1hsouza1 respondeu ao tópico de Bruno Moretti em Computador desligando sozinho
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.- 7 respostas
- 2.206 visualizações
-
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.
-
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); }
-
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.
- 4 respostas
- 845 visualizações
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