-
Posts
26 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por 1hsouza1
-
-
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
-
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.
-
Em 06/02/2023 às 16:31, Lucas Ricci disse:
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
-
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);
}
} -
@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.
- 1
-
@kgin Valeu amigo !
FuncionouFuncionou conforme eu esperava
- 1
-
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){ } }
-
-
#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);
}
} -
@.if Obrigado !
Agora funcionou 100% da forma que eu quero ! -
@.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
-
@.if Amigo na compilação em C funcionou, porém em CCS C compiler para microcontroladores não funcionou !
- 1
-
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)
}
} -
@.if Não vou trabalhar com torque, o meu objetivo é apenas encontrar uma equação matemática que se aplique a nesse código.
-
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 !
- 1
-
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
-
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 !
- 1
-
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/Tunsigned 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 geralwhile(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 16F877A ? Alguém poderia ajudar e postar seu código aqui !>
- 1
-
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 !>
-
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.
-
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.
-
Afs mano ! Seu código está muito confuso, tentei pegar um pouco do seu raciocínio mas não funcionou no meu.
-
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 ?
-
teste
adicionado 1 minuto depois10 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
Desarmar um disjuntor com 5V
em Eletrônica
Postado
Valeu !
Resolvido