Forum: Mikrocontroller und Digitale Elektronik Mega32P + max232 funktioniert nicht


von Markus B. (markus73)


Angehängte Dateien:

Lesenswert?

Ich habe mir ein Testboard ätzen lassen. Bestückt ist es mit einem 
Mega32P, div. LED's, Uhr+Speicher über I2C und div. kleinigkeiten zum 
Ansteuern von Sensoren.

Mir ist aufgefallen, das die Serielle Kommunikation nicht funktionieren 
will. Der AVR wurde mit 14.7456 Mhz getaktet. Habe diesen gegen einen 
3.6864 Mhz gewechselt. Jetzt kommen wenigstens wilde Zeichem im 
Terminal-Prog an. Habe den MAX232 schon gegen einige Typen getauscht 
(A,N,ACPE und CPE) keider ohne Erfolg. Programmiert wird über Bascom. An 
der Programmierung kann es nicht liegen. Das funktionierte ohne Probleme 
immer am Mega8.
Das einzige was ich geändertt habe, waren die Fuses. JTAG wird nicht 
benötigt, da die Pins für Schaltvorgänge verwendet werden.

Seht ihr irgend einen Fehler im Schaltplan? Weis nicht so recht weiter.

In meinem Schaltplan und unter diesem Link:
http://www.captain.at/electronic-atmega16-serial-port.php
sind Pin 2 und 6 des MAX anders beschaltet.

könnt ihr mir helfen?


Markus73

von Flo (Gast)


Lesenswert?

Also im Datenblatt ists anders, da gehört der Kondensator an Pin 2 nicht 
wie bei dir nach 5V, sondern nach masse.

von ... .. (docean) Benutzerseite


Lesenswert?

lass mal ein led blinken, stimmt die blinkfrequenz?

1sec an / 1se aus z.B. mit _delay_ms...

von Max232 (Gast)


Lesenswert?

Im Datenblatt steht aber auch: C3 can be connected o Vcc or GND!!!
Ist also richtig. Wie sehen denn die Fuses des ATmega aus, evtl. läuft 
der ja noch mit internen 1MHz. Das Programm wäre natürlich auch einmal 
interessant (evtl. nen Fehler bei der Bausratenberechnung oder so).

von Bensch (Gast)


Lesenswert?

> Also im Datenblatt ists anders, da gehört der Kondensator an Pin 2 nicht
wie bei dir nach 5V, sondern nach masse.

Geht beides, aber wegen der angeblichen Latch-Up-Sicherheit ist von 
zumindest einem Hersteller Anschluss an Vcc empfohlen. Steht auch in 
irgendeinem Datenblatt, warum.

von Markus73 (Gast)


Lesenswert?

Also die Fuses brauchte ich bisher, wenn ich den quarz gewechselt hatte 
unter Bascom nie ändern. Hatte das vorhin aus Verzweiflung einmal getan 
und jetzt wird mein M32 nicht mehr erkannt. Hatte aber noch Ersatz.



Nunja, hier einmal der Code aus Bascom:
   '*********************************************************************** 
******
  $regfile = "m32def.dat"                                   'AtMega32
  $crystal = 3686400                                        'Frequenz
  $baud = 19200                                             'Baud Rate
  $hwstack = 32                                             'default use
  $swstack = 32                                             'default use
  $framesize = 32                                           'default use
' 
************************************************************************ 
*****
' Adresse des DS1307
  Const Ds1307w = 208                                       '&B11010000
  Const Ds1307r = 209                                       '&B11010001
' 
************************************************************************ 
*****
  Config Portb.4 = Output                                   'Pin für 
rote Warn-LED (Eeprom voll)
'
  Config Portc.3 = Output                                   'Pin für 
Peltier-Element 1
  Config Portc.4 = Output                                   'Pin für 
Peltier-Element 2
'
  Config Portd.7 = Output                                   'Pin für 
grüne Signal-LED
  Config Portd.6 = Output                                   'Pin für 
grüne Signal-LED
  Config Portd.5 = Output                                   'Pin für 
grüne Signal-LED
  Config Portd.4 = Output                                   'Pin für 
grüne Signal-LED
  Config Portd.3 = Output                                   'Pin für 
UV-Effect-LED
'
' Einstellen der TWI (I2C) Schnittstelle in BASCOM
  Config Sda = Portc.1
  Config Scl = Portc.0
  Config I2cdelay = 150 
'Signalverbesserung verschliffen  (wert auch 150)
' Einstellen der Datum-/Zeitfunktion in BASCOM dabei werden automatisch
' die Variablen _year,_month,_day,_hour,_min,_sec im BCD Format angelegt
  Config Clock = User
' Datumsformat deutsch Tag.Monat.Jahr und als Trennzeichen den Punkt
  Config Date = Dmy , Separator = .
' 
************************************************************************ 
*****
' I2C Schnittstelle Initialisieren
  I2cinit
' 
************************************************************************ 
*****
' Hauptprogtamm
  Do


    Print "Test" 'Fehler in Hardware????


    Portb.4 = 1                                             'Rote 
Signal-LED einschalten

    Portc.3 = 1 
'Thermoelement einschalten
    Portc.4 = 1 
'Thermoelement einschalten

    Portd.7 = 1                                             'Grüne 
Signal-LED einschalten
    Portd.6 = 1                                             'Grüne 
Signal-LED einschalten
    Portd.5 = 1                                             'Grüne 
Signal-LED einschalten
    Portd.4 = 1                                             'Grüne 
Signal-LED einschalten
    Portd.3 = 1 
'UV-Effect-LED einschalten



    'Peltier Elemente
'Waitms 10
'Portc.3 = 1
'Portc.4 = 1
'Waitms 250
'Portc.3 = 0
'Portc.4 = 0
'Goto Anfang

Loop

' 
************************************************************************ 
*****

von wt (Gast)


Lesenswert?

ich denke, du brauchst bei dieser belegung Nullmodem Kabel zum PC, prüfe 
das nochmal. Der PC empfängt auf pin2 (SUBD9), somit muss RS232 Treiber 
auf Pin2 senden.

von Markus73 (Gast)


Lesenswert?

Ja, das mit dem Nullmodem Kabel ist auch gewollt. Alle Boards von mir 
werden damit betrieben.

Gruß, Markus

von wt (Gast)


Lesenswert?

Ich beschalte Kapazitäten genauso, bis auf die Tatsache, daß diese bei 
mir alle 100nF Kerkos sind, da kann man nichts verpolen.

von Markus73 (Gast)


Lesenswert?

Warum nimmst Du denn 100nF Kerkos?

von Markus73 (Gast)


Lesenswert?

So, weiter bin ich nur bedingt kekommen. Also jetzt funkt mein Board bei 
3,6864Mhz nd bei 19200bps ständig zum Rechner. Leider kommt dort noch 
immer Zeichensalat an. E/A's zu anderen Komponenten vorerst deaktiviert. 
Trotzdem nix. Ich poste hier mal die Spannungen die an den Pins des MAX 
anliegen. Ich glaube hier scheint was nicht in ordnung zu sein.

01 =  6.40V (C1+)
02 =  8.80V (V+)
03 =  2.38V (C1-)
04 =  2.76V (C2+)
05 = -5.44V (C2-)
06 = -7.50V (V-)
07 = -2.50V (T2 out)
08 =  0.00V (R2 in)
09 =  5.00V (R2 out)
10 =  3.75V (T2 out)
11 =  4.50V (T1 in)
12 =  5.10V (R1 out)
13 =  0.00V (R1 in)
14 =  2.30V (T1 out)
15 =  0.00V (GND)
16 =  5.00V (VCC)

von wt (Gast)


Lesenswert?

100n Kerko haben sich in der zig Applikationen bereits bewährt. Die Spg. 
sehen in der Tat komisch aus. Prüfe Polarität v. Elcos oder nimm was 
besseres.

von wt (Gast)


Lesenswert?

vielleicht ist dein rs232 käfer bereits beschädigt oder masse nicht 
gscheid gelötet.

von wt (Gast)


Lesenswert?

übrigens um deine SW zu testen kannst Du auch deine TX Leitung und Masse 
direkt vom µP zum PC führen. Den Treiber brücken halt. So kämpfst Du an 
einem Front.

von Markus73 (Gast)


Lesenswert?

Okay, werde die Elkos 1uF mal auslöten und gegen die 100nf Kerkos 
wechseln. Habe die noch massig über.

von Markus73 (Gast)


Lesenswert?

Das der Max defekt ist, glaube ich nicht. Habe die Schaltung mit allen 
Suptypen getestet die mir hier zur Verfügung stehen. (5 Stück) Aber 
immer das gleiche Ergebnis. Masse kann ich nochmals prüfen.

von Markus73 (Gast)


Lesenswert?

Das Brücken des Pegelwandlers scheint mir eine gute Idee. Werde das 
gleich mal testen

von Jens (Gast)


Lesenswert?

Wenn du ein Oszi hast, kannst du versuchen die Baudrate zu messen. Wenn 
die Baudrate stimmt, kannst du die Fehlersuche am Controller( Software, 
Quarz, usw.) beenden. Daran liegt es dann nicht.
Wenn bei mir Zeichensalat ankommt, war es bis jetzt immer ein 
Softwarefehler.

von Uwe .. (uwegw)


Lesenswert?

Hast du schon mal folgendes getestet?
Den Mega32 aus dem Sockel entfernen, und im Sockel mit einem Stück Draht 
RX und TX verbinden. Dann vom PC aus senden, es müssen alle Zeichen 
wieder zurückkommen. Wenn das klappt, sind MAX und Kabel in Ordnung.

von Markus73 (Gast)


Lesenswert?

Ein Oszi habe ich leider nicht. Glaube auch nicht das es an der Software 
oder am Quarz liegt. In Bascom wird einem die Arbeit auch leicht 
gemacht. Und die Baudrate muß nicht berechnet werden. Die Software ist 
auch schon ein Dutzendmal am Mega8 mit Erfolg getestet worden und nur 
auf Mega32 importiert.

von Markus73 (Gast)


Lesenswert?

Okay, also RX und TX brücken funktioniert nicht. Dann liegts wohl an der 
Beschaltung. Das Terminal bleibt tot.

von Markus73 (Gast)


Lesenswert?

Also Leute, erstmal vielen Dank für die zahlreichen Tipps von Euch.
Es läuft !!! War wohl doch zu blöd und habe den Wald vor lauter Bäumen 
nicht gesehen.
Habe grad mal was ganz einfaches ausprobiert:
Externen Quarz entfernt, Baudrate auf 1200bps gestellt und in Bascom 
1Mhz
eingestellt. Und siehe da, Print "Test" funktioniert einwandfrei.
Der Mega32 ist noch immer auf intern 1Mhz eingestellt. Was mich nur 
wundert ist der Umstand, das mein Tesboard mit dem Mega8 ohne umstellen 
der Fuses mit ext. Quzarzen umgeht und der Mega32 nicht.
Jetzt möchte ich natürlich den AVR auf meine ext. Taktquelle umstellen 
aber die Einstellungen der Fuses iritiert mich nun.
Unter dem AVR ProgTool gibt es unter den Fuses so einiges einzustellen. 
Aber mir ist nicht klar welches Kriterium jetzt richtig ist.
Als Auswahl stehen zur Verfügung:
Ext. Clock
intern RC osc
extern RC osc
und
ext. Crystal/Resonator

Verwenden möcht ich gerne einen simplen Baudraten-Quart mit 3.686Mhz

Welche Option ist denn di richtige?

Gruß, Markus

von Heiko D. (dynotrix)


Lesenswert?

Ich habe gerade mal nachgeschaut wie ich meinen RS232-Wandler aufgebaut 
habe, das ist erst ein paar Tage her. Hier verwende ich ebenfalls den 
MAX232CPE mit den 1µF Kondensatoren. Mit dran stecken habe ich auch noch 
einen USB-RS232 Konverter mit FTDI-Chip.

Die Schaltungen sind identisch
http://sodoityourself.com/max232-serial-level-converter

Aber mal zu den Fuses: Vielleicht war dein Mega8 schon auf externen Takt 
eingestellt, dann fällt es nicht auf. Verwendet wird für einen Quarz die 
Einstellung ext. Crystal/Resonator. Dann gibt es noch eine Einstellung 
für Quarze bis 0,9MHz, von 0,9-3MHz und von 3-8MHz - hab das jetzt nur 
flüchtig aus dem Datenblatt, mit dem Mega32 habe ich noch nicht 
gearbeitet. Die Pins XTAL1 und 2 bekommen dann den Quarz mit seinen 
beiden Kondensatoren.

Wichtig ist auch dann darauf zu achten im BASCOM wieder den richtigen 
Takt anzugeben. Mir ist es schon passiert dass ich von 1MHz auf 
3,6864MHz umgebaut habe (Fuses umgestellt), aber die 
$Crystal-Einstellung auf 1MHz gelassen habe. Die Wait-Befehle haben dann 
zeitlich nicht so ganz gepasst :-)

Frage: Mit welchem Programmer arbeitest du in Verbindung mit BASCOM?

Gruß, Heiko

von Markus73 (Gast)


Lesenswert?

Hallo Heiko

nun. die RS232 funktioniert doch noch nicht einwandfrei. Ich kann nicht 
zum PC senden.
Dem MAX habe ich die 1uF Elkos weggenommen und gegen 100nF Keramik 
getauscht. es funktionierte danach mit den Spannungspegeln viel besser.

Nun zu den Fuses. Erstmal Dank für die Erklärung. Ich werde später einen 
14.7456Mhz Quarz verwenden, sofern ich ihn nicht kaputt gelötet habe. 
Sonst wird es ein 16Mhz.

Der Takt ist in Bascom richtig vergeben. Also jetzt auf 1Mhz, weil noch 
Mega32 intern RC. Zum Testen kann ich einen ext. Quarz stecken. Werde es 
aus guter Erfahrung mit einmem 3.6864Mhz vorerst testen .



Zur Frage:
Als Programmer ist eingestellt AVR ISP Programmer bei 19200bps mit dem 
MySmartUSB MkII von myavr.de.


Gruß, Markus

von Heiko D. (dynotrix)


Lesenswert?

Bin grad was mit meinem Experimentierboard und dem Wandler am 
ausprobieren.

Melde mich gleich wieder

Gruß, Heiko

von Heiko D. (dynotrix)


Lesenswert?

Hallo Markus,

ich habe einmal folgendes probiert:

Den Wandler, nur halt mit 1µF Kondensatoren, an einem Mega8.
Der MAX hat übrigens die Bezeichnung MAX232N.

Das hier habe ich noch dazu gefunden:
http://www.mikrocontroller.net/articles/RS-232

Als Programm zum testen nutze ich folgendes:

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 1200
Dim N As String * 16
Print "Bitte Ihren Namen eingeben"
Input N
Do
Print
Print "  --Hallo " ; N ; "--"
Loop
End

Das läuft in der Terminalemulation (Menü Tools oder Ctrl-T)
Nicht im Simulator, da habe ich mich zuerst auch auf's Kreuz gelegt. :-)

Geht mit dem Mega8 sowohl bei 1MHz als auch bei 3,6864MHz.

Das sollte doch so auch auf dem Mega32 laufen.

Für meinen Einstieg habe ich einiges von Roland Walter
http://www.rowalt.de/mc/index.htm
übernommen und ein ähnliches Experimentierboard aufgebaut.
Unter dem Menüpunkt Tools gibt es auf der Seite das Programm AvrTerm.
Bis auf das Problem dass RTS/CTS nicht unter XP funktioniert, kann man 
damit wunderbar spielen.

Melde dich mal, würde mich auch interessieren wo da der Wurm drin ist.

Gruß
Heiko

von Markus73 (Gast)


Lesenswert?

Hallo Heiko,

also ich krigs irgendwie nicht hin. Die Schaltung ist meiner Meinung 
nach fehlerfrei. Zumindest, was die Verbindung vom AVR zum MAX betrifft. 
Der Empfang zum PC funktioniert auch super. Nur die Input "xxx", N will 
überhaupt nicht. Selbst Hyperterminal oder Bascom Terminal funzt nicht. 
Auch das Brücken von RX/TX wenn man den AVR aus der Fassung nimmt, 
klappt nicht. Das Ding bleibt tot. Habe nun mehrere Max232 ausprobiert. 
Habe noch einen Nagelneuen gekauft. aber auch das geht nicht. Da es 
offenbar nicht am AVR liegt, bleibt nur die Beschaltung des MAX. Aber 
ich habe echt keine Ahnung mehr. Habe schon gedacht die Serielle am PC 
ist defekt aber das gleiche Resultat mit USB to Serial - Dongle. Senden 
zum PC ist okay.

Hast Du oder irgendein anderer User diese Boards noch ne Idee?


Gruß, Markus

von Heiko D. (dynotrix)


Lesenswert?

...dann bauen wir mal weiter.

Also mit dem mega8 funktioniert hier mein kleines Programm von oben. 
Egal ob 1MHz oder 3,6MHz. Zur Verfügung hätte ich noch 8515 und 
ATtiny2313. Die probiere ich nochmal damit aus.

Wenn ich hier nur eine der beiden Leitungen zwischen AVR und MAX nicht 
gesteckt habe geht gar nichts. Das Terminal von BASCOM meldet dann 
Fehler: Could not Open COM2.

Das Brücken der Anschlüsse RX/TX hinter dem Wandler habe ich auch schon 
gemacht, sollte ja dann ein Echo zum PC zurückkommen. Das klappt aber 
nicht weil das Signal invertiert wird. Es passiert also gar nichts.

Die serielle Schnittstelle kannst du allerdings überprüfen indem du 
direkt am RS232-Stecker vor dem MAX brückst (habe ich einfach mal mit 
einer Meßspitze vom Multimeter zwischen Pin 13 und 14 am MAX gemacht). 
Dann kommt, wenn man mit dem Terminal etwas sendet, auch der gleiche 
Buchstabe wieder zurück.

Welches Betriebssystem verwendest du denn? Hier XP.

...muß jetzt erst mal weg, später mal mehr zu meinem Wandler.

Gruß, Heiko

von Markus73 (Gast)


Lesenswert?

Ob es wohl funktionieren würde, wenn ich dem PC ein Hardwarehandshake 
vorgaugle? Habe ja laut Auszug aus meinem Schaltplan am Anfang des 
Threads nur die Sende- und Empfangsleitung durchgeschaltet.???

von spess53 (Gast)


Lesenswert?

Hi

>Ob es wohl funktionieren würde, wenn ich dem PC ein Hardwarehandshake
>vorgaugle? Habe ja laut Auszug aus meinem Schaltplan am Anfang des
>Threads nur die Sende- und Empfangsleitung durchgeschaltet.???

Ausprobieren kann man es. Du müsstes auf der PC-Seite 4-6 und 7-8 
brücken.

MfG Spess

von Heiko D. (dynotrix)


Angehängte Dateien:

Lesenswert?

Hier einmal ein Foto von meinem kleinen RS232-Wandler. Er wird demnächst 
noch in ein kleines Gehäuse eingebaut.

An der Stiftleiste kann ich dann +5V, GND aus der Schaltung zuführen und 
TX und RX abgreifen.

Die grüne LED zeigt die Stromversorgung an.
Die beiden gelben LEDs sind jeweils über 1,2k Ohm Widerstände mit der 
Anode auf Pin 13 und 14 gelegt und die Kathode auf GND.

Mit den beiden LEDs ist etwas Kontrolle über die Signale möglich.
Wenn ich den Adapter mit Strom versorge, ohne das die RX/TX 
angeschlossen sind, dann leuchtet die LED an Pin 14, die andere ist aus. 
Wenn nun der Wandler richtig mit dem AVR verbunden ist, dann sind beide 
LEDs aus. Bei Datenübertragung flackern sie dann (die Pulse sieht man 
bei 1200 Baud recht deutlich). Die an Pin 13 bei Daten vom PC, die an 
Pin 14 bei Daten die der AVR sendet.

Vielleicht ist das noch einmal eine Möglichkeit dem Übel auf die 
Schliche zu kommen.

Handshake habe ich übrigens auch schon ausprobiert. Pin 7 und 8 und 4 
und 6 auf der PC-Seite verbunden. Geändert hat sich dabei aber nichts.

Man sehen wie es weiter geht

VG, Heiko

von Falk B. (falk)


Lesenswert?

Und mal wieder der 5 Millionste UART Thread. Haben wir alles schon 
4.999.999 mal durch. Und genau deswegen gibt es, TATA

http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART

Wenn man sich daran hält ist der UART spätestens nach 1 Stunde debuggt.

Aber auch Männer reden gern viel . . . ;-)

von Heiko D. (dynotrix)


Lesenswert?

... genau, lass die doch auch mal reden. ;-)

Ähm, nö, also langsam meine ich auch es zieht sich schon etwas in die 
länge. Lassen wir Markus nun mal suchen, es fällt mir nämlich nun auch 
nichts mehr dazu ein.

Aber das machen wir ja alle nur, weil wir doch endlich wissen wollen 
warum es nicht geht und hauen uns dann kollektiv mit der Hand vor die 
Stirn und sagen: Mensch, da hätte man auch viel früher drauf kommen 
können. ;-)

schönen Abend noch... Heiko

von Markus73 (Gast)


Lesenswert?

Ja, ihr habt ja recht. Das Thema wurde schon X-mal durchgekaut. Werde 
mich jetzt nochmals daran begeben und den Fehler suchen. Wenn ich ihn 
gefunden habe schreib ich nochmal was dazu.

Aber Dank für die vielen Tipps.

Gruß, Markus

von Bert 0. (maschinist)


Lesenswert?

@Markus:

Auf alle Fälle die Handshakebrücken auf PC-Seite, die Du oben schon 
einmal probiert hast, beibehalten!
Also RTS und CTS (7/8) und DTR  DSR  DCD (1/4/6) jeweils miteinander 
brücken.
Pinangaben sind auf DSUB-9 bezogen.

Wenn das geschehen, nochmal ohne uC probieren und RxD mit TxD im 
uC-Sockel brücken. Dann muß Senden und Echo vom /zum Terminalprogramm 
klappen.


Gruß...Bert

von Markus73 (Gast)


Lesenswert?

So, Fehler beseitigt.

Es lag an der einer spiegelverkehrten Verdrahtung der SUB-D auf dem 
Testboard. Weil in der Eagle-Layoutansicht die Pinbelegung aufsteigend 
von links nach rechts angegeben war, bin ich nicht darauf gekommen.

Und wie Heiko schon bemerkte, jetzt können sich alle kollektiv vor die 
stirn hauen und sagen, "Da hätte man auch eher drauf kommen können."

Ich geb ihm recht :-)

Trotzdem Dank an allen für die Zahlreichen Tipps.#

Gruß, Markus

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.