Forum: Mikrocontroller und Digitale Elektronik Problem mit UART RX und Atmega32


von Sebastian (Gast)


Lesenswert?

Hallo,

ich wende mich an euch, da ich nun seit fast einer Woche nach einer 
Lösung für mein Problem suche, ich leider aber keine finde.

Vorhaben:

Ich möchte eine serielle Kommunikation zwischen meinem Atmega32 und 
meinem PC (senden und empfangen) realisieren.

Konfiguration:

uC: Atmega32
Spannung: 5V DC
ext. Quarz: 16 MHz (Reichelt Art.-Nr. OSZI 16,000000)
RS232-Treiber: MAX232CPE
Baut: 19200
Mode: 8N1 (asynchron)
Fuses:
-----------------------
OCDEN = nicht gesetzt!
JTAGEN = nicht gesetzt!
SPIEN = gesetzt!
CKOPT = gesetzt!
EESAVE = nicht gesetzt!
BOOTSZ = 2048W_3800
BOOTRST = nicht gesetzt!
BODLEVEL = 2V7
BODEN = nicht gesetzt!
SUT_CKSEL = EXTHIFXTALRES_16KCK_64MS

Fuse Register H: 0xC9
Fuse Register L: 0xFF
-----------------------
Kabel: USB > 1 x Serial Adapter von Delock
Editor: Atmel Studio 6
Programmer: ALL-AVR Programmer

Problem:

Ein Zeichen oder eine Zeichenkette an den PC zusenden funktioniert 
einwandfrei. Wenn ich allerdings etwas an den uC zurücksende und dieses 
auf einem Display ausgeben möchte oder es wieder an den PC zurücksende, 
werden nur wirre Zeichen oder nicht zum ursprünglichen Input passende 
Zeichen am PC ausgegeben bzw auf dem Display dargestellt.

Ich habe es bereits auch mit einem 8 MHz ext. Quarz und einer Baut von 
9600 ausprobiert, jedoch auch ohne Erfolg. Das Tutorial bin ich bereits 
mehrfach  an den betreffenden Stellen durchgegangen und habe auch den 
Quellcode verwendet.

Quellcode:
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
#define F_CPU 16000000 /* evtl. bereits via Compilerparameter definiert */
6
#define BAUD 19200
7
#include <util/setbaud.h>
8
9
#define UART_MAXSTRLEN 10
10
11
volatile uint8_t uart_str_complete = 0;     // 1 .. String komplett empfangen
12
volatile char uart_string[UART_MAXSTRLEN + 1] = "";
13
volatile char uart_string_result;
14
15
void uart_init(void)   
16
{
17
   UBRRH = UBRRH_VALUE;
18
   UBRRL = UBRRL_VALUE;
19
   
20
#if USE_2X
21
   /* U2X-Modus erforderlich */
22
   UCSRA |= (1 << U2X);
23
#else
24
   /* U2X-Modus nicht erforderlich */
25
   UCSRA &= ~(1 << U2X);
26
#endif
27
   UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
28
   UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  // UART RX, TX und RX Interrupt einschalten
29
}
30
31
int uart_putc(unsigned char c)
32
{
33
  while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
34
  {
35
  }
36
  
37
  UDR = c;                      /* sende Zeichen */
38
  return 0;
39
}
40
41
/* puts ist unabhaengig vom Controllertyp */
42
void uart_puts (char *s)
43
{
44
  while (*s)
45
  {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
46
    uart_putc(*s);
47
    s++;
48
  }
49
}
50
51
ISR(USART_RXC_vect)
52
{
53
  static uint8_t uart_str_count = 0;
54
  unsigned char nextChar;
55
  
56
  // Daten aus dem Puffer lesen
57
   nextChar = UDR;
58
59
   //wenn uart_string gerade in Verwendung, neues Zeichen verwerfen
60
  if( uart_str_complete == 0 )
61
  {  
62
    // Daten werden erst in string geschrieben, wenn nicht String-Ende/max Zeichenlänge erreicht ist/string gerade verarbeitet wird
63
    if( nextChar != '\n' && nextChar != '\r' && uart_str_count < UART_MAXSTRLEN - 1 ) 
64
    {
65
      uart_string[uart_str_count] = nextChar;
66
      uart_str_count++;
67
    }
68
    else 
69
    {
70
      uart_string[uart_str_count] = '\0';
71
      uart_str_count = 0;
72
      uart_str_complete = 1;
73
    }
74
  }
75
}

Ich habe auch bereits verschiedene Tests durchgeführt, u.a. die 
Taktprüfung wie im Artikel "AVR_Checkliste" beschrieben (die LED blinkt 
im Sekundentakt).

Des Weiteren habe ich die Interrupt-Routine (ISR) wie folgt umgebaut:

Variante 1:
1
ISR(USART_RXC_vect)
2
{
3
  uint8_t sra = UCSRA;
4
  uint8_t ret = UDR;
5
  
6
  if ( sra & ( 1 << FE )  ) uart_putc('F');
7
  if ( sra & ( 1 << DOR ) ) uart_putc('D');
8
}

Hierbei empfange ich ausschließlich 'F'. Also habe ich demnach ein 
Framing Error Problem.

Variante 2:
1
ISR(USART_RXC_vect)
2
{
3
  nextChar = UDR;
4
  uart_putc(nextChar);
5
}

Hierbei kommen dann wie o.g. wieder die wirren Zeichen ins Spiel.

Da ich überhaupt keine Idee mehr habe, hoffe ich auf einen kleinen Tipp 
von euch. Ich würde mich sehr freuen.

Vielen Dank im Voraus.

Viele Grüße

Sebastian

von g457 (Gast)


Lesenswert?

Wie hast Du den Max232 ∗genau∗ beschaltet? Was sieht das Ergebnis aus 
wenn Du den µC entfernst, TX und RX am Max232 brückst und dann vom PC 
(wieder zurück an den PC) sendest?

von Sebastian (Gast)


Lesenswert?

Hallo,

erstmal vielen Dank für deine Antwort.

Beschaltet ist der MAX232 wie im Tutorial angegeben.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

Wenn ich RX und TX am RS232 brücke, dann werden leider ebenfalls wirre 
Zeichen ausgegeben bzw. empfangen.

Gruß

Sebastian

von g457 (Gast)


Lesenswert?

> Wenn ich RX und TX am RS232 brücke, dann werden leider ebenfalls wirre
> Zeichen ausgegeben bzw. empfangen.

Dann ist es schon mal nicht (nur) der µC. Was passiert wenn Du den 
Max232 ebenfalls entfernst und dann RX und TX brückst (behelfsweise: 
direkt am Delok-Adapter RX und Tx brücken)?

Falls es dann funktioniert isses der Max232 oder dessen Umgebung. Falls 
nicht liegts am USB-Seriell-Wandler (oder noch high-leveliger).

von Sebastian (Gast)


Lesenswert?

OK, erstmal vielen Dank für deinen Tipp.

Ich werde das testen. Noch eine kleine Frage zu meiner Bestätigung: Die 
Baudrateneinstellungen, Stopbit, etc. sind für diesen und den vorherigen 
MAX232 Test doch egal, oder?

Gruß

Sebastian

von Sebastian (Gast)


Lesenswert?

Hallo,

also wenn ich RX und TX am Kabel selbst brücke, dann funktioniert das 
einwandfrei.

Am MAX232 kann es auch nicht liegen, da ich diesen bereits getauscht 
habe und der Fehler gleichbleibend ist.

Woran könnte es noch liegen? Gibt es da Erfahrungswerte?

Vielen Dank im Voraus.

Gruß

Sebastiam

von Dietrich L. (dietrichl)


Lesenswert?

Sebastian schrieb:
> Am MAX232 kann es auch nicht liegen, da ich diesen bereits getauscht
> habe und der Fehler gleichbleibend ist.

Kann es schon, wenn in der Schaltung noch ein Fehler ist ...
Mess auch mal die Spannungen an den Pins 2 (V+) und 6 (V-). Da sollte so 
um die +/-8...9V sein.

Gruß Dietrich

von Sebastian (Gast)


Lesenswert?

Mhh...,

also irgendwas stimmt da nicht!

Wenn ich mein Multimeter auf 9V BAT stelle, dann messe ich an Pin-2 und 
Pin-6 2.24V. Stelle ich das Multimeter auf 20V AC und drücke dann die DC 
Taste (ich habe das so verstanden, dass ich damit dann größere 
Spannungen als 9V in DC messen kann), dann messe ich 18,14V.

Meine Schaltung hat zwei Eingangsspannungen von je 12V die dann mit je 
einem Spannungswandler auf 5V gebracht werden.

Der erste Eingang ist für das LCD, der zweite Eingang für die restliche 
Schaltung, da ich mit nur einem Eingang Probleme hatte 
(Displaybeleuchtung veränderte sich wenn ich eine LED z. B. über einen 
Schlüsselschalter eingeschaltet habe).

Die beiden 5V Ausgänge des Spannungswandlers gehen getrennt zu den 
Verbrauchern (wie o. g.), Masse wird über einen zentralen Punkt 
zusammengeführt.

An beiden Spannungswandlern gehen gemessen 5V ab!

von Dietrich L. (dietrichl)


Lesenswert?

Sebastian schrieb:
> Wenn ich mein Multimeter auf 9V BAT stelle, dann messe ich an Pin-2 und
> Pin-6 2.24V.

Was ist denn das für ein Messbereich? Ich vermute mal, dass das eine 
Spannungsmessung unter Last ist. Dann könnte der Laststrom für den 
MAX232 zu groß sein und die Spannung geht in die Knie.

> Stelle ich das Multimeter auf 20V AC und drücke dann die DC
> Taste (ich habe das so verstanden, dass ich damit dann größere
> Spannungen als 9V in DC messen kann), dann messe ich 18,14V.

Hast Du keinen "normalen" 20VDC-Bereich, oder wird DC so gemessen? Das 
finde ich komisch. Was ist das für ein Gerät bzw. was sagt die 
Bedienungsanleitung?

Hast Du zwischen Pin 2 und 6 gemessen? Wenn das so ist, dann stimmt das 
mit den 18V ja und die Ladungspumpen im MAX232 arbeiten korrekt. Meine 
Angabe (+/-8...9V) bezog sich auf die Spannung am jeweiligen Pin gegen 
GND.

Gruß Dietrich

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Nur eine kurze Zwischenfrage: Die Kondensatoren für die Ladungspumpen am 
MAX232 hast du aber alle 4 nach Datenblatt angeschlossen? Wenn nicht, 
würde das nämlich die Fehler beim Senden MC->PC erklären, denn der 
Empfang PC->MC geht auch ohne.

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

Hallo zusammen,

@Dietrich L.

Das Gerät ist von V&A Instruments VA16 3in1.

Ja ich habe direkt zwischen Pin 2 und 6 gemessen und bin da auf 18V 
gekommen.

Wenn ich Pin 2 und GND messe, komme ich auf 8,98V. Pin 6 und GND macht 
9,32V.

@Matthias Sch.

Nein, nach Datenblatt habe ich den MAX nicht angeschlossen!

Beschaltet ist der MAX232 wie im AVR-Tutorial angegeben.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

Ich sehe da aber gerade auch keinen Unterschied, oder verstehe ich da 
etwas nicht?

Noch eine Info zu den von mir verwendeten Kondensatoren:

Ich habe diese bei Reichelt erworben und folgende Beschriftung ist zu 
lesen:

1µF 63V

Ist das mit den 63V ein Problem?

Vielen Dank im Voraus.

Gruß

Sebastian

von Dirk M. (dmd)


Lesenswert?

>Ist das mit den 63V ein Problem?
Nö.

Das sind doch sicherlich Elko's. Sind die auch alle richtig gepolt? Vor 
allem der an Pin 6 (die 9,32V müssten ja neg. sein).

Was Matthias schreibt klingt nämlich sehr einleuchtend.

-Dirk-

von Sebastian (Gast)


Lesenswert?

Dirk M. schrieb:
> Sind die auch alle richtig gepolt? Vor
> allem der an Pin 6 (die 9,32V müssten ja neg. sein).

Hi,

ja sind sie. Wenn ich Pin 6 mit GND messe, sehe -9,32V.

Ich habe es wie gesagt wie im Tutorial angegeben angeschlossen.

Was könnte ich denn noch machen?

Danke.

Viele Grüße

Sebastian

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sebastian schrieb:
> Was könnte ich denn noch machen?

Du musst als erstes sicherstellen, das der PC von ihm selbst 
ausgesendete Zeichen korrekt empfängt, wenn du auf der 5-Volt Seite (die 
Anschlüsse zum AVR) des MAX232 TXD und RXD direkt brückst. Solange das 
nicht funktioniert, brauchst du am AVR gar nicht weiter zu suchen.
Das sollte unabhängig von der Baudrate funktionieren.
Wenn das nicht geht, überprüfe doppelt die Verdrahtung des MAX, da stimm 
dann was nicht, oder der MAX ist putt. Da er aber 2 Sende und 
Empfangsstufen hat, kannst du in dem Fall nochmal den anderen 
Pegelwandler probieren.
Ich habe übrigens schon mehrere MAX durch etwas zu hohe Betriebsspannung 
gekillt, das mag der Bursche gar nicht.

: Bearbeitet durch User
von Dietrich L. (dietrichl)


Lesenswert?

Matthias Sch. schrieb:
> wenn du auf der 5-Volt Seite (die
> Anschlüsse zum AVR) des MAX232 TXD und RXD direkt brückst

... und den ATmega32 vorher entfernst bzw. die beiden Leitungen zum 
ATmega32 unterbrichst!

von Sebastian (Gast)


Lesenswert?

Hallo,

also ich habe den Atmega32 entfernt und Pin 14 und 15 am IC-Sockel des 
Atmegas gebrückt. Ich habe leider das gleiche Problem.

Wenn ich direkt Pin 11 und 12 am MAX brücke habe ich das gleiche 
Ergebnis. Der Verbindungsweg zum Atmega ist also wahrscheinlich OK.

Wenn ich den MAX gegen einen neuen tausche, bleibt das Problem weiterhin 
bestehen.

Verkabelung:

Ich habe nochmals die Verkabelung geprüft und habe zwei Fehler 
festgestellt.

Ich hatte die Polung der Kondensatoren aus dem Tutorial (an Pin 1-3 und 
4-5) falsch in meinen Schaltplan übernommen. Ich habe das angepasst und 
getestet (ohne Atmega nur mit Brücke am IC-Sockel des Atemgas (Pin 14 
und 15). Kein Erfolg.

Dann habe ich wieder einen neuen MAX232 genommen, auch wieder ohne 
Erfolg!

Jetzt sehe ich maximal noch an einer Stelle eine Möglichkeit:

Die Verkabelung von Pin 15 und 16 am Max habe ich so gemacht:

Von Pin 15 auf den - Pol des 1µF Kondensators, von Pin 16 auf den + Pol 
des 1µF Kondensators. Dann gehe ich von diesem Lötpunkt am Kondensator 
direkt auf GND bzw. am anderen Lötpunkt auf +5V.

Ist da vielleicht der Hund begraben?

Vielen Dank im Voraus.

Gruß

Sebastian

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sebastian schrieb:
> Die Verkabelung von Pin 15 und 16 am Max habe ich so gemacht:
>
> Von Pin 15 auf den - Pol des 1µF Kondensators, von Pin 16 auf den + Pol
> des 1µF Kondensators. Dann gehe ich von diesem Lötpunkt am Kondensator
> direkt auf GND bzw. am anderen Lötpunkt auf +5V.

An Pin 15 kommt deine Schaltungsmasse, an Pin 16 kommen die +5 Volt von 
dem Board (die gleichen, mit denen du den Mega speist).
Gut, jetzt kommt ein 1µF zwischen Pin16 (+5V) und Pin 2, wobei der 
Pluspol des Elkos an Pin 2(!) geht.
Und jetzt kommt ein 1µF an Pin 15 (GND) und Pin 6, der Pluspol dieses 
Elkos geht an Pin 15 (GND). Das sieht zwar auf den ersten Blick auch 
falsch aus, aber an Pin 6 steht eine negative Spannung gegenüber GND.

Das einzig verwirrende im Tutorial ist, das die Versorgung des MAX extra 
gezeichnet ist. Dort ist auch noch Elko Nummer 5 gezeigt, der zwischen 
Pin 16 und 15 liegt und nur zum Abblocken dient. Die anderen 4 Elkos 
sind für den Betrieb der Ladungspumpe unverzichtbar.

von Sebastian (Gast)


Lesenswert?

Hallo Matthias,

sorry, aber ich bin noch nicht ganz sicher, ob ich das verstanden habe. 
Ich fasse mal zusammen wie ich das jetzt komplett verkabeln würde:

MAX PIN 1 -> "+Pol ELKO (C2)" -> "-Pol ELKO (C2)" -> MAX PIN 3
MAX PIN 4 -> "+Pol ELKO (C3)" -> "-Pol ELKO (C3)" -> MAX PIN 5
MAX PIN 11 -> ATMEGA32 PIN 15
MAX PIN 12 -> ATMEGA32 PIN 14
MAX PIN 13 -> SUB-D9 PIN 3
MAX PIN 14 -> SUB-D9 PIN 2
MAX PIN 15 -> GND
MAX PIN 16 -> +5V
MAX PIN 15 -> "+Pol ELKO (C5)" -> "-Pol ELKO (C5)" -> MAX PIN 6
MAX PIN 16 -> "-Pol ELKO (C4)" -> "+Pol ELKO (C4)" -> MAX PIN 2

Also gehen von Pin 15 und 16 mehrere Kabel ab!?!

Benötige ich diesen dann jetzt auch noch?
MAX PIN 15 -> "-Pol ELKO (C1)" -> "+Pol ELKO (C1)" -> PIN 16

Vielen Dank

Gruß

Sebastian

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sebastian schrieb:
> MAX PIN 1 -> "+Pol ELKO (C2)" -> "-Pol ELKO (C2)" -> MAX PIN 3
> blabla
> MAX PIN 16 -> "-Pol ELKO (C4)" -> "+Pol ELKO (C4)" -> MAX PIN 2

Das sieht richtig aus.

Sebastian schrieb:
> Also gehen von Pin 15 und 16 mehrere Kabel ab!?!

Ja, das ist bei Baugruppen oft so, das die Spannungsversorgung an 
mehrere Sächelchen angeschlossen wird :-) Sogar der Mega32 wird daran 
angeschlossen.

Sebastian schrieb:
> Benötige ich diesen dann jetzt auch noch?
> MAX PIN 15 -> "-Pol ELKO (C1)" -> "+Pol ELKO (C1)" -> PIN 16

Das ist der einzige, der optional ist. Schaden tut es aber nicht, wenn 
du ihn einbaust, persönlich würde ich es empfehlen.

von Sebastian (Gast)


Lesenswert?

Super, vielen Dank.

Ich werde das gleich mal umsetzten und das Ergebnis hier reinschreiben!

Viele Grüße

Sebastian

von Sebastian (Gast)


Lesenswert?

Hi,

also ich habe das jetzt genau so verkabelt wie ich oben geschrieben habe 
und es noch zwei mal geprüft.

Jetzt geht nichts mehr! Selbst der Atmega32 ist nicht mehr zu flashen! 
Der Spannungswandler ist so heiß, dass man gefühlt ne Zigarette dran 
anzünden könnte. Das ist dann leider nur das falsche Projekt, denn das 
hier sollte kein Zigarettenanzünder werden! :-)

Also eins steht fest: Wenn UART und ich mal Freunde werden, dann wird 
das eine Freundschaft für die Ewigkeit, da der Weg dahin scheinbar sehr 
steinig ist! :-)

Hast Du noch eine Idee?

Gruß

Sebastian

von Sebastian (Gast)


Lesenswert?

So habe in der Zwischenzeit die Sache wieder rückgängig machen können, 
so dass zumindest das Senden an den PC wieder geht und auch der Atmega 
wieder läuft.

Verkabelt habe ich jetzt so:

MAX PIN 1 -> "+Pol ELKO (C2)" -> "-Pol ELKO (C2)" -> MAX PIN 3
MAX PIN 2 -> "+Pol ELKO (C4)" -> "-Pol ELKO (C4)" -> +5V
MAX PIN 4 -> "+Pol ELKO (C3)" -> "-Pol ELKO (C3)" -> MAX PIN 5
MAX PIN 6 -> "-Pol ELKO (C5)" -> "+Pol ELKO (C5)" -> GND
MAX PIN 11 -> ATMEGA32 PIN 15
MAX PIN 12 -> ATMEGA32 PIN 14
MAX PIN 13 -> SUB-D9 PIN 3
MAX PIN 14 -> SUB-D9 PIN 2
MAX PIN 15 -> GND
MAX PIN 16 -> +5V

Den Kondensator zwischen Pin 15 und 16 am MAX232 habe ich jetzt erstmal 
weggelassen, da ich keinen 1µF Keramikkondensator habe.

Ich hatte vorher dort einen ELKO angeschlossen, da ich jetzt erst in der 
Beschreibung des Tutorials gesehen habe, dass dort ein 
Keramikkondensator hin soll.

Da im TutorialSo habe in der Zwischenzeit die Sache wieder rückgängig 
machen können, so dass zumindest das Senden an den PC wieder geht und 
auch der Atmega wieder läuft.

Verkabelt habe ich jetzt so:

MAX PIN 1 -> "+Pol ELKO (C2)" -> "-Pol ELKO (C2)" -> MAX PIN 3
MAX PIN 2 -> "+Pol ELKO (C4)" -> "-Pol ELKO (C4)" -> +5V
MAX PIN 4 -> "+Pol ELKO (C3)" -> "-Pol ELKO (C3)" -> MAX PIN 5
MAX PIN 6 -> "-Pol ELKO (C5)" -> "+Pol ELKO (C5)" -> GND
MAX PIN 11 -> ATMEGA32 PIN 15
MAX PIN 12 -> ATMEGA32 PIN 14
MAX PIN 13 -> SUB-D9 PIN 3
MAX PIN 14 -> SUB-D9 PIN 2
MAX PIN 15 -> GND
MAX PIN 16 -> +5V

Den Kondensator zwischen Pin 15 und 16 am MAX232 habe ich jetzt erstmal 
weggelassen, da ich keinen 1µF Keramikkondensator habe.

Ich hatte vorher dort einen ELKO angeschlossen, da ich jetzt erst in der 
Beschreibung im Tutorial gesehen, dass dort ein Keramikkondensator. hin 
soll.

Da im Tutorial die Symbole und µF Größen auf der Abbildung des 
Schaltplans gleich sind, habe ich das wohl im Text überlesen.

Tja, aber mit meinem Atmega32 empfangen kann ich leider immer noch nicht 
-  soll heißen, dass ich Kontaktprobleme eigentlich auch ausschließen 
kann, da halt alles neu gelötet wurde.

Das ist ja echt zum Mäuse melken mit dem UART!

Viele Grüße

Sebastian

von HertzFrequenz (Gast)


Lesenswert?

Wie wir durch Tests schon festgestellt haben, hast Du kein Problem mit 
dem UART sondern mit dem Pegelwandler, dem MAX.

Es ist also zum Mäusemelken mit dem MAX :-)

Mache am besten mal ein Bild vom Aufbau. Einmal vom Gesamtaufbau. Beide 
Seiten (Bauteil und Lötseite) und dann nochmal ein Bild auf dem groß nur 
der MAX, die dazugehörigen Kondensatoren zu sehen sind und davon auch 
wieder die Unter- sprich Lötseite.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

HertzFrequenz schrieb:
> Mache am besten mal ein Bild vom Aufbau.

Ja bitte. Deine Beschreibung ist ja richtig, aber ob das so auf dem 
Board umgesetzt ist, ist eben die andere Frage. Benutzt du auf der PC 
Seite einen USB-RS232 Wandler? Siehst du die Zeichen vom PC am PC, wenn 
du am SubD 9 die Pins 2 und 3 brückst (ohne MAX)? Wenn auch das nicht 
geht, ist dein Kabel falsch oder unterbrochen.
Sobald die Ladungspumpen laufen, ist der MAX nämlich recht zuverlässig.
Eine Verbindung vermisse ich übrigens:
GND -> SUB-D9 PIN 5

Sebastian schrieb:
> Den Kondensator zwischen Pin 15 und 16 am MAX232 habe ich jetzt erstmal
> weggelassen, da ich keinen 1µF Keramikkondensator habe.

Leg das nicht auf die Goldwaage, das kann auch ein Elko sein, solange er 
richtig gepolt ist.

: Bearbeitet durch User
von Dietrich L. (dietrichl)


Lesenswert?

Sebastian schrieb:
> Tja, aber mit meinem Atmega32 empfangen kann ich leider immer noch nicht

Wie ist das denn jetzt zu verstehen?
Zuerst sollte doch das Senden + Empfangen ohne ATmega32 gehen: µC 
entfernen und Tx mit Rx verbinden. Dann sollte man am Terminal das Echo 
des gesendeten sehen.
Geht das ohne µC?
- Wenn ja, ist die Schaltung mit dem  MAX232 in Ordnung. Erst dann kommt 
der ATmega32 dazu.
- Wenn nein, ist das Problem noch beim MAX232 und muss gelöst werden, 
bevor der µC angeschlossen wird.

Gruß Dietrich

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen und danke für die vielen Antworten.

Erstmal sorry für meinen letzten Beitrag. Da ist wohl irgendwas mächtig 
schiefgegangen!

HertzFrequenz schrieb:
> Mache am besten mal ein Bild vom Aufbau.

Tja ich glaube, dass willst Du nicht wirklich sehen. :-)

Wenn Du auf die Rückseite meiner Schaltung noch Tomatensauce gibst, hast 
Du ein tolles (wenn auch bestimmt zähes) Nudelgericht zu Mittag. ;-) 
Soll also heißen, dass man da auf einem Bild nicht viel erkennen wird 
wegen der ganzen Kabel.

Ein Bild von der Vorderseite habe ich eingefügt.

Matthias Sch. schrieb:
> Benutzt du auf der PC
> Seite einen USB-RS232 Wandler?

Ja! Ich hatte das allerdings schon getestet und es funktioniert 
einwandfrei.

Matthias Sch. schrieb:
> Eine Verbindung vermisse ich übrigens:
> GND -> SUB-D9 PIN 5

Stimmt, die hatte ich vergessen hier mit aufzuführen, aber sie ist 
vorhanden.

Matthias Sch. schrieb:
> Leg das nicht auf die Goldwaage, das kann auch ein Elko sein, solange er
> richtig gepolt ist.

OK! Ich wusste nicht ob das einen Unterschied machen würde, ob man einen 
ELKO oder Keramikkondensator verwendet.

Dietrich L. schrieb:
> Zuerst sollte doch das Senden + Empfangen ohne ATmega32 gehen: µC
> entfernen und Tx mit Rx verbinden. Dann sollte man am Terminal das Echo
> des gesendeten sehen.
> Geht das ohne µC?

Nein, leider nicht. Ich empfange hier nur wirre Zeichen, wobei diese zu 
99% gleichbleibend sind. Soll heißen, dass wenn ich z. B. c eingebe, 
immer ein N ausgegeben wird. Ich habe dann auch nochmal den MAX 
getauscht, mit einem habe z. B. nichts empfangen können, mit den anderen 
dann halt die wirren Zeichen.

Könnte es ein Problem sein, dass meine ELKOs wie auf dem Bild zu sehen 
einen zu großen Abstand zum MAX haben, oder ist das egal?

Vielen Dank und viele Grüße

Sebastian

von D. V. (mazze69)


Lesenswert?

Alle notwendigen Cs (100nF), z.B. rund um den Spannungsregler und dem 
µC, hast du sicherlich auf der Rückseite der Platine angelötet?

von Sebastian (Gast)


Lesenswert?

Hallo,

D. V. schrieb:
> Alle notwendigen Cs (100nF), z.B. rund um den Spannungsregler und dem
> µC, hast du sicherlich auf der Rückseite der Platine angelötet?

Ich habe die auf der Vorderseite! Schaue unten links im Bild! Die sind 
dann mit den jeweiligen Bauteilen auf der Rückseite via Schaltlitze 
verbunden!

Gruß

Sebastian

von Marcel (Gast)


Lesenswert?

Ich würd sagen die Cs sind zu weit von den ICs weg. Zumindest die 100nf 
müssen direkt davor.

von Dietrich L. (dietrichl)


Lesenswert?

Marcel schrieb:
> Ich würd sagen die Cs sind zu weit von den ICs weg. Zumindest die 100nf
> müssen direkt davor.

So sehe ich das auch! Du brauchst also direkt an den ICs zwischen +5V 
und GND 100nF Keramikkondensatoren:
- vor und hinter dem Spannungsregler
- am MAX232
- am µC
- am Quarzgenerator

Gruß Dietrich

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dietrich L. schrieb:
> - am MAX232

Und an diesem auch bitte die Kondensatoren für die Ladungspumpe so nah 
ran wie möglich. Erstens wird die Schaltung dann übersichtlicher und 
zweitens streuen die Takte nicht über die ganze Platine. Hätten wir das 
Bild schon vorher mal gesehen, wären wir schneller da angekommen.

von Sebastian (Gast)


Lesenswert?

Hallo zusammen,

was soll ich sagen, es funktioniert!

Erstmal vielen vielen Dank an euch! Das hat mich jetzt über eine Woche 
gekostet!

Aber aller Anfang ist ja bekanntlich schwer! ;-)

Nun zum Fehler:

Ich habe die Kondensatoren so nah wie möglich an den MAX232 gebracht! 
Nach Fertigstellung der Lötarbeiten habe ich dann nochmal alles genau 
mit einer Lupe geprüft!

Dabei ist mir aufgefallen, dass eine haarbreite Ader der Schaltlitze die 
auf einem Pin am MAX war noch einen anderen berührte! Bitte bitte nicht 
schlagen, das mach ich gerade schon selbst!

Also ich denke, es lag an den ELKOS die zu weit weg waren und dem 
gebrückten Kontakt der zwei Pins am MAX232.

Nochmals vielen Dank!

Viele Grüße

Sebastian

PS: Ich "drohe" schon mal den nächsten Thread an, habe nämlich ein 
kleines Problem mit meiner Matrixtastatur nachdem ich vom internen OSC 
auf nen 16MHz ext. Quarz gegangen bin! Ich werde aber zunächst erstmal 
selbst versuchen das Problem zu beheben, bevor ich euch mal wieder 
nerven muss. ;-)

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.