www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UCSCR von ATmega32 wird nicht gesetzt


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

vorab, habe gcc tutorial mehr als einmal gelesen und auch in anderen 
Threads wurde ich nicht fündig.

Nun zu meinem Problem:
Ich versuche den USART des ATmega32 in gang zu bringen.
Mein Code:
int main(void)
{
  // Initialisieren der Ports
  PORTA = 0b00000000;    // Port B auf Low; vertauscht, um low pulse zu vermeiden
  DDRA = 0xFF;        // Alles Ausgänge, Datenbus zu LCD
  PORTD = 0b00000000;    // Port A auf Low; vertauscht, um low pulse zu vermeiden
  DDRD = 0b00000001;    // PD0 (RXD) als Eingang für RS232 Datenempfang

  // Initialisieren des USART
  UBRRH = UBRR_VAL >> 8;        // Baudrate auf 4800 setzen
    UBRRL = UBRR_VAL & 0xFF;

  UCSRB = (1<<TXEN)|(1<<RXEN); 

    //UCSRC |= (1<<URSEL)|(3<<UCSZ0); 
  UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1);

  
  char puffer[1024] = {0};
  uart_gets(puffer, sizeof(puffer));
    
  // Endlosschleife
  while(1)
  {}
  return 0;  //wird nie erreicht
}

Die Baudratenbits und die Enable TX, RX Bits werden gesetzt, aber es 
werden einfach nicht die Bits URSEL, UCSZ0 und UCSZ1 gesetzt.
Die auskommentierte Zeile darüber funktioniert genausowenig.
Auch die Notation UCSRC |= (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1); 
funktioniert nicht.
Soweit ich das verstanden habe, ist das UCSRC und UBRRH Register unter 
derselben Adresse zu erreichen, deshalb das URSEL Bit.
Kann es daran liegen?
Wenn ich beim debuggen manuell die Bits in AVR Studio (I/O View) setzte,
wird das auch ignoriert, bzw im nächstem Step wieder verworfen.

uart_gets(puffer, sizeof(puffer)); ist die Funktion aus dem gcc 
Tutorial.
Ich benutzte AVR Dragon, AVR Studio, JTAG und ATmega32 mit 16 MHz(Fuse 
Bits sind entsprechend gesetzt, als UBRR Wert habe ich 0xCF).

Vielen Dank schonmal für eure Hilfe,
mfg Alex

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wenn ich beim debuggen manuell die Bits in AVR Studio (I/O View) setzte,
>wird das auch ignoriert, bzw im nächstem Step wieder verworfen.

Simulator Hilfe:

Notes for ATmega32
The USART's UBRRH and UCSRC registers share the same I/O address. 
Writing to one of the registers will cause both registers to contain the 
new value, regardless of the value of URSEL. Reading these registers do 
not work as described in the datasheet.

MfG Spess

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende nicht den Simulator

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich verwende nicht den Simulator

Das habe ich anders verstanden.

>Wenn ich beim debuggen manuell die Bits in AVR Studio (I/O View) setzte,
>wird das auch ignoriert, bzw im nächstem Step wieder verworfen.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uuups. Sorry. Ich habe Debugger und Simulator verwechselt.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein Problem.. weiß sonst wer weiter..
habe inzwischen nen anderen atmega32 getestet.. selbes ergebnis

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich könnte mir vorstellen, dass das Register durch die Doppelbelegung 
für den Debugger gar nicht zugänglich ist.

Du musst die Ursache für dein Problem auf jeden Fall woanders suchen, 
denn selbst wenn das Schreiben tatsächlich nicht funktionieren sollte, 
macht das nichts, denn das was du da reinschreiben willst, ist eh schon 
der Default-Inhalt nach einem Reset (das Schreiben nach UCSRC ist damit 
also eh überflüssig).

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm danke für den Tip,
allerdings kann ich keine tabelle mit den default Werten finden, weiß 
jemand wo ich die finden kann?
In dem Datenblatt steht nur:
The USART Character Size (UCSZ2:0) bits select the number of data bits 
in the frame.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:
Senden will ich gar nicht, nur empfangen

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> Hmm danke für den Tip,
> allerdings kann ich keine tabelle mit den default Werten finden, weiß
> jemand wo ich die finden kann?

Stehen bei jedem Register dabei. Gleich zu Anfang der 
Registerbeschreibung ist ein Bildchen mit den Bitnamen. Darunter sind 
zwei Zeilen, "Read/Write" und "Initial Value".

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke :) manchmal sitzt man auf seinen Augen :)
geh jetzt wohl besser schlafen.

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.