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.

Pesquisar na Comunidade

Mostrando resultados para as tags ''PIC''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Categorias

  • Armazenamento
  • Áudio
  • Energia
  • Entrada
  • Feiras e Eventos
  • Gabinetes
  • Memória
  • Museu
  • Placas-mãe
  • Portáteis
  • Processadores
  • Programas
  • Rádio CdH
  • Redes
  • Refrigeração
  • Smartphones
  • Tablets
  • Vídeo
  • Outros

Categorias

  • Blog

Categorias

  • Armazenamento
  • Áudio
  • Câmeras
  • Computadores
  • Consoles
  • Eletrônicos
  • Energia
  • Entrada
  • Gabinetes
  • Impressão
  • Jogos
  • Memória
  • Placas-mãe
  • Portáteis
  • Processadores
  • Programas
  • Redes
  • Refrigeração
  • Smartphones
  • Tablets
  • Vídeo
  • Outros

Categorias

  • Livros disponíveis
  • Livros esgotados

Categorias

  • Cursos

Fóruns

  • Mensagens do Clube do Hardware
    • Regras gerais
    • Boletins do Clube do Hardware
    • Notícias da administração
  • Hardware
    • Recomendações de computadores
    • Placas de vídeo
    • Placas-mãe e chipsets
    • Processadores
    • Problemas de gargalo e desempenho
    • Memórias
    • Armazenamento
    • Refrigeração e superaquecimento
    • Fontes e energia
    • Gabinetes e casemods
    • Placas de som e áudio on-board
    • Periféricos
    • Mac
    • Overclock
    • Hardware - outros
  • Computação móvel
    • Notebooks
    • Tablets
    • Smartphones e apps
  • Redes e Internet
    • Redes e Internet
    • Hospedagem de sites e registro de domínios
  • Segurança da informação
    • Remoção de malware
    • Dúvidas sobre invasões e infecções
    • Programas de proteção
  • Programação e desenvolvimento
    • Java
    • C/C#/C++
    • Pascal/Delphi
    • .NET
    • Bancos de dados
    • Programação web
    • Programação - iniciantes
    • Programação de microcontroladores
    • Programação - outros
  • Software
    • Jogos
    • Pacotes de escritório
    • Computação distribuída (Folding@Home, Bitcoin etc.)
    • Virtualização
    • Design, animação e tratamento de imagens
    • Edição de áudio e vídeo
    • Programas
  • Sistemas Operacionais
    • Recomendação de sistemas operacionais
    • Windows
    • GNU/Linux, BSD, Unix-like e software livre
  • Eletrônicos
    • Equipamentos de som, home theaters e gravadores de mesa
    • Televisores e projetores
    • Câmeras e filmadoras
    • Players portáteis
    • Consoles (videogames)
    • GPS
    • Telefonia fixa
    • Eletrônica
    • Retrocomputação
  • Outros
    • Recomendações de serviços e lojas
    • Preços e promoções
    • Notícias
    • Bolsa de empregos, certificações e mercado de trabalho
    • "Causos"
    • Encontros de usuários
    • Feira do Rolo
  • Clube do Hardware
    • Comentários, elogios, críticas, sugestões e questões sobre o Clube do Hardware
    • Comentários de artigos
    • Fórum para testes de funcionalidades

Categorias

  • Hardware
  • Redes
  • Eletrônica
  • Sistemas operacionais

Encontrado 107 registros

  1. Olá, estou trabalhando em um projeto onde aperto um botão, o pic mande o sinal pra ponte h mandar um motor girar num sentido, atinge um sensor, o motor gira no outro sentido, e quando atinge o segundo sensor o motor volta por dois segundos, para e aguarda até que o botão seja pressionado novamente começando o cilclo novamente. Estou usando o pic 16f628a O ci de ponte h é o L293D Fiz um pequeno código que funciona perfeitamente no proteus, más quando montei o circuito, o pic fez algo totalmente diferente do programado ele não estava obedecendo a função "if" Estou aprendendo ainda a linguagem C. Segue o código que fiz no mikro c e o esquema no proteus. Obs.: o esquema já ta pronto pra montagem na pcb #define start RB0_bit // Define RB0_bit como start #define revert RB1_bit // Define RB1_bit como revert #define stop RB2_bit // Define RB2_bit como stop #define cc RB3_bit // Define RB3_bit como cc #define cw RB4_bit // Define RB4_bit como cw #define motor_enable RB5_bit // Define RB5_bit como motor_enable bit flagB0, flagB1, flagB2; // Configura as variaveis void main() { TRISB0_bit = 1; // Define RB0 como entrada TRISB1_bit = 1; // Define RB1 como entrada TRISB2_bit = 1; // Define RB2 como entrada TRISB3_bit = 0; // Define RB3 como saida TRISB4_bit = 0; // Define RB4 como saida TRISB5_bit = 0; // Define RB5 como saida RB3_bit = 0; // Define o valor inicial de RB3 como 0 RB4_bit = 0; // Define o valor inicial de RB4 como 0 RB5_bit = 0; // Define o valor inicial de RB5 como 0 for(;;) // Loop Infinito { if ((start == 1) && (flagB0 == 0)) // Se o botao start for pressionado, verifica se a flagB0 esta em "0" { delay_ms(50); // Delay de para reduzir o bounce if ((start == 1) && (flagB0 == 0)) // Verifica se o botao start continua pressionado e se a flagB0 continua em "0" motor_enable = 1; // Habilita o motor cc = 1; // Coloca o pino "RB3" em nivel logico alto cw = 0; // Coloca o pino "RB4" em nivel logico baixo flagB0 = 1; // Define a flagB0 em "1" flagB2 = 0; // Define a flagB2 em "0" } if ((revert == 1)&& (flagB1 == 0)) // Se o botao revert for pressionado,verifica se a flagB1 esta e "0" { delay_ms(50); // Delay para reduzir o bounce if ((revert == 1) && (flagB1 == 0)) // Verifica se o botao revert continua pressionado e se a flagB1 continua em "0" cc = 0; // Coloca o pino "RB3" em nivel logico baixo cw = 1; // Coloca o pino "RB4" em nivel logico alto flagB1 = 1; // Define a flagB1 em "1" } if ((stop == 1) && (flagB2 == 0)) // Se o botao stop for pressionado,verifica se a flagB2 esta e "0" { delay_ms(50); // Delay para reduzir o bounce if ((stop == 1) && (flagB2 == 0)) // Verifica se o botao stop continua pressionado e se a flagB2 continua em "0" cc = 1; // Coloca o pino "RB3" em nivel logico alto cw = 0; // Coloca o pino "RB4" em nivel logico baixo delay_ms(2000); // Aguarda 2 segundos cc = 0; // Coloca o pino "RB3" em niveç logico baixo motor_enable = 0; // Desabilita o motor flagB0 = 0; // Define a falgB0 em "0" flagB2 = 1; // Define a falgB2 em "1" } } }
  2. Olá a todos, Estou seguinte este vídeo do Wagner Rambo: https://www.youtube.com/watch?v=RNadPhRYkX8 Consigo com que apareça a mensagem no display. Mas o display fica com todos os quadros (16 na linha 1 e 16 na linha 2) pretos! Não são totalmente pretos, pois é possível ver o que escrevi lá! Mas fica preto, a imagem não fica limpa conforme o vídeo! Acontece outra coisa interessante. Se olhar para o display de lado já consigo ver uma imagem limpa, sem os quadrados pretos. Como não tenho camera de fotografar vou tentar explicar através desta image (https://meetarduino.files.wordpress.com/2012/06/img_0264.jpg) Fica igual a essa imagem. Mas consigo ver as letras do que escrevo no ecra. Penso que tenha alguma coisa haver com a alimentação do display. O display é o rc1602b-ghy-csxd (http://skory.gylcomp.hu/alkatresz/16x2_lcd_rc1602b-ghy-csxd.pdf) O que poderei estar a fazer de errado? Valeu
  3. Olá Malta, Já algum tempo (anos )que nao programo e estou meio que enferrujado, estou a tentar fazer um programa simples um programa aonde tenho 3 botões um para incrementar tempo outro decrementa tempo e outro arranca o temporizador, apos arrancar o temporizador este faz um tempo de espera depois liga a saida GPIO0 por 5 segundos espera o mesmo tempo e liga a saida 5 segundos infinitamente ate ficar sem energia. O problema estano tempo de espera eu uso uma variavel para saber o numero incrementado depois faz um calculo para passar esse numero para minutos e faz um ciclo esse ciclo nao tem como por a funcionar fica o codigo se eu puser o ciclo for (i=o;i<result;i++) se trocar o result pelo numero 12 for(i=0;i<12;i++) tudo gunciona direito usando o result nada funciona. o que estou a fazer de mal será o tipo de variavel? mas ja usei char unsigned char . Cumprimentos
  4. Olá a todos, Estou estudanto PIC e tenho a seguinte duvída: movlw H'FF' movwf TRISB ; Tenho todo o TRISB como entrada movlw H'FF' movwf PORTB ; Vou ter todos os pinos do portb em nível alto Resumindo, estou a definir todo o PORTB como entrada e todos os pinos vão começar com nível alto. Esta definição do nível alto das entradas é em função do tipo de ligação que tiver em cada pino. Por exemplo, se no RB0 ligar um botão, terei que ligar em pull-up. Quando accionar o botão ele entrega nível baixa na entrada RB0, é isso? Valeu
  5. Boa noite à todos Sou iniciante em programação e estudante de Eletrônica No curso sempre usamos este programa (MikroBasic PRO for PIC V7.2.0) e sempre funciona tudo certo.Decidi baixar o mesmo programa no meu computador de casa e inseri a mesma programação que havia feito na sala de aula (e que havia funcionado) só que em casa não funcionou...Na verdade, nenhum código que insiro está funcionando! Segue o código que inseri primeiramente e o erro ao final: sbit LCD_RS at RB4_bit LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB0_bit LCD_D5_Direction as sbit at TRISB1_bit LCD_D6_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB3_bit char txt[]="SENAI" int cont; void main() { TRISA=1; ANSEL=0; ANSELH=0; LCD_INIT(); LCD_CMD(_LCD_CLEAR); LCD_CMD(_LCD_CURSOR_OFF); while(1) { if(RA0_bit==1) { LCD_CMD(_LCD_SHIFT_LEFT); Delay_ms(100); } for(cont=1;cont<=15;cont++) { LCD_CMD(_LCD_SHIFT_RIGHT); Delay_ms(100); } } } } ERRO : 1 304 Syntax error: Expected "program" but "sbit" found MyProject.mbas Já tentei marcar tudo em "Library Manager" e também não foi. Por favor, se alguém souber o erro me ajude a resolve-lô, gostaria muito de poder estudar em casa. Grata.
  6. Olá a todos os Foristas !!! Amigos eu fiz uma programa com o PIC18f14k50 que se trata de um emulador de TECLADO USB ,porém ele vem funcionando bem com Windows XP e Windows 7.Nessa semana fui utiliza-lo no WINDOWS 10 e não funcionou e já fiz de tudo (Configuração, Hardware etc, etc etc) e nada. Ele apresenta falha no Descritor como na Imagem abaixo.Eu até desativei assinatura de driver do Windows e também não funcionou .Pesquisando na net eu vi muita reclamação de pessoas que atualizou para o windows 10 e tiveram problemas com teclado e mouse que pararam de funcionar logo em seguida .Se alguém puder dá uma sugestão .Desde já agradeço
  7. #include <16F873A.h> //carregas as definições do microcontrolador usado #device ADC=16 //conversor AD de 16 #fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP //bits de configuração da MCU para gravação //configurações do projeto #use delay(crystal=20MHz) //frequencia de clock para - Cristal Externo #use pwm(CCP1,TIMER=2,FREQUENCY=5300000,DUTY=90) //configuração do PWM #priority TIMER1 //prioridade no tratamento de interrupções //#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_A0) //permite comunicação serial //modo rápido de inicialização das portas #use fast_io(a) #use fast_io(b) #use fast_io(c) #byte porta = 0x00 #byte portb = 0x00 #byte portc = 0x00 // Entradas #define sensor PIN_A3 //recebe dados do sensor | OBS: OS DADOS JÁ CHEGAM NO FORMATO DIGITAL( O CICUITO TEM UM CONVERSOR AD IMPLEMENTADO FISICAMENTE) //#define temp PIN_B4 //nao userei mais um sensor de temperatura // Saídas #define pwm PIN_C2 //saida que gera um sinal pwm conforme configuração #define rele PIN_C4 //saida que aciona/desliga rele | OBS: RELE DE ESTADO SOLIDO USADO PARA ACIONAR/DESLIGAR UMA VALVULA //variaveis globais float leitura, umidadeideal; //so preciso controlar uma gradeza(umidadeideal) void main() { // configura os tris set_tris_a(0b00001000); //entra do sensor set_tris_b(0b00000000); // set_tris_c(0b11110101); //saida do pwm e do rele // inicializa os ports porta=0x00; // limpa porta portb=0x00; // limpa portb portc=0x00; // limpa portc //////////////////////////////////CONFIGURAÇÃO DO TIMER1////////////////////////////////// setup_timer_1(T1_EXTERNAL|T1_DIV_BY_8); //104ms overflow enable_interrupts(GLOBAL);//chave principal das interrupções enable_interrupts(int_timer1); // interrupção do TIMER 0 ////////////////////////////////////////////////////////////////////////////////////////// while(TRUE) { leitura = input(sensor); // a variável leitura recebe o valor lido do PIN_A3 if(leitura >= umidadeideal){ //se a entrada for maior ou igual a umidadeideal output_low(rele); }if(leitura < umidadeideal){ //se a entrada for menor que a umidadeideal output_high(rele); } } } Olá amigos(as), sou inciante nessa área de microcontroladores PIC. No entanto, estou num projeto de iniciação científica na minha faculdade, projeto esse que estou desenvolvendo um sistema automático de irrigação. Vou fazer uma breve descrição do projeto: (PIC16f873A) --no pino PIN_A3 recebe os dados do sensor, esses dados já chegam no formato digital (os dados passam por um circuito "físico" de conversor AD e um retificador e depois chega ao PIC) --no pino PIN_C2 está uma saída pwm de 5,3MHz (tenho duvida sobre como achar o valor do duty cycle) --no pino PIN_C4 está uma saída para acionar/desligar um relé de estado sólido ligado à uma válvula do sistema de irrigação O objetivo é conseguir ler os dados do sensor de umidade em um intervalo específico de tempo(usando timer e interrupção), e a partir dos dados lidos eu os comparo com a umidadeideal e aciono/desligo o relé. Peço a ajuda de vocês para verificar o meu código, pois minhas maiores dúvidas são: configurar o timer e interrupção para fazer a leitura dos dados de tempo em tempo( por exemplo 500ms ou 1s); configurar as portas corretamente para ler os dados. O código ta bem comentado, mas com certeza vai ter muitos erros principalmente em relação ao TRIS, PORT e timer. Desde já agradeço pelo seu tempo e muita paciência rsrs
  8. Boa noite a todos, estou com uma pequena duvida em relação ao Mikro c for PIC, sempre utilizei o CCS porém recentemente desenvolvi um projeto e tive a necessidade de converter meu código para Mikro c, meu problema é apenas com um único comando. Preciso que o pino RB0 fique em modo flutuante, ou seja, que em um determinado momento ele seja nível alto e posteriormente fique em nível flutuante de forma que ele não seja zero nunca, no CCS eu apenas utilizo o comando output_float (PIN_B0), e ele ja fica em nível flutuante, preciso fazer a mesma coisa utilizando o Mikro c, será que é possível ? Desde já agradeço muito se alguém puder me ajudar.
  9. Sou iniciante com PIC, e gostaria de aprender mais sobre a programação deles, principalmente se tiver relação com motores DC. (Estrou trabalhando especificamente com o PIC16F877A). Já dei umas pesquisadas mas não achei muita coisa sobre o assunto, se alguém tiver sites ou documentos sobre isso e puder passar seria de boa ajuda.
  10. Olá a todos, Estou a seguir este excelente tutorial "http://www.marcelomaciel.com/2013/03/lcd-no-pic16f628a.html" e após descobrir que tenho que chamar a biblioteca ldc.h desta forma: #include "lcd.h" [/CODE] No momento em que faço Build no meu main.c obtenho estes erros: Estou a utilizar o compilador Hi-TECH para o pic16f690. Não consigo perceber se o erro é da biblioteca lcd.h ou é alguma configuração no meu projecto. Agradeço desde já toda a ajuda. [UPDATE1] Se fizer build na biblioteca lcd.h, após a fazer "add files" no projecto e estando esta no directório do projecto, obtenho "Build successfull!".
  11. Olá. Estou tentando montar um termostato com um PIC 12F675 e tenho encontrado um problema com isso. Montei o fluxograma no FlowCode e quando tento compilar para o HEX o software diz que o pic não tem memória para a função ADC, o que faz sentido pois usando essa função o HEX fica em torno de uns 4K.... Eu já vi um projeto de termostato com o 12F675, mas que não é programado pelo FlowCode, é programado em C. Nesse projeto programado em C, o HEX gerado é de menos de 1K, sendo possível gravar o pic..Eu sei que programando em C eu conseguiria tirar um melhor proveito do CI mas eu não sei programação e estou aprendendo a usar o flowcode pois ainda estou sem tempo para aprender a programar em c. Alguém poderia dar uma dica de como resolver esse problema ?
  12. é possível com um micro fazer com que um transístor passe pelas 3 zonas (corte/activa/saturação)? Obrigado
  13. Estou com um projeto aonde tenho que programar um robô para ele percorrer um labirinto. Aonde tenho que apenas programar dois motores DC para controlar o robô por todo labirinto, vai ser por rotação e graus mesmo, algo simples. Mas não sei qual seria o PIC mais adequado para esse simples projeto de controlar dois motores DC. Help
  14. Olá a todos, Estou com dificuldade em perceber estes dois campos no datasheet do pic16F690: Maximum output current sunk by any I/O pin = 25 mA Maximum output current sourced by any I/O pin = 25 mA Não sei traduzir a palavra sunk! E não percebo o enquadramento dos restantes valores. O objectivo é identificar que valor máximo de corrente é que cada pino (como saída) oferece quando accionado. Pretendo accionar um transístor e preciso saber que valor de corrente irei ter na base. Cumps
  15. Preciso receber uma string via UART no dsPIC30F4013 somente ao chamar uma função. O dispositivo conectado ao RX envia informações sem parar, mas eu preciso dessas informações somente algumas vezes, por isso preciso que essa informação seja recebida somente ao chamar uma função. Meu código atual recebe dados da UART toda vez que o dispositivo envia algo. int k; void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void) { IFS0bits.U1RXIF = 0; array[k++] = U1RXREG; if (k == 10) { k = 0; } } Como devo proceder para que eu receba essa string de 10 posições, sem perder dados, somente ao chamar um função?
  16. Olá pessoal to com um pouco de dificuldade na programação pic com ultassonic to fazendo automação caixa d'água com reservatório quando o nivel da água da caixa d'água tiver baixo e do reservatório tiver cheio acionar o rele que liga a bomba pra encher e parar quando reservatório tiver vazio ou a caixa d'água tiver cheia ah queria adicionar um lcd pra mostra o nivel da água e só na parte da programação que to com dificuldades agradeço
  17. Boa noite pessoal, gostaria de saber se alguém pode desenvolver (disposto a pagar) um código fonte e o arquivo HEX para um programador horário digital como descrito no vídeo a seguir. Seria exatamente como no vídeo, porém a opção (ligar) seria trocada por (abrir) e ligaria um motor DC em um sentido (ABRIR) e a opção (desligar) seria (fechar) e revertesse esse sentido de rotação (FECHAR). Seria acrescido também a opção de se configurar dentro do menu, uma temperatura mínima para a opção (fechar) e também a leitura de uma entrada digital que quando ativada acionasse o motor para (FECHAR). Preciso apenas do código fonte e do arquivo HEX para gravar no PIC. Este é o vídeo disponível no youtube, infelizmente o autor não disponibilizou os arquivos
  18. Olá a todos gostaria de fazer um projeto desse tipo usando o PIC16F628A, onde teria 3 botões um para mudar de digito e outros 2 para increm. ou decrem. o digito.
  19. procuro parceria para desenvolver um programa para portao eletrônico em pic
  20. 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; }
  21. Estou aprendendo a usar o i2c, mas ainda não achei uma biblioteca para o mplab x ide, xc8. Alguém teria como me mandar alguma lib, ou um link para ela?
  22. Estou testando comunicar o módulo RF 433Mhz via USART, usando o PIC18F4550. Instalei os arquivos deste módulo no Proteus 8 e simulando no programa funcionou normalmente. Já no físico (protoboard), não funcionou. A função do código é simplesmente enviar um char por serial e recebê-lo no mesmo PIC para ligar ou desligar o LED. No meu caso, o LED permanece sempre desligado. Já no Proteus, ele fica piscando. Utilizo o MPLAB IDE com compilador XC8, e estou utilizando a biblioteca usart.h da PLIB. O baud rate que configurei foi de 4800, tanto no Proteus como no MPLAB. Utilizo cristal de 20Mhz, mas configurei para FOSC de 48Mhz utilizando PLL. Segue abaixo o código para MPLAB e Proteus, e em anexo está os arquivos do Proteus. #include <xc.h> #include <stdio.h> #include <stdlib.h> #include <plib/usart.h> #define _XTAL_FREQ 20000000 // CONFIG1L #pragma config PLLDIV = 5 // PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly)) #pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2]) #pragma config USBDIV = 2 // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes directly from the primary oscillator block with no postscale) // CONFIG1H #pragma config FOSC = HSPLL_HS // Oscillator Selection bits (HS oscillator (HS)) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled) #pragma config IESO = OFF // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled) // CONFIG2L #pragma config PWRT = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOR = OFF // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software) #pragma config BORV = 1 // Brown-out Reset Voltage bits (Setting 2 4.33V) #pragma config VREGEN = OFF // USB Voltage Regulator Enable bit (USB voltage regulator disabled) // CONFIG2H #pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit)) #pragma config WDTPS = 32768 // Watchdog Timer Postscale Select bits (1:32768) // CONFIG3H #pragma config CCP2MX = OFF // CCP2 MUX bit (CCP2 input/output is multiplexed with RB3) #pragma config PBADEN = OFF // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset) #pragma config LPT1OSC = OFF // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation) #pragma config MCLRE = OFF // MCLR Pin Enable bit (RE3 input pin enabled; MCLR pin disabled) // CONFIG4L #pragma config STVREN = OFF // Stack Full/Underflow Reset Enable bit (Stack full/underflow will not cause Reset) #pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled) #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit (ICPORT disabled) #pragma config XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode)) // CONFIG5L #pragma config CP0 = OFF // Code Protection bit (Block 0 (000800-001FFFh) is not code-protected) #pragma config CP1 = OFF // Code Protection bit (Block 1 (002000-003FFFh) is not code-protected) #pragma config CP2 = OFF // Code Protection bit (Block 2 (004000-005FFFh) is not code-protected) #pragma config CP3 = OFF // Code Protection bit (Block 3 (006000-007FFFh) is not code-protected) // CONFIG5H #pragma config CPB = OFF // Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected) #pragma config CPD = OFF // Data EEPROM Code Protection bit (Data EEPROM is not code-protected) // CONFIG6L #pragma config WRT0 = OFF // Write Protection bit (Block 0 (000800-001FFFh) is not write-protected) #pragma config WRT1 = OFF // Write Protection bit (Block 1 (002000-003FFFh) is not write-protected) #pragma config WRT2 = OFF // Write Protection bit (Block 2 (004000-005FFFh) is not write-protected) #pragma config WRT3 = OFF // Write Protection bit (Block 3 (006000-007FFFh) is not write-protected) // CONFIG6H #pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected) #pragma config WRTB = OFF // Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected) #pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM is not write-protected) // CONFIG7L #pragma config EBTR0 = OFF // Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks) #pragma config EBTR1 = OFF // Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks) #pragma config EBTR2 = OFF // Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks) #pragma config EBTR3 = OFF // Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks) // CONFIG7H #pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks) void Mydelay(int tempo) { int i; for (i=0;i<tempo;i++) { __delay_ms(1); } } void main(void) { ADCON1 = 0x0F; TRISD = 0; OpenUSART( USART_TX_INT_OFF & // No tx interrupt. USART_RX_INT_ON & // No rcv interrupt. USART_ASYNCH_MODE & // Asynchronous mode. USART_EIGHT_BIT & // Eight-bit mode. USART_CONT_RX & // Continuous receive. USART_BRGH_LOW, // Use low speed baud rate formula. 155 // Baud 4800 ); Mydelay(100); unsigned char teste = 'a'; unsigned char ch = 'a'; int cont = 0; while(1) { WriteUSART(teste); //Mydelay(5); ch = ReadUSART(); if(ch=='a') LATDbits.LD7 = 1; else LATDbits.LD7 = 0; Mydelay(1000); if(cont == 1) { teste = 'b'; cont = 0; } else { teste = 'a'; cont = 1; } } return; } Agradeço quem puder ajudar! RF Proteus.rar
  23. Olá, gostaria de pedir o auxilio para conversão do programa abaixo para o pessoal que já trabalhou com esses compiladores, na primeira parte se encontra as alterações já realizadas, na se segunda está o programa a ser convertido, caso o programa seja muito grande gostaria de pedir auxilio principalmente nos INTCON, T0CON, RCON, CCP1CON e etc. Convertendo XC8 para CCS: Programa deixa o config.h como comentário por que o mesmo causava erro __Delay_ms(); --> delay_ms(); TRISA(); --> set_tris_a(); #define en1 PORTAbits.RA2 --> en1 PIN_A2 ADC_read(); --> read_adc(); /* Titulo: PID digital * Versão: 1.0 * Autor: * Data: 02/06/2018 * Compilador: XC8 --> CCS * IDE: MplabX 4.10 * Dispositivo: PIC18f4550 * ======================================= Descrição ========================================== * * Este codigo realiza o controle PID de maneira discreta. Através dos dados de entrada * * referência e feedback, ambos medidos pelo conversor A/D em AN0 e AN1, encontra-se o erro, * * que então e usado como parametro para calcular um valor de pwm necessário para corrigi-lo * * isso através da função: PID_set_PF(). O sentido de giro do motor e controlado através das * * saidas digitais RA2, RA3. * * ============================================================================================ * */ // PIC18F4550 Configuration Bit Settings #include <xc.h> // compilador #include <18f4550.h> // dispositivo #include <stdio.h> // para utilizar a funcao sprintf #include <stdarg.h> // para utilizar a funcao sprintf //#include "config.h" // configuracoes do pic //================== defines e mapeamento de hardware =============// #use delay(clock = 48000000) // constante usada pelo delay, clock #define SHIFT 256 // usado para calculos com ponto fixo <<8 #define en1 PIN_A2 // en1 da ponte H, pino 4 do pic #define en2 PIN_A3 // en2 da ponte H, pino 5 do pic #define RS PIN_D1 #define EN PIN_D0 #define D4 PIN_D4 #define D5 PIN_D5 #define D6 PIN_D6 #define D7 PIN_D7 //==================== variaveis globais =========================// long int ref = 0; // guarda o valor do potenciomentro de referencia long int fb = 0; // guarda o valor do potenciomentro de feedback long int pwm = 0; // guarda valor de dutycicle do pwm float kp; // coeficiente da acao proporcional float ki; // coeficiente da acao integral float kd; // coeficiente da acao derivativa float T = 0.005; // periodo de amostragem long int k1; // coeficiente auxiliar, para uso de ponto fixo long int k2; // coeficiente auxiliar, para uso de ponto fixo long int k3; // coeficiente auxiliar, para uso de ponto fixo long int erro0 = 0; // erro da amostra atual e(n) long int erro1 = 0; // erro da amostra anterior e(n-1) long int out0 = 0; // saida da funcao do PID long int integral = 0; // parcela integral long int derivativo = 0; // derivativo //========================= funcoes =============================// void ADC_init() { ADCON1 = 0b00001101; //Somente AN0 e AN1 como entrada analogica, referencia e realimentacao ADCON2 = 0b10001110; //justificado a direita, 64 fosc , 2 Tda }// fim ADC_init unsigned ADC_read(unsigned char canal) { ADCON0 = canal; delay_us(10); // tempo para carregar capacitor interno ADCON0bits.GODONE = 1; // inicia a conversao while (ADCON0bits.GODONE); // espera o fim da conversao AD { } return ((ADRESH << 8) + ADRESL); // retorna um valor convertido de 0 - 1023 }// fim ADC_read unsigned long int PID_set_PF() { erro0 = ref - fb; erro1 = erro0; // atualiza valores // calculo do PID integral = integral + (erro0 * T); derivativo = ((erro0-erro1)/T); out0 = ((k1 * erro0)+ (k2 * integral) + (k3 * derivativo)); out0 = out0 >> 8; // deslocamento devido ao uso de ponto fixo if (out0 < -1) { // caso negativo out0 = out0*(-1); // multiplica por -1 } if(out0>1023) // caso estoure { out0 = 1023; // saturar saida } return out0; }// fim PID_set_PF #ORG 0x1000, 0x3000 void interrupt high_priority interrupcoes(void) { if (INTCONbits.TMR0IF == 1) { INTCONbits.TMR0IF = 0; PORTBbits.RB7 = !PORTBbits.RB7; ref = read_adc(0b00000001); // ler valor potenciomentro de referencia AN0 pino 2 delay_us(10); // tempo para descarregar capacitor interno fb = read_adc(0b00000101); // ler valor potenciomentro de realimentacao AN1 pino 3 pwm = PID_set_PF(); // calcula valor do PID TMR0L = 22 + TMR0L; // interrupcao a cada 0.005 segundos } } void setup() { CMCON = 0x07; // desabilita os comparadores internos // configura saidas e entradas set_tris_a = 0b00000011; // somente RA0,RA1 como entrada analogica, demais pinos saida set_tris_b = 0x00; // todo o PORTB como saida set_tris_c = 0x00; // todo o PORTC como saida, onde pino 17 RC2/CCP1 sera a saida PWM set_tris_d = 0x00; // todo o PORTD como saida, onde se encotra conectado o LCD set_tris_e = 0x00; // todo o PORTE como saida PORTB = 0xFF; // inicia o PORTB todo em alto ADC_init(); // inicia configuracoes do ADC ADCON0bits.ADON = 1; // liga o modulo adc PORTDbits.RD2 = 0; // pino onde se encontra o RW do LCD, para escrita deve estar em nivel logico baixo // configuração PWM T2CON = 0x07; // Liga timer2 e ativa prescaler 16 PR2 = 0x7F; // Carrega PR2 CCP1CON = 0x3C; CCPR1L = 0x00; CCP1CONbits.DC1B0 = 0; CCP1CONbits.DC1B1 = 0; }// fim setup //====================== funcao principal =======================// void main() { // inicio main setup(); // faz set up das configuracoes PORTDbits.RD2 = 0; // pino onde se encontra o RW do LCD, para escrita deve estar em nivel logico baixo en1 = 0; // saida digital RA2 para ponte H en2 = 0; // saida digital RA3 para ponte H // calculo de coeficientes do PID kp = 1; ki = 0; kd = 0; // calculo dos coeficientes para ponto fixo k1 = (kp) * SHIFT; k2 = (ki) * SHIFT; k3 = (kd) * SHIFT; // configuracoes TIMER0 T0CONbits.TMR0ON = 1; T0CONbits.T08BIT = 1; T0CONbits.T0CS = 0; T0CONbits.T0SE = 0; T0CONbits.PSA = 0; T0CONbits.T0PS = 0b111; TMR0L = 22; // configuracoes de interrupcao INTCONbits.TMR0IE = 1; INTCON2bits.TMR0IP = 1; RCONbits.IPEN = 0; INTCONbits.GIE_GIEH = 1; INTCONbits.PEIE_GIEL = 0; while (1) { // inicio loop if (ref > fb) { // verifica sentido de giro necessario para o motor en1 = 0; // pino 4 en2 = 1; // pino 5 } else { en1 = 1; en2 = 0; } // seta o PWM -> 0-1023 CCPR1L:CCPxCON<5:4> CCPR1L = pwm >> 2; // 8 bits mais significativos CCP1CONbits.DC1B1 = pwm >> 1; // segundo bit menos significativo CCP1CONbits.DC1B0 = pwm; // bit menos significativo delay_ms(50); }// fim loop }// fim main Modificação_CCS_2.txt
  24. Quando debugo um código no proteus o resultado não é o esperado, fui fazer o debug no mikroc e deu certo. o que pode ser? o proteus possui algum bug?
  25. Olá venho mais uma vez pedir ajuda aos amigos e forista do Clube do Hardware .Eu consegui emular um teclado USB HID com pic 18f4550 e o Windows reconhece e funciona tudo Ok, porém quando você tenta utiliza-lo na parte da BIOS para configurar ele não funciona, mas se você colocar teclado USB fabricado este funciona normalmente .Alguém sabe algum site ou Explicação que possa me ajudar a entender ??Desde já agradeço a todos .

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

×