-
Posts
191 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por felipeetec
-
-
Matheus brigadão mesmo pela ajuda, vou dar uma estudada no que você me passou agora, e tentar montar um programinha, qualquer duvida eu volto aqui.ahuauauha
obs:ando meio sem tempo ultimamente por causa que estou me preparando para o vestibular, e pode ser que demore um pouco pra eu entrar novamente e responder o meu progresso, mas você já me deu uma ótima base, muito obrigado.
-
Ixi cara, tentei entender como fazer um programa para o pc com o intuito de controlar o pic pela usb, mas n consegui, tem como você me dar uma luz, mais uma vez....hhuahuahuhua
-
o aplicativo eu sei, mas qero saber a extensão do arquivo que está o código da programação.
-
beleza, valeu pela ajuda.
qual é a extensão do código do aplicativo, é que tem um monte de arquivo mas n sei qual abrir.
-
xp mesmo, vou procurar.
-
isso mesmo...n tenho ideia de como fazer.
-
beleza, irei fazer isso , mas essa ainda n é a parte critica, o mais difícil vai ser o software....sera que tem como você me dar mais um help nessa parte???
-
ainda n ta funcionando estou usando o virtual terminal do proteus
mas tudo bem vou deixar essa parte um pouco de lado agora, e qeria saber se você pode me explicar o basico da programação pro software que vai no pc??
-
engraçado. depois que eu envio o codigo, eu tenho que enviar algum lixo pra ele trocar o portb0
-
o Cristal é de 12Mhz
estou testando no proteus e estou enviando o seguinte "Felipe "
TA certo isso? e ele deveria inverter o estado do port b0
-
ixi cara n ta funcionando nao
n sei porque, ele demora pra respodenr
-
hum tá, o rf ainda n testei.
-
eu fiz pro 16f628a e funcionou...mas quero implementa-lo e adc aqela parte que você falou da senha:Felipe.
-
o que pensei em fazre foi isso, mas n creio que esteja correto
#include <16f628a.h>#fuses HS,EC_IO,NOWDT,MCLR,BROWNOUT,NOPROTECT,NOLVP,NOCPD
#use delay (clock = 12000000)
//------------------------------
#define WireTX PIN_B2
#define WireRX PIN_B1 //<-----
//------------------------------
#use rs232(baud=9600,parity=N,xmit=WireTX , rcv=WireRX ,bits=8,ERRORS , STREAM=Wireless)
unsigned int8 data;
int flag=0;
#define IN1 PIN_A0 //Pinos de controle dos motores
#define IN2 PIN_A1
#define IN3 PIN_A2
#define IN4 PIN_A3
#int_rda
void rd_isr(void)
{
disable_interrupts(INT_RDA); // Disable Serial Recieve Interrupt
disable_interrupts(GLOBAL); // Disable Global Interrupts
data= fgetc(Wireless);
if(data=='Felipe '){
if(data=='P')
{
flag=1;
}
if(data=='E')
{
flag=2;
}
if(data=='D')
{
flag=3;
}
if(data=='C')
{
flag=4;
}
if(data=='B')
{
flag=5;
}
}
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
}
void main()
{
enable_interrupts(int_rda);
enable_interrupts(global);
output_high (PIN_D2);
for(;
{
Switch (flag)
{
Case 1:
{
output_low (IN1);
output_low (IN2);
output_low (IN3);
output_low (IN4);
break;
}
Case 2:
{
output_low (IN2);
output_low (IN3);
output_low (IN4);
output_high (IN1);
break;
}
Case 3:
{
output_low (IN1);
output_low (IN3);
output_low (IN4);
output_high (IN2);
break;
}
Case 4:
{
output_low (IN1);
output_low (IN2);
output_low (IN4);
output_high (IN3);
break;
}
Case 5:
{
output_low (IN1);
output_low (IN2);
output_low (IN3);
output_high (IN4);
break;
}
flag=0;
}
}
}
adiantando já, será que teria como você me explicar também, como fazer um programinha simples para o pc, para enviar dados pela usb, tipo 5 botões e cada um envia um valor para a usb??
-
ah parte do driver acabei de resolver, tive que reler os posts... Testei no Proteus e funcionou legal, sem modificar isso que você falou.Mas n esperimentei enviar dados do host pro pic.
Vou partir pro Receptor agora.
Será que você poderia dar uma breve explicação do código do recptor como você fez com o transmissor???
O programa está ficando assim:
#include <16f628a.h>
#fuses HS,EC_IO,NOWDT,MCLR,BROWNOUT,NOPROTECT,NOLVP,NOCPD
#use delay (clock = 12000000)
//------------------------------
#define WireTX PIN_B2
#define WireRX PIN_B1 //<-----
//------------------------------
#use rs232(baud=9600,parity=N,xmit=WireTX , rcv=WireRX ,bits=8,ERRORS , STREAM=Wireless)
unsigned int8 data;
int flag=0;
#define IN1 PIN_A0 //Pinos de controle do L293D
#define IN2 PIN_A1
#define IN3 PIN_A2
#define IN4 PIN_A3
#int_rda
void rd_isr(void)
{
disable_interrupts(INT_RDA); // Disable Serial Recieve Interrupt
disable_interrupts(GLOBAL); // Disable Global Interrupts
data= fgetc(Wireless);
if(data=='P')
{
flag=1;
}
if(data=='E')
{
flag=2;
}
if(data=='D')
{
flag=3;
}
if(data=='C')
{
flag=4;
}
if(data=='B')
{
flag=5;
}
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
}
void main()
{
enable_interrupts(int_rda);
enable_interrupts(global);
output_high (PIN_D2);
for(;
{
Switch (flag)
{
Case 1:
{
output_low (IN1);
output_low (IN2);
output_low (IN3);
output_low (IN4);
break;
}
Case 2:
{
output_low (IN2);
output_low (IN3);
output_low (IN4);
output_high (IN1);
break;
}
Case 3:
{
output_low (IN1);
output_low (IN3);
output_low (IN4);
output_high (IN2);
break;
}
Case 4:
{
output_low (IN1);
output_low (IN2);
output_low (IN4);
output_high (IN3);
break;
}
Case 5:
{
output_low (IN1);
output_low (IN2);
output_low (IN3);
output_high (IN4);
break;
}
flag=0;
}
}
}Mas estou com uma dúvida como eu faço pra ele começar a trablhar só quando ele receber inicialmente a string "Felipe "??
Eu vi no outro programa do sensor de temperatura o que você fez mas n entendi muito bem.
-
hum entendi, eu tenho que habilitar as interrupções globais também?
?
Olha como ficou agora:
#include <18f4550.h>
#define WireTX PIN_C6
#define WireRX PIN_C7
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay (clock = 48000000)
#use rs232(baud=9600, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)
#define USB_HID_DEVICE FALSE //Desabilitamos as diretivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 4 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 8 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
#define LED_OK PIN_B6
#define LED_FAIL PIN_B7
#define LED_ON output_high
#define LED_OFF output_low
#define modo recebe[0]
#define param1 recebe[1]
#define param2 recebe[2]
#define param3 recebe[3]
#define param4 recebe[4]
void main(void) {
int8 recebe[5];
LED_OFF(LED_OK); //acendemos o led vermelho
LED_ON(LED_FAIL);
usb_init(); //inicializa a USB
usb_task(); //habilita periférico usb e interrupções
usb_wait_for_enumeration(); //esperamos até que o periférico PicUSB seja configurado pelo host
LED_OFF(LED_FAIL);
LED_ON(LED_OK); //acendemos o led Verde
fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless,"Felipe "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, manda os dados
while (TRUE)
{
if(usb_enumerated()) //Se o PicUSB está configurado
{
if (usb_kbhit(1)) //Se o endpoint de saída contem dados do host
{
usb_get_packet(1, recebe, 5);// Pegamos o pacote do tamanho de 5bytes e o alocamos no recebe
if (modo == 0) // Modo Pan e Tilt
{
if (param1 == 0)
{
fputc('P',Wireless); //Parâmetro Para
delay_ms(20);
}
if (param1 == 1)
{
fputc('E',Wireless); //Parâmetro Esquerda
delay_ms(20);
}
if (param1 == 2)
{
fputc('D',Wireless); //Parâmetro Direita
delay_ms(20);
}
if (param1 == 3)
{
fputc('C',Wireless); //Parâmetro Cima
delay_ms(20);
}
if (param1 == 4)
{
fputc ('B',Wireless); //Parâmetro Baixo
}
}
}
}
}Fui testar ele aparecce o nome na tela do dispositivo que foi conectado, mas pede para instalar o driver, qual driver seria esse???
-
mas qual a diferença, eu ainda n entendi, uma diferença que eu notei foi você ligar e desligar o transmissor. mas pra que?
-
Pronto peguei o seu programa e modifquei algumas coisa, poucas na vdd, agora surgiram novas dúvidas.
1º: como você fez com o descriptor pra gerar o vid e pid, pois com o mikro eu utilizava um programa qe vem com o mesmo pra gerar esse arquivo. E pude notar que no programa você inclui alguns arquivos, que parecem ter relação com isso:
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports2º Estou utilizando um cristal de 8Mhz, nos fusíveis eu teria que trocar o PLL?
3º Ainda nos Fusiveis, não estou utilizando o conversor analogico, eu tenho que retirar o Vregen, ou não tem nada a ver?
Segue o programa abaixo
#include <18f4550.h>
#define WireTX PIN_C6
#define WireRX PIN_C7
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay (clock = 48000000)
#use rs232(baud=9600, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)
#define USB_HID_DEVICE FALSE //Desabilitamos as diretivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 4 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 8 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
#define LED_OK PIN_B6
#define LED_FAIL PIN_B7
#define LED_ON output_high
#define LED_OFF output_low
#define modo recebe[0]
#define param1 recebe[1]
#define param2 recebe[2]
#define param3 recebe[3]
#define param4 recebe[4]
void main(void) {
int8 recebe[5];
LED_OFF(LED_OK); //acendemos o led vermelho
LED_ON(LED_FAIL);
usb_init(); //inicializa a USB
usb_task(); //habilita periférico usb e interrupções
usb_wait_for_enumeration(); //esperamos até que o periférico PicUSB seja configurado pelo host
LED_OFF(LED_FAIL);
LED_ON(LED_OK); //acendemos o led Verde
while (TRUE)
{
if(usb_enumerated()) //Se o PicUSB está configurado
{
if (usb_kbhit(1)) //Se o endpoint de saída contem dados do host
{
usb_get_packet(1, recebe, 5);// Pegamos o pacote do tamanho de 5bytes e o alocamos no recebe
if (modo == 0) // Modo Pan e Tilt
{
if (param1 == 0)
{
fputc('P',Wireless); //Parâmetro Para
delay_ms(20);
}
if (param1 == 1)
{
fputc('E',Wireless); //Parâmetro Esquerda
delay_ms(20);
}
if (param1 == 2)
{
fputc('D',Wireless); //Parâmetro Direita
delay_ms(20);
}
if (param1 == 3)
{
fputc('C',Wireless); //Parâmetro Cima
delay_ms(20);
}
if (param1 == 4)
{
fputc ('B',Wireless); //Parâmetro Baixo
}
}
}
}
}
} -
hum me esclareceu muitas coisas, mas porque você ultiliza o timer, e qual a função do seguinte trecho:
...ERRORS, STREAM=Wireless)
-
Obrigado pelo exemplo do RF, mas como ainda sou leigo no ccs não consegui identificar a diferença de fazer uma comunicação serial e outra que utilize RF. fiquei com algumas dúvidas sobre o programa será que você poderia me explicar?
por exemplo essa parte:
#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)
só entendi a primeira parte sobre a velocidade o resto não compreendi. é uma comunicação serial por software?
2º parte:
qual a função das interrupções nesse caso?
3º parte:
Qual a função da váriavel "flag"?
Desculpe se as perguntas são simplórias, mas é que como estou querendo migrar do mikroc (em que não precisava fazer muita coisa) para o ccs, estou sentindo muitas dificuldades.
-
Matheus estou montando um projeto qe envolve comunicação usb e comunicação RF(serial) no mesmo pic 18f4550, montei um programa em C e a comunicação usb funcionou perfeitamente mas quando chega a hora da comunicação serial não funciona, n sei porque, como uso o mikroc acho este genérico e gostaria de saber quais as configurações do pic eu teria qe ter em antemão pra poder montar o programa, pois no mikroc basta habilitar as bibliotecas e chamalas, mas acho qe esta havendo conflito entre as mesma, mas n consigo descobrir o porque. Quero migrar para o ccs, será que você poderia me dar umas dicas, ou até mesmo me passar algum material???
Grato
-
Como assim segurando o terra, você quer dizer tirar o fio terra que vem da usb do computador do circuito???
Alguem tem alguma sugestão?
Consegui arrumar galera, era um dos fusiveis que eu precisava alterar. valeu pela ajuda de todos agora ta funfando legalzinho.
-
Do mikroc mesmo, pois ele fornece.
-
Mas estou usando o modo HID, e n tenho o driver especifico, pois no meu entendimento o windows faz isso sozinho.
A msg aparece escrito : Dispositivo USB não foi reconhecido. e aparece aqele simbolo do triangulo amarelo com sinal de exclamçao no meio ao lado esquerdo da msg.
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
Ajuda com Interrupção Serial com PIC
em Microcontroladores
Postado
Cara, tentei usar esse seu controle de erro, mas n esta dando certo, ele da muito erro, Tem algum macete pra usar esse controle de erro?