Forum: Mikrocontroller und Digitale Elektronik ATmega16 und UART


von Karlheinz Druschel (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leuts,

ich habe hier ein STK500, bestückt mit einem Mega16 und versuche einen
serielle Kommunikation hinzubekommen. Leider geht mal rein gar nix.
Die Pins PD0 und PD1 habe ich mit zwei Kabel auf die Pins RS232 Spare
gebrückt, an der Schnittstelle hängt ein Laptop (1:1 Kabel, 2, 3, 5)mit
Hyperterminal: 9600,N,8,1. Die Pins 2 und 3 vom Kabel habe ich nicht
getauscht, da ja lt. Manual diese Pins gegenüber einer PC Schnittstelle
bereits gedreht sind. Da nichts ging, habe ich aber auch schon das Kabel
gedreht, ohne Wirkung.
Kann mir jemand einen Tip geben ?

Auszug aus dem Sourcecode, den ich mit aus einem Tutorial kopiert habe,
hängt an.
Greets
Karlheinz

von The Daz (Gast)


Lesenswert?

Hast du in den advanced setting beim proggen gecheckt, ob auch
tatsaechlich die in der source angegebene OSC-Frequenz eingestellt ist
? Hast du die fuses entsprechend auf eine externe clock eingestellt ?

von Rahul (Gast)


Lesenswert?

hast du die Pins (RXD/TXD) auf dem STK500 mal vertauscht?

von The Daz (Gast)


Lesenswert?

advanced setting -> board setting

von Marian (Gast)


Lesenswert?

Überprüfe mal deine Uartinitialisierung, denn da hast du einiges
vergessen. z.B. das Frameformat einstellen und den Transmitter und
Reciever zu enablen.

Und das was the Daz gesagt hat nochmal überprüfen. Denn daran lag es
bei mir am Anfang. Falsche Frequenz und nix ging!

Gruß Marian

von Karlheinz Druschel (Gast)


Lesenswert?

Hm, also die Initialisierung nehme ich jetzt wie folgt vor:
  UCSRB |= (1<<TXEN);
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);

  /* USART-Init beim ATmegaXX */
  UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
  UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);

Die Fuse-Bits scheinenn auch richtig zu sein (externer Takt).
Aber nach meinem Verständnis müßte doch die TxD kontinuierlich auf High
sein, oder ? PC-seitig ist das auch so, beim STK 500 aber nicht. Und das
sollte doch auch unabhängig von der eingestellten Baudrate so sein...
Oder denke ich da verkehrt ?

Greets
Karlheinz

von The Daz (Gast)


Lesenswert?

Ich kenne die von dir benutzen Macros UART_BAUD_xxx nicht, aber der ICC
application builder hat fuer dein setup folgende UART-Initialisierung
ausgerechnet:

//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0,0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = BIT(URSEL) | 0x06;
 UBRRL = 0x17; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0xD8;
}

Check mal, ob du in deinem Programm auf das gleiche Ergebnis kommst.

von The Daz (Gast)


Lesenswert?

Damit ist auch klar, was dein Problem ist: du hast beim setup von UCSRB
vergessen, receiver (RXEN) und transmitter (TXEN) zu enablen.

von Karlheinz Druschel (Gast)


Lesenswert?

Leider das gleiche Ergebnis. So langsam glaube ich ja fast an eine
defekte Hardware.....


Lt. Tutorial hier im Forum sollte das mit
"  UCSRC |= (1<<URSEL)|(3<<UCSZ0);" erledigt sein


Jetzt versuch ichs mal mit Bascom, und dann schmeiss ich das STK
weg...

Trotzdem 1000 Dank für die Mühe die ich gemacht habe :-)

Greets
Karlheinz

von Rahul (Gast)


Lesenswert?

Sag Bescheid, wohin du es wirfst! Ich hätte einen Abnehmer...

von The Daz (Gast)


Lesenswert?

Im Tutorial steht:

  UCSRB |= (1<<TXEN);      //UART TX einschalten
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);  //Asynchron 8N1

von The Daz (Gast)


Lesenswert?

Sorry, habs gerade gelesen, dass du TX ja schon enabled hattest. Kannst
du mal deine source anhaengen ?

von The Daz (Gast)


Lesenswert?

vergiss einfach meinen schwachsinn.

von Marian (Gast)


Lesenswert?

Also das ist meine Uart-Initialisierung:

void UART_Init (void)
{

    UBRRL = F_CPU / (16 * 9600UL) - 1;

  /*Enable reciever and transmitter */
  UCSRB = (1<<RXEN) | (1<<TXEN) ;
  /*Set Frame format :8data, 1stop bit */
  UCSRC = (1<<URSEL) | (3<<UCSZ0) ;
        OSCCAL = 0xAF;
}

Mit dieser funktioniert es bei mir jedenfalls immer :)...ist für einen
Atmega32 und dem STK500. Die F_CPU habe ich im Makefile festgelegt und
auch per AVR-Studio mit den Fuses usw. abgestimmt. Den OSCCAL-Wert muss
ich festlegen, weil ich den internen Taktgenerator nutze.

Kannst es ja erstmal mit dem internen Takt und meiner Initialisierung
probieren. Müsste eigentlich klappen.

Vielleicht hilft es dir ja weiter :)...ciao

von Marian (Gast)


Lesenswert?

PS: F_CPU sind 4 MHz !

von Marian (Gast)


Lesenswert?

Hallo Karlheinz!

Und hat es funktioniert?

von Karlheinz Druschel (Gast)


Lesenswert?

Alos jetzt tippe ich definitiv auf die Hardware:
Mit dem Oszi krieg ich an PD1 (TxD) negative Spannungsimpulse, an der
Schnittstelle des STK jedoch positive. Da dies meines Erachtens nach
verkehrt ist, ist wohl der Max232 (oder was auch immer) hinüber :-(

von Rahul (Gast)


Lesenswert?

Auf der RS232-Seite (+-12V) negativ, wenn auf der 5V-Seite positiv?
Definitiv richtig.
Log. 1 wird bei der RS232 mit einer negativen Spannung dargestellt und
log. 0 mit einer positiven.
Dann könnte es sonst nur das Kabel zum PC sein... (vielleicht doch
Nullmodem-Kabel?)

von Rahul (Gast)


Lesenswert?

schon wieder?

von Karlheinz Druschel (Gast)


Lesenswert?

Sorry, das doppelte Posting war definitiv KEINE Absicht.
Bitte 1000mal um Entschuldigung

von Karlheinz Druschel (Gast)


Lesenswert?

Also dann kapier ichs auch nicht mehr:
Am Controller habe ich an TxD 0V mit negativen Impulsen.... Ich denke
das stimmt

An der Schnittstelle habe ich 0V mit positioven Impulsen. Ich denke da
muessten 12V mit negativen Impulsen auftauchen

von Karlheinz Druschel (Gast)


Lesenswert?

HEUREKA
er will. Aber woran es hing glaubt mir wohl eh keiner, tue ich ja
selbst  kaum. Hyperterminal! Mit einem anderen Terminalprogramm klappts
wunderbar, irgendwie mag das wohl bei mir nicht.
Nochmals 1000Dank für die Tips, war recht hilfreich.



Greets
Karlheinz

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.