Forum: Mikrocontroller und Digitale Elektronik PIC24 UART Initialisierung


von Thomas O. (Gast)


Angehängte Dateien:

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

von Thomas O. (Gast)


Angehängte Dateien:

Lesenswert?

Und hier der Header dazu.

von Thomas O. (Gast)


Lesenswert?

Hat da keiner Ahnung davon??

von Zwirbeljupp (Gast)


Lesenswert?

> aber es kommt nichts vernünftiges an am PC.
sondern?

Hast Du das PPS korrekt eingestellt?
Was für ein PIC24 ist das?

von Thomas O. (Gast)


Lesenswert?

danke für deine Antwort.
Es ist ein PIC24FJ128GA010. Es kommt am Terminal nur <0> an, als wäre 
die Baudrate falsch.

Das PPS brauch ich nur, wenn ich einen PIC habe, wo ich die Pins frei 
zuweisen kann oder?

von Thomas O. (Gast)


Lesenswert?

Kann mir da noch immer keiner weiter helfen???
Wäre echt wichtig.

von harry (Gast)


Lesenswert?

bin auch gerade am testen eines pic24f projects
uart soll diese woche noch laufen!

aber ich hab probleme mit meinem header board

von Zwirbeljupp (Gast)


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?

von Zwirbeljupp (Gast)


Lesenswert?

@harry:
> aber ich hab probleme mit meinem header board
Das tut mir Leid.

> uart soll diese woche noch laufen!
Viel Glück!

von Thomas O. (Gast)


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!

von MichiB (Gast)


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
/*******************/

von MichiB (Gast)


Lesenswert?

ist allerdings für die UART1 !!!

von MichiB (Gast)


Lesenswert?

Fehler gefunden:

#define BRGVAL          ((FCY/2/BAUDRATE)/16)-1


UBRRVAL = (F_CPU/(9600L*16L)-1);

Da muss bei dir noch ein /2 rein !

von Zwirbeljupp (Gast)


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

von Steff (Gast)


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

von Thomas O. (Gast)


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.

von Zwirbeljupp (Gast)


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.

von Thomas O. (Gast)


Lesenswert?

meinst du diese hier? für die PLL

_CONFIG2(FNOSC_PRIPLL & POSCMOD_XT) // Primary XT OSC with PLL
_CONFIG1(JTAGEN_OFF & FWDTEN_OFF)   // JTAG off, watchdog timer off

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.