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
Also im Datenblatt ists anders, da gehört der Kondensator an Pin 2 nicht wie bei dir nach 5V, sondern nach masse.
lass mal ein led blinken, stimmt die blinkfrequenz? 1sec an / 1se aus z.B. mit _delay_ms...
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).
> 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.
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 ' ************************************************************************ *****
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.
Ja, das mit dem Nullmodem Kabel ist auch gewollt. Alle Boards von mir werden damit betrieben. Gruß, Markus
Ich beschalte Kapazitäten genauso, bis auf die Tatsache, daß diese bei mir alle 100nF Kerkos sind, da kann man nichts verpolen.
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)
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.
vielleicht ist dein rs232 käfer bereits beschädigt oder masse nicht gscheid gelötet.
ü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.
Okay, werde die Elkos 1uF mal auslöten und gegen die 100nf Kerkos wechseln. Habe die noch massig über.
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.
Das Brücken des Pegelwandlers scheint mir eine gute Idee. Werde das gleich mal testen
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.
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.
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.
Okay, also RX und TX brücken funktioniert nicht. Dann liegts wohl an der Beschaltung. Das Terminal bleibt tot.
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
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
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
Bin grad was mit meinem Experimentierboard und dem Wandler am ausprobieren. Melde mich gleich wieder Gruß, Heiko
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
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
...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
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.???
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
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
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 . . . ;-)
... 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
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.