-
Posts
86 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que Thiago Felipe Soares Gonçalves postou
-
Escolher um PIC
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
É a placa vai ser fabricada por uma empresa, e eles fazem a gravação direto nela. -
Escolher um PIC
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
Ele precisa de bootload pra gravar? E que não tenho muita habilidade com ele AVR. -
Tenho um projeto no qual ando trabalhando, fiz ele funcionar com o PIC16F688, porém agora quero expandir porém os perifericos e a memoria deste microcontrolador não permite isso. Preciso de um PIC que tenha pelo menos as seguintes características: 1- Ser barato e acessível. 2- Ter no minimo 3 interrupções externas, quanto mais melhor!!! 3- Ter no minimo 8k de memoria flash. 4- Tensão de operação 5V 5- Controlar Display de 7 segmentos (opcional). Se alguém tem conhecimento de algum microcontrolador que atenda isso ficarei muito feliz.
-
Lista encadeada
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Estou reescrevendo o código e estou com um problema para colocar dados na minha lista, estou usando o mesmo struct agenda. E o código em cpp é: #include <iostream> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "ex1.h" using namespace std; typedef struct node{ Agenda data; struct node* next; }Node; typedef struct list{ int size; Node* head; }List; List* createList(); // cria uma lista void push(List* list, Agenda data); // adicia a lista void printList(List* list); // imprime a lista void pop(List* list); // retira o ultimo nó da lista bool isEmpty(list* list); // verifica se a lista não é vazia. Node* atPos(List* list, int index); // retorna o no int indexOf(List* list, Node* node); // retorna index void erase(List* list, int index); // Apaga um no void insert(List* list, Agenda data, int index); // insere um no void xchgNodes(List* list, Node* nodeA, Node* nodeB); // trocar nos Node* min(List* list, int index); // achar o minimo da lista Node* max(List* list, int index); // achar o maximo da lista void incSort(List* list); // ordenar em ordem crescente void decSort(List* list); // ordenar em ordem decrescente List* createList(){ List* list = (List*) malloc(sizeof(List)); list->size = 0; list->head = NULL; return list; } void push(list* list, Agenda data){ Node* node = (Node*) malloc(sizeof(Node)); node->data = data; node->next = list->head; list->head = node; list->size++; } void printList(List* list){ Node* pointer = list->head; if(isEmpty(list)){ printf("Lista vazia\n"); return; } while(pointer != NULL){ printf("Nome: %s \n", pointer->data.nome); printf("DDD: %d \n", pointer->data.DDD); printf("Telefone: %d \n", pointer->data.tel); cout << "Nascimento: " << pointer->data.dia << "/" << pointer->data.mes << "/" << pointer->data.ano << "\n\n"; pointer = pointer->next; } printf("\n"); } bool isEmpty(List* list){ return (list->size == 0); } void pop(List* list){ if(!isEmpty(list)){ Node* pointer = list->head; list->head = pointer->next; free(pointer); list->size--; } } Node* atPos(List* list, int index){ if(index >= 0 && index < list->size){ Node* node = list->head; int i; for(i=0;i<index;i++){ node = node->next; } return node; } printf("Indice invalido\n"); return NULL; } int indexOf(List* list, Node* node){ if(node != NULL){ Node* pointer = list->head; int index = 0; while(pointer != node && pointer != NULL){ pointer = pointer->next; index++; } if(pointer != NULL){ return index; } } printf("No não pertencente a lista.\n"); return -1; } void insert(List* list, Agenda data, int index){ if(index == 0){ push(list, data); }else{ Node* current = atPos(list, index); if(current != NULL){ Node* previous = atPos(list, index - 1); Node* newNode = (Node*) malloc(sizeof(Node)); newNode->data = data; previous->next = newNode; newNode->next = current; list->size++; } } } void erase(List* list, int index){ if(index == 0){ pop(list); }else{ Node* current= atPos(list, index); if(current != NULL){ Node* previous = atPos(list, index - 1); previous->next = current->next; free(current); list->size--; } } } void xchgNodes(List* list, Node* nodeA, Node* nodeB){ if(nodeA == nodeB){ return; } int indexA = indexOf(list, nodeA); int indexB = indexOf(list, nodeB); if(indexA == -1 || indexB == -1){ return; } if(indexA > indexB){ nodeA = nodeB; nodeB = atPos(list, indexA); indexA = indexB; indexB = indexOf(list, nodeB); } Node* pb = atPos(list, indexB - 1); if(nodeA == list->head){ list->head = nodeB; }else{ Node* pa = atPos(list, indexA - 1); pa->next = nodeB; } pb->next = nodeA; Node* pointer = nodeA->next; nodeA->next = nodeB->next; nodeB->next = pointer; } Node* min(List* list, int index){ Node* pointer = atPos(list, index); if(pointer != NULL){ Node* minNode = pointer; while(pointer != NULL){ if(pointer->data.ano < minNode->data.ano){ minNode = pointer; } pointer = pointer->next; } return minNode; } return NULL; } Node* max(List* list, int index){ Node* pointer = atPos(list, index); if(pointer != NULL){ Node* maxNode = pointer; while(pointer != NULL){ if(pointer->data.ano > maxNode->data.ano){ maxNode = pointer; } pointer = pointer->next; } return maxNode; } return NULL; } void incSort(List* list){ int i; for(i=0;i<list->size - 1;i++){ xchgNodes(list, atPos(list, i), min(list, 1)); } } void decSort(List* list){ int i; for(i=0;i<list->size - 1;i++){ xchgNodes(list, atPos(list, i), max(list, 1)); } } int main(int argc, char** argv) { List* l = createList(); Agenda data; data.nome = "Thiago"; data.DDD = 41; data.tel = 998349123; data.dia = 14; data.mes = 02; data.ano = 1992; push(l, data); printList(l); return 0; } A unica variável que não consigo passar é o data.nome, sempre da erro de todas as formas alguém pode me ajudar? -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Isso ai. -
Estou com o seguinte problema, tenho um exercício que não consigo terminar segue o enunciado. O que consegui fazer do main até agora foi isso: #include<iostream> #include<stdlib.h> #include<string.h> #include"Exercicio 1.h" struct agenda *insere(struct agenda *L, char nome[], int ddd, int tel, int ano, int mes, int dia); int main(){ struct agenda *ini; ini = NULL; int x = 0; char nome1[30]; int ddd1 = 0; int tel1 = 0; int ano1 = 0; int mes1 = 0; int dia1 = 0; printf("Lista de Comandos:\n\n"); printf("1 - Criar Novo Contato.\n"); printf("2 - Editar Conato.\n"); printf("3 - Excluir Contato.\n"); printf("4 - Mostar todos os Contatos em ordem Alfabetica.\n"); printf("5 - Buscar o Contato pelo Nome.\n"); printf("6 - Buscar o Contato pelo Aniversario.\n"); printf("7 - Imprimir todos os contatos.\n\n"); while(1){ printf("Comando: "); scanf("%d", &x); printf("\n\n"); switch(x){ case 1: printf("Inserir novo contato:\n\n"); printf("Nome: "); fflush(stdin); gets(nome1); printf("\n\n"); printf("DDD: "); scanf("%d", &ddd1); printf("Telefone: "); scanf("%d", &tel1); printf("Data de Nasc.: "); scanf("%d %d %d", &dia1, &mes1, &ano1); ini = insere(ini, nome1, ddd1, tel1, ano1, mes1, dia1); break; } } } struct agenda *insere(struct agenda *L, char nome[], int ddd, int tel, int ano, int mes, int dia){ struct agenda *novo = (struct agenda *) malloc(sizeof(struct agenda)); strcpy(novo->nome,nome); novo->ddd = ddd; novo->tel - tel; novo->ano = ano; novo->mes = mes; novo->dia - dia; novo->prox = L; return novo; } E meus struct com as variáveis da lista: struct agenda{ char nome[30]; int ddd; int tel; int ano; int mes; int dia; struct agenda* prox; }; Alguém pode me ajudar a terminar o exercício.
-
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
você não acredita mas usando um biblioteca chamada customStep.h ele funcionou direitinho sem precisa fazer a troca dos pinos. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
você não vai acreditar mas era isso mesmo, mas é estranho né porque teoricamente você deve seguir as cores para para fazer a ligação, mas em fim deu certo, obrigado pela força. -
Problema com a versão do IAR 7.102
Thiago Felipe Soares Gonçalves postou um tópico em Microcontroladores
Boa Tarde, estou com o seguinte problema estava utilizando a versão do IAR 7.101 porém minha licença acabou e tive que reinstalar o programa para a versão 7.102 porém agora quando tento passar o programa que escrevi para o MSP430 ele não o faz e da um problema de conectividade, alguém pode me ajudar. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Vou tentar isso e te aviso se der certo. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Testei o que você me pediu até com os leds, mas deu na mesma girando para o mesmo lado. Isso ta zoado demais. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Então eu já testei com portas diferentes, vários uln2003 que tenho aqui, e ainda testei com dois motores de passo que tenho e os dois estão dando o mesmo problema, esses dois motores de passo eu tenho faz 6 anos e utilizei muito pouco tipo umas de 3 ou 4 vezes, tipo esta muito estranho. Tipo um problema bem zoado. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Sim, exatamente montei o circuito utilizando as portas 13,12,11,10 pois ainda vou usar as portas 7,6,5,4 para outro motor de passo. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves postou um tópico em Eletrônica
Boa Tarde, eu estou montando uma plotter e estou com um problema que nunca tinha visto. O meu motor de passo esta girando em um único sentido, mesmo fazendo a inversão do sentido na programação ele continua por girar no mesmo sentido, até se eu inverter a posição dos pinos ele continua fazendo a mesma coisa sempre girando no sentido horário. O modelo do meu motor de passo é 28BYJ-48. Segue a programação utilizada: // Interação Arduino com Motor de Passo #include <Stepper.h> // Incluindo a biblioteca do Motor de Passo const int stepsPerRevolution = 200; // Numero de passo por volta Stepper myStepper(stepsPerRevolution, 13,12,11,10); // Faz a inicialização da Biblioteca usando as portas 13,12,11,10 // setup (executado apenas uma vez) void setup() { myStepper.setSpeed(60); // velocidade do motor definida em 60 } // laço principal (executado indefinidamente) void loop() { // Estrutura de repetição usada para limitar o tempo que o motor vai girar no sentido anti-horário for (int i = 0; i < 10; i++){ myStepper.step(stepsPerRevolution); // sentido anti-horario } delay(5000); // Estrutura de repetição usada para limitar o tempo que o motor vai girar no sentido horário for (int i = 0; i < 10; i++){ myStepper.step(-stepsPerRevolution); // sentido horario } delay(5000); } Segue também a imagem com as ligações entre o arduino o shield ULN2003 e o motor de passo. Se alguém poder me ajudar acho que não fiz nada errado, então isso pode significa que o problema são os motores no pior cao podem estar queimados. -
•Escrever um programa para alternar o estado dos LEDs vermelho e verde da placa MSP-EXP430G2 a cada 250.000 ciclos de CPU. •Utilizar a sub-rotina de temporização (delay) •O programa deverá iniciar com os LEDs apagados. •À cada ocorrência de uma borda de descida no sinal do pino P1.3 (Botão S2), o estado dos LEDs deverá alternar entre apagado e piscante. Este é o exercício que eu não estou conseguindo fazer não sei o que esta de errado no meu código. Se alguém poder dar um help. Segue o código abaixo. #include "msp430.h" ; #define controlled include file #define P13_ant R6 #define flag_pisca R10 NAME main ; module name PUBLIC main ; make the main label vissible ; outside this module ORG 0FFFEh DC16 init ; set reset vector to 'init' label RSEG CSTACK ; pre-declaration of segment RSEG CODE ; place program in 'CODE' segment init: MOV #SFE(CSTACK), SP ; set up stack main: NOP ; main program MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer ;------------------------------------------------------------------------------- CALL #config MOV.B #0x01,P13_ant MOV.B #0x00,flag_pisca BIC.B #0x41,&P1OUT loop: BIT.B #BIT3,&P1IN JZ press JNZ flag1 flag1: MOV.B #0x01,P13_ant flag: CMP.B #0x01,flag_pisca JZ loop CALL #alt JMP loop ;------------------------------------------------------------------------------- JMP $ ; jump to current location '$' ; (endless loop) ;------------------------------------------------------------------------------- config: MOV.B #0x41,&P1DIR MOV.B #0x00,&P1SEL MOV.B #0x00,&P1SEL2 MOV.B #0x08,&P1REN MOV.B #0x00,&P1OUT BIS.B #0x08,&P1OUT BIT.B #0x08,&P1IN RET ;------------------------------------------------------------------------------- alt: XOR.B #0x41,&P1OUT CALL #delay RET delay: PUSH.W R4 MOV.W #62496,R4 loop2: NOP DEC.W R4 JNZ loop2 POP.W R4 RET ;------------------------------------------------------------------------------- press: CMP.B #0x01,P13_ant JZ return JNZ loop3 loop3: MOV.B #0x00,P13_ant XOR.B #0x01,flag_pisca CMP.B #0x01,flag_pisca JZ apagar JNZ verm apagar: BIC.B #0x41,&P1OUT JMP return verm: BIS.B #0x01,&P1OUT BIC.B #0x40,&P1OUT JMP return return: RET END
-
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Então encontrei a resposta da pergunta. A maneira mais simples de fazer é assim: #include<stdio.h> #include<string.h> #include<iostream> int main(){ char palavra[30]; char comp[6] = "aeiou"; int x = 0; int y = 0; printf("Digite a frase ah criptografar:\n"); gets(palavra); for(x=0;x<30;x++){ for(y=0;y<5;y++){ if(palavra[x]==comp[y]){ palavra[x] = '*'; } } } printf("%s", palavra); } Muito obrigado a todos que responderam. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Não muito. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Sim, eu pensei em fazer isso mas não consigo pegar carácter por carácter, ou melhor, acho que não sei como fazer isso. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves postou um tópico em C/C#/C++
Faça um programa para criptografar o conteúdo de uma frase digitada pelo usuário, ou seja, a criptografia troca as vogais da frase por *. A frase resultante deverá ser apresentada ao usuário. Exemplo: Frase: EU ESTOU NA UNIVERSIDADE. Saída: ** *ST** N* *N*V*RS*D*D*. -
Boa Noite, estou com o seguinte problema, quero calcular equações de reta sucessivamente, para isso eu tenho dois arrays com os valores das coordenadas x e y de cada ponto da reta, quero pegar essas coordenas e calcular os coeficiente A e B da equação de reta, porém preciso fazer isso para vários trechos ao ponto que se aproxime da curva original. A partir do 'for' o código para de funcionar. Rp = 466; Rm = 291.5; Rg = 199; Vp1 = 127*sqrt(2); rad = [0:0.001:3.14]; rad1 = [0:0.3:3.14]; Vo1 = Vp1*sqrt(0.5 - (rad/(2*3.14)) + (sin(2*rad)/(4*3.14))); Vo2 = Vp1*sqrt(0.5 - (rad1/(2*3.14)) + (sin(2*rad1)/(4*3.14))); % Placa P pot1 = ((Vo1.^2)/Rp); pot11 = ((Vo2.^2)/Rp); % Placa M pot2 = ((Vo1.^2)/Rm); pot22 = ((Vo2.^2)/Rm); % Placa G pot3 = ((Vo1.^2)/Rg); pot33 = ((Vo2.^2)/Rg); figure plot(rad, pot1, rad, pot2, rad, pot3) hold on plot(rad1, pot11, rad1, pot22, rad1, pot33) grid legend('Placa P','Placa M','Placa G','Placa P - Aprox','Placa M - Aprox','Placa G - Aprox') xlabel('Tempo [s]') ylabel('Temperatura [°C]') title('Equação de Potência Todas as Placas - 127V') figure plot(rad1, pot11, rad1, pot22, rad1, pot33) grid legend('Placa P - Aprox','Placa M - Aprox','Placa G - Aprox') xlabel('Tempo [s]') ylabel('Temperatura [°C]') title('Equação de Potência Todas as Placas - 127V') L = length(rad1); for x=[1:L] y = x + 1; A = (pot11(y)-pot11(x))/(rad1((y))-rad1(x)); B = pot11(x) - A*rad1(x); a = 1/A; b = -B/A; fprintf('Y%d = %d*X + %d\n',x, A, B) fprintf('X%d = %d*Y + %d\n',x, a, b) end
-
Dimmer com PIC16F688
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
Descobri qual era o problema, o registrador TRISA devia esta com as flags assim 0x05, pois estou usando como entrada os pinos RA0 e RA2,respectivamente para o potenciômetro e para interrupção pelo zero-cross. -
Dimmer com PIC16F688
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
É basicamente isso, mas estou usando o angulo de disparo de um tiristor, quando pego o AD do potenciômetro comparo ele com uma regra de 3 com o angulo de disparo, posteriormente faço uma rega de 3 para achar o tempo que devo dar o pulso para acionar o triac. Os ifs no código é pra limitar o min e max tempo de disparo para não dar problemas com chaveamento na passagem por zero. O meu problema realmente é que meu AD não esta lendo o pino com o potenciômetro nesse código e não consegui descobrir porque. -
Boa noite, estou tentando implementar um Dimmer com o PIC16F688, mas estou com problema quando coloco a leitura de um potenciômetro no programa. Segue o programa. bit control; float rad = 0.00; float T1 = 0.00; float T2 = 0.00; int Tempo = 0; char msbyte = 0; char lsbyte = 0; int ADPOT = 0; void Interrupt() { if (INTF_bit) { lsbyte = Tempo; msbyte = (Tempo & 0xFF00) >> 8; TMR1H = msbyte; TMR1L = lsbyte; TMR1ON_bit = 0x01; control = ~control; INTF_bit = 0x00; if(control) INTEDG_bit = 0x01; else INTEDG_bit = 0x00; } if(TMR1IF_bit) { TMR1IF_bit = 0x00; RC1_bit = 0x01; delay_us(10); RC1_bit = 0x00; TMR1ON_bit = 0x00; } } void main() { CMCON0 = 0x07; T1CON = 0x00; TMR1H = 0x00; TMR1L = 0x00; TMR1IF_bit = 0x00; TMR1IE_bit = 0x01; INTCON = 0xD0; INTEDG_bit = 0x00; TRISA = 0x01; TRISC = 0x00; ANSEL = 0x01; ADCON0 =0x01; PORTA = 0x01; PORTC = 0x00; control = 0x00; while(1) { delay_us(100); ADPOT =ADC_Read(0); rad = (3.14*ADPOT)/1023; T1 = (rad*8333.33)/3.14; if(T1<100) { T1 = 100; } if(T1>8233) { T1 = 8233; } T2 = 65536 - T1; Tempo = (int)T2; } } Se alguém conseguir me ajudar fico muito agradecido.
-
Mini Trafos
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Sera que existe só a placa do carregador para comprar? -
Boa Tarde, pessoal to com o seguinte problema, estou procurando um fornecedor de mini trafos preciso de um que tenho algo no secundario de 7V / 150mA aproximadamente, queria algo do tamanho daqueles trafos de carregador de celular, pois pretendo montar meu circuito para ser alimentado pela rede dentro de uma caixa de fonte um pouco maior que um carregador.
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