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
> aber es kommt nichts vernünftiges an am PC. sondern? Hast Du das PPS korrekt eingestellt? Was für ein PIC24 ist das?
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?
bin auch gerade am testen eines pic24f projects uart soll diese woche noch laufen! aber ich hab probleme mit meinem header board
> 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?
@harry: > aber ich hab probleme mit meinem header board Das tut mir Leid. > uart soll diese woche noch laufen! Viel Glück!
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!
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 | /*******************/
|
Fehler gefunden: #define BRGVAL ((FCY/2/BAUDRATE)/16)-1 UBRRVAL = (F_CPU/(9600L*16L)-1); Da muss bei dir noch ein /2 rein !
> 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???
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
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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.