mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uart Problem beim PIC 24Fp24fj128ga010


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möchte mit dem Programm den AD-Wert des AD-Wandlers ans Hyper Terminal 
schicken. Dazu hab ich diese Programm geschrieben.

#include "p24fj128ga010.h"

#include "adcDrv2.h"




void InitUart (void)
{
  // Load a value into Baud Rate Generator.  Example is for 9600.
  // See section 19.3.1 of datasheet.
  //  U2BRG = (Fcy/(16*BaudRate))-1
  //  U2BRG = (4M/(16*9600))-1
  //  U2BRG = 25;
  U2BRG = 25;

  U2MODEbits.STSEL = 0;      // 1-stop bit
  U2MODEbits.PDSEL = 0;      // No Parity, 8-data bits
  U2MODEbits.ABAUD = 0;      // Autobaud Disabled

  IEC1bits.U2RXIE = 1;
  IPC7bits.U2RXIP = 1;
  IFS1bits.U2RXIF = 0;

  IPC7bits.U2TXIP    = 0x04;
  IPC7bits.U2RXIP    = 0x04;



  U2MODEbits.UARTEN = 1;  // And turn the peripheral on

  U2STAbits.UTXEN = 1;
}


int main (void)
{

  AD1PCFG = 0xffff;
  TRISA = 0;
  TRISD = 0xff;
  InitUart ();




// Disable Watch Dog Timer
  RCONbits.SWDTEN = 0;

// Peripheral Initialisation
     initAdc1();    // Init the A/D converter to convert Channel 5



    while (1){
   U2TXREG='h';
 U2TXREG='a';  U2TXREG='l';  U2TXREG='l'; U2TXREG='o';
    }

}



der AD-Wandler funktioniert einwandfrei (Hab ihn an den LED´s 
ausgegeben). Zum Testen des Uarts schike ich erst mals nur Buchstaben.

so nun zu meinem Problem wie man im Programmtext lesen kann versuche ich 
ein Hallo ans hyperterminal zu schicken. das Einzigste was dort aber 
ankommt ist ein h und ab und zu ein l zeitweise empfange ich auch nur 
ein i oder andere Zeichen.
Ich denke das es ist ein Problem mit der Baudrate. Weiß aber nicht wie 
ich den Internen Clock einstelle das ich damit meine Baudrate berechen 
kann.

Autor: Stefan R. (kroko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marc,

was hast du in der Config (Fuses) stehen, da stellst du die Taktquelle 
ein.

Ich kann dir nichts genaueres sagen, da ich den C18 Compiler nicht 
verwende und ich die zugehörigen include Files nicht habe.
Jedenfalls heißt der interne Takt FRC.

Mfg Kroko

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   while (1){
>   U2TXREG='h';
> U2TXREG='a';  U2TXREG='l';  U2TXREG='l'; U2TXREG='o';
>    }

du kannst doch nicht sicher stellen, dass du alle Zeichen rausschickst, 
du überschreibst doch die Zeichen im U2TXREG-Register. Du darfst erst 
ein Zeichen rausschicken, wenn das Transmit-Register leer ist.

void uart2Send(unsigned char zeichen)
{
    U2TXREG = zeichen;

    while(U2STAbits.TRMT == 0);
}

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke andi.
das war das problem

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.