Ir ao conteúdo
  • Cadastre-se

Thiago Felipe Soares Gonçalves

Membro Pleno
  • Posts

    86
  • Cadastrado em

  • Última visita

Tudo que Thiago Felipe Soares Gonçalves postou

  1. É a placa vai ser fabricada por uma empresa, e eles fazem a gravação direto nela.
  2. Ele precisa de bootload pra gravar? E que não tenho muita habilidade com ele AVR.
  3. 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.
  4. 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?
  5. 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.
  6. você não acredita mas usando um biblioteca chamada customStep.h ele funcionou direitinho sem precisa fazer a troca dos pinos.
  7. 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.
  8. 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.
  9. Testei o que você me pediu até com os leds, mas deu na mesma girando para o mesmo lado. Isso ta zoado demais.
  10. 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.
  11. 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.
  12. 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.
  13. •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
  14. 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.
  15. 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.
  16. 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*.
  17. 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
  18. 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.
  19. É 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.
  20. 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.
  21. Sera que existe só a placa do carregador para comprar?
  22. 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

×
×
  • Criar novo...

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!