www.mikrocontroller.net

Forum: Compiler & IDEs UART ATmega16 von Peter Fleury


Autor: El (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich habe mir die uart libary von Peter Fleury 
http://homepage.hispeed.ch/peterfleury/avr-softwar...
runtergeladen und versuche nun eine Verbindung zwischen PC un uC 
aufzubauen.
Dazu benutzte ich das Codebeispiel von Fleury. Aber es will einfach 
nicht klappen!!
Verwende STK500 mit 3.68 Mhz internem clock.
Der PC sendet ein Zeichen und bekommt ein völlig falsches Zeichen 
zurück.
Ab und zu kommen auch fehlerhafte Packete zurück. Ich verwende HTerm auf 
dem PC.
Einstellung: 9600 Baud, Data 8 , Stop 1, Parity none, CTS Flow control 
keine

Die Baudrate sollte stimmen und das UBRR Register habe ich im Simulator 
überprüft : 23

Ich habe schon den Code durchgeforstet und überprüft, was der uC alles 
ausführt.

Das ist der init Abschnitt der er ausführt für den ATmega16:

void uart_init(unsigned int baudrate)
{
    UART_TxHead = 0;
    UART_TxTail = 0;
    UART_RxHead = 0;
    UART_RxTail = 0;

#elif defined (ATMEGA_USART)
    /* Set baud rate */
    if ( baudrate & 0x8000 )
    {
       UART0_STATUS = (1<<U2X);  //Enable 2x speed
       baudrate &= ~0x8000;
    }
    UBRRH = (unsigned char)(baudrate>>8);
    UBRRL = (unsigned char) baudrate;

    /* Enable USART receiver and transmitter and receive complete 
interrupt    */

    UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);

    /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
   UCSRC = (1<<URSEL)|(3<<UCSZ0);



Weis nicht mehr weiter. Hat das vieleicht scho jemand gemacht? ober 
sieht den Fehler.

Gruss
El

Autor: Ulrich Spizig (uli)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi El,


Schau doch einfach mal ins Datenblatt des Mega 16. Die Beispiele zu UART 
sind sehr gut,leicht verständlich und vor allen Dingen sie 
funktionieren.

Gut... Fehler die man sofort erkennt. Du sprichst von einem internen 
Takt.
Beim MEGA16 mit STK 500 kannst du den Takt entweder vom STK 500 erzeugen 
lassen oder vom Mikrokontroller.
Werkseinstellungen beim Mega 16 ist ein selbst erzeugter internen 
Takt(nicht STK 500). Dieser ist aber "relativ" ungenau und für RS232 
Anwendungen solltest du über einen externen Quarz nachdenken.(Fuses 
Einstellungen nicht vergessen... und STK500 Jumper umstecken.)


Gruß

Uli

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Verwende STK500 mit 3.68 Mhz internem clock

Das glaub ich nicht!

STK500 glaub ich dir.
Ich glaub dir auch entweder 'interner clock' oder '3.68Mhz'
Aber '3.68Mhz interner Clock' glaub ich dir nicht.

Beachte: die Angabe der Taktfrequenz im Programm hat für
den Compiler informativen Charakter. Es ist nicht so, dass
du ins Programm 3.68 Mhz reinschreibst und dann läuft der
Prozessor auch so schnell. Es ist deine Aufgabe als
Hardware-Techniker einen Quarz mit der entsprechenden Frequenz
anzuschliessen und in Betrieb zu nehmen.

Autor: El (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Anregungen!

in dem Fall seit ihr der meinung mit dem Takt ist nich nicht alles in 
Ordnung.
Dann werde ich mal mein spetzielles Augenmerk darauf richten und alle 
Einstellungen überprüfen!

gruss

El

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Sache ist ganz einfach.

Entweder du hast einen externen Quarz dran oder du hast ihn
nicht dran.

Wenn du keinen externen Quarz hast, dann kannst du den Mega16
mit den Fuse Bits auf entweder 8Mhz oder 1Mhz einstellen. Wenn
du an den Fuse Bits überhaupt nichts gemacht hast, dann läuft
er mit 1Mhz. So wird er ausgeliefert.

Wenn du aber einen externen Quarz dran hast, dann heist das
noch lange nicht, dass der auch benutzt wird. Ein externer
Quarz muss mittels Fuse-Bits auch aktiviert werden.

Nachzutragen wäre noch: Sei extrem vorsichtig, wenn du mit
den Fuse-Bits spielst. Grade mit den CKSEL Fuses kann man sich
ganz schnell aus dem Prozessor aussperren. Alles doppelt
und dreifach kontrollieren bevor die Bits gebrannt werden.

  * Ein Quarz ist kein Quarzoszillator! Also vorsichtig sein,
    welche Einstellung du benutzt

  * Immer, wirklich immer, zuerst die Fuse-Bits aus dem
    Prozessor auslesen und mit dem Datenblatt vergleichen.
    Nur dann wenn du jedes einzelne Bit im Datenblatt gefunden
    hast und das dann auch mit den dokumentierten Ausliefer-
    einstellungen übereinstimmt weitermachen.

Autor: El (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe das Problem inzwischen lösen können. Es lag tatsächlich an den 
Einstellungen der Fuse-Bits die von mir falsch gesetzt wurden. Wie ich 
gesehen habe verursachen sie immer wieder Probleme bei Anfängern, so 
auch bei mir.
Herausgefunden habe ich es mit einem Oszilloskop am Port eines Timerpins 
den ich nach jeden Takt toggeln lies.
Schön wäre eine Funktion, die einem den Systemtakt zum Beispiel über die 
LEDs anzeigen würde.

Vielen Dank für eure Antworten

Gruss El

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Schön wäre eine Funktion, die einem den Systemtakt zum Beispiel über die
> LEDs anzeigen würde.

Neuere AVRs haben eine CKOUT-Fuse, mit der man den internen CPU-Takt
(egal, woher er kommt) an ein Ausgangspin legen kann.  OK, wer diese
Fuse programmieren kann, kann vermutlich auch die für den Takt
programmieren...

Autor: S.T (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
El schrieb:
> Hallo
>
> Ich habe das Problem inzwischen lösen können. Es lag tatsächlich an den
> Einstellungen der Fuse-Bits die von mir falsch gesetzt wurden. Wie ich
> gesehen habe verursachen sie immer wieder Probleme bei Anfängern, so
> auch bei mir.
> Herausgefunden habe ich es mit einem Oszilloskop am Port eines Timerpins
> den ich nach jeden Takt toggeln lies.
> Schön wäre eine Funktion, die einem den Systemtakt zum Beispiel über die
> LEDs anzeigen würde.
>
> Vielen Dank für eure Antworten
>
> Gruss El

Bei 1 Mhz wirst du nicht mal ein Flimmern an deiner LED merken. 
Zumindest wenn du sie direkt auf die LED losjagst :D

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.