collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: PIC24FJ64GA002 UART não quer falar comigo  (Lida 11190 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
PIC24FJ64GA002 UART não quer falar comigo
« em: 18 de Agosto de 2013, 17:35 »
Boas tardes, visto que eu e PIC's nunca corre bem quanto tento brincar com eles, ando já á uns quantos dias a tentar meter a UART de um PIC24FJ64GA002 a funcionar, mas após seguir este tutorial, ler muitos posts no forum da Microchip, ler as datasheets um monte de vezes, o chip para a execução.
Para saber que ele deixa de correr o código, estou a fazer toogle a um pino, assim que meto lá o UartPut o pino fica high e de lá nunca mais desce.
O código é este:

Código: [Seleccione]
/*
 * File:   main.c
 * Author: tiago
 *
 * Created on 31 de Julho de 2013, 2:52
 */

#include <stdio.h>
#include <stdlib.h>
#include <p24FJ64GA002.h>
#include <xc.h>

// CONFIG2
#pragma config POSCMOD = HS             // Primary Oscillator Select (HS Oscillator mode selected)
#pragma config I2C1SEL = PRI            // I2C1 Pin Location Select (Use default SCL1/SDA1 pins)
#pragma config IOL1WAY = ON             // IOLOCK Protection (Once IOLOCK is set, cannot be changed)
#pragma config OSCIOFNC = OFF            // Primary Oscillator Output Function (OSC2/CLKO/RC15 functions as port I/O (RC15))
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Clock switching and Fail-Safe Clock Monitor are disabled)
#pragma config FNOSC = PRI           // Oscillator Select (Primary Oscillator with PLL module (HSPLL, ECPLL))
#pragma config SOSCSEL = SOSC           // Sec Oscillator Select (Default Secondary Oscillator (SOSC))
#pragma config WUTSEL = LEG             // Wake-up timer Select (Legacy Wake-up Timer)
#pragma config IESO = ON                // Internal External Switch Over Mode (IESO mode (Two-Speed Start-up) enabled)

// CONFIG1
#pragma config WDTPS = PS32768          // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA = PR128            // WDT Prescaler (Prescaler ratio of 1:128)
#pragma config WINDIS = ON              // Watchdog Timer Window (Standard Watchdog Timer enabled,(Windowed-mode is disabled))
#pragma config FWDTEN = OFF             // Watchdog Timer Enable (Watchdog Timer is disabled)
#pragma config ICS = PGx1               // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1)
#pragma config GWRP = OFF               // General Code Segment Write Protect (Writes to program memory are allowed)
#pragma config GCP = OFF                // General Code Segment Code Protect (Code protection is disabled)
#pragma config JTAGEN = ON              // JTAG Port Enable (JTAG port is enabled)

void init(void);
void UART1PutChar(char Ch);
char UART1GetChar(void);

int main(int argc, char** argv) {

    init();

    while(1){
        PORTBbits.RB15 = 0;  //Toogle RB15
        PORTBbits.RB15 = 1;
        UART1PutChar('U');
    }

    return (EXIT_SUCCESS);
}

void init(void){

    AD1PCFG = 0xFFFF;

     /* OSCCONbits.COSC = 0b010;
    OSCCONbits.NOSC = 0b010;
    CLKDIVbits.DOZE = 0b001;    //Clock is 16Mhz * 4 / 2
    CLKDIVbits.DOZEN = 0;       //Enable DOZE divider*/

    RPINR18bits.U1RXR = 2;     //Uart RX set to pin RB2
    RPOR1bits.RP2R  = 3;       //UART1 transmit set to RB3
    U1BRG = 25;                 //Baud rate set for 38400
    //U1STA = 0x8400; //set interrupts
    U1STAbits.URXISEL0 = 0;
    U1STAbits.URXISEL1 = 1;
    U1MODEbits.RTSMD = 1;   //UART in simplex mode
    U1STAbits.UTXEN = 1; //Enable uart control of the pins, really?? how many enables does this crap need?
    U1MODEbits.UARTEN = 1;      //Enable the UART module
    //reset RX interrupt flag
    IFS0bits.U1RXIF = 0;

    TRISBbits.TRISB15 = 0;  //Set RB15 as output
    TRISBbits.TRISB3 = 0;   //Set RB3 as output
    TRISBbits.TRISB2 = 1;   //Set RB2 as input
}

//UART transmit function, parameter Ch is the character to send
void UART1PutChar(char Ch){
   //transmit ONLY if TX buffer is empty
   while(U1STAbits.UTXBF == 1);
   U1TXREG = Ch;
}

//UART receive function, returns the value received.
char UART1GetChar(void){
   char Temp;
   //wait for buffer to fill up, wait for interrupt
   while(IFS0bits.U1RXIF == 0);
   Temp = U1RXREG;
   //reset interrupt
   IFS0bits.U1RXIF = 0;
   //return my received byte
   return Temp;
}

Alguma ideia de como meter isto a funcionar?
Avr fanboy

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #1 em: 18 de Agosto de 2013, 18:40 »
Fósnix, antes um MSP430... Parece que vais ter que mudar a tua assinatura, agora que já tocaste num PIC, there's no way back, já tás conspurcado, lol

Quanto ao teu problema não faço ideia... não há nenhum exemplo já feito a ver se funciona e para comparar?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #2 em: 18 de Agosto de 2013, 18:53 »
É que eu comprei um pickit3 já á coisa de 2 anos e custa-me ter um pisa-papeis de 50€ lol, e pedi uns samples, já tive o IDE da Microchip instalado meia duzia de vezes, peguei nisto porque vou forçosamente usar PIC's na universidade, mas sempre que pego nisto ou acabo por dar com um bug estupido no compilador, bug no IDE, ou estas coisas de o chip nunca falar comigo, estou quase a desinstalar novamente esta treta toda e enfiar tudo no lixo..
Tenho cá uns MSP430 tenho, e cada vez mais acredito que é avr's para o low cost, e stm32f4 para a brutidade e não há cá andar com estes chips manhosos de 16 bits..
Avr fanboy

Offline Hugu

  • Mini Robot
  • *
  • Mensagens: 5.602
  • Keyboard not found. Press any key to continue.
    • [url=www.g7electronica.net]G7 Electrónica.net[/url]
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #3 em: 18 de Agosto de 2013, 19:58 »
tb podias ter feito a troca que se tinha mandado prá fabrica trocar! tb foi burrice tua deixares e aceitares o pickit assim co o recebeste!..  ???

Posso tentar fazer a devoluçao e pedir a troca do programador...acho que foi à mouser que o comprei.. se tiveres a caixa ou o plastico ainda com os codigos deles acho que devem-no trocar na boa.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #4 em: 18 de Agosto de 2013, 20:21 »
Já o troquei á muito tempo, está a funcionar perfeiramente, lê lá o tópico todo e volta a pensar na resposta.
Avr fanboy

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #5 em: 18 de Agosto de 2013, 20:36 »
Nunca programei essas PICs, mas achei estranho: não tens de definir o tristate dos portos antes de dar o enable à UART?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #6 em: 18 de Agosto de 2013, 20:43 »
Isto?
TRISBbits.TRISB15 = 0;  //Set RB15 as output
TRISBbits.TRISB3 = 0;   //Set RB3 as output
TRISBbits.TRISB2 = 1;   //Set RB2 as input

Como é tipico nem nos foruns da microchip arranjo solução, coisas esquesitas que só me acontecem quando pego em PIC's lol.
Avr fanboy

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #7 em: 18 de Agosto de 2013, 20:48 »
Sim, isso. :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #8 em: 18 de Agosto de 2013, 20:55 »
Já está lá na parte do init..
Avr fanboy

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #9 em: 18 de Agosto de 2013, 21:02 »
Eu vi que estão no init(), mas está DEPOIS de atribuires os portos à UART e dares o respectivo enable. ;)



Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #10 em: 18 de Agosto de 2013, 21:06 »
Mas não faço nada com a uart antes disso?
Se fizer diferença a ordem do TRIS deixo mesmo de usar pic's, isso é simplesmente estupido..
Avr fanboy

Offline gadelhas

  • Mini Robot
  • *
  • Mensagens: 48
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #11 em: 18 de Agosto de 2013, 21:40 »
Ecomo é que sabes que nunca desce? Estás a ver com um osciloscopio?
Pergunto isto porque se não tiveres uns delays entre o High e o Low desse pino, visualmente não vais saber se ele desliga ou não!

    while(1){
        PORTBbits.RB15 = 0;  //Toogle RB15
        PORTBbits.RB15 = 1;
        UART1PutChar('U');
    }


Obrigado.

Abraço
gadelhas

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #12 em: 18 de Agosto de 2013, 21:50 »
Osciloscópio sim, sem o Putchar faz uma onda quadrada, com ele, passa de low para high e ai fica até lhe mandar um reset.
Avr fanboy

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #13 em: 18 de Agosto de 2013, 21:56 »
Ve la se o anexo te ajuda.

Offline gadelhas

  • Mini Robot
  • *
  • Mensagens: 48
Re: PIC24FJ64GA002 UART não quer falar comigo
« Responder #14 em: 18 de Agosto de 2013, 22:04 »
Não tenho aqui nenhum PIC24, só PIC32, mas experimenta isto

UART1PutChar(1);
Obrigado.

Abraço
gadelhas