Ich habe eine RS232-zu-TTL-Wandlerkarte entworfen, die auf dem MAX232-IC von TI basiert und mit der ich einige benutzerdefinierte Arduino-Karten programmieren möchte, die ich habe. Ich habe jedoch Probleme mit dem Board und hoffe, dass mir jemand beim Debuggen helfen kann.
Lassen Sie mich zunächst mein Setup unten zeigen.
Hier ist eine kurze Beschreibung dessen, was auf dem Bild zu sehen ist:
Zielplatine (A) : Es handelt sich um eine benutzerdefinierte eigenständige ATmega328P-Platine (eine Uhr), die ich mithilfe der seriellen Programmierung und der Arduino IDE programmieren möchte. Es ist über ein FTD-ähnliches Kabel über den Anschluss (H) mit der Platine B verbunden .
RS232-zu-TTL-Konverterkarte (B) : Es handelt sich um die MAX232-basierte RS232-zu-TTL-Konverterkarte, die ich entworfen habe und die ich zu debuggen versuche. Es ist das Hauptthema dieser Frage. Es wird mit dem FTDI-ähnlichen Kabel über den Anschluss (G ) mit der Zielplatine (A) und über eine DB9-Buchse (F) mit dem USB-zu-RS232-Kabel (C ) verbunden .
USB-zu-RS232-Kabel (C) : Ich habe keinen richtigen COM-Anschluss an meinem PC, daher verwende ich stattdessen einen seriellen Anschluss. Es ist über einen USB-Anschluss (D) mit dem PC und über einen DB9- Stecker (E) mit der Karte B verbunden .
Die Schemata von Board B sind unten.
Das Programmier-Header-Schema auf der Zielplatine (A) ist unten dargestellt.
Die erst , was ich klar ist , dass das USB-zu-RS232 - Kabel (C) der ist billig Art . Anstatt RS232-Standardsignalpegel im Bereich von -12 V / + 12 V zu liefern, liefert es stattdessen 0 V / 5 V. Ich habe das mithilfe des folgenden Tests herausgefunden: Ich habe das USB-zu-RS232-Kabel (C) an den PC angeschlossen und den DB9-Stecker (E) von der Konverterplatine (B) getrennt und Pin 3 vom DB9-Stecker (E) geprüft. während ich eine Reihe von ASCII-Zeichen 'A'
über den seriellen Monitor sendete . Unten sehen Sie das Ergebnis dieses Tests.
Übrigens ist mir aufgefallen, dass die verschiedenen MAX232-ICs verschiedener Hersteller dafür ausgelegt sind, diese Verletzung der RS232-Signalpegel zu bewältigen und auch 0V / 5V-Signale zu akzeptieren. Unten sind zwei Scope-Aufnahmen, die ich verwendet habe, um es zu beweisen. In der ersten Aufnahme habe ich mit meinem hausgemachten Funktionsgenerator (verrauscht, ja) eine 0V / 5V-Rechteckwelle an MAX232-Pin 13 angelegt (während er von meiner Konverterplatine eingesteckt und mit Strom versorgt wird) (das ist die gelbe Kurve) und den Ausgang von Pin 12 überprüft ( TTL Level RX - grüne Spur). Zu meiner Überraschung reagiert der MAX232 von TI mit den richtigen TTL-Signalen. Die zweite Aufnahme ist ein korrektes RS232 -6V / + 6V-Signal, das von einer Rechteckwelle simuliert wird, die ich in denselben Pin eingefügt habe. Beide liefern die gleichen Ergebnisse.
Ich habe einige andere Messungen an meiner Konverterplatine (B) durchgeführt, bis ich damit zufrieden war. Zum Beispiel zeigt Pin 2 an MAX232 + 9,5 V, während Pin 6 -9,5 V anzeigt. Das Oszilloskop zeigt, dass der Spannungsverdoppler und der Wechselrichter ebenfalls einwandfrei funktionieren, mit jeweils einer schönen und stetigen 40-kHz-Rechteckwelle. Ich habe auch 0 / 5V Rechteckwelle von ungefähr 68 kHz an Pin 10 des MAX232 und Pin 7 des MAX232 angelegt. Ich habe ein schönes und sauberes invertiertes -6V / + 6V RS232-Signal erhalten (Bilder hier nicht gezeigt).
Dann habe ich das Echo des seriellen Monitors getestet, bei dem die TX / RX-Pins an verschiedenen Stellen kurzgeschlossen wurden. Die Ergebnisse waren:
- Ohne MAX232 IC im Sockel habe ich die Pins 2 und 3 am DB9 kurzgeschlossen. Echo ok.
- Platzierte den MAX232 IC auf der Platine und schloss die Pins 11 und 12 kurz. Echo ok.
- Mit ATmega328P aus der Steckdose habe ich die Pins 2 und 3 kurzgeschlossen. Echo ok.
Dann habe ich das Setup angeschlossen, um meine ATmega328P-Zielplatine (A) zu programmieren . Die avr-dude-Ausgabe wird am Ende dieses Beitrags angezeigt. Unten finden Sie eine Zusammenfassung mit nur der Fehlermeldung:
...
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x90
...
avrdude: stk500_cmd(): protocol error
Während dieses Programmierversuchs habe ich die folgenden Signale gemessen. Die gelbe Spur sind Daten, die an die MCU gesendet werden, während die grüne Spur Daten sind, die von dieser empfangen werden:
Wenn ich den Fehler erhalte, wird die Kommunikation plötzlich unterbrochen. Von einem Versuch zum nächsten tritt das Problem an verschiedenen Stellen während der Kommunikation auf.
Schließlich habe ich meine MAX232-Karte durch eine ältere ersetzt, die den Transistor-Trick anstelle des MAX232-IC verwendet, und alles beginnt ordnungsgemäß zu funktionieren. Mit der alten Karte kann ich die Zielkarte programmieren lassen. Unten sehen Sie die Scope-Aufnahme, die die erfolgreiche Kommunikation während der Programmierung der Zielplatine in diesem Fall zeigt.
Ich übersehen sicherlich etwas, aber ich kann nicht sagen, was es ist. Meine Frage ist also: Was ist mit meinem Setup falsch? Was kann ich noch überprüfen oder messen, um das Problem herauszufinden?
Hier ist die Ausgabe von Arduino IDE und avr-dude:
Binary sketch size: 9.946 bytes (of a 32.256 byte maximum)
C:\Users\Ricardo\Documents\arduino-1.0.5\hardware/tools/avr/bin/avrdude -CC:\Users\Ricardo\Documents\arduino-1.0.5\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM5 -b115200 -D -Uflash:w:C:\Users\Ricardo\AppData\Local\Temp\build2465731745810216807.tmp\DefusableClock_v2.cpp.hex:i
avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\Users\Ricardo\Documents\arduino-1.0.5\hardware/tools/avr/etc/avrdude.conf"
Using Port : \\.\COM5
Using Programmer : arduino
Overriding Baud Rate : 115200
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
AVR Part : ATMEGA328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Arduino
Description : Arduino
avrdude: Send: A [41] . [80] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [83]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [81] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [84]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [82] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [04]
avrdude: Recv: . [90]
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x90
avrdude: Send: A [41] . [98] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [03]
avrdude: Recv: . [10]
Hardware Version: 131
Firmware Version: 132.1077487570
avrdude: Send: A [41] . [84] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [03]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [85] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [03]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [86] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [03]
avrdude: Recv: . [90]
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x90
avrdude: Send: A [41] . [87] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [03]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [89] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [83]
avrdude: Recv: . [10]
Vtarget : 0.3 V
Varef : 0.3 V
Oscillator : 921.600 kHz
SCK period : 142.2 us
avrdude: Send: A [41] . [81] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [04]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [82] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [04]
avrdude: Recv: . [10]
avrdude: Send: B [42] . [86] . [00] . [00] . [01] . [01] . [01] . [01] . [03] . [ff] . [ff] . [ff] . [ff] . [00] . [80] . [04] . [00] . [00] . [00] . [80] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: Send: E [45] . [05] . [04] . [d7] . [c2] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: Send: P [50] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: AVR device initialized and ready to accept instructions
Reading | avrdude: Send: u [75] [20]
avrdude: Recv: . [14] . [1e] . [95] . [0f] . [10]
################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: Send: V [56] . [a0] . [03] . [fc] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: V [56] . [a0] . [03] . [fd] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: V [56] . [a0] . [03] . [fe] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: V [56] . [a0] . [03] . [ff] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [90]
avrdude: stk500_cmd(): protocol error
Antworten:
Ihre Frage war viel zu lang zum Lesen, aber es scheint, dass Sie einige Probleme mit einer Wandlerschaltung vom Typ MAX232 haben. Ich habe mit einer der TI-Varianten des Chips eine scheinbar sehr ähnliche Schaltung hergestellt und sie sogar als Produkt verkauft. Gehen Sie zu www.embedinc.com/products/rslink2 und Sie können die gesamte Dokumentation sehen, von einem Bild über das Platinenlayout bis zum Schaltplan. Vielleicht können Sie sehen, was Sie anders machen.
Eine Sache, die mir beim Überfliegen Ihrer Frage aufgefallen ist, ist, dass Sie Elektrolytkappen verwenden. Überprüfen Sie noch einmal, ob die Polarität korrekt ist. Ein weiteres Problem ist, dass einige COM-Anschlüsse, insbesondere USB-zu-RS-232-Konverter, ohne RTS / CTS nicht funktionieren, unabhängig davon, ob dies in der Software aktiviert ist oder nicht. Beachten Sie, wie ich die Pins 7 und 8 am DB9-F-Anschluss miteinander verbunden habe.
quelle
Sie sagen, Sie haben Pin 3 des DB9 erfasst und 0-5 V gesehen. Pin 3 empfängt Daten von der Außenwelt und wird von Ihrem seriellen USB-zu-TTL-Kabel angesteuert.
Der MAX232 empfängt RS-232-Pegel an den Pins 8 und 13 und wandelt sie in TTL-Pegel an den Pins 9 bzw. 12 um. Der MAX232 empfängt TTL-Pegel an den Pins 10 und 11 und treibt RS-232-Pegel an den Pins 7 bzw. 14 an.
Um Dr. Indiana Jones, den bekannten Professor für Archäologie, zu paraphrasieren: Sie suchen nach den falschen Stiften.
Lassen Sie einen einfachen 555-Impulsfolgengenerator mit +5 laufen, wenden Sie ihn an Pin 10 des MAX232 (nicht an Ihrem Schaltplan angeschlossen), an Pin 7 des MAX232 an und sehen Sie, was Sie erhalten.
quelle