PIC24 UART Initialisierung

Gast #1278080
Lesenswert?

Hallo zusammen.

Ich versuche jetzt schon einige Zeit lang, den UART2 meines 
PIC24FJ128GA010 zum Laufen zu bringen, aber es kommt nichts vernünftiges 
an am PC.

Hab mal den Code dazu gepostet.

Vielleicht kann mir da jemand einen Tipp geben...wäre echt Klasse.

Gruß Thomas
Angehängte Dateien:
Gast #1283717
Lesenswert?

> Das PPS brauch ich nur, wenn ich einen PIC habe, wo ich die Pins frei
> zuweisen kann oder?
Stimmt, bei Deinem PIC entfällt das.

> Es kommt am Terminal nur <0> an, als wäre
> die Baudrate falsch.
USART-Config sieht ganz brauchbar aus. Aber da ich das Hauptprogramm 
nicht kenne ist nicht auszuschließen, dass noch ein dicker Hund in der 
Clock-Config sitzt. Sicher, dass der PIC mit der Frequenz tickt, mit der 
Du denkst, dass er tickt?

Du könntest auch mal den Wert für den Baudratenregister von Hand 
ausrechnen und einsetzen. Sicher, dass die Terminaleinstellungen zu den 
Einstellungen des PIC passen?
Gast #1284353
Lesenswert?

also im Main hab ich lediglich den Aufruf von UART_Init(BR_9600) und 
wenn ich dann zB. einen Char, zB 'a' mit UART_PutChar('a') senden will, 
dann kommt am Terminal nur "<0>" an. Hab aber sicher die Baud auf 9600, 
8bits, 1 stopbit, keine parität,... gestellt. Hatte auch mal probiert, 
einen char direkt in das Senderegister der UART zu stellen...selbes 
Ergebnis.

ich verwende das Explorer 16 Boad von Microchip in Verbindung mit dem 
PICTail Plus Daughter Board 2 (Touchscreen). Und im Schaltplan ist auch 
ein 8MHz Quarz eingezeichnet.

Kann der Systemclock trotzdem noch anders sein dann?

Habe das ICD 2, aber mit dem sehe ich leider nicht die Werte der 
Register, wenn ich debugge. Hatte den Wert auch schon mal ausgerechnet 
und eingesetzt->selbes Ergebnis. War glaub ich für eine Baud von 9600 
51.

Danke!
Gast #1284407
Lesenswert?

Ich habe die Initialisierung so umgesetzt:
1
RPINR18bits.U1RXR = 9;  // Make Pin RP9 U1RX
2
RPOR4bits.RP8R = 3;    // Make Pin RP8 U1TX
3

4
U1BRG  = BRGVAL;
5
U1MODE = 0x8000;     // Reset UART to 8-n-1, alt pins, and enable 
6
U1STA  = 0x0440;     // Reset status register and enable TX & RX
7
  
8
IEC0bits.U1RXIE = 1;  // Receive interrupt enable
9

10
_U1RXIF=0;        // Clear UART RX Interrupt Flag


1
/***** Defines *****/
2
#define XTFREQ          7372800             //On-board Crystal frequency
3
#define PLLMODE         1                   //On-chip PLL setting
4
#define FCY             XTFREQ*PLLMODE          //Instruction Cycle Frequency
5

6
#define BAUDRATE         9600       
7
#define BRGVAL          ((FCY/2/BAUDRATE)/16)-1 
8
/*******************/
Gast #1284436
Lesenswert?

> Fehler gefunden:
> Da muss bei dir noch ein /2 rein !

Hmm, möglich. Aber wir wissen immer noch nicht, mit welcher Frequenz die 
System Clock arbeitet.

Wie sehen Deine Config-Words aus?
Schau mal im Kapitel 7 vom Datasheet. Dort siehst Du, dass ein 8 MHz 
Quarz noch laaaange nicht bedeutet, dass der PIC dann auch mit 8 MHz 
arbeitet.
Ist die PLL aktiviert?
Ist der Postscaler != 1:1?
Verwendest Du überhaupt den externen OSC???
Gast #1285240
Lesenswert?

Hatte auch USART-Probleme bei mir war es folgendes:

Pic hält externen Osci_Extern für 48MHz und nicht für 20MHz -> PLL 
richtig einstellen

Am besten nimm dir nen Osziloskop und schau nach :) hat bei mir wunder 
bewirkt
Gast #1285738
Lesenswert?

so ich hab mir das Programm nochmals genau angesehen(basiert ja auf 
einen Musterprogramm von Microchip, wo die ganze Grafik Library schon 
eingebunden ist) und da hab ich folgendes define:
#define  GetSystemClock()            (32000000ul)         // 8 MHz x 4 
PLL
#define  GetPeripheralClock()    (GetSystemClock()/2)
#define  GetInstructionClock()    (GetSystemClock()/2)

also läuft der µC doch mit mehr Takt intern....jedoch, auch wenn ich bei 
meinem UART.h die Taktfrequenz auf 16MHz stelle, weil es ja der halbe 
Systemtakt ist, kommt das selbe an.
Gast #1285766
Lesenswert?

> also läuft der µC doch mit mehr Takt intern
War zu erwarten.

> Wie sehen Deine Config-Words aus?
Ich frage das nicht noch einmal.
Da beim Hyperterminal ja bereits etwas ankommt, liegt es mit höchster 
Wahrscheinlichkeit an einer falschen Takteinstellung. Wenn Du Dich aber 
nicht zu den Config-Words äußerst, können wir uns hier gerne noch ein 
paar Tage im Kreis drehen.

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