mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART mit 250kBaud


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich hab heut den ganzen lieben langen Tag alles versucht um bei meinem
AT89C51RC eine Baudrate von 250k über die UART raus zu bekommen, bei 
einer Fosc von 16MHz.
und ich bin kläglich gescheitert.
Ich hab so ziemlich alles versucht, hab mich durch atmel.com gewühlt hab 
datenblätter studiert hab dieses forum durchwühlt hab google gefragt 
alles was mir eingefallen ist hab ich versucht; OHNE ERFOLG
ich bin grad echt am verzweifeln.

mein vorgehen war bisher so dass ich versuche mit Timer1 die Baudrate zu 
definieren. aber der höchste Wert den ich bisher geschafft habe waren 
83kBaud
(gemessene 12us pro Bit)
und ich brauche 4us pro Bit

meine UART INIT sieht folgendermaßen aus:

void InitSerial(void)
{
  ET1 = 0;    /* TIMER1 INT DISABLE */
  TMOD = 0x20;
  PCON |= 0x80;           /* Double UART Frequenzy*/

  TH1 = 0xFF;    /* X2(SMOD=1) at 16 MHZ */

  TR1 = 1;    /* START THE TIMER1 */
  SCON = 0x52;    /* SERIAL MODE 1, REN=1, TI=1, RI=0 */

  /* Interrupt */
  ES   = 0;     /* Serial interrupt disable */
  RI   = 0;
  TI   = 0;
  while(TI && RI);
}

außerde setzte ich das X2 Bit für die doppelte Systemtaktrate
CKCON = 0x01;     // X2 Mode



Is wirklich nicht mehr drin oder mach ich einfach was grundlegendes 
falsch??
es wäre echt super toll wenn mir wer sagen könnte wo mein fehler ist 
oder mir einfach mal ne RICHTIGE Init zeigen könnte^.^

schon jetzt danke für eure Mühen
Stefan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt T2 nehmen.


Peter

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Des hab ich heut schon mehrfach vermutet, aber ich kann mir nicht 
erklären warum es mit Timer2 gehen soll.
Hat Timer 2 keinen Fosc Prescaler so wie Timer 1?

Autor: die ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dann noch Faktor 3....

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnellen Antworten,
hab mich jetzt nochmal 1,5h hingesetzt und des ganze in Ruhe mal mit 
Timer 2 am Papier entwickelt. und ich glaube auf eine brauchbare lösung 
gekommen zu sein.
sollte alles stimmen und ich es zum laufen bringen werd ich meine 
UART_init() posten für alle die das dann noch wissen wollen g

dankeschön

Stefan

Autor: Michael Werner (michelw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
willst Du DMX empfangen oder senden?

SERINIT:
  MOV SCON,#10011000B  ;MODUS 2 9BIT-UART TB8=1
  MOV PCON,#64    ;TEILER DURCH 64 FUER 250K-BAUD
  SETB ES      ;SERIELLEN INT FREIGEBEN

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.