Forum: Compiler & IDEs USART - Ungelöst


von Gast (Gast)


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)

von Gast (Gast)


Lesenswert?

Nur zur Info, habe es vergessen zu schreiben. Die Rote LED ist senden 
und die Blaue empfangen. Der eigentlich müsste ich im TErminalprogramm 
nur "a"s sehen

von Ahem (Gast)


Lesenswert?

Man kann den Schaltplan nicht sehen!

von Oliver (Gast)


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

von Oliver (Gast)


Lesenswert?

Uuups, Mega644. Bei dem klappt das doch mit UCSR0C ohne weitere 
Verrenkungen.

Oliver

von Gast (Gast)


Lesenswert?

Hier der Schaltplan. So müsste es gehen.
http://img11.imageshack.us/img11/470/max232.png

von Gast (Gast)


Lesenswert?

Fehler gefunden. Manchmal ist man einfach zu Dumm. Habe die Belegung am 
Stecker gespiegelt. Jetzt geht es.

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.