Ir ao conteúdo
  • Cadastre-se

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

  • 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

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 ofertas
    • Notícias
    • Bolsa de empregos, certificações e mercado de trabalho
    • "Causos"
    • Encontros de usuários
  • 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

Encontrar resultados em...

Encontrar resultados que...


Data de criação

  • Iniciar

    FIM


Última atualização

  • Iniciar

    FIM


Filtrar pelo número de...

Data de registro

  • Iniciar

    FIM


Grupo


Caixas de som

Encontrado 132 registros

  1. Estou fazendo alguns projetos usando o PIC 12F675... tenho um canal de entrada (com a chave seletora) 3 canais de saida com leds coloridos e relês 1 canal com o buzzer. o problema é que ao acessar determinado canal o buzzer dá uma rosnada baixa ao invés de bipar. Por coincidência o canal onde isso acontece é o mesmo onde tem o LED e o relê juntos... nos canais onde tem somente o led ele bipa normalmente. (o quê exclui ser problema no buzzer) Pensei que pudesse ser uma queda de energia ao ligar o relê, mas percebi que este buzzer de 5v liga normalmente até com 3v.... e o multímetro não indicou queda significativa de energia nos terminais do buzzer (em situação onde ocorre o erro). pensei que pudesse ser algum problema com o driver ligado no buzzer (Smd Bc848)... por isso liguei momentaneamente o buzzer sem o driver... o problema persiste... se a energia está chegando de forma suficiente nos terminais do buzzer... como pode ele dar esta roncada? penso que pode ser alguma interferência??? tenho outra placa de protótipo do mesmo aparelho e esta funciona perfeitamente.... (testei o PIC da defeituosa na boa e funcionou) então o PIC está bom... Informações adicionais: 1 - A fonte usada nas duas placas é a mesma... 2 - O mesmo PIC foi usado nas duas (e com o mesmo programa) 3 - Os componentes e o projeto das placas é o mesmo... 4 - uma das placas funciona normalmente... 5 - testei os componentes da placa defeituosa e parecem ter as mesmas medições... 6 - tenho 5 placas no total... 1 funciona, as outras não... mas parece tudo igual... medições e componentes utilizados... 7 - as placas utilizam drivers para os relês, e driver para o buzzer... 8 - os relês possuem diodo de proteção corretamente polarizados. 9 - o PIC possui capacitor de desacoplamento. 10 - as placas possuem regulador de tensão na entrada para 5v 11 - PULL UPs e PULL DOWNs parecem estar OK (acho que não há erro de projeto quanto a isso afinal de contas uma placa funciona) e as outras foram feitas iguais. 12 - Quando o problema ocorre o PIC entra na função de salvar dados na eprom interna... (mas isso também ocorre quando do mando 5v para os pinos onde o problema não ocorre... e a placa boa também está setada para tal... por isso acho que não é problema referente ao salvamento de dados... 13 - Todas as placas funcionam perfeitamente em suas funções... o problema e referente somente ao BEEP; a pçlaca faz a função que deveria naquela determinada hora... mas o beep rosna... Alguém tem alguma dica? alguém tem notícias de um beep rosnando assim... como se estivesse com pouca energia? obrigado a todos...
  2. Boa noite a todos. Há uns dias atrás, postei esse post em outro lugar, fiz diversos testes, e infelizmente ainda não consegui chegar no resultado que preciso. Vamos lá: Estou meio que desesperado com meu projeto, e já quebrei a cabeça inúmeras vezes para chegar num código final, porém sem exito. Estou desenvolvendo uma solenoide, que precisa ser atuada através de uma mudança de estado de uma porta RB do PIC16F877A. Ou seja, se a porta de ENTRADA em questão (RB5) passar de alimentada para não alimentada, e vice versa (de não alimentada para alimentada), a porta RC4 de saída precisa ser acionada, por 2 segundos, e ser desligada em seguinte. Parece ser algo simples diante do mundo de programação, mas mesmo asssim estou quebrando a cabeça de uma forma pela falta de entendimento na área. Se for de ajuda, segue o código feito no mikroC: void main() { CMCON = 0x07; // Desabilita Comparadores; RBIE_bit = 0x01; // Habilita a interrupção por mudança do PORTB <7:4> RBIF_bit = 0x00; // Força a flag de sinalização a zero GIE_bit = 0x01; // Habilita a interrupção global TRISB = 0xFF; // PORTB configurado como entrada digital TRISC = 0xEF; // Apenas usaremos RC4 como saída digital RC4_bit = 0x00; // Inicia a saída em nível baixo } void interrupt () { if(RBIF_bit){ // Caso haja mudança de 1 para 0, ou de 0 para 1 (especificamente na porta RB5 de entrada) RC4_bit = 0x01; // Saida a ser acionada delay_ms(2000); RC4_bit = 0x00; // Saida a ser desligada } } > Preciso que esse ciclo de acionamento, se repita infinitamente... Conto com a ajuda urgentemente de vocês, e agradeço desde ja. OBS: Deixo em anexo, o projeto esquematizado no Proteus... Att, Otavio. SOLENOIDE_PIC_16F877A.rar
  3. Boa tarde amigos. Sou iniciante e estou começando um projeto com o pic 16f887 e gostaria de saber se tem algum meio de agrupar portas aleatórias de conjuntos diferentes do microcontrolador. Exemplo: Vou acionar um display de 7 segmentos pelas seguintes portas do microcontrolador... RD7 ,RD6 ,RB0 ,RB1 ,RB2 ,RB4 , RB3 (Nesta sequencia 6,5,4,3,2,1,0). Queria saber se tem alguma função para agrupar estar portas nesta sequencia...Pra na programação chame esta funções que possa executar algo no display. Obs: Não consigo colocar o conjunto de porta A inteiro para um display, pois na montagem da placa fica impossível traçar as trilhas. Programa que estou utilizando para programação é o mikroC. Desde já agradeço pela atenção.
  4. Boa noite galera ! Preciso fazer uma programação de um relógio com minutos e segundos no PIC16F870, porém estou perdido com a questão de contagem de ciclos para alterar o display de 7 segmentos a cada segundo, e também como usar o TMR0. Poderiam me dar uma solução ? Agradeço desde já !
  5. Ola amigo (os), Estou desenvolvendo um projeto utilizando o pic 16c505, mas o que acontece é que este pic não aparece no MikroC. Como faço para inseri-lo? ou utiliza-lo lá? Agradeço sua atenção, Obrigado
  6. A saída do sensor do meu projeto de tcc varia de 0 a 5V, o programador do meu grupo quer ignorar toda a tensão que esteja abaixo de 2,5V, ou seja, o PIC só vai reconhecer tensão a partir de 2,5V. Não sei o que fazer, meu professor disse que devo utilizar amplificador operacional, mas não sei como fazer pois não tenho muito conhecimento nessa área de amplificadores. O projeto do meu grupo é, basicamente, um leitor de energia elétrica que você pluga na tomada e pluga a carga nele (computador, geladeira, televisão) e ele tem um display que mostra quanto está sendo consumido e quanto irei pagar. O programador do meu grupo disse que precisa ser feito isso pois ele precisa de mais precisão na hora da medição, pois o pic só esta detectando mudança de tensão a cada 3V, e isso é muito baixa precisão. *Antes que deem sugestão para usar Arduino, é proibido utilizar Arduíno no curso de eletrônica no Senai em que eu estudo. Somente no curso de mecatrônica que pode.
  7. Estou com um problema no meu código em que não é muito bem visível,mas o MikroC diz existir.O suposto erro esta situado quando foi definido o status da porta RC2 do PIC16F877A como entrada: TRISC.F2 = 1; Segue parte do código abaixo e o print do erro detectado pelo MikroC: //----------------------VARIAVEIS GLOBAIS --------------------------------------- unsigned int cap,velocidade,MetroSegundo,tempcap; // contadores de segundos char txt[16]; // converter um numero em string unsigned char mostra = 0; // flag que indica que é hora de mostrar algo no LCD //--------- MODULO CCP -------------------------------------------------------------- TRISC.F2 = 1; //TRISC.F2 = 1; //DEFININDO RC2 COMO ENTRADA T1CON = 0; CCP1CON = 1; //Capture - rising edge -> borda desubida INTCON = 0; PIE1 = 1; //----------------------------------------------------------------------------- void inicializa_LCD(&PORTD) { Lcd_Init(); // Inicializa LCD_Cmd(LCD_CURSOR_OFF); // send command to LCD (cursor off) -> apaga cursor LCD_Cmd(LCD_CLEAR); // send command to LCD (clear LCD) -> Limpa display } //----------------------------------------------------------------------------- void mostra_no_LCD(void) { LCD_Cmd(LCD_CLEAR); // send command to LCD (clear LCD) WordToStr(velocidade,txt); Lcd_Out(1,1,txt); Lcd_Out(1,4,"Km/h"); }
  8. Boa noite!! Estou desenvolvendo um projeto no MikroC em que a entrada é lida pela função ADC_Read, conforme a variação, a saída se comporta de uma maneira diferente. Porém, em um dos casos eu necessito inserir um delay para que haja um atraso na execução da função. Mas inserindo a função "delay_ms(200)" o meu programa acaba ficando bloqueado durante o período e eu necessito que dependendo da minha leitura, execute a próxima função ignorando esse delay. Ou seja, alguém pode me ajudar em alguma outra função para que eu consiga retardar a execução?? Caso não, estou colando abaixo o que eu fiz utilizando o Timer0, que deveria ter prioridade sobre o delay, mas não está funcionado. Alguém pode me ajudar?? #define solenoide GPIO.F1 int pedal = 0; void interrupt() // vetor de interrupção { if(T0IF_bit) //Houve estouro do Timer0? { T0IF_bit = 0x00; //Limpa a flag TMR0 = 0x00; //Reinicia o timer0 if(pedal >= 280) { solenoide = 1; // solenoide desce para a costura } } } // fim interrupt void main() { ANS0_bit = 1; // seleciona analógico ANS1_bit = 0; // seleciona digital ANS2_bit = 0; // seleciona digital ADCON0 = 1; // seleciona a entrada AN0 CMCON = 7; // desabilita os comparadores TRISIO0_bit = 1; // GPIO.F0 seja uma entrada TRISIO1_bit = 0; // GPIO.F1 seja uma saída TRISIO2_bit = 1; // GPIO.F2 seja uma entrada GPIO = 0; // inicia tudo em low WPU = 0; // desabilita pull ups OSCCAL = 0XFF; // configura o oscilador interno para frequencia maxima(4mhz) INTCON = 0XE0; // habilita interrupção do timer 0 e interrupção global e de perifericos OPTION_REG = 0x81; // configura o prescaler para 1:4 TMR0 = 0; // inicia a contagem em zero while(1) { pedal = ADC_Read(0); if((GPIO.F2 == 0)&&(pedal < 5)) { solenoide = 1; // utilizei para atrasar a execução que preciso, porém se tiver outra opção, me ajudaria bem mais delay_ms(200); solenoide = 0; // sobe o solenoide quando agulha estiver em cima delay_ms(10000); // nesse momento eu gostaria que esse delay pudesse ser interrompido quando alterasse o valor de entrada // não somente após terminar o tempo } if((pedal >= 5)&&(pedal < 120)) { solenoide = 1; // solenoide desce para o corta fio } if((pedal >= 120)&&(pedal < 280)) { solenoide = 0; // solenoide sobe } delay_ms(100); // taxa de atualização do ADC } // fim while } // fim main
  9. Boa noite, Preciso de uma ajuda em relação ao microprocessador PIC. Tenho uma placa de estudo de microcontrolador PIC que foi desenvolvida para PIC 16F870-I\P, que tem 28 pinos. Gostaria de saber se é possível montar uma placa que seja conectada no soquete do pic, nela tenha um soquete para um PIC por exemplo o PIC 16F628A entre outros que tenha menos de 28 pinos, e as ligações. Poderia ate fazer placas diferentes para cada tipo de PIC Sera no caso adaptadores Alguém pode me dar uma ajuda nesse sentido? Obrigado
  10. Criei um programação no DEV C++ onde são criadas 10 matrizes 10x10 referentes aos 1000 LEDS que existem no cubo, preciso fazer um algoritmo para o computador entender que todos os pontos das matrizes são LEDS e que se estão com valor 1 o led tem q ligar e que se estão com valor 0 tem q apagar, me ajudem por favor, isto é urgente. Vou deixar a programação feita no DEV C++ e os prints das matrizes que são criadas com o programa. #include <stdio.h> // biblioteca padrão de entrada e saída #include <stdlib.h> // biblioteca padrão #include <fcntl.h> // biblioteca controle de arquivos para ler a porta serial #include <conio.h> // Biblioteca para funções como getch() e funções graficas #include <math.h> #include<windows.h> #include <time.h> //------------------------------------------------------------------------------ //VARIAVEIS HANDLE hCom; DCB dcb; int porta=1; // Ponteiro para porta cerial char dado[5]; // Variavel para recebimento de dado char Serial_Port[4]; // Variavel para a seleção da porta a ser utilizada char SelecionarForma; char continua; int matriz[10][10][10]; //DECLARA MATRIZ DE 10 LINHAS E 10 COLUNAS char send [14]; int i,j,k; int v1,v2,v3; int a,b,c,d,r; //------------------------------------------------------------------------------ //CONFIGURA PORTA SERIAL. int ConfiguraControle(void) { if(!GetCommState(hCom, &dcb)) { return(0); } dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if( SetCommState(hCom, &dcb) == 0 ) { return(0); } return (1); } //------------------------------------------------------------------------------ //Abre a Porta Serial COMx int AbrirPorta(char *NomePorta) { hCom = CreateFile( NomePorta, GENERIC_READ | GENERIC_WRITE, 0, // dispositivos comm abertos com acesso exclusivo NULL, // sem atributos de segurança OPEN_EXISTING, // deve usar OPEN_EXISTING 0, //Entrada e saída sem ovelap. NULL // hTemplate deve ser NULL para comm ); if(hCom == INVALID_HANDLE_VALUE) { return(0); } return (1); } //------------------------------------------------------------------------------ //FUNÇÃO DO PLANO int Plano() { printf("Digite os coeficientes do plano \na:"); scanf("%i", &a); printf("\nb:"); scanf("%i", &b); printf("\nc:"); scanf("%i", &c); printf("\nd:"); scanf("%i", &d); printf("\n\n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) { for(k=0;k<10;k++) { if( a*i + b*j + c*k + d == 0 ) { matriz[i][j][k]=1; printf("1"); } else { matriz[i][j][k]=0; printf("0"); } } printf("\n"); } printf("\n\n\n"); } } //------------------------------------------------------------------------------ //FUNÇÃO DA RETA void Reta() { printf("Digite os coeficientes da reta\na:"); scanf("%i", &a); printf("\nb:"); scanf("%i", &b); printf("\nc:"); scanf("%i", &c); printf("\nv1:"); scanf("%i", &v1); printf("\nv2:"); scanf("%i", &v2); printf("\nv3:"); scanf("%i", &v3); for(i=0;i<10;i++) { for(j=0;j<10;j++) { for(k=0;k<10;k++) { if( (((i-a)/v1) == ((j-b)/v2)) && (((j-b)/v2) == ((k-c)/v3)) ) { matriz[i][j][k]=1; printf("1"); } else { matriz[i][j][k]=0; printf("0"); } } printf("\n"); } printf("\n\n\n"); } } //------------------------------------------------------------------------------ //FUNÇÃO DA ESFERA void Esfera() { printf("Digite o raio da esfera"); printf("\nr:"); scanf("%i", &r); for(i=0;i<10;i++) { for(j=0;j<10;j++) { for(k=0;k<10;k++) { if( ( (i*i) + (j*j) + (k*k) ) <= r*r ) { matriz[i][j][k]=1; printf("1"); } else { matriz[i][j][k]=0; printf("0"); } } printf("\n"); } printf("\n\n\n"); } } //------------------------------------------------------------------------------ //ROTINA PRINCIPAL int main(int argc, char *argv[]) { // Recebe a por5ta que deve conectar printf("\n\nEntre com o nome da porta a ser utilizada : (EX: COM1,COM2 ...)\n\n"); scanf("%s",Serial_Port); AbrirPorta(Serial_Port); ConfiguraControle(); CloseHandle(hCom); porta = open(Serial_Port, O_RDWR); //abrir porta COMX // Trata erro na abertura da porta if (porta == -1) { printf("\n\nImpossivel abrir a porta. Ou porta não encontrada!\n\n"); } else { // Se tudo ocorreu nos conformes limpa a tela e escreve o cabeçalho no arquivo // E informa que a porta selecionada foi conectada com sucesso system("cls"); printf("\nPorta %s Conectada\n\n",Serial_Port); } sleep(1000); //---------------------MENU DE FUNÇÕES------------------------------------------ do { printf("Selecione a forma geometrica desejada" "\n"); SelecionarForma = getche(); if(SelecionarForma=='p') { Plano(); } if(SelecionarForma=='r') { Reta(); } if(SelecionarForma=='e') { Esfera(); } printf("Executar Novamente (s/n)\n\n"); continua = getch(); } while((continua=='s')||(continua=='S')); //------------------------------------------------------------------------------ system("PAUSE"); return 0; }
  11. Boa a tarde a todos. Estou com problemas nas minhas portas ADC's, um leitura esta influenciando nas outras, estou usando 3 saídas ADC (PIC18F4550). Uma pra medir tensão, e as outras duas temperatura de diferentes coisas. Mas toda vez que uma delas é modificada, as outras também são influenciadas. Queria saber como corrigir esse erro. Alguém sabe me dizer? Estou usando o pino de referencia GND do Pic //======== tensão ===========// Media = 0; for(y=0;y<=38;y++){ delay_us(100); Media = Media + adc_get_sample(0);} q1 = (media/38); p1 =(q1*5)/1023.0; q2 = p1*4.0; FloatToStr_FixLen(q2,txtV,5); if(q2<10&&Lim){lm = 0x01; Lim = 0x00;} if(q2>10)Lim = 0x01; //=============================== // Leitura do Ferro de Solda leds = adc_get_sample(3); leds = leds/1.33; leds = leds+27; ferr0_ = leds ; IntToStr (leds,leds_string); //TEMPERATURA DO DISSIPADOR tmp1 = adc_get_sample(1); tmp1 = tmp1*500; tmp1 = tmp1/1023; tempC= tmp1; IntToStr(tmp1,txtTe); //PWM cooler if(tempC >30 && tempC <35)cooler = 50; else if(tempC >35 && tempC <40)cooler = 150; else if(tempC >40){cooler = 200; Per = 0x01; LED = 0x01;} else if(tempC <30){cooler = 0; if(Per)lm = 0x01; Per = 0x00; LED = 0x00;}
  12. Boa noite, encontrei esse projeto na internet: Não entendo de programação mas fiz essas adaptações: coloquei um led sempre que o RX recebe com código correto, e está simulando perfeito. Porém o projeto original é pra o PIC 16F628a e eu só troquei a library no compilador e funcionou, só que tô tentando fazer o PORTC funcionar e nada...aqui estão os códigos que eu tô usando e o esquema no Proteus 8.6: TX: #chip 16F877A, 4 #define TX PORTA.0 'Define o pino RA0 como TX Dir TX Out 'Define TX como saída Dir PORTA.1 In 'Define PORTA.1 como entrada Dir PORTA.2 In 'Define PORTA.2 como entrada Dir PORTA.3 In 'Define PORTA.3 como entrada Dir PORTA.4 In 'Define PORTA.4 como entrada Dir PORTB in 'Define todo o PORTB como entrada Dir PORTC in Do Codigo.1 = PORTA.1 'Copia o valor do pino RA1 para o bit 1 da variável Código Codigo.2 = PORTA.2 'Copia o valor do pino RA2 para o bit 2 da variável Código Codigo.3 = PORTA.3 'Copia o valor do pino RA3 para o bit 3 da variável Código Codigo.4 = PORTA.4 'Copia o valor do pino RA4 para o bit 4 da variável Código Dado = PORTB 'Copia o valor do PORTB para a variável Dado Dado1 = PORTC Transmita 'Chama a sub-rotina para transmitir o dado Loop Sub Transmita ' 01 é igual a 1 ' 10 é igual a 0 'Inicio da transmissao 'Rotina para transmitir pulso longo TX = 1 Wait 2000 us TX = 0 Wait 100 us If Codigo.0 = 1 Then Transmita1 Else Transmita0 end if If Codigo.1 = 1 Then Transmita1 Else Transmita0 end if If Codigo.2 = 1 Then Transmita1 Else Transmita0 end if If Codigo.3 = 1 Then Transmita1 Else Transmita0 end if If Codigo.4 = 1 Then Transmita1 Else Transmita0 end if If Codigo.5 = 1 Then Transmita1 Else Transmita0 end if If Codigo.6 = 1 Then Transmita1 Else Transmita0 end if If Codigo.7 = 1 Then Transmita1 Else Transmita0 end if If Dado.0 = 1 Then Transmita1 Else Transmita0 end if If Dado.1 = 1 Then Transmita1 Else Transmita0 end if If Dado.2 = 1 Then Transmita1 Else Transmita0 end if If Dado.3 = 1 Then Transmita1 Else Transmita0 end if If Dado.4 = 1 Then Transmita1 Else Transmita0 end if If Dado.5 = 1 Then Transmita1 Else Transmita0 end if If Dado.6 = 1 Then Transmita1 Else Transmita0 end if If Dado.7 = 1 Then Transmita1 Else Transmita0 end if If Dado1.0 = 1 Then Transmita1 Else Transmita0 end if If Dado1.1 = 1 Then Transmita1 Else Transmita0 end if If Dado1.2 = 1 Then Transmita1 Else Transmita0 end if If Dado1.3 = 1 Then Transmita1 Else Transmita0 end if If Dado.4 = 1 Then Transmita1 Else Transmita0 end if If Dado1.5 = 1 Then Transmita1 Else Transmita0 end if If Dado1.6 = 1 Then Transmita1 Else Transmita0 end if If Dado1.7 = 1 Then Transmita1 Else Transmita0 end if end sub Sub Transmita1 TX = 0 Wait 100 us TX = 1 Wait 100 us end sub Sub Transmita0 TX = 1 Wait 100 us TX = 0 Wait 100 us end sub RX: #chip 16F877A, 4 #define RX PORTA.0 'Define o pino RA0 como RX para receber a transmisão Dir RX In 'Define a RX como entrada Dir PORTA.1 In 'Define o pino RA1 como entrada Dir PORTA.2 In 'Define o pino RA2 como entrada Dir PORTA.3 In 'Define o pino RA3 como entrada Dir PORTA.4 In 'Define o pino RA4 como entrada Dir PORTB Out 'Define todo PORTB como saida Dir PORTC out Wait 10 ms 'Zera variáveis CodigoLocal = 0 Do '============================================================================= 'Identifica Pulso de 2000 ms para iniciar a leitura do dado '============================================================================= Inicio: Contador = 0 'Zera contador Volta: If RX = 1 Then 'Testa se o sinal está em nível alto Contador = Contador + 1 'Incrementa contador wait 15 us 'Aguarda 15 microsegundos Goto Volta 'Volta para testar o pulso novamente End if 'Fim da rotina If If Contador < 95 Then 'Se contador menor que 95, cancela e volta p/ Inicio Goto Inicio end if 'Se contador maior que 95, receba o dado '============================================================================= Receba 'Chama sub-rotina para receber o dado DecodificaManchester 'Chama sub-rotina para decodificar o dado recebido DadoRecebido = dado 'Salva valor do dado recebido 'Verificar codificação dadoA = codigoA 'Copia o codigoA na variável dadoA para decodifica-lo usando a sub-rotina DecodificaManchester dadoB = codigoB 'Copia o codigoA na variável dadoA para decodifica-lo usando a sub-rotina DecodificaManchester DecodificaManchester 'Chama sub-rotina para decodificar o Código recebido CodigoRecebido = dado 'Salva valor do codigo recebido 'Lendo o código local CodigoLocal.1 = PORTA.1 'Copia o estado do pino RA1 no bit 1 da variável CodigoLocal CodigoLocal.2 = PORTA.2 'Copia o estado do pino RA2 no bit 2 da variável CodigoLocal CodigoLocal.3 = PORTA.3 'Copia o estado do pino RA3 no bit 3 da variável CodigoLocal CodigoLocal.4 = PORTA.4 'Copia o estado do pino RA4 no bit 4 da variável CodigoLocal 'Verifica se é o código correto If CodigoLocal = CodigoRecebido Then PORTB = DadoRecebido end if 'Se o código é correto, então PORTB recebe o valor do dado recebido. If CodigoLocal = CodigoRecebido Then PORTD.0 = 1 wait 100 ms PORTD.0 = 0 end if Loop Sub Receba Wait 145 us 'Aguarda 145 microsegundo para sincronizar os pulsos codigoA.0 = RX Wait 100 us codigoA.1 = RX Wait 100 us codigoA.2 = RX Wait 100 us codigoA.3 = RX Wait 100 us codigoA.4 = RX Wait 100 us codigoA.5 = RX Wait 100 us codigoA.6 = RX Wait 100 us codigoA.7 = RX wait 100 us codigoB.0 = RX Wait 100 us codigoB.1 = RX Wait 100 us codigoB.2 = RX Wait 100 us codigoB.3 = RX Wait 100 us codigoB.4 = RX Wait 100 us codigoB.5 = RX Wait 100 us codigoB.6 = RX Wait 100 us codigoB.7 = RX Wait 100 us dadoA.0 = RX Wait 100 us dadoA.1 = RX Wait 100 us dadoA.2 = RX Wait 100 us dadoA.3 = RX Wait 100 us dadoA.4 = RX Wait 100 us dadoA.5 = RX Wait 100 us dadoA.6 = RX Wait 100 us dadoA.7 = RX Wait 100 us dadoB.0 = RX Wait 100 us dadoB.1 = RX Wait 100 us dadoB.2 = RX Wait 100 us dadoB.3 = RX Wait 100 us dadoB.4 = RX Wait 100 us dadoB.5 = RX Wait 100 us dadoB.6 = RX Wait 100 us dadoB.7 = RX End sub Sub DecodificaManchester If dadoA.0=1 Then If dadoA.1=1 Then GOTO erro MyData_recebendo.0 = 0 else If dadoA.1=0 Then GOTO erro MyData_recebendo.0 = 1 end if If dadoA.2=1 Then If dadoA.3=1 Then GOTO erro MyData_recebendo.1 = 0 else If dadoA.3=0 Then GOTO erro MyData_recebendo.1 = 1 end if If dadoA.4=1 Then If dadoA.5=1 Then GOTO erro MyData_recebendo.2 = 0 else If dadoA.5=0 Then GOTO erro MyData_recebendo.2 = 1 end if If dadoA.6=1 Then If dadoA.7=1 Then GOTO erro MyData_recebendo.3 = 0 else If dadoA.7=0 Then GOTO erro MyData_recebendo.3 = 1 end if If dadoB.0=1 Then If dadoB.1=1 Then GOTO erro MyData_recebendo.4 = 0 else If dadoB.1=0 Then GOTO erro MyData_recebendo.4 = 1 end if If dadoB.2=1 Then If dadoB.3=1 Then GOTO erro MyData_recebendo.5 = 0 else If dadoB.3=0 Then GOTO erro MyData_recebendo.5 = 1 end if If dadoB.4=1 Then If dadoB.5=1 Then GOTO erro MyData_recebendo.6 = 0 else If dadoB.5=0 Then GOTO erro MyData_recebendo.6 = 1 end if If dadoB.6=1 Then If dadoB.7=1 Then GOTO erro MyData_recebendo.7 = 0 else If dadoB.7=0 Then GOTO erro MyData_recebendo.7 = 1 end if dado = MyData_recebendo end sub erro: Goto Inicio end esquema está em .rar projeto 877a.rar
  13. Estou desenvolvendo um projeto de robótica e nada mais é que a programação do PIC18F4550 (https://www.embarcados.com.br/proton-pic18f4550/) para alimentar as portas da ponte H em certos momentos. Não tenho muito conhecimento e experiencia nessa área, fiz o começo dessa programação para testes iniciais com os motores, compilou, mas não esta funcionando na pratica, a corrente não esta chegando na ponte H pelas portas que eu defini. Pode ser algo na programação? Programação.txt
  14. Estou programando no MPLAB e quero passar pra placa que esta meu PIC, ela tem porta USB B, qual software posso usar para passar do MPLAB para o PIC?
  15. Olá preciso variar o duty cycle do pwm, de acordo com uma entrada ADC via potenciometro, o problema é que preciso variar a escala do potenciometro e de acordo com a tensão o pwm varia. Por exemplo de 0 á 1,25v do ADC(pot) duty cycle vai de 0 á 77%, de 1,26 a 2.25v, duty cycle varia de 77 a 35%. Me ajudem se puder, segue código fonte. #include "config.h" // Inclui o arquivo config.h #include "delay_pic18.h" // Inclui o arquivi delay_pic18.h #include "LCD4b.h" // Inclui o arquivo LCD4b.h #include <xc.h> // Inclui o arquivo header xc.h #include <stdio.h> // Inclui o arquivo stdio.h #include <pic18f4550.h> // Inclui biblioteca do PIC18F4550. int adc = 0; // Variável de armazenamento da conversão ADC float resultado, conversao; // Váriaveis de casa decimais para conversão do ADC 0 Á 1023 P/ 0 Á 5V float tensão, calculo; // Váriaveis de casa decimais para conversão do PWM 0 Á 255 P/ 0 Á 5V int porcentagem; // Váriaveis de casa decimais para valores em porcentagem (%) de 0 á 100% do resultado do PWM void main(void) { // Função Principal //------------------------------------------------------------------------------------------------------------------// //Definição dos I/O's (Input/Output) ADCON1 = 0x0F; // Desabilita todos os canais A/D TRISB = 0b00000000; // Define todo o PORTB como sáida TRISBbits.TRISB3 = 0; // CCPR2L (saida para led) TRISAbits.RA0 = 1; // Define a PORTAN0 como entrada analógica PORTBbits.RB3 = 0; // Começa desligado a saida PORTB = 0b00000000; // Começa desligado todas as saídas dos pinos do PORTB //------------------------------------------------------------------------------------------------------------------// //Registradores configurados da entrada ADC-AN0(via/Potenciomêtro) ADCON0 = 0b00000001; /* Bit´s 7 e 6 = 0 -Não utilizados * CHS<3:0> = 0001 - Seleçção do canal analógico AN0 * GO/DONE = 0 -Conversão A/D não iniciada * ADCON = 1 -Módulo A/D habilitado */ ADCON2 = 0b10000111; /*ADFM = 1 -Resultado da conversão justificada á direita. * Bit 6 - Não utilizado * ACQT<2:0> = 0 - 0 TAD * ADCS<2:0> = 111 - Oscilador Interno para A/D */ //------------------------------------------------------------------------------------------------------------------// //Registradores configurados para uso do PWM via TIMER2 pela saída CCPR2L = PORTB.RB3 CCP2CON = 0b00001100; // Modo PWM PR2 = 255; // Frequência 250Hz > entre 0 e 255 T2CONbits.T2CKPS = 0b10; // Prescaler do timer 2 em 1:16 T2CONbits.TMR2ON = 1; // Incia o PWM CCPR2L = 0; // inicia em 0 duty cycle //------------------------------------------------------------------------------------------------------------------// //Texto de apresentação do Projeto lcd_ini(); // Inicializa o Display LCD 16X2 lcd_envia_byte(0, 0x81); // Posiciona o cursor na coluna 1 da linha 1 printf("SIST.ROBOTICOS"); // Escreve no display LCD lcd_envia_byte(0, 0xC0); // Posiciona o cursor na coluna 0 da linha 2 printf("MECATRONICA-2018"); // Escreve no display LCD __delay_ms(2000); // Aguarda 2 segundos lcd_envia_byte(0, 0x01); // Limpa o dispaly LCD __delay_ms(20); // Aguarda 20 milisegundos lcd_envia_byte(0, 0x80); // Posiciona o cursor na coluna 0 da linha 1 printf("DUTY-CYCLE:"); // Escreve no dispaly LCD lcd_envia_byte(0, 0x8B); // Posiciona o cursor na coluna 11 da linha 1 printf(" 000"); // Escreve no display LCD lcd_envia_byte(0, 0xC0); // Posiciona o cursor na coluna 0 da linha 2 printf("ADC(V):"); // Escreve no display LCD lcd_envia_byte(0, 0xCB); // Posiciona o cursor na coluna 11 da linha 2 printf("0000"); // Escreve no display LCD __delay_ms(2000); // Aguarda 2 segundos //------------------------------------------------------------------------------------------------------------------// //Entrada do loop infinito while (1) { // loop infinito __delay_ms(50); //------------------------------------------------------------------------------------------------------------------// //Conversão de 0 á 5V do ADC ADCON0bits.GO = 1; // Inicia a conversão A/D while (ADCON0bits.GO); // Aguarda a finalização da conversão adc = ADRESH; // Armazena a parte alta do resultado em ADC adc = (adc << 8 + ADRESL; /* Desloca 8 bit's á esquerda e soma com a * parte baixa do resultado da conversão A/D. */ //------------------------------------------------------------------------------------------------------------------// //ADC resultado = conversao * 1; // Multiplica o resultado da variável anterior para obter as casa decimais desejadas. conversao = adc * 5.0 / 1023; // Converte de 0 a 1023, para valores de Tensão(V) 0 á 5V (Potenciometro) //------------------------------------------------------------------------------------------------------------------// //PWM calculo = CCPR2L * 5.0 / 255; // Converte de 0 a 255, para valores de Tensão (V) 0 á 5V (PWM TIMER2) tensão = calculo * 1; // Ajusta as casas decimais da conversão //------------------------------------------------------------------------------------------------------------------// //PWM(%) porcentagem = calculo * 100 / 5.0; // Converte os valores de tensão para valores em porcentagem (%) de 0 á 100% //------------------------------------------------------------------------------------------------------------------// // Atualização do display LCD com os valores da conversão do PWM/ADC lcd_envia_byte(0, 0x80); // Posiciona o cursor na coluna 0 da linha 1 printf("DUTY-CYCLE: %03d", porcentagem); // Escreve no display LCD lcd_envia_byte(0, 0x8f); // Posiciona o cursor na coluna 0 da linha 1 printf("%c", 37); // Escreve no display LCD % de acordo com a tabela ASC|| lcd_envia_byte(0, 0xC0); // Posiciona o cursor na coluna 0 da linha 2 printf("ADC-AN0(V): %04.2f", conversao); // Escreve no display LCD //------------------------------------------------------------------------------------------------------------------// CCPR2L = adc; /* if(CCPR2L > 255){CCPR2L = 0x00;} if(CCPR2L < 0){CCPR2L = 255;} if ((conversao >= 0.0) && (conversao <= 1.25)); { CCPR2L = 196; } if ((conversao >= 1.26) && (conversao <= 2.5)); { CCPR2L = 81; } if ((conversao >= 2.51) && (conversao <= 3.75)); { CCPR2L = 109; } if ((conversao >= 3.76) && (conversao <= 5)); { CCPR2L = 229; } */ } }
  16. Olá a todos. To com sérios problemas com um MAX6675 e comunicação SPI. Mano do céu, se tem um coisa que sou, é leigo com essa negocio de I2C e SPI. RX/TX até vai. Mas Enfim... Só quero comunicar ele com meu pic e fazer aparecer no lcd a temperatura medida, só preciso que me ajudem com o código, porque eu realmente não sei muito de SPI. Quem pode me ajudar, ficaria muito agradecido. Obrigado <3
  17. Boooa noite meu povo. É o seguinte, estou com 74HC164 aqui, e vou usar suas saídas porque é mais viável passar 4 fios do que passar 10 fios pro outro lado do quarto . Comunicação ok, ja está funcionando, mas acontece, que não sei como mudar um único bit, sem ter que dizer todas as vezes como eu quero que os outro 7 bits fiquem. Tipo um PORT de um PIC, se eu quiser mudar uma unica saída, eu só vou lá e digo que "RD0 = 1", E pronto, não mudei em nada nos outros pinos. Mas via SPI eu não to conseguindo fazer isso. Eu tenho que mandar todas as vezes o valor que eu quero em todas ás 8 saídas do 74HC164, e no que eu estou usando ele, não dar pra fazer isso. Tipo, vamos dizer que meu Buffer está com 0b1000000, e eu só quero mudar o valor do ultimo zero, e quero que o valor do primeiro, continue sendo 1, ta beleza, é só eu mandar 0b1000001, SÓ QUE, o primeiro bit nunca vai ter como eu saber como ele está, porque ele sempre vai mudar de acordo com a temperatura do LM aqui, então se eu mandar 0b10000001 e o primeiro tivesse em zero, eu vou força ele a ser 1 bugando todo os resto do código que dizia q ele era 0, porque ele tanto pode está em 1 ou como em 0. Eu só quero manter o valor dele seja ele qual for, e mudar todos os outros 7 da mesma forma. Sempre que eu alterar um bit, ele manter os outros como estão. PFV me ajudem nisso, não sei se me explique da melhor forma, então se tiver alguma duvida me avise. Obrigado a todos
  18. Olá, boa noite a todos. Então, do seguinte, to com uma duvida enquanto a uma fonte ajustável via PWM. Estou montando uma, e não sei se faço via PWM de um pic, ou pelo LM317. Sem duvidas seria bem melhor pelo pic, porque não teria necessidade de usar um Potenciômetro(dois no caso, um pro ajuste fino e outro pelo grosso). Ia ser controlado por dois botões, com variação de 0.08mV. Mas minha duvida é. Tem perigo de alguma coisa q eu for ligar na saída dessa fonte que possa dar algum bug por conta da frequência que esse circuito iria oscilar por conta do PWM, ou é melhor o LM317 mesmo? Obrigado pela atenção
  19. 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
  20. boa noite pessoal, estou me debatendo com um código em assembly a algumas semanas, o problema é o seguinte de uma contador de uma matriz de led 7x5 que tem como objetivo ir de a-z maiúsculo e minusculo e também números de 1 a 9, porém com todos esses valores estoura o program counter sendo assim estava procurando na internet que usando o pclath eu consigo resolver esse problema, sendo que não posso separar em duas tabelas, segue o que ja fiz, agradecido desde ja #include "p16f877a.inc" ; config ; __config 0x3f39 __config _fosc_xt & _wdte_off & _pwrte_off & _boren_off & _lvp_off & _cpd_off & _wrt_off & _cp_off offset equ 20h pointer equ 21h contint equ 22h aux equ 23h org 0x0000 ; processor reset vector goto inicio ; go to beginning of program org 0x0004 ; processor interrup vector goto intertim ; go to interrup of program inicio bsf status,5 movlw 06h movwf adcon1 clrf trisa movlw 00h ;rb0 ? movwf trisb movlw 0f8h movwf trisd movlw 60h movwf intcon movlw 84h movwf option_reg bcf status,5 clrf portd movlw 64h movwf tmr0 clrf offset clrf pointer clrf contint bsf intcon,7 ini1 nop goto ini1 intertim bsf portd,0 movlw 65h subwf contint,w btfss status,z goto inttim1 movlw 02h iorwf portd,f clrf contint movlw 05h addwf offset,f inttim1 movlw 0b9h subwf offset,w btfsc status,z clrf offset movf offset,w addwf pointer,w call tabela movwf portb rlf portb,f movf pointer,w call tabelacol movwf porta incf pointer,f movlw 05h subwf pointer,w btfsc status,z clrf pointer movlw 64h movwf tmr0 incf contint,f bcf intcon,2 bcf portd,0 retfie tabelacol addwf pcl,f retlw 10h retlw 08h retlw 04h retlw 02h retlw 01h tabela addwf pcl,f retlw 3eh; retlw 51h retlw 49h retlw 45h retlw 3eh retlw 44h;1 retlw 42h retlw 0ffh retlw 40h retlw 40h retlw 42h;2 retlw 61h retlw 51h retlw 49h retlw 46h retlw 22h;3 retlw 49h retlw 49h retlw 49h retlw 36h retlw 0fh;4 retlw 08h retlw 08h retlw 08h retlw 7fh retlw 4fh;5 retlw 49h retlw 49h retlw 49h retlw 31h retlw 3eh;6 retlw 51h retlw 49h retlw 49h retlw 31h retlw 01h;7 retlw 01h retlw 09h retlw 09h retlw 7fh retlw 36h;8 retlw 49h retlw 49h retlw 49h retlw 36h retlw 06h;9 retlw 09h retlw 09h retlw 09h retlw 7eh retlw 3eh;a retlw 09h retlw 09h retlw 09h retlw 7eh retlw 7fh;b retlw 49h retlw 49h retlw 49h retlw 36h retlw 3eh;c retlw 41h retlw 41h retlw 41h retlw 22h retlw 7fh;d retlw 41h retlw 41h retlw 41h retlw 3eh retlw 7fh;e retlw 49h retlw 49h retlw 49h retlw 41h retlw 7fh;f retlw 09h retlw 09h retlw 09h retlw 01h retlw 3eh;g retlw 49h retlw 49h retlw 49h retlw 32h retlw 7fh;h retlw 08h retlw 08h retlw 08h retlw 7fh retlw 41h;i retlw 41h retlw 7fh retlw 41h retlw 41h retlw 41h;j retlw 41h retlw 3fh retlw 01h retlw 01h retlw 7fh;k retlw 0ch retlw 12h retlw 21h retlw 40h retlw 7fh;l retlw 40h retlw 40h retlw 40h retlw 40h retlw 10h;l retlw 22h retlw 20h retlw 22h retlw 10h retlw 7fh;m retlw 02h retlw 04h retlw 02h retlw 7fh retlw 7fh;n retlw 04h retlw 08h retlw 10h retlw 7fh; 0111 1111 retlw 3eh;o retlw 41h retlw 41h retlw 41h retlw 3eh retlw 7fh;p retlw 09h retlw 09h retlw 09h retlw 06h retlw 3eh;q retlw 41h retlw 51h retlw 61h retlw 7eh retlw 7fh;r retlw 09h retlw 19h retlw 29h retlw 46h retlw 26h;s retlw 49h retlw 49h retlw 49h retlw 32h retlw 01h;t retlw 01h retlw 7fh retlw 01h retlw 01h retlw 3fh;u retlw 40h retlw 40h retlw 40h retlw 3fh retlw 1fh;v retlw 20h retlw 40h retlw 20h retlw 1fh retlw 7fh;w retlw 20h retlw 10h retlw 20h retlw 7fh retlw 63h;x retlw 14h retlw 08h retlw 14h retlw 63h retlw 03h;y retlw 04h retlw 78h retlw 04h retlw 03h retlw 21h;z retlw 51h retlw 49h retlw 45h retlw 43h retlw 3ch;a retlw 42h retlw 42h retlw 24h retlw 7fh retlw 7fh;b retlw 48h retlw 48h retlw 48h retlw 30h retlw 3ch;c retlw 42h retlw 42h retlw 42h retlw 24h retlw 30h;d retlw 48h retlw 48h retlw 48h retlw 7fh retlw 3ch;e retlw 4ah retlw 4ah retlw 4ah retlw 24h retlw 7eh;f retlw 0ah retlw 0ah retlw 0ah retlw 02h retlw 24h;g retlw 4ah retlw 4ah retlw 4ah retlw 3ch retlw 7fh;h retlw 08h retlw 08h retlw 08h retlw 78h retlw 00h;i retlw 00h retlw 7ah retlw 00h retlw 00h retlw 20h;j retlw 40h retlw 7dh retlw 00h retlw 00h retlw 7eh;k retlw 18h retlw 24h retlw 30h retlw 00h retlw 7eh;l retlw 40h retlw 40h retlw 40h retlw 40h retlw 7eh;m retlw 02h retlw 04h retlw 02h retlw 7eh retlw 78h;n retlw 04h retlw 04h retlw 04h retlw 78h retlw 3ch;o retlw 42h retlw 42h retlw 42h retlw 3ch retlw 7eh;p retlw 12h retlw 12h retlw 12h retlw 0ch retlw 04h;q retlw 0ah retlw 2ah retlw 2ah retlw 7eh retlw 00h;r retlw 00h retlw 7eh retlw 04h retlw 02h retlw 4ch;s retlw 52h retlw 52h retlw 52h retlw 64h retlw 02h;t retlw 02h retlw 7eh retlw 02h retlw 02h retlw 3eh;u retlw 40h retlw 40h retlw 40h retlw 3eh retlw 1eh;v retlw 20h retlw 40h retlw 20h retlw 1eh retlw 7eh;w retlw 40h retlw 20h retlw 40h retlw 7eh retlw 62h;x retlw 14h retlw 08h retlw 14h retlw 62h retlw 02h;y retlw 04h retlw 78h retlw 04h retlw 02h retlw 62h;z retlw 52h retlw 4ah retlw 46h retlw 42h end
  21. Olá, Pretendo desenvolver soluções de automação com recurso a microcontroladores. Estava vendo este video https://www.youtube.com/watch?v=a-GW1xF56o8 e me surgiu a seguinte dúvida "para avançar no mundo dos microcontroladores devo começar a estudar o quê e por onde? Familia PIC, AVR, ou outras coisas que nem se quer conheço ?" Todas as dicas serão bem vindas, preciso de orientação. Valeu
  22. Olá Galera. Sou novo no forum. Estou trabalhando com um display gráfico 128x64 que utiliza o driver st7920, e programando em ccs com o mplab. O problema é que não encontro um drive compatível com esse glcd para o ccs. Alguém tem alguma dica?
  23. Bom dia, estou fazendo um circuito com pic 18f4550 para utilizar o sinal de uma celula de carga e mostrar no display em porcentagem, queria saber se o código que desenvolvi pode funcionar, por que não consigo testar em casa... Segue o código: #programa orgall 0x1000 Pinos do lcd Void nivel (); Void main (void) org 0x1000 { Unsigned char [6]; Unsigned int adcvar=0; Trisa0_bit=1; Trisc=0x00; Portc=0x00; Adc_init(); Lcd_init(); Lcd_cmd(_lcd_cursor_off); Lcd_out(1,1, " nivel de gás "); While (1) { Void nivel(); } Void nivel() { Unsigned int nivel=0; Nível =(( adc_get_sample(0)*100)/1023)+48; Wordtostr(nivel , txt); Lcd_out( 2,5, txt); }
  24. Boa noite pessoal, Estou com uma plaquinha simples aqui me parece que é de uma central de alarme, ela utiliza o PIC16F630 uma EEPROM externa (24LC16B) e uma placa receptora de rf. A eeprom está ligada nos pinos ra4, ra5 e rc5 (SLK, SDA, WP) respectivamente e a placa de rf esta no ra3 (MCLR). Pelo que vi esse micro não tem I2C e nem serial, me corrija se estou errado. Minha dúvida é o seguinte: Como gravar na eeprom? Tive fazendo umas pesquisa me parece que utiliza o timer1 pra fazer esse tipo de gravação. Como ler do receptor rf? Essa placa praticamente faz a leitura do sinal de rf grava na eeprom logicamente e aciona dois reles, se alguém puder dar uma luz fico grato.
  25. 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

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

×