mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega16 und UART


Autor: Karlheinz Druschel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du die Pins (RXD/TXD) auf dem STK500 mal vertauscht?

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
advanced setting -> board setting

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: The Daz (Gast)
Datum:

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

Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag Bescheid, wohin du es wirfst! Ich hätte einen Abnehmer...

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Tutorial steht:

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

Autor: The Daz (Gast)
Datum:

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

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vergiss einfach meinen schwachsinn.

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: F_CPU sind 4 MHz !

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karlheinz!

Und hat es funktioniert?

Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schon wieder?

Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, das doppelte Posting war definitiv KEINE Absicht.
Bitte 1000mal um Entschuldigung

Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.