Forum: Mikrocontroller und Digitale Elektronik PIC - USART Problem


von Mirco H. (mirq)


Lesenswert?

Hallo,

ich habe Probleme beim Senden vom PIC18F4520 an den PC über die serielle 
Schnittstelle.
Beim Debuggen habe ich festgestellt, dass das Bit TRMT nicht wieder auf 
1 gesetzt wird, das Senderegister also immer voll ist. Folglich sende 
ich wohl nicht...

hier mein code:
1
#include "p18cxxx.h"
2
3
/** Configuration
4
********************************************************/
5
#pragma config OSC   =   HS     // 4MHz
6
#pragma config PWRT  =   OFF
7
#pragma config WDT   =   OFF    // Watchdog Timer
8
#pragma config LVP   =   OFF    // Low Voltage ICSP
9
10
11
void wait(void);      
12
13
int main(void)
14
{
15
/** USART Config 
16
/********************************************************************/
17
  /* RCSTA */
18
  RCSTAbits.SPEN  =   1;      // enables single receive
19
//  RCSTAbits.CREN  =  1;
20
21
  /* TXTSA */
22
  TXSTAbits.TX9   =  0;       // 8 bit
23
  TXSTAbits.TXEN  =  1;       // transmit enable
24
  TXSTAbits.SYNC  =  0;       // async
25
  TXSTAbits.BRGH  =   1;      // high speed
26
27
28
  /* BAUDCON */
29
  BAUDCONbits.BRG16   =   1;    // 16-bit BRG
30
31
  /* SPBRG */
32
  SPBRG  =   8;           // baud rate is 111.111
33
  SPBRGH  =   0;          // not necessary
34
35
  
36
/** PORTS Config
37
/********************************************************************/  
38
//  TRISC = 0xFF;          // RC6-Tx, RC7-Rx     
39
  TRISCbits.TRISC6   =  1;
40
  TRISCbits.TRISC7   =  1;
41
  
42
43
/** MAIN
44
/********************************************************************/
45
  
46
  while(1)
47
  {
48
    TXREG  = 0x55;
49
    while(!TXSTAbits.TRMT );
50
  }
51
}

Im Hyperterminal habe ich 115200 als Baud-Rate; keine FS.
Seht ihr den Fehler?

Grüße, Mirco

von sven (Gast)


Lesenswert?

Laut Datenblatt hast du mit diesen Einstellungen eine Abweichung von 
-3,55%. Das wäre mir zu hoch. Versuch doch mal mit 19k2 zu senden 
(SPBRG=51). Eventuell liegt da ja schon der Fehler. Betreibst du denn 
den PIC auch mit 4MHz oder steht das nur im Programm?

Sven

von Mirco H. (mirq)


Lesenswert?

Hab grad mal ein Oszi angeschlossen. Demnach liegen an RA7 saubere 4MHz 
und RC7 überträgt kontinuierlich das eigentlich richtige Signal 
(Startbit, 0x55, 2 Stopbits). Hab die Rate auf 9k6 umgestellt, da hab 
ich laut Datenblatt eine Abweichung von 0.16%

Aber TRMT wird im Debug-Mode immernoch nicht zurückgesetzt und im 
Hyperterminal erhalte ich im Flash-Mode auch nicht das erwartete "U" 
sondern ein komisches Sonderzeichen..

Also wenn ich Debugge hänge ich in der Zeile
1
while(!TXSTAbits.TRMT );

Noch eine Idee?

Grüße, Mirco

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.