www.mikrocontroller.net

Forum: Compiler & IDEs atmega 48 usart Problem / Fuses avrdude


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

Bewertung
0 lesenswert
nicht lesenswert
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 :) )

Autor: manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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]

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, die Implementierung der Formel aus dem Datenblatt ist halt immer
noch verkehrt. So wie du sie hingeschrieben hast, steht sie dort nicht
drin.

Autor: manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe "C Code Example"  Seite 175 .
UBRRn = fOSC/ (16 * BAUD) - 1 (Seite 171)


Ansonsten sehe  ich nicht was genau du mit falsch meinst?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, und die noch richtig implementiert:

USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1)

UBRR = (unsigned char) UART_BAUD_SELECT;

Autor: manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,
aber leider keinerlei Veränderungen.

Autor: manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann lass dir das Ergebnis der Formel doch einfach mal ausgeben ...

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.