PIC24FJ256GB106 UART läuft nicht, bitte um Hilfe?

Gast #1867583
Lesenswert?

Guten Tag

Nachdem ich nun am verzweifeln bin, warum mein UART Programm nicht 
läuft, wende ich mich an euch.

Ich verwende das Starterkit 1 mit dem PIC24FJ256GB106. Dort habe ich 
Pin10 als TX und Pin11 als RX gewählt. Jedoch messe ich beim TX Output 
kein Signal, wenn ich etwas sende.



Hier ist meine UART Initialisierung:


#include "HardwareProfile.h"
#include "UART.h"
#include "p24FJ256GB106.h"
#include "GenericTypeDefs.h"

/*********************************************************************/

void UARTInit(void)
{


    AD1PCFGL = 0xFFFE;

    TRISBbits.TRISB4 = 1;       // PORTB bit 4 is input (1)
    TRISBbits.TRISB5 = 0;       // PORTB bit 5 is output (0)

    #if defined(PIC24FJ256GB106)
  RPINR18bits.U2RXR = 28; // assign RP28 to RX
      RPOR9bits.RP18R = 5;    // assign RP18 to TX
    #endif


    #if defined(__PIC32MX)
    U2BRG = GetPeripheralClock()  4  BAUDRATE - 1;
    #else

    U2BRG = 25;

    #endif
    U2MODE = 0x8800;
    U2STA = 0x0400;


}


/********************************************************************/
void UARTPutChar(BYTE ch)
{

    // Wait for Tx buffer is not full
    while(U2STAbits.UTXBF == 1);
    U2TXREG = ch;
}
/********************************************************************/



Und hier ist der Teil in meinem MAIN wo ich definiere, dass der Wert 6D 
(Entspricht "m") ausgegeben werden soll.

Der Zeitpunkt der Ausgabe wird per USB definiert, wenn 6D von dem USB 
empfangen wird, soll 6D über RS232 weitergegeben werden.

                        case 0x6D:
                        UARTPutByte(0x6D);
                        break;



Wichtig ist sicher, dass meine UART-Initialisierung stimmt. Dabei will 
ich eine Boudrate von 9600 und es soll der Interne Clock zum bilden 
verwendet werden. Muss ich dafür etwas spezielles Setzen? Oder habe ich 
sonst einen Fehler?

Ich freue mich auf eure Antworten.

Grüsse
Gast #1870222
Lesenswert?

Hallo,

Meiner Meinung ist die Initialisierung korrekt wenn dein interner Clock 
4MHz hat.

Falls du den Beispielcode für das "PIC24F Starter Kit" verwendest und 
#define USE_FRC auskommentiert ist verwendet der Controller gemäss 
Kommentar im Code den 12MHz Clock vom PIC18 das heisst interner Clock 
ist 6MHz und das U2BRG Register wäre falsch gesetzt. Korrekt wäre U2BRG 
= 38;

Aber trotz diesem Fehler solltest du mit dem Oszilloskop etwas am Pin 11 
(TX) sehen. (Pin 10 ist Vdd kann nicht TX sein).

Kann deinen Code leider nicht testen weil ich mein Starter Kit nicht zur 
Hand habe.

Viel Glück bei der Fehlersuche.

Gruss Manuel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren