ATmega644 UART

Gast #4557359
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
#4557430
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
Gast #4557439
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
Gast #4557529
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.
Gast #4557644
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren