Forum: Mikrocontroller und Digitale Elektronik ATmega644 UART


von Niclas (Gast)


Lesenswert?

Hallo,

ich versuche mit dem ATmega644 eine UART Verbindung zum PC herzustellen, 
bzw. soll der ATmega ein paar Zeichen senden. Ich erhalte jedoch 
keinerlei Reaktion am PC (mit CP2102 und Putty und mit Arduino versucht 
zu lesen).

Fuses sind wie folgt gesetzt: Low: 0xE2 High: 0x99 Extended: 0xFF.

Ich gehe davon aus, dass der ATmega bei diesen Einstellungen mit 8MHz 
läuft. Nach vielen Fehlversuchen, habe ich den Code auf folgendes 
minimiert:
1
#define F_CPU 8000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
#define baudrate 9600UL
7
void uart0_init(void);
8
void uart0_putchar(unsigned char c);
9
10
int main()
11
{
12
  uart0_init();
13
  
14
  while (1)
15
  {
16
    uart0_putchar('t');
17
  }
18
  
19
  return 0;
20
}
21
22
void uart0_init(void)
23
{
24
  UCSR0A = (1<<U2X0);
25
  UBRR0H = (uint8_t) ((F_CPU / (8 * baudrate)) - 1)>>8;
26
  UBRR0L = (uint8_t) (F_CPU / (8 * baudrate)) - 1;
27
  UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);    // Asynchron 8N1
28
  UCSR0B = (1<<TXEN0) | (1<<RXEN0);      // tx & rx enable
29
}
30
31
void uart0_putchar(unsigned char c)
32
{
33
  loop_until_bit_is_set( UCSR0A, UDRE0 );
34
  UDR0 = c;
35
}

Ich habe leider kein Oszilloskop, aber habe die Spannung am TX Pin 
gemessen. Diese beträgt ca. 2,3V. Wenn ich nichts übertrage, liegt diese 
bei 4,78V. Die Spannung am RX Pin liegt bei 0V.

Ich hoffe, hier weiß jemand woran es liegen könnte.

Gruß Niclas

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Schaltplan? Pegelwandler wie MAX232 verwendet?

von Niclas (Gast)


Lesenswert?

Hi,

an den ATmega ist nur eine Strom-/Spannungsquelle angeschlossen und der 
UART (TX und GND). Es ist kein Pegelwandler zwischengeschaltet. Der 
CP2102 sollte 5V sowie 3V3 unterstützen.

Gruß Niclas

von Falk B. (falk)


Lesenswert?


von Michael U. (amiga)


Lesenswert?

Hallo,


Niclas schrieb:
> an den ATmega ist nur eine Strom-/Spannungsquelle angeschlossen und der
> UART (TX und GND). Es ist kein Pegelwandler zwischengeschaltet. Der
> CP2102 sollte 5V sowie 3V3 unterstützen.

wenn es einer der ebay/Amazon-üblichen China-USB-Wandler ist: bei meinen 
ist die TX /RX-Beschriftung so, daß TX an TX des AVR und RX an RX 
gehört.
Mal TX und RX zum Test tauschen, Deine Messung sagt nämlich, daß Deine 
Software vermutlich sendet.

Gruß aus Berlin
Michael

von Stefan F. (Gast)


Lesenswert?

Zur Kontrolle der Taktfrequenz: Schreibe ein LED-Blinker Programm und 
kontrolliere, ob die Blinkfrequenz korrekt ist.

Zur Kontroller der Hardware: Schließe LED's mit Vorwiderständen an Rx 
und TX and und schaue nach, ob sie flackern. Je niedriger die Bitrate 
eingestellt ist, umso besser kann man sie flackern sehen.

Klemme den AVR vom USB-UART Chip ab. Verbinde am USB-UART Chip Rx mit 
TX. Dann prüfe mit einem Terminalprogramm, ob die Zeichen, die du damit 
sendest, als "Echo" zurück kommen.

Zur Einstellung der Baudrate: Schau Dir mal die Dokumenatation von 
setbaud.h an. Wenn du diese verwendest, brauchst du wenigstens deine 
Berechnung nicht zu hinterfragen, was die Fehlersuche vereinfacht.

http://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html

Es könnte auch hilfreich sein, erstmal ein Programm zu testen, bei dem 
schon bekannt ist, dass es funktionirt. Wenn es bei Dir nicht 
funktioniert, kann es nur ein Hardwareproblem sein. Nimm das: 
http://stefanfrings.de/avr_hello_world/index.html

von Stefan F. (Gast)


Lesenswert?

Zu den Spannungen am Rx und Tx Pin:

Tx ist ein Ausgang. In Ruhelage (ohne Datenübertragung) sollte dort fast 
die volle Versorgungsspannung heraus kommen, also fast 3,3V oder 5V.

Rx ist ein Eingang. Dort kommt keine Spannung heraus. Aber Rx ist ja mit 
dem Tx des "anderen" IC verbunden. Deswegen solltest du dort in Ruhelage 
ebenfalls fast die volle Versorgungsspannung messen.
1
              1k Ohm  LED
2
           +---[===]--|>|---| GND
3
           |
4
Rx o-------+--------------<----------o Tx
5
6
Tx o-------+-------------->----------o Rx
7
           |
8
           +---[===]--|>|---| GND
9
              1k Ohm  LED

In Ruhelage müssen beide LED's leuchten. Wenn Daten übertragen wird, 
flackert die LED, die an der Tx Leitung des Senders angeschlossen ist.

Ich hoffe das hilft Dir etwas weiter.

von Niclas (Gast)


Lesenswert?

Vielen Dank für die zahlreichen Antworten!

Die AVR-Checkliste bin ich gestern Abend schon durchgegangen und auch 
die LED hatte ich bereits an die TX Leitung angeschlossen. Dieses hat 
auch wie zu erwarten war geflackert.

Es lag tatsächlich an der missverständlichen Beschriftung des CP2102. 
Der Anschluss muss wie folgt aussehen:

AVR TXD <----> CP2102 TXD

Wahrscheinlich ist es gestern zu spät geworden, um darauf selber zu 
kommen.

Vielen Dank für die schnelle Hilfe!

Gruß Niclas

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.