Forum: Mikrocontroller und Digitale Elektronik ATmega16A Max232 Sendeproblem


von Joerg J. (schorsch1278)


Lesenswert?

Hallo Zusammen !

Ich beschäftige mich seit einigen Wochen mit den AVR Chips. Zur Zeit 
versuche ich über die UART Schnittstelle Zeichen einzulesen.

Die Verdrahtung habe ich nach der Schaltung hier 
[[http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART]] 
aufgebaut, also die Erste ganz oben. Die Verbindung zum PC geht über 
einen USB to RS232 Stick von Conrad(FTDI).

Also, ohne die Verdrahtung (SUB D9(Pin3) zu Max232(Pin13)) versendet der 
AVR wunderbar Zeichen an mein Terminal Programm. Aber sobald ich die 
Verbindung Pin13 zu Pin3 herstelle, empfange ich nichts mehr.
Wenn ich im Terminal auf Senden drücke empfange ich kryptische Zeichen. 
Je länger die Zeichenkette die ich Sende je länger auch die Zeichen die 
ich empfange. Das merkwürdige ist, dass ich das im Code(s.u.) nicht 
eingestellt habe.

Ich verstehe nicht warum nichts mehr funktioniert sobald ich die 
Verbindung herstelle.
Für jegliche Vorschläge bin sehr Dankbar

Gruß Jörg

1
#include <avr/io.h>
2
#include <util/delay.h>
3
#define F_CPU 8000000
4
#define BAUD 9600
5
#define MYUBRR (F_CPU/(16L*BAUD))-1
6
7
void inituart();
8
void sendletter(unsigned char);
9
10
int main(void)
11
{
12
  inituart();
13
  while(1)
14
  {
15
  sendletter('.');
16
  }  
17
}
18
19
void inituart()
20
{
21
  UBRRH = (MYUBRR >> 8);
22
  UBRRL = MYUBRR;
23
  UCSRB = (1<<RXEN)|(1<<TXEN);
24
  UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
25
}
26
27
void sendletter(unsigned char letter)
28
{
29
  _delay_us(500);
30
  while ( !( UCSRA & (1<<UDRE)) );
31
  UDR = letter;
32
}

von Rainer U. (r-u)


Lesenswert?

ist zwar nicht von Belang, aber wofür ist das

 _delay_us(500); ?

Ansonsten: Evtl. Leitungen vertauscht, so dass Ausgänge aufeinander 
treiben oder der Max232 in die Knie geht?

Mach mal ein paar Loop-Tests (Verbindungen danach natürlich wieder 
lösen):

1) Am AVR rx und tx verbinden. alles was Du sendest, muss genauso wieder 
ankommen.
2) das gleiche "hinter" dem Max232 (vom uC aus gesehen)
3) am USB-Adapter auf PC-Seite rx und tx verbinden - alles was Du 
eintippst, sollte als echo zurückkommen
4) das gleiche "hinter" dem Max232 (auf AVR-Seite)

wenn das alles geht - bleibt nicht viel..

von Hubert G. (hubertg)


Lesenswert?

Du musst einen Fehler in deiner Hardware/Verkabelung haben.

von Joerg J. (schorsch1278)


Lesenswert?

Hallo !!
Danke für die schnelle Antwort.

Ich habe zuerst rx und tx verbunden und schon ging es los.
Ich bekomme das Zeichen 157(dez) auf dem Terminal ausgegeben. Das 
bedeutet also dass mein PC ständig sendet und dadurch alles blockiert ?! 
Oder ?

von Joerg J. (schorsch1278)


Lesenswert?

@hubertg
ich habe die Schaltung sorgfältig kontrolliert und genau so aufgebaut 
wie im Schaltplan. Daher war ich ja so ratlos

von Dietrich L. (dietrichl)


Lesenswert?

GND irgendwo nicht verbunden? Leitungsbruch, kalte Lötstellen, ...?

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.