Forum: Mikrocontroller und Digitale Elektronik STk500 (RS232) ->(USB)PC keine korrekte Übertragung


von Stefan S. (eric996)


Angehängte Dateien:

Lesenswert?

Guten Tag zusammen,

beginne gerade die ersten Schritte mit einem STK500 mit ATMEGA8 und 
versuche eine Serielle Kommunikation zwischen STK500 und einen PC, via 
USB->RS232 Schnittstelle zu bewerkstelligen.
Problem: Am PC werden seltsamme Zeichen dargestellt und mir gehen 
langsam die Ideen aus !

Das Programm kommt aus dem AVRBUCH.de, heißt "SERIELLMINIMAL"
Der Text "AVRBUCH.DE - RS232 [OK]..." sollte vom PC empfangen werden.
Das wird angezeigt Anhang AVR_Terminal.

Was bisher probiert wurde:

1. beide USB-> RS232 Adapter geprüft mit Looptest PIN 2 +PIN 3 gebrückt 
;Zeichen werden korrekt gesendet und empfangen (Dargestellt mit AVR_TERM 
und alternativ HTERM)

2.Verbindungskabel RxD auf PD0 von PORTD, TxD auf PD1 von PORTD

3. Lauflicht in das STK500 Programmiert (Funktioniert)

4. Benutze XP SP2,AVR Studio 4.15 Build 623, ATMEGA8

5. STK RS 232 Ctrl  bei mir auf COM8 (im Gerätemanager sichtbar),
   STK RS 232 SPARE bei mir auf COM9 (im Gerätemanager sichtbar)

Vielen Dank für die Hilfe :-)

/*
  Serielle Kommunikation
  Minimale Ausführung

  ATMEGA8/16/32 und kompatibel
  STK500 mit dem STK500 Oszillator (3.68 MHz)
  Baudrate: 9600 (8N1)

  Roman Mittermayr
  AVRBUCH.DE
*/

#include <avr/io.h>

#define  TAKT      3680000
#define UART_BAUDRATE  9600

// Berechnung der Konfigurationsparameter
#define UART_SETTING  ((TAKT/16L/UART_BAUDRATE)-1)


void setup_uart()
{
  /* Baudrate einstellen */
  UBRRH = (char) (UART_SETTING >> 8);
  UBRRL = (char) (UART_SETTING);

  /* Empfänger und Sender einschalten */
  UCSRB = (1<<RXEN) | (1<<TXEN);

  /* Asynchron, 8N1 */
  UCSRC = (1<<URSEL) | (3<<UCSZ0);
}

void uart_putchar(char c)
{
  // Warten bis Buffer bereit ...
  while (!(UCSRA & (1 << UDRE)))
    ;

  // Senden...
  UDR = c;
}

void uart_putstring(char *str)
{
  unsigned char i;

  for (i=0;i<255;i++) /* Maximal 255 Zeichen ausgeben ... */
  {
    if (str[i] != 0)
      uart_putchar(str[i]);
    else
      break; // Ende des Strings erreicht
  }
}


int main(void)
{
  /* RS232 einschalten ... */
  setup_uart();

  /* Willkommensnachricht senden ... */
  uart_putstring("AVRBUCH.DE - RS232 [OK]...\r\n\r\n");

  while (1)
  {
  }

  return 0;
}

von STK500-Besitzer (Gast)


Lesenswert?

Läuft dein Controller wirklich mit "#define  TAKT      3680000", also 
3,68MHz?

von eric996 (Gast)


Lesenswert?

Wo kann ich das sehen ?

Ist das die Einstellung unter FUSES -> SUT_CKSEL?
Da steht bei mir: Int. RC Osc. 1 MHz; Start-up time: 6 CK + 64 ms; 
default value

Das dichteste wäre etwas mit 4MHZ

von STK500-Besitzer (Gast)


Lesenswert?

>Int. RC Osc. 1 MHz; Start-up time: 6 CK + 64 ms;
>default value

Dein Controller ist noch jungfreulich/nackich...
Du mußt ihn auf die externe Clock per Fuses programmieren.CKSEL = 0000?
Die Start-up-Time sollte im Moment egal sein.

von eric996 (Gast)


Lesenswert?

Glaube mit den FUSES war ich falsch, unter HW Settings stehen die 3.686 
MHz

von STK500-Besitzer (Gast)


Lesenswert?

>Glaube mit den FUSES war ich falsch, unter HW Settings stehen die 3.686
>MHz
Nee, die Fuses kümmern sich um die Konfiguration des Controllers (in 
deinem Fall hat er noch die Werkseinstellungen mit dem internen 1MHz 
RC-Oszillator), und die HW-Settings um die Einstellungen des STK500.
Hier im Forum schwirrt irgendwo auch das STK500-Handbuch in Deutsch 
herum...

von eric996 (Gast)


Lesenswert?

Schönen Dank,
habe das Handbuch

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.