Ir ao conteúdo
  • Cadastre-se

Thiago Felipe Soares Gonçalves

Membro Pleno
  • Posts

    82
  • Cadastrado em

  • Última visita

Tudo que Thiago Felipe Soares Gonçalves postou

  1. Ele precisa de bootload pra gravar? E que não tenho muita habilidade com ele AVR.
  2. 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.
  3. 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?
  4. 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.
  5. você não acredita mas usando um biblioteca chamada customStep.h ele funcionou direitinho sem precisa fazer a troca dos pinos.
  6. 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.
  7. Testei o que você me pediu até com os leds, mas deu na mesma girando para o mesmo lado. Isso ta zoado demais.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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*.
  14. 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.
  15. É 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.
  16. 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.
  17. Sera que existe só a placa do carregador para comprar?
  18. 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.
  19. Meu rapaz mandou muito bem!!! Eu escrevendo o código errado também não dava né kkkk Vou fazer aqui. adicionado 33 minutos depois Meu irmão, funcionou direitinho obrigadão. Agora só implementar no meu código principal e boa.
  20. Não deu boa, continua não identificando a expressão, olha o que estou fazendo: bit control; float rad = 0.00; float T1 = 0.00; int Tempo = 0x00; void Interrupt() { if (INTF_bit) { Tempo = (int) T1; lsbyte_int8 = Tempo; msbyte_int8 = (Tempo & 0xFF00) >> 8; TMR1H = msbyte_int8; TMR1L = lsbyte_int8; 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; ANSEL = 0x00; T1CON = 0x00; INTCON = 0xD0; INTEDG_bit = 0x00; TMR1IF_bit = 0x00; TMR1H = 0xEF; TMR1L = 0xB9; TMR1IE_bit = 0x01; TRISC = 0x00; RC0_bit = 0x00; RC1_bit = 0x00; RC2_bit = 0x00; control = 0x00; while(1) { while(rad>3.14) { rad = rad + 0.01; T1 = (rad*8333.33)/3.14; delay_us(100); } rad = 0.00; } }
  21. Não deu certo, não reconhece no microC esse código, aparece um monte de erros. Mas valeu a tentativa.
  22. Não sei, mas logo pela manhã vou tentar. E já posto aqui se funcionou. Obrigadoooo!!! \o/\o/\o/

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!