תכננתי לוח ממיר RS232 ל- TTL המבוסס על ה- ICX MAX232 של TI שבו אני מתכנן להשתמש כדי לתכנת כמה לוחות ארדואינו מותאמים אישית שיש לי. עם זאת, אני מתקשה בלוח ואני מקווה שמישהו יכול לעזור לי באגים.
ראשית, תן לי להראות לך את ההתקנה שלי למטה.
הנה תיאור קצר של מה בתמונה:
-
לוח יעד (A) : זהו לוח ATmega328P עצמאי בהתאמה אישית (שעון) שאני מתכוון לתכנת באמצעות תכנות סדרתי ו- IDE של Arduino. הוא מחובר ל לוח B באמצעות כבל דמוי FTD דרך מחבר (H) .
-
RS232 -לוח ממיר ל- TTL (B) : זהו לוח הממיר מבוסס ה- RS232 ל- TTL המבוסס על MAX232 שתכננתי ומנסה לנקות באגים. זה הנושא העיקרי של שאלה זו. הוא מחובר ל לוח היעד (A) באמצעות כבל דמוי FTDI דרך מחבר (G) ול כבל USB-to-RS232 (C) דרך מחבר DB9 נקבה (F) .
-
כבל USB-to-RS232 (C) : אין לי יציאת COM תקינה במחשב שלי, אז זה מה שאני משתמש בכדי להשיג יציאה טורית במקום. הוא מחובר למחשב באמצעות מחבר USB (D) ו לוח B באמצעות מחבר DB9 זכר (E) .
הסכימות של לוח B הן למטה.
סכימות כותרת התכנות ב- לוח היעד (A) מוצג להלן.
הדבר הראשון שהבנתי הוא ש כבל USB-to-RS232 (C) הוא מסוג ה זול . במקום לספק רמות אות RS232 סטנדרטיות בתחום -12 וולט / 12 וולט, הוא מספק 0 וולט / 5 וולט במקום. הבנתי שבאמצעות הבדיקה הבאה חיברתי את ה כבל USB-to-RS232 (C) למחשב האישי וניתקתי את ה מחבר DB9 זכר (E) מ- לוח ממיר (B) וסיכה 3 נבדקת מ מחבר DB9 זכר (E) בזמן ששלחתי סדרה של ASCII char 'A'
דרך הסדרה לפקח. להלן זריקת ההיקף הנובעת ממבחן זה.
אגב, שמתי לב שהמכשירים השונים של MAX232 המיוצרים על ידי ספקים שונים נועדו להתמודד עם הפרה זו של רמות האות RS232 ולקבל אותות 0V / 5V כ נו. להלן שתי צילומי היקף שהשתמשתי בהם כדי להוכיח זאת. בצילום הראשון החלתי גל מרובע 0 וולט / 5 וולט לתוך סיכה 13 של MAX232 (כשהוא מוכנס ומופעל על ידי לוח הממיר שלי) עם מחולל הפונקציות הביתי שלי (רועש, כן) - זה העקוב הצהוב - ובדקתי את הפלט של סיכה 12 ( רמת TTL RX - עקבות ירוקים). להפתעתי, ה- MAX232 של TI מגיב באותות ה- TTL הנכונים. הזריקה השנייה היא אות RS232 -6V / + 6V נכון המדומה על ידי גל מרובע שהכנסתי לאותו סיכה. שתיהן מניבות את אותן תוצאות.
עשיתי כמה מדידות אחרות ב לוח הממיר שלי (B) עד לנקודה בה הייתי מרוצה מזה. לדוגמא, סיכה 2 ב- MAX232 מראה + 9.5 וולט ואילו סיכה 6 מראה -9.5 וולט. ההיקף מראה שמכפיל המתח והמהפך עובדים בסדר גם כן, עם גל מרובע נחמד ויציב של 40kHz בכל מקרה. יישמתי גם גל מרובע 0 / 5V של כ 68kHz על סיכה 10 של MAX232 וסיכה 7 של MAX232. קיבלתי אות -23 V / + 6 V הפוך נחמד ונקי (תמונות לא מוצגות כאן).
ואז בדקתי הד צג סדרתי מקצר את פינים TX / RX בנקודות שונות. התוצאות היו:
- בלי MAX232 IC בשקע שלו, קצרתי את הפינים 2 ו- 3 ב- DB9. הד בסדר.
- הצבתי את MAX232 IC על הלוח וקצר את הסיכות 11 ו 12. הד בסדר.
- כש- ATmega328P מחוץ לשקע, קצרתי את הפינים 2 ו- 3. הד בסדר.
ואז חיברתי את ההתקנה כדי לתכנת את ה לוח היעד ATmega328P (A) . פלט ה- avr-dude מוצג בסוף פוסט זה. להלן סיכום עם הודעת השגיאה בלבד:
... avrdude: stk500_getparm (): (a) שגיאת פרוטוקול, צפו = 0x14, resp = 0x90 ... avrdude: stk500_cmd () : שגיאת פרוטוקול
במהלך ניסיון תכנות זה מדדתי את האותות שלהלן. המעקב הצהוב הוא נתונים שנשלחים ל- MCU ואילו המעקב הירוק הוא נתונים שמתקבלים על ידיו:
כאשר אני מקבל את השגיאה, יש הפרעה פתאומית ב תִקשׁוֹרֶת. מניסיון אחד למשנהו, הבעיה מתרחשת בנקודות שונות במהלך התקשורת.
לבסוף החלפתי את לוח ה- MAX232 שלי בלוח ישן יותר שיש לי, המשתמש בטריק הטרנזיסטור במקום IC ה- MAX232, ו הכל מתחיל לעבוד כמו שצריך. עם הלוח הישן אני יכול לתכנת את לוח היעד. להלן תצלום היקף המציג את התקשורת המוצלחת במהלך תכנות לוח היעד במקרה זה.
אני בהחלט משקיף על משהו, אבל אני לא יכול לדעת מה זה. . אז השאלה שלי היא: מה לא בסדר בהגדרה שלי? מה עוד אוכל לבדוק או למדוד כדי להבין את הבעיה?
הנה פלט ה- IDE של Arduino ו- avr-dude:
גודל סקיצה בינארי: 9.946 בתים (של מקסימום 32.256 בתים) 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: גרסה 5.11, הורכבה ב -2 בספטמבר 2011 בשעה 19:38:36
זכויות יוצרים (c) 2000-2005 בריאן דין, http://www.bdmicro.com/ זכויות יוצרים (c) 2007-2009 Joerg Wunsch קובץ התצורה הרחב של המערכת הוא "C: \ Users \ Ricardo \ Documents \ arduino-1.0.5 \ חומרה / כלים / avr / etc / avrdude.conf "באמצעות יציאה: \\. \ COM5 באמצעות מתכנת: arduino עקיפת קצב שידור: 115200avrdude: שלח: 0 [30] [20] avrdude: שלח: 0 [30] [20] avrdude: שלח: 0 [30] [20] avrdude: Recv:. [14] avrdude: Recv:. [10] חלק AVR: ATMEGA328P עיכוב מחיקת שבב: 9000 us PAGEL: PD7 BS2: PC2 RESET disposition: RETRY dedicated pulse: SCK program program program mode: yes mode mode parallel: yes Timeout: 200 StabDelay: 100 Cmdexe Delay: 25 SyncLoops: 32 ByteDay : 0 PollIndex: 3 PollValue: 0x53 פרטי זיכרון: חסום עמוד הסקר סוג זיכרון מצב מצב עיכוב גודל Indx עמוד גודל גודל # דפים MinW MaxW ReadBack ----------- ---- ----- - ---- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff חסום עמוד סקר סוג זיכרון מצב מצב עיכוב גודל Indx עמוד גודל גודל # דפים MinW MaxW Readback ----------- ---- ---- - ----- ---- ------ ------ ---- ------ ----- ----- -------- - פלאש 65 6 128 0 כן 32768 128 256 4500 4500 0xff 0xff
חסום עמוד הסקר סוג זיכרון מצב מצב עיכוב גודל אינדקס עמוד גודל גודל # דפים MinW MaxW Readback ----------- ---- ----- ----- ---- --- --- ------ ---- ------ ----- ----- --------- lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 חסום עמוד סקר סוג זיכרון מצב מצב עיכוב גודל אינדקס עמוד גודל גודל # דפים MinW MaxW Readback ----------- ---- ----- ----- ---- - ---- ------ ---- ------ ----- ----- --------- hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 חסום עמוד הסקר סוג זיכרון מצב מצב עיכוב גודל Indx עמוד גודל גודל # דפים MinW MaxW Readback ----------- ---- ----- ----- ---- - ----- ------ ---- ------ ----- ----- --------- efuse 0 0 0 0 לא 1 0 0 4500 4500 0x00 0x00 חסימת עמוד הסקר סוג זיכרון מצב עיכוב גודל אינדקס עמוד גודל גודל # דפים MinW MaxW Readback ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- נעילה 0 0 0 0 לא 1 0 0 4500 4500 0x00 0x00 חסום עמוד סקר סוג זיכרון מצב עיכוב גודל אינדקס עמוד גודל גודל # דפים MinW מקסימום W החזר ----------- ---- ---- - ----- ---- ------ ------ ---- ------ ----- ----- -------- - כיול 0 0 0 0 לא 1 0 0 0 0 0x00 0x00 חסימת דף הסקר
סוג זיכרון מצב עיכוב גודל אינדקס עמוד גודל גודל # דפים MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ - ----- ---- ------ ----- ----- --------- חתימה 0 0 0 0 לא 3 0 0 0 0 0x00 0x00 סוג מתכנת: תיאור Arduino: Arduinoavrdude: שלח: A [41]. [80] [20] avrdude: Recv:. [14] avrdude: Recv:. [83] avrdude: Recv:. [10] avrdude: שלח: A [41]. [81] [20] avrdude: Recv:. [14] avrdude: Recv:. [84] avrdude: Recv:. [10] avrdude: שלח: A [41]. [82] [20] avrdude: Recv:. [14] avrdude: Recv:. [04] avrdude: Recv:. [90] avrdude: stk500_getparm (): (א) שגיאת פרוטוקול, מצפה = 0x14, resp = 0x90avrdude: שלח: A [41]. [98] [20] avrdude: Recv:. [14] avrdude: Recv:. [03] avrdude: Recv:. [10] גרסת חומרה: 131 גרסת קושחה: 132.1077487570avrdude: שלח: A [41]. [84] [20] avrdude: Recv:. [14] avrdude: Recv:. [03] avrdude: Recv:. [10] avrdude: שלח: A [41]. [85] [20] avrdude: Recv:. [14] avrdude: Recv:. [03] avrdude: Recv:. [10] avrdude: שלח: A [41]. [86] [20] avrdude: Recv:. [14] avrdude: Recv:. [03] avrdude: Recv:. [90] avrdude: stk500_getparm (): (א) שגיאת פרוטוקול, מצפה = 0x14, resp = 0x90avrdude: שלח: A [41]. [87] [20] avrdude: Recv:. [14] avrdude: Recv:. [03] avrdude: Recv:. [10] avrdude: שלח: A [41]. [89] [20] avrdude: Recv:. [14] avrdude: Recv:. [83] avrdude: Recv:. [10] מטרה: 0.3 V Varef: 0.3 V מתנד: 921.600 קילוהרץ תקופת SCK: 142.2 usavrdude: שלח: A [41]. [81] [20] avrdude: Recv:. [14] avrdude: Recv:. [04] avrdude: Recv:. [10] avrdude: שלח: A [41]. [82] [20] avrdude: Recv:. [14] avrdude: Recv:. [04] avrdude: Recv:. [10] avrdude: שלח: 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: שלח: E [45]. [05]. [04]. [d7]. [c2]. [00] [20] avrdude: Recv:. [14] avrdude: Recv:. [10] avrdude: שלח: P [50] [20] avrdude: Recv:. [14] avrdude: Recv:. [10] avrdude: מכשיר AVR מאותחל ומוכן לקבל הוראות קריאה | avrdude: שלח: u [75] [20] avrdude: Recv:. [14]. [1e]. [95]. [0f]. [10] ################################################################## ### | 100% 0.00savrdude: חתימת מכשיר = 0x1e950favrdude: שלח: V [56]. [a0]. [03]. [fc]. [00] [20] avrdude: Recv:. [14] avrdude: Recv:. [00] avrdude: Recv:. [10] avrdude: שלח: V [56]. [a0]. [03]. [fd]. [00] [20] avrdude: Recv:. [14] avrdude: Recv:. [00] avrdude: Recv:. [10] avrdude: שלח: V [56]. [a0]. [03]. [fe]. [00] [20] avrdude: Recv:. [14] avrdude: Recv:. [00] avrdude: Recv:. [10] avrdude: שלח: V [56]. [a0]. [03]. [ff]. [00] [20] avrdude: Recv:. [14] avrdude: Recv:. [00] avrdude: Recv:. [90] avrdude: stk500_cmd (): שגיאת פרוטוקול