Ir ao conteúdo
  • Cadastre-se

felipeetec

Membro Pleno
  • Posts

    191
  • Cadastrado em

  • Última visita

posts postados por felipeetec

  1. 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.

  2. 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??

  3. 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.

  4. 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???

  5. 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 reports

    2º 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
    }
    }
    }
    }
    }
    }

  6. 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.

  7. 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

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!