Forum: Mikrocontroller und Digitale Elektronik UCSRC0 bei ATMega128 - nicht einstellbar


von Stephan (Gast)


Lesenswert?

Hallo,
mein Problem ist folgendes: Ich benutze einen ATMega128 und möchte gerne 
USART0 benutzen. Beim Initialisieren der Schnittstelle sollte ich auf 
das Register UCSR0C zugreifen, weil ich dort synchron/asynchron-Betrieb 
bzw. Anzahl der Stop-Bits einstellen möchte. Leider ist dieses Register 
"nicht vorhanden" - vermutlich ein Problem mit einem Fuse-Bit, dass 
ausgeführt ist, um den 128er voll kompatibel zum 103er zu machen. Nur 
wie kann ich beim Simulieren im AVR-Studio dieses Register UCSR0C 
freigeben?
Danke schon mal im Voraus!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Hast du in der Source geschrieben UCSRC0 wie im Betreff oder UCSR0C 
wie im Nachrichtentext?

von Stephan (Gast)


Lesenswert?

Im Sourcecode habe ich UCSR0C geschrieben.
Wenn ich mir im AVR-Studio die Register von USART0 anschaue, dann wird 
in der Spalte "Address" folgendes angegeben: na (0x95). Für mich ergibt 
sich daraus, dass "na" die Bezeichnung für "nicht vorhanden" ist. Das 
Gleiche übrigens beim Register UBRR0H (Adress na(0x90).
Kann das mit dem Fuse-Bit für die Kombatibelität mit dem 103er zu tun 
haben?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Unwahrscheinlich.

Das AVR-Studio weiss zum Zeitpunkt des Programmierens, Kompilierens und 
Simulierens nicht, dass die M103C Fuse in dem Stück Silizium auf deinem 
Basteltisch gesetzt ist oder nicht.

Das AVR-Studio erzeugt stur ein Programm für den Prozessor, den du in 
den Projektoptionen angegeben hast (sollte atmega128 sein). Aufgrund 
dieser Einstellung sucht es sich über die ersten Zeilen in deinem 
Programm (#include <avr/io.h>) das für den Atmega128 passende 
Includefile mit den entsprechenden Registernamen.

auch beim Simulieren/Debuggen kann man den AVR einstellen. Dort sollte 
es der gleiche sein, für den das Programm erzeugt wurde. Normalerweise 
ist das automatisch so, aber man kann das auch von Hand umstellen. 
Kontrolliere das mal.

Erst wenn das fertige Programm dann auf das Stück Silizium geschrieben 
wird, spielt es eine wichtige Rolle, ob auf dem die M103C Fuse gesetzt 
ist oder nicht. Wenn der Atmega128 im Atmega103 Modus läuft, dann 
funktionieren für den Atmega128 geschriebene Programme i.a. nicht oder 
falsch.

Vorschlag: Pack dein problematisches Projekt in ein Archiv und zeige das 
her.

von Stephan (Gast)


Lesenswert?

So, in der Zwischenzeit hab ich mir das Datenblatt mal (sehr) genau 
durchgelesen - zumindest was es mit der seriellen Schnittstelle auf sich 
hat. Der ganze Clou liegt darin, dass u.a. das Register UCSR0C im 
erweiterten I/O-Bereich liegt und nicht mit den Befehlen "ldi" bzw. 
"out" bearbeitet werden kann. Nachdem ich "ldi" in "std" geändert habe, 
beschreibt mir mein Sourcecode das Register UCSR0C wie gewünscht.
Jedenfalls möchte ich mich bei dir für deine Antworten bedanken!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.