www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART beim Atmega48


Autor: Steven Wetzel (steven)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich suche ein funktionierendes und verifiziertes Beispiel zur 
Ansteuerung der UART des Atmega48/88.  Mangels eines Oszis bzw. eines 
Logianalyzers weiß ich nicht, was der Atmega macht. Ein String wird als 
Wirrwar im Terminal angezeigt, ein einzelnes Zeichen wird erst gar nicht 
dargestellt.

Das Beispiel für gcc
#include <avr/io.h>

int main(void) {

    UCSR0B |= 1<<TXEN0;
    UCSR0C = 3<<UCSZ00;  // 8n1
    UBRR0H = 0;
    UBRR0L = 47;    //9600 Baud
  
    while (!(UCSR0A & (1<<UDRE0)))
    UDR0 = 'A';
    while(1);
}

Autor: Michael K. (mmike)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steven,

anbei der Code. Hauptprogramm könnte so aussehen:

#include <avr/io.h>
#include <inttypes.h>
#include "m_usart88.h"

int main ()
{
  uart_init ();

  for (;;)
  {
    uart_putc ('A');

    warte_ein_bisschen ();
  }
}

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm. Datenbits und Stopbit richtig gesetzt ? (Eingestellt in meinem 
Orginal - Code ist 8N1)
Wie sieht Deine Hardware Verschaltung aus ?

Michael

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwendest Du den internen RC-Oszillator? Dann könnte das beschreiben 
des OSCCAL-Registers helfen.

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal Deinen kompletten Code bzw. den Teil mit dem RS232, 
vielleicht seh' ich ja was ...
Ansonsten, welchen Wandler benutzt Du ? Max232 - Serie ?

Mike

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich verwende für die Hardware einen USB<->RS232-Wandler, wobei es eine
>Direktverbindung zw. Atmega und Wandler-IC gibt.

Du scheinst ein USB-Puffer-Problem zu haben.

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ist da der Chip oder der Treiber da Problem?

Vermutlich kannst du die Puffergrösse irgendwo einstellen.
USB überträgt immer Datenrahmen einer bestimmten Grösse (welche, weiß 
ich gerade nicht...). Einer von beiden (Chip oder Treiber) sammelt 
scheinbar erst mal die Daten und überträgt dann den kompletten Block.

>Du scheinst ein USB-Puffer-Problem zu haben.
... ist einfach nur eine Vermutung aufgrund diverser Posts zu dem Thema.

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.