mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART funktioniert nicht so recht


Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich habe eben gerade die UART Library von P Fleury getestet, welche bei 
mir nicht so ganz richtig funktioniert. UART habe ich schon davor ohne 
Library erfolgreich geschaft. Ich benutze einen Atmega8 mit 11,05975 
oder so MHZ.
Baudrate ist 9600.


Ich bekomme mit HpyerTerminal nicht sofort einen String, sondern erst 
nach 30 sek und der angekommene String wird in "merkwürdigen" Zeichen 
dargestellt. Ich benutze bei diesem Beispiel Interrupts. Muss ich davor 
mit diesen Interrupts noch was speziell einstellen ?

Woran könnte das liegen ?

Das ist mein Code:
/* *****************************************************

       Beispiel für die UART Library von Peter F.


***************************************************** */

#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>


#include "uart.h"


#define UART_BAUD_RATE      9600     


int main(void)
{
  unsigned int c;
  
  
  
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
  
  //enable INTERRUPT
  sei();
  
     
  uart_puts("String stored in SRAM\n");
  
  for(;;)
    {
   c = uart_getc();
  uart_puts_P("Hallo x86\n");
   if ( c & UART_NO_DATA )
   {
    // Keine Daten verfügbar
   }
  else
   {
    // Daten verfügbar...
    if ( c & UART_FRAME_ERROR )
      {
        uart_puts_P("UART Frame Error: ");
      }
    if ( c & UART_OVERRUN_ERROR )
      {
        uart_puts_P("UART Overrun Error: ");
            }
           //
            uart_putc( (unsigned char)c );
   }
    }
}
    


Danke !

grüße,
peter

Autor: JÜrgen Grieshofer (Firma: 4CKnowLedge) (psicom) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin mir nicht sicher wie das mit \n ist...

Versuch mal das rauszunehmen...


Od. wie siehts mit der binären Null aus? Ist die in uart_puts_P drinnen?

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...das hört sich nach nicht passender Baudrate an.

Ist F_CPU im Makefile richtig gesetzt?
Hast Du ein Oszilloskop zur Verfügung, um mal die Baudrate zu 
kontrollieren?

Autor: name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, im MakeFile ist: F_CPU = 11059200
Den hab ich auch drin... habe mich "oben" falsche genannt, weil ich den 
genauen Wert nicht wusste... Baudrate ist 9600... wie gesagt mit diesem 
MakeFile hat es davor mit UART per Hand, also ohne Library funktioniert.
Ich brauche diese Interrupts, weil ich einen Schrittmotor über den PC 
steuern will und dem Programm im Atmega8 per UART die Anzahl der 
Schritte und Drehrichtung übergeben möchte....


Danke !

Muss jetzt los zur Schule :P....

Schönes Wochenende

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand eventuell einen anderen Rat ?

Mir fällt da nichts mehr ein.


Danke !

gruß,

peter

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.