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


von Alex (Gast)


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:
1
int main(void)
2
{
3
  // Initialisieren der Ports
4
  PORTA = 0b00000000;    // Port B auf Low; vertauscht, um low pulse zu vermeiden
5
  DDRA = 0xFF;        // Alles Ausgänge, Datenbus zu LCD
6
  PORTD = 0b00000000;    // Port A auf Low; vertauscht, um low pulse zu vermeiden
7
  DDRD = 0b00000001;    // PD0 (RXD) als Eingang für RS232 Datenempfang
8
9
  // Initialisieren des USART
10
  UBRRH = UBRR_VAL >> 8;        // Baudrate auf 4800 setzen
11
    UBRRL = UBRR_VAL & 0xFF;
12
13
  UCSRB = (1<<TXEN)|(1<<RXEN); 
14
15
    //UCSRC |= (1<<URSEL)|(3<<UCSZ0); 
16
  UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1);
17
18
  
19
  char puffer[1024] = {0};
20
  uart_gets(puffer, sizeof(puffer));
21
    
22
  // Endlosschleife
23
  while(1)
24
  {}
25
  return 0;  //wird nie erreicht
26
}

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

von spess53 (Gast)


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

von Alex (Gast)


Lesenswert?

Ich verwende nicht den Simulator

von Ahem (Gast)


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.

von Ahem (Gast)


Lesenswert?

Uuups. Sorry. Ich habe Debugger und Simulator verwechselt.

von Alex (Gast)


Lesenswert?

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

von Stefan E. (sternst)


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).

von Alex (Gast)


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.

von Alex (Gast)


Lesenswert?

Nachtrag:
Senden will ich gar nicht, nur empfangen

von Stefan E. (sternst)


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".

von Alex (Gast)


Lesenswert?

danke :) manchmal sitzt man auf seinen Augen :)
geh jetzt wohl besser schlafen.

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.