Forum: Mikrocontroller und Digitale Elektronik UART mega32 ... die 100000te


von Neubi (Gast)


Lesenswert?

hey,

serielle schnittstelle des mega32 initialisieren :



//---- enable receiver and transmitter + receive interrupt ----//
  UCSRB = BIT7 | BIT4 | BIT3;   -> OK

//------------- set baud rate ---------------------------------//
  UBRRH = 0x00;     // 115200 baud @ 11.0592MHz
  UBRRL = 0x05;                 -> OK

//------------- set frame + data format -----------------------//
  UCSRC = (BIT7 | BIT2 | BIT1);      // 8data + 1stop (0x86)
-->>>>> .. das sch... register lässt sich nicht setzen



emulator mkII : wenn ich das datenformat (register UCSRC) setzen will, 
wird der wert nicht ins register übernommen. diese register werden 
unmittelbar nach dem reset gesetzt (keine int-requests, keine timer, 
...)
habe schon alle möglichen variationen probiert ... ohne erfolg !!!!


vielleicht kann mir jemand helfen ?!?


thx
neubi

von Fabian B. (Gast)


Lesenswert?

> //------------- set frame + data format -----------------------//
>  UCSRC = (BIT7 | BIT2 | BIT1);

ich hoffe mal hinter Bit7 steht dann (per define oder so) (1<<7) weil 
wenn da nur die 7 hintersteht machst du nix anderes als
(7 | 2 | 1)
und das ist sicher nicht das was du willst.

Gruß
Fabian

von Neubi (Gast)


Lesenswert?

#define  BIT0                 0x01
#define  BIT1                 0x02
#define  BIT2                 0x04
#define  BIT3                 0x08
#define  BIT4                 0x10
#define  BIT5                 0x20
#define  BIT6                 0x40
#define  BIT7                 0x80


... und der dreck geht noch immer nicht :) ...

von Zacc (Gast)


Lesenswert?

Muss es denn kompliziert sein ?
UCSRC = (BIT7 | BIT2 | BIT1);
wird zu :
UCSRB = 0x83;

Z.

von Oliver (Gast)


Lesenswert?

Wer oder was ist emulator mkII?

Oliver

von Rahul D. (rahul)


Lesenswert?

Neubi wrote:
> #define  BIT0                 0x01
> #define  BIT1                 0x02
> #define  BIT2                 0x04
> #define  BIT3                 0x08
> #define  BIT4                 0x10
> #define  BIT5                 0x20
> #define  BIT6                 0x40
> #define  BIT7                 0x80
>
>
> ... und der dreck geht noch immer nicht :) ...

Nicht, dass die Bits schon als Makro in der io.h (avr-gcc 
vorrausgesetzt) mit den Namen aus dem Datenblatt vorhanden wären, und 
die Benutzung dieser, das Programm auch übersichtlicher gestalten würde.

>  UCSRC = (BIT7 | BIT2 | BIT1);      // 8data + 1stop (0x86)
Bis auf die total sinnfreien Bezeichnungen stimmt es.

Wie wäre es mit etwas mehr Code?

von holger (Gast)


Lesenswert?

//------------- set frame + data format -----------------------//
  UCSRC = (BIT7 | BIT2 | BIT1);      // 8data + 1stop (0x86)
-->>>>> .. das sch... register lässt sich nicht setzen

Das was du da machst ist völlig in Ordnung.
Brenn das mal in einen ATMega32.
Wenn es funktioniert schmeiss deinen Emulator weg.

Holger

von Jörg X. (Gast)


Lesenswert?

Du hast natürlich im Datenblatt die geschichte mit der I/O Adresse von 
UCSRC und UBRRH gesehen und natürlich in der Hilfe für das AVR-studio 
(in der auch ALLE anderen Atmel-sachen die zu AVRs gehören beschrieben 
sind) gesehen, dass man mit dem JTAG das UCSRC GAR NICHT lesen kann (hab 
in der Hilfedatei nach "UCSRC" gesucht/suchen lassen...). steht unter 
"special considerations"-> "JTAG Interface specific considerations"

sry, bin ein bischen sarkastisch und zu belesen ;)

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.