www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 Problem mit der AVR-P40-8535 Platine (ATMega16)


Autor: Zaesch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Hab mir vor einiger Zeit die AVR Entwicklungsplatine für den ATMega16 
aus dem Shop dieser Seite besorgt. Funktioniert auch alles recht gut, 
aber die Kommunikation über ddie RS232 Schnittstelle klappt noch nicht 
so ganz.

Was will ich machen?
Erstmal nur ein Zeichen schicken.

Was funktioniert nicht?
Die Daten kommen nicht am PC an. Das Programm HTerm empfängt nur \0 und 
deklariert das ganze als Fehler. Interessanter Weise kommen in jedem 
Sendezyklus 4 Byte mit jeweils \0 an obwohl nur 1 Byte gesendet wird...

INFOS:
Ich habe die Suche benutzt und nichts gefunden das mir hilft :)

QUELLCODE:
#include <avr/io.h>
#include <util/delay.h>

#define FOSC 8000000// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1

void USART_Init( unsigned int ubrr);
void USART_Transmit( unsigned char data );

int main( void )
{
  int i;

  USART_Init ( MYUBRR );
  DDRB = 1 << 0;
  PORTB = 1;

  while(1)
  {
    USART_Transmit((unsigned char)'Z');
  }
  return 0;
}

void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0);
}

void USART_Transmit( unsigned char data )
{
  int i;

  // rote LED an
  PORTB = 0;
  //2 sec. warten
  for(i=0;i<100;i++)
    _delay_ms(20);
  
  /* Wait for empty transmit buffer */
  while ( !( UCSRA & (1<<UDRE)) );
  /* Put data into buffer, sends the data */
  UDR = data;

  // rote LED aus
  PORTB = 1;
  //2 sec. warten
  for(i=0;i<100;i++)
    _delay_ms(20);
}
Senden tut er wohl. Habe hier nur ein uraltes Oszi das mehr schlecht als 
recht funktioniert. Und am PC kommen ja Errors an.

VERKABELUNG:
Auf der Platine mussten die TX/RX Pins des ATMega16 mit den Pins des 
MAX232N verbunden werden. TX an RX und RX an TX - steht so in der Doku 
und passt auch wenn man sich den Schaltplan ansieht.
Von der RS232 Buchse geht dann ein serielles Kabel (1:1) an den COM1 
Port des PC. Bei einem Nullmodemkabel (RX/TX gedreht) kommt garnix am 
Rechner an.

TAKTEINSTELLUNG:
Genutzt wird der externe 8.000MHz Quarz. Fuses sind richtig gesetzt. 
Kurze Zwischenfrage: Wo ist der Unterschied zwischen fast und slow 
Rising Power? Das braucht man für die SUT-Fuses. Habe erstmal slow 
Rising eingestellt...


Die Frage ist nun warum kommt am PC nur Datenmüll an? das Windowseigene 
Hyperterminal zeigt garnix an und HTerm wie gesagt nur die \0 Bytes.

Hoffe Ihr könnt mir helfen. So langsam verzweifle ich daran.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt Atmega16 S. 167 Anmerkung zu Bit7 URSEL:
"The URSEL must be 1 when writing to the UCSRC"
   /* Set frame format: 8data, 2stop bit */
   UCSRC |= (1<<URSEL) | (1<<USBS) | (3<<UCSZ0);  // Asynchron 8N2 

  

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich übersehen. Besser das komplette Register wie gewünscht 
konfigurieren statt nur einzelne Bits zu manipulieren.

[C]
   /* Set frame format: 8data, 2stop bit */
   UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0);  // Asynchron 8N2
[C]

Autor: Zaesch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das gibt's nicht. Es geht!
Vielen Dank!

Der Quellcode stammt aus dem Datenblatt und da ist der Fehler gewesen...
Man muss wirklich alles kontrollieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.