mikrocontroller.net

Forum: Compiler & IDEs Probleme mit ATMega128 UART


Autor: dave0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen liebe Gemeinde,

ich bin neu hier im Forum und hoffe mir kann hier geholfen werden.

Ich versuche eine einfache USB Verbindung zwischen PC und 
Mikrocontroller herzustellen. Ich verwende dafür ein MEGA128-USB-Board 
mit CP2102 Silab USB-USART-Bridge.

Meine Initialisierung:

#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)

void InitUART1(void)
{
  UBRR1H = UBRR_VAL >> 8;
    UBRR1L = UBRR_VAL & 0xFF;

  // enable receiver and trasmitter
  UCSR1B = (1<<RXEN)|(1<<TXEN);

  // set frame format: 1stop bit, 8data
  UCSR1C = (0<<USBS)|(2<<UCSZ0);
}

Die berechnete Baudrate habe ich über ein Display ausgeben lassen, die 
stimmt.

Wenn ich nun ein Zeichen sende empfängt das Terminal am PC leider ein 
anderes. Ich sende mit dieser Funktion:

void TestSend(void)
{
  while (!(UCSR1A & (1<<UDRE)))  // warten bis Senden moeglich
  ;
  UDR1 = 'T';
}

Nun hab ich in dem Forum gelesen, dass beim ATMega128 der ATmega103 
Compatibility Mode standardmäßig aktiviert ist.
Ich hab versucht den zu deaktivieren, leider zeigt mir aber AVR Studio 
nur die Fuses von einem ATMega32 an.

Vielleicht hat jemand schon meinen Fehler gefunden und kann mir helfen.
Falls ich irgendwelche wichtigen Infos vergessen habe bitte melden

großes Dankeschön schonmal

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

dave0815 schrieb:
> Ich hab versucht den zu deaktivieren, leider zeigt mir aber AVR Studio
> nur die Fuses von einem ATMega32 an.

dann stell im AVRStudio den richtigen Prozessortyp ein.
im Programmer Dialog -> Reiter Main oben
MfG

Autor: dave0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für den Tipp,
hat leider nicht geholfen, weil der Kompatibilitätsmodus schon 
deaktiviert war.

Hat jemand noch eine andere Idee woran es liegen könnte?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dave0815 schrieb:

> hat leider nicht geholfen, weil der Kompatibilitätsmodus schon
> deaktiviert war.

Der berechtigte Hinweis von Sauger bezieht sich auf "Fuses von einem 
ATMega32" in Beitrag "Probleme mit ATMega128 UART" und ist 
damit noch nicht beantwortet.

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

Bewertung
0 lesenswert
nicht lesenswert
dave0815 schrieb:
> danke für den Tipp,
> hat leider nicht geholfen, weil der Kompatibilitätsmodus schon
> deaktiviert war.
>
> Hat jemand noch eine andere Idee woran es liegen könnte?

Mit 99% Sicherheit darin, dass dein µC nicht mit der Taktfrequenz 
arbeitet, die du bei F_CPU angegeben hast.

Autor: dave0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hoffentlich ist es nur das.
Ich such gleich mal im User Manual wie ich den Oszillator auswähl.

danke

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend,

Karl heinz Buchegger schrieb:
> Mit 99% Sicherheit darin, dass dein µC nicht mit der Taktfrequenz
> arbeitet, die du bei F_CPU angegeben hast.

sehe ich auch so, obwohl...

dave0815 schrieb:
> Die berechnete Baudrate habe ich über ein Display ausgeben lassen, die
> stimmt.

...

dave0815 schrieb:
> hoffentlich ist es nur das.
> Ich such gleich mal im User Manual wie ich den Oszillator auswähl.


...es fehlen wohl noch einige Grundlagen. Zum Glück gibt es kein 
Tutorial in diesem Forum ;-)

MfG

Autor: dave0815 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab's mal im Manual nachgeschlagen und überprüft.

Die Fuses sind soweit ich beurteilen kann in Ordnung.
Es ist "external high freq. Crystal" für mein 16MHz Quarz ausgewählt.
Zusätzlich ist das CKOPT gesetzt.

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wenn du uns jetzt noch sagst wie F_CPU und BAUD aussehen, lässt sich 
das Geheimnis lüften.

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

Bewertung
0 lesenswert
nicht lesenswert
dave0815 schrieb:
> Ich hab's mal im Manual nachgeschlagen und überprüft.
>
> Die Fuses sind soweit ich beurteilen kann in Ordnung.
> Es ist "external high freq. Crystal" für mein 16MHz Quarz ausgewählt.
> Zusätzlich ist das CKOPT gesetzt.

Und, hast du auch überprüft, ob der aktiv ist?
http://www.mikrocontroller.net/articles/AVR_Checkl...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  UCSR1C = (0<<USBS)|(2<<UCSZ0);

Wer solche Abkürzungen benutzt sollte sich nicht wundern
wenn das in die Hose geht. So sieht das besser aus:

UCSR1C = (0<<USBS1) | (1<<UCSZ11) (1<<UCSZ10);

oder

UCSR1C = (0<<USBS1)|(3<<UCSZ10);

Du hast deinen UART auf 7Bit gestellt.

Autor: dave0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow, danke für die vielen Tipps.

Es war doch tatsächlich die falsche Anzahl Datenbits eingestellt.

Ich muss ehrlich gestehen ich hab die Initialisierung größtenteils aus 
dem UserManual abgetippt und da muss mir dann ein Fehler unterlaufen 
sein.

Ich versteh auch jetzt erst die Schreibweise wie man die Bits setzt. Aus 
den Abkürzungen im Manual wurde ich nicht schlau.

Auf jeden Fall bedank ich mich bei allen die mein Problem durchgelesen 
haben und vor allem beim holger der den Fehler entdeckt hat.

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.