Zitat Zitat von i-wizard
... ATmega32 mit 16Mhz ... UBRR geht nicht direkt zu beschreiben. Habe es dann mit deiner Idee des schiebens Probiert also URBBL und URBBH. Wie bisher senden geht immer aber empfangen nicht ...
Dazu gibts doch für die RNControl:
1) eine funktionierende Schaltung im RNControl-Schaltplan
2) im C-code auch die dazugehörige(n) Module zum Initialisieren. Bei mir läuft das.

Aktuell (ohne lang suchen zu müssen) hab ich meine lauffähigen Schnippsel zum mega168:
a) die defines
Code:
//   Mit Quarz 20 Mhz-CPU 
#define F_CPU  20000000 
#define BAUD   57600 
#define MYUBRR (unsigned int)(F_CPU/16/BAUD-1)     //nach doc2545, S 179
b) Aufruf der Initialisierung
Code:
    init_USART0(MYUBRR);  //USART0 initialisieren mit wählbarer Baudrate (s.o.)
c) Initialisierung des USART0 mit Empfangsroutinen:
Code:
/* ============================================================================== */ 
/*   Initialisiere USART0 mit vorgegebener Baudrate      Neu am 07jan2008 
   Zum Senden von Zeichen im Hauptprogramm entweder        nach doc2545, S179 
   char irgendwas[] = "meintext"; 
   sendUSART(irgendwas);      oder direkt 
   sendUSART("meinText");      verwenden.              */ 
void init_USART0( unsigned int ubrr ) 
{                // Set baud rate 
    UBRR0H  =  (unsigned char)(ubrr>>8); 
    UBRR0L  =  (unsigned char)ubrr;   // Enable receiver and transmitter 
    UCSR0B  =  (1<<RXEN0)|(1<<TXEN0);    // Set frame format: 8data, 2stop bit 
    UCSR0C |=  (1<<UCSZ01)|(1<<UCSZ00);   // 8 Data, (async: UMSELnx empty, doc S193) 
         //  no parity weil UPMn1:0 empty, 1 Stop, weil UPMn1:0 empty 
} 
/* ============================================================================== */
/* ============================================================================== */ 
/* ===  Hole Daten vom USART0  ========================   Neu am 22mai2008 
   ===  vgl. dazu doc2545 und AVR-Gcc-Tutorial....  ===================           */ 
char getchar(void)                      // ... vgl. code sample in doc2545, S 183 
{                                       // Wait for data to be received 
   while(!(UCSR0A & (1<<RXC0)))         //Warten, bis Empfang möglich ist 
   { }                                  // Get and return received data from buffer 
   return UDR0;                         //hole das Zeichen vom Puffer und return 
} 
/* ============================================================================== */ 
void getsUSART(char* Buffer, uint8_t MaxLen) 
{ 
  uint8_t NextChar; 
  uint8_t StringLen = 0; 
  
  NextChar = getchar();         // Warte auf und empfange das nächste Zeichen 
                                  // Sammle solange Zeichen, bis: 
                                  // * entweder das String Ende Zeichen kam 
                                  // * oder das aufnehmende Array voll ist 
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) { 
    *Buffer++ = NextChar; 
    StringLen++; 
    NextChar = getchar(); 
  }                               // Noch ein '\0' anhängen um einen Standard 
                                  // C-String daraus zu machen 
  *Buffer = '\0'; 
} 
/* ============================================================================== */
Und das läuft so