Ir ao conteúdo
  • Cadastre-se

Marcelo Cz

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

4

2 Seguidores

  1. Amigo Gerab. Notei que esse tópico, esta parado a muito tempo. gostaria de saber se você conseguiu encontrar o que queria. tendo em vista que esse e o local ideal para a troca de conhecimento, porém existe muita gente com um pouco mais que os outros, que adquiriu com uma pessoa com um pouco mais, e ainda não percebeu que o conhecimento foi feito para ser passado a diante! um dia você não acorda mais, e tudo se perdeu por a mais pura ignorância. ( Sem querer citar nomes ) Fiz um projeto parecido com o que você estava procurando, e encontrei bastante material para o mesmo. Se tratava de uma interface para uma maquina de músicas, onde era controlada através da porta ps2. ela contava com 16 teclas mapeadas, e utilizava uma PIC16f628A. vou postar o programa em ( c ), e se você tiver ainda interesse, posso mandar o esquema para confecção da PCB. segue o código.. #include <16F628A.h> // Define a PIC 16F628a #fuses INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // os Fuses de sempre #use delay(internal=4000000) // Oscilador a 4 Mhz #define T_CLOCK PIN_B2 #define T_DATA PIN_B1 unsigned int8 valor; char miletra; /* ****************************************************************************************** */ void vEnvia_Byte(char Data){ char k=0,Unos=1; while(input(T_CLOCK)==0); output_high(T_CLOCK); output_high(T_DATA); output_drive(T_DATA); output_drive(T_CLOCK); /* ** Enviamos Bit Start ** */ output_high(T_CLOCK); output_high(T_DATA); delay_us(40); output_low(T_DATA); delay_us(40); output_low(T_CLOCK); delay_us(40); /* ** Enviamos 8 bits de dados ** */ for(k=0;k<8;k++){ output_high(T_CLOCK); delay_us(5); output_bit(T_DATA,Data & 0x01); delay_us(35); output_low(T_CLOCK); delay_us(40); if(bit_test(Data,0)==1){Unos++;} Data>>=1; } /* ** Enviamos bit de comparação ** */ output_high(T_CLOCK); delay_us(5); output_bit(T_DATA,Unos&0x01); delay_us(35); output_low(T_CLOCK); delay_us(40); /* ** Enviamos bit de parada ** */ output_high(T_CLOCK); delay_us(5); output_high(T_DATA); delay_us(35); output_low(T_CLOCK); delay_us(40); output_float(T_CLOCK); output_float(T_DATA); delay_us(100); } /* ****************************************************************************************** */ char cLee_Byte(void){ char k; char Data=0xEC; /* ** Condicion RTS ** */ delay_us(100); if(input(T_DATA)==0){ /* ** Esperamos que o Host esteja vazio para enviar dados ** */ while(input(T_CLOCK)==0); output_high(T_CLOCK); output_drive(T_CLOCK); output_high(T_CLOCK); delay_us(200); output_low(T_CLOCK); if(input(T_DATA)==0){ /* ** Se recebe os 8 bits de dados ** */ for(k=0;k<8;k++){ delay_us(40); output_high(T_CLOCK); delay_us(20); shift_right(&Data,1,input(T_DATA)); delay_us(20); output_low(T_CLOCK); } /* ** Se ignora bit de comparação ** */ delay_us(40); output_high(T_CLOCK); delay_us(40); output_low(T_CLOCK); /* ** Se testa bit de parada ** */ delay_us(40); output_high(T_CLOCK); delay_us(20); if(input(T_DATA)==1){ delay_us(15); /* ** Se envia Ack ** */ output_drive(T_DATA); output_low(T_DATA); delay_us(5); output_low(T_CLOCK); delay_us(40); output_high(T_CLOCK); delay_us(10); } } } output_float(T_CLOCK); output_float(T_DATA); delay_us(100); return(Data); } /* ****************************************************************************************** */ #int_EXT void Leer_Host(){ static char Dato_Host; Dato_Host=cLee_Byte(); if(Dato_Host!=0xEC){ if(Dato_Host==0xEE){ vEnvia_Byte(0xEE); }else{ vEnvia_Byte(0xFA); if(Dato_Host==0xF2){ vEnvia_Byte(0xAB); vEnvia_Byte(0x83); } if(Dato_Host==0xFF){ delay_ms(1); vEnvia_Byte(0xAA); } } } } /* ****************************************************************************************** */ void main() { delay_ms(800); vEnvia_Byte(0xAA); ext_int_edge(H_TO_L); clear_interrupt(INT_EXT); enable_interrupts(INT_EXT); enable_interrupts(GLOBAL); do{ vEnvia_Byte(0x44); //O delay_ms(100); vEnvia_Byte(0x4b); //L delay_ms(100); vEnvia_Byte(0x1c); //A delay_ms(100); vEnvia_Byte(0x29); //Espaco delay_ms(100);// vEnvia_Byte(0x42); //K delay_ms(100);// vEnvia_Byte(0x24); //E delay_ms(100); vEnvia_Byte(0x29); //Espaco delay_ms(100);// vEnvia_Byte(0x1c); //A delay_ms(100);// vEnvia_Byte(0x1b); //S delay_ms(100);// vEnvia_Byte(0x24); //E delay_ms(100);// vEnvia_Byte(0x29); //Espaco delay_ms(100);// vEnvia_Byte(0x29); //Espaco delay_ms(100);// vEnvia_Byte(0x29); //Espaco delay_ms(100);// output_toggle(PIN_B3); delay_ms(500); } while(true); } * Daqui você Pode Seguir com seu Programa Especifico Amigo!!! Espero que ajude.. Um Abraço!! A Avareza torna o Homem Um Inútil para o Mundo, a generosidade torna-o estimado!! Pense Nisso!!! Marcelo CZ

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...