atmega 48 usart Problem / Fuses avrdude

Gast #181988
Hallo,

ich habe mir vor kurzem einige mega48 zugelegt.  Zum programmieren
verwende ich avrdude. Das setzen von ports klappt auch einwandtfrei,
nur mit dem usart hab ich Probleme. Ich verwende testweise einen 4 mhz
oszillator ( ja keinen baudraten quarz)  der auf dem selben board, mit
nem mega8 auch funktioniert. Der mega 48 sendet mir jedoch ( obgleich
er idr garnichts sendet), wenn er etwas sendet, nur ein kleines c mit
einer Art Unterstrich und das auch nur in sehr unregelmäßigen
Zeitabständen. Ich nehme an das es am Taktsignal liegt, obgleich auch
andere Ozillatoren(16Mhz, 20Mhz) kein besseres Ergebnis geliefert
haben. Da ich bei avrdude etwas davor scheue, die fuses falsch zu
setzen, hab ich bei yaap den mega48 ebenfalls hinzugefügt( obwohl das
programmieren hier stets scheitert), um die Fuses zu setzen. Dies
klappt auch wunderbar; nur betätige ich den setzen Button mehrmals, so
zeigt yaap  zeitweise die Standardkonfiguration an.

Ich bin für jeden Rat dankbar

Vielen Dank
     Manfred Cherd

PS:
Um auszuschließen, dass es an yaap und damit am oszillator liegt, würde
ich gerne wissen wie man mit avr-dude die fuses setzen kann (die
dokumentation  ist für mich  wohl etwas zu kurz geraten :) )
Angehängte Dateien:
Gast
Ich hab inzwischen sichergestellt, dass der externe oszillator läuft.
Somit bleibt nurnoch ein  Softwareproblem. Da der m48 ja zwei uarts hat
hab ich für den ersten stets im Beispielcode, das n durch 0 ersetzt. Ich
nehme an, dass ich da  irgendetwas übersehn habe.

Hat denn keiner Erfahrungen mit dem 48er?( oder dem  m88/m168).
Einen kleinen Codeschnippsel zum testen vielleicht?
Gast
Was hast denn den Mist her:
#define MYUBRR FOSC/16/BAUD-1

Das n durch ne Null zu ersetzen ist eine Heldentat, gab es da nie
Fehlermeldungen vom Compiler?
Gast
Das stammt direkt aus dem Datenblatt und da der mega48 zwei usart's hat
und laut der Registersummary z.b. UCSRnA -> UCSR0A  existiert hielt ich
es für logisch.

Btw inzwischen klappt es mit 1200 baud, jedoch nur wenn ich statt 16MHz
8MHz angebe und im Terminalprogramm 300 baud auswähle.
Der Verhältnise 1/2 und 1/4  wegen denke ich das es vielleicht mit der
CKDIV8 Fuse zusammenhängt, aber egal ob gesetzt oder nicht kommt stets
das selbe bei raus.

Das sind meine jetzigen Einstellungen:
CKDIV8  0
CKOUT    1
SUT1    0
SUT0    0
CKSEL3  1
CKSEL2  1
CKSEL1  1
CKSEL0      1
[lfuse = 0xbf]
Gast
So nu funktionierts doch.
Allerdings nur, wenn ich direkt den integer wert aus der
Beispieltabelle für ubrr  einsetze. Mit der Formel scheint es irgendwo
noch zu haken

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.