Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.

Fabio Munhoz

Membros Plenos
  • Total de itens

    13
  • Registro em

  • Última visita

  • Qualificações

    N/D
  1. Tentei com unsigned char não funcionou também, mesma coisa, até 65535 grava perfeitamente, 65536 fica 0, 65537 fica 1 e por ai vai. Nao entendi essa biblioteca stdint.h que você citou, procurei por ela na internet e não achei, porém apenas inclui ela e o mikroc compilou certinho. Onde acho informação sobre ela?
  2. Boa tarde, preciso gravar uma variável de 4 bytes na memória EEPROM, usei o tipo unsigned long e separei os 4 bytes salvando cada um em um endereço, a função que criei salva certinho até 2 bytes, porém quando passa dos 65 536 ela ja não salva mais e mostra o numero referente a apenas os 2 primeiros bytes, ela não le ou não salva os outros 2 bytes. Fiz o teste com dois modos na função de gravar e ler, porém as duas deram o mesmo resultado, funcionam apenas até 2 bytes. Vou postar a função que fiz aqui, e a parte que ta barrada seria do outro modo que fiz que obtive o mesmo resultado. Agradeço desde ja. void gravar(int address, unsigned long value) { //char four = (value & 0xff); //char three = ((value >> 8) & 0xff); //char two = ((value >> 16) & 0xff); //char one = ((value >> 24) & 0xff); char four = (char)(value & 0x000000ff); char three = (char)((value & 0x0000ff00) >> 8); char two = (char)((value & 0x00ff0000) >> 16); char one = (char)((value & 0xff000000) >> 24); EEPROM_Write(address, four); Delay_ms(50); EEPROM_Write(address + 1, three); Delay_ms(50); EEPROM_Write(address + 2, two); Delay_ms(50); EEPROM_Write(address + 3, one); Delay_ms(50); } unsigned long Ler (int address) { unsigned long numero_memoria; char four, three, two, one; four = EEPROM_Read(address); Delay_ms(50); three = EEPROM_Read(address + 1); Delay_ms(50); two = EEPROM_Read(address + 2); Delay_ms(50); one = EEPROM_Read(address + 3); Delay_ms(50); //numero_memoria = ((four << 0) & 0xff) + ((three << 8) & 0xffff) + ((two << 16) & 0xffffff) + ((one << 24) & 0xffffffff); numero_memoria = (four + (three << 8) + (two << 16) + (one << 24)); return numero_memoria; }
  3. @aphawk Nossa, realmente, posso usar as interrupções né? O timer, achei um modelo na internet explicando bem como usar, porém o timer que ele configura é para contar um certo tempo e quando der esse tempo ja zerar o contador, porém como eu faço para somente soltar o timer quando o botão for acionado, vou copiar o código que vi no site como exemplo aqui, não é o meu código. unsigned contagem; void interrupt() { contagem++; //para cada interrpção do TMR0 incrementa a variável contagem TMR0 = 0; INTCON.TMR0IF = 0; //limpa o overflow. } void main() { INTCON.GIE = 1; //habilita interrupção global; INTCON.PEIE = 1; //habilita interrupção dos perifericos; INTCON.TMR0IE = 1; //habilita interrupção do TMR0; TMR0 = 0; // TIMER0 inicia com o valor 0; OPTION_REG = 0b10000001; // Modo Temporizador, prescaler 1:4; //tempo =1us * 4 * 256 = 1ms ... while (1) { if(contagem == 1000) //quando o contagem = 1000, tempo = 1000 * 1ms = 1s; { portb.RB0 = ~portb.RB0; //inverte o estado do pino rb0 contagem = 0; //reseta a variavel contagem } } } De acordo com esse código, quando o timer bate 1 segundo ele ja inverte o estado do pino, e ja começa a contar o timer de novo, porém eu so quero contar o timer quando o botão for pressionado, como eu faria isso? tentei colocar uma função if dentro da void interrupt o programa compilo porém não rolou no pic. Muito obrigado pela ajuda.
  4. Boa tarde, estou fazendo um projeto para faculdade, utilizando um PIC18F4520, estou programando pelo Mikroc pro for pic, preciso fazer uma coisa simples que é saber por quanto tempo segurei um botão para poder resetar um contador, no Arduino usa a função milis, e no mikroc pro achei uma biblioteca que pode fazer tal função porém não consigo entender e quando tento dar include nela no programa da erro, link da biblioteca: https://download.mikroe.com/documents/compilers/mikroc/pic/help/time_library.htm Tem um exemplo no final que eu simplesmente copiei e colei no programa para testar e ver como funciona, porém da erro logo no include. Agradeço desde ja qualquer ajuda.
  5. Boa tarde, estou fazendo um projeto para a faculdade, com que o Arduino vai ficar fazendo umas contagens, coisa simples. porém isso vai ficar em um sitio onde a energia é muito ruim, fica caindo toda hora, e o Arduino não pode desligar porque vai perder tempo de contagem e atrapalhar todo funcionamento. Tenho uma placa solar ja, fizemos uns testes e deu 17V e 1,5A. Teria como ligar uma bateria para alimentar o Arduino, e durante o dia a placa solar alimentar o Arduino e recarregar a bateria para que ela alimente o Arduino durante a noite. Fazer com que a placa alimente o Arduino acredito ser bem fácil, so ligar em um circuito regulador de tensão, porém daria certo chavear para que quando tivesse sol a placa alimentasse e quando não tivesse sol, a bateria alimentasse? Obrigado desde ja, Fabio.
  6. Boa tarde, estou fazendo um projeto que utiliza arduino e esse sensor de cor, para acionar uma válvula. Achei um programa pronto para ler as cores, porém não estou entendendo a função que le as cores, se alguém, puder me explicar, porque vou usar essa parte da função para ler as cores e comparar para poder acionar a válvula, e vou ter que explicar toda a programação para meus professores. a parte que não entendi é essa: void color() { //Rotina que le o valor das cores digitalWrite(s2, LOW); digitalWrite(s3, LOW); //count OUT, pRed, RED red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3, HIGH); //count OUT, pBLUE, BLUE blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2, HIGH); //count OUT, pGreen, GREEN green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); } e aqui está o link da onde eu retirei essa programação: https://www.filipeflop.com/blog/sensor-de-cor-tcs3200-rgb-arduino/ Obrigado desde já.
  7. Boa tarde, gostaria de saber se é possível, e se alguém sabe como ligar o Arduino no pic, por exemplo com programações totalmente diferentes, mas usar uma porta do Arduino como saída pra ligar em uma de entrada do pic, as duas digitais mesmo, 0 ou 1. Ja testei desse modo com leds apenas para testar e não rolou, estou usando o mikroc pro para programar o pic, e no programa estava algo do tipo: if ( PORTB.RB5 == 1) { PORTB.RB4 = 1; } ELSE { POTB.RB4 = 0; } Obrigado, e desculpe a ignorância.
  8. @test man*~ Bacana esse Pca9685, entrei pra ver na internet, não conhecia, parece ser uma alternativa mesmo. Muito obrigado pela dica, vou tentar um pouco mais sem usar esse driver ai, mas se não rolar mesmo vou partir pra ele. Muito obrigado. adicionado 9 minutos depois @Isadora FerrazAinda estou tentando melhorar a garra por comandos prontos antes de mexer com o potenciometro, e descobri que o servo tem força sim para fazer a garra ter mais pressão, colocando no programa apenas o comando para fechar a garra, ela fica sempre forçando a garra para fechar, e ela funciona perfeitamente. Então tentei colocar como uma interrupção apenas o comando de fechar a garra, para que rapidamente ela força o objeto para que não caia. Funcionou legal, porém quando add no programa no loop normal, outro comando em outro servo, ele não reproduz, porque parece que fica o tempo inteiro na interrupção forcando a garra, diminui o tempo do timer para a interrupção, porém mesmo assim não funciona. Vi que o servo que estou usando, precisa do sinal de pwm em uma frequências de 50Hz, 20 ms. Então no programa para enviar um comando para que o servo gire, fica algo assim: void girar0(){ unsigned int i; for(i=0,i<50,i++) { PORTB.RB0 = 1; Delay_us(1500); PORTB.RB0 = 0; Delay_us(18500); } } Pelo o que eu entendi essa função for é necessária, para que o comando seja enviado 50 vezes, por causa da frequências de 50Hz. Acho que o esquema da interrupção não deu certo, pelo fato de esse comando para o outro servo girar demorar muito, 1 segundo aparentemente, pois seria 50*20ms, certo? e a interrupção sempre interrompera o comando para o outro servo girar, e assim ele nunca vai girar. Não sei se estou certo, é o que eu acho, alguma sugestão? Muito obrigado pela atenção.
  9. @Isadora Ferraz Muito obrigado pela resposta, então, eu fiz um teste com a garra pegando um algodão, e funcionou perfeitamente, porque ela amassa o algodão e fecha a garra por completo, mas com um Halls por exemplo que ela não fecharia ate o limite, não da certo, porque ela fecha ate o Halls, e para por ai, ai ela acaba "afrouxando" e o Halls cai, teria um jeito de eu mandar o sinal para ela fechar e o sinal ficar enviando toda hora, mesmo enquanto ele atua nos outros servos, eu tentei colocar o sinal entre os outros, mas mesmo assim não funcionou. O esquema de controlar pelo pot, eu teria que usar as duas portas PWM pra fazer do jeito que você disse né? Como eu faria com 4 servo motores se o pic que estou usando so tem duas portas PWM? Não entendi muito bem o lance da corrente que você disse, desculpe a ignorância, estou começando agora a mexer com isso e estou apanhando um pouco. Muito obrigado pelas dicas.
  10. Boa tarde, estou montando um braço robótico com 4 servo motores 9g, usando o pic 18f4520, ele só possui 2 portas PWM, então estou usando portas normais dele, mandando um sinal de nível alto de 700us e 19300us em nível baixo, para o servo ficar em 0º, e um sinal alto de 2200us, e 17800 em nível baixo, para o servo rodar 180º. Não consegui fazer funcionar através de um potenciometro, então estou apenas tentando programar movimentos e ele ficar repetindo, o conjunto está funcionando, porém a garra não consegue pegar praticamente nada além de um algodão, porque quando o servo motor atua na garra e faz ela fechar, se o objeto for muito grande ela fica "loca" e tenta fechar e abre de novo, se o objeto for muito pequeno, ela fecha e afrouxa depois, e o objeto não acompanha a garra. Estou ligando o pino PWM do servo direto na porta RB7 do pic, alguém tem alguma sugestão do que fazer para melhorar essa garra? Poderia ser que a corrente está muito baixa? Mas acredito que o problema seja na programação mesmo. Estou utilizando o MikroC for pic, para programar. Obrigado, Fabio. Braço robótico.mp4

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×