USART - Ungelöst

Gast #1220275
Lesenswert?

Hi, ich habe ein Problem. Ich hab den AVR ATmega 644P mit 20Mhz Quarz 
Oszi. Ziel ist es, den USART zum laufen zu bringen.
Hier der Code (C):

#include <avr/io.h>



//  =================================
//  ===== USART initialisieren  =====
//  =================================

void init_usart ()
{
  //  Baudrate festlegen (Datenblattseite 190)
  UBRR0L = 129;

  //  USART auf senden und empfangen einstellen
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);

  //  Stopbits einstellen. (USBSn auf 1 = 2 Stopbits - 0 = 1 Stopbit?
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);

  //  8-bit Übertragung
  UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00);
}


  // =================================
  // ===== USART-Sendefunktion =====
  // =================================

  void USART_Transmit( unsigned char data )
  {
    /* Wait for empty transmit buffer */
    while ( !( UCSR0A & (1<<UDRE0)) )
      ;
    /* Put data into buffer, sends the data */
    UDR0 = data;
  }

  // =================================
  // ===== USART-Empfangsfunktion =====
  // =================================

  unsigned char USART_Receive( void )
  {
    /* Wait for data to be received */
    while ( !(UCSR0A & (1<<RXC0)) )
      ;
    /* Get and return received data from buffer */
    return UDR0;
  }


int main(void)
{
  init_usart();

  while(1)
  {

    //USART_Transmit(USART_Receive());
    USART_Transmit('a');


  }
}

Der Schaltplan sieht so aus:
http://www.avr-praxis.de/forum/attachment.php?attachmentid=887
Bilder auf meinem Steckboard gibt es hier:
http://img25.imageshack.us/gal.php?g=img0196r.jpg
Spannungen an den Kondensatoren:
C3 = 8,40V
C4 = 8,90V
C5 = 4,47V
C6 = 8,90V
Phänomen:
(Hab einen USB-RS232-Dongle)
1. Stom an => Rote LED leuchtet
2. RSR232 Stecker auf die Buchse ohne USB-Eingesteckt!! => Blaue LED 
leuchtet schwach und Rote unverändert.
3. USB-Stecker an PC => Blaue leuchtet heller und während der Dongle 
erkannt wird (dieses Geräusch, wenn man ein USB-Gerät einsteckt) blinkt 
sie unregelmäßig am hellsten)
Gast #1220289
Lesenswert?

1
//  Stopbits einstellen. (USBSn auf 1 = 2 Stopbits - 0 = 1 Stopbit?
2
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
3

4
//  8-bit Übertragung
5
UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00);

Lies dir im Datenblatt den Abschnitt über "Accessing UBRRH/ UCSRC 
Registers" durch. Das geht so einfach nicht.

Für allererste Test hat es sich bewährt, die default-Einstellungen zu 
benutzen. Lass UCSR0C einfach in Ruhe, und stell deinen PC auf 8bit, 1 
stop bit, no parity.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren