mikrocontroller.net

Forum: Compiler & IDEs USART1 m644P sendet überhaupt keine Daten


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
an der Hardware liegt es definitiv nicht da ich mit der Library von 
peter erfolgreich senden kann.
Jetzt will ich aber das ganze nicht interruptgesteuert machen sondern 
durch polling.
Also habe ich mir eigen Routinen zusammengestellt, wobei das meiste aus 
dem datenblatt besteht.
void USART1_Init( unsigned int baud )
{
  /* Set baud rate */
  UBRR1H = (unsigned char)(baud>>8);
  UBRR1L = (unsigned char)baud;

  /* Enable receiver and transmitter */
  UCSR1B = (1<<RXEN1)|(1<<TXEN1);

  /* Set frame format: 8data, 1stop bit */
  UCSR1C = (3<<UCSZ10);

  /* Set Uart Mode to Ansynchronous Mode*/
  UCSR1C &=~ ( (UMSEL10) | (1<<UMSEL11) );
}
void USART1_Transmit( unsigned char data )
{
  /* Wait for empty transmit buffer */
  while ( !( UCSR1A & (1<<UDRE1)) && !cancel_mode);

  /* Put data into buffer, sends the data */
  UDR1 = data;
}

unsigned char USART1_Receive( void )
{
  /* Wait for data to be received */
  while ( !(UCSR1A & (1<<RXC1)) && !cancel_mode);

  /* Get and return received data from buffer */
  return UDR1;
}

Problem: Senden und Empfangen funktioniert nicht, das bedeutet ich 
bekomme am PC überhaupt nichts zu sehen.
Ich beutze als Terminalprogramm das Hercules.

Die Baudrate ist 9600 und auch beim PC eingestellt.

Es dürfte an SW eig nichts mehr fehlen, meiner Meinung nach, denn 
Baudrate, Modus, RXEN und TXEN sind enabled und ja.

Die Peter Fleury Lib ist noch inkludiert da ich sie für die 2te UART 
brauche.
Kann es vielleicht an dem liegen?

lg andy

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UCSR1C &=~ ( (UMSEL10) | (1<<UMSEL11) );
Schau dir die Zeile noch mal ganz genau an.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke mal dafür, bin aber draufgekommen, dass die sowieso 0 sind.

Hab das jetzt soweit dass es was sendet und bekomme statt ein großes A 
ein kleines ü
void USART1_Init( unsigned int baud )
{
  int baud_UB;

  /* Set baud rate */
  baud_UB =(F_CPU/(baud*16)-1);
  UBRR1H= (unsigned char)baud_UB>>8;
  UBRR1L=(unsigned char) baud_UB;

  /* Set Uart Mode to Ansynchronous Mode*/
  UCSR1C &=~ ( (1<<UMSEL10) | (1<<UMSEL11) );

  /* Enable receiver and transmitter */
  UCSR1B = (1<<RXEN1)|(1<<TXEN1);

  /* Set frame format: 8data, 1stop bit */
  UCSR1C |= (1<<UCSZ11) | (1<<UCSZ10);

  /* Speed: Normal Speed */
  UCSR1A |= (1<<U2X1);
}

lg nady

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, baud_UB muss natürlich unsigned int sein, jedoch passiert immernoch 
das selbe.

Was sagt eigentlich das UL aus nach einer Zahl?
Einer hat z.B. im Netz folgendes stehen:
baudDiv=(f_osc/(baudRate*16UL)-1); 

lg andy

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wäre nett wenn mir einer zumindest einen Tipp geben könnte sowie 
Stefan, daran lag es aber trotzdem nicht.
Ich bekomme jetzt nur noch echte Divisionszeichen (Modulo Zeichen)

Was mache ich denn falsch?
void USART1_Init( unsigned int baud )
{
  /* Set baud rate */
  UBRR1 = ((F_CPU/baud)/16l)-1;

  /* Set Uart Mode to Ansynchronous Mode*/
  UCSR1C &=~ ( (1<<UMSEL10) | (1<<UMSEL11) );

  /* Enable receiver and transmitter */
  UCSR1B = (1<<RXEN1)|(1<<TXEN1);

  /* Set frame format: 8data, 1stop bit */
  UCSR1C |= (1<<UCSZ11) | (1<<UCSZ10);

  /* Speed: Normal Speed */
  UCSR1A |= (1<<U2X1);
}

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  /* Speed: Normal Speed */
>  UCSR1A |= (1<<U2X1);

Hmm. Das Bit bzw. die Zeile hat nicht die Bedeutung im Kommentar.

Die ganze UBRR1 Berechung kannst du beim Debuggen als Fehlerursache 
ausschliessen, wenn du einfach für deine Taktrate und Baudrate die Werte 
aus der Tabelle im Datenblatt nimmst.

BTW. im Datenblatt stehen auch Beispielroutinen.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt funktionierts dankeeeeeee!!
Eswar das eine genannte Bit von dir!

lg andy

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.