Ir ao conteúdo
  • Cadastre-se

Thiago Felipe Soares Gonçalves

Membro Pleno
  • Posts

    82
  • Cadastrado em

  • Última visita

posts postados por Thiago Felipe Soares Gonçalves

  1. 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.

     

     

  2. 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?

  3. Estou com o seguinte problema, tenho um exercício que não consigo terminar segue o enunciado.

     

    Citação

    1) Faça um programa em C que manipule uma lista contendo informações sobre uma agenda de telefones (nome, telefone (campos para DDD e número) e data de aniversário (campos para ano, mês e dia)). Esse programa deverá implementar as seguintes rotinas:
    a) Cadastrar novo contato;
    B) Editar contato;
    c) Excluir contato;
    d) Mostrar contatos na ordem crescente (ordenar pelo nome);
    e) Busca por nome ou data de aniversário (mês ou ano) e imprimir o resultado;
    f) Imprimir todas as pessoas da agenda, mostrando todos os campos de dados.

     

    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.

  4. 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.

  5. 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.

    Circuito_Uno_Motor_de_passo_5v1.thumb.png.9ed8b026995ff810117cbaf9a1f9568e.png

     

    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.

  6. 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.

    • Curtir 1
    • Obrigado 1
  7. É 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.

  8. 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.

  9. 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.

  10. 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;
        }
    }

     

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!