mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC - USART Problem


Autor: Mirco H. (mirq)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include "p18cxxx.h"

/** Configuration
********************************************************/
#pragma config OSC   =   HS     // 4MHz
#pragma config PWRT  =   OFF
#pragma config WDT   =   OFF    // Watchdog Timer
#pragma config LVP   =   OFF    // Low Voltage ICSP


void wait(void);      

int main(void)
{
/** USART Config 
/********************************************************************/
  /* RCSTA */
  RCSTAbits.SPEN  =   1;      // enables single receive
//  RCSTAbits.CREN  =  1;

  /* TXTSA */
  TXSTAbits.TX9   =  0;       // 8 bit
  TXSTAbits.TXEN  =  1;       // transmit enable
  TXSTAbits.SYNC  =  0;       // async
  TXSTAbits.BRGH  =   1;      // high speed


  /* BAUDCON */
  BAUDCONbits.BRG16   =   1;    // 16-bit BRG

  /* SPBRG */
  SPBRG  =   8;           // baud rate is 111.111
  SPBRGH  =   0;          // not necessary

  
/** PORTS Config
/********************************************************************/  
//  TRISC = 0xFF;          // RC6-Tx, RC7-Rx     
  TRISCbits.TRISC6   =  1;
  TRISCbits.TRISC7   =  1;
  

/** MAIN
/********************************************************************/
  
  while(1)
  {
    TXREG  = 0x55;
    while(!TXSTAbits.TRMT );
  }
}

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

Grüße, Mirco

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mirco H. (mirq)
Datum:

Bewertung
0 lesenswert
nicht 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
while(!TXSTAbits.TRMT );

Noch eine Idee?

Grüße, Mirco

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.