תוכן עניינים:

שחזור מודול בלוטות 'לא מוגדר HC-06: 4 שלבים
שחזור מודול בלוטות 'לא מוגדר HC-06: 4 שלבים

וִידֵאוֹ: שחזור מודול בלוטות 'לא מוגדר HC-06: 4 שלבים

וִידֵאוֹ: שחזור מודול בלוטות 'לא מוגדר HC-06: 4 שלבים
וִידֵאוֹ: המחשב לא נדלק? טכנאי מחשבים מסביר מה תוכלו לעשות 2024, נוֹבֶמבֶּר
Anonim
שחזר מודול בלוטות 'לא מוגדר HC-06
שחזר מודול בלוטות 'לא מוגדר HC-06

מתוך מקסימליזם טהור הגדרתי את מודול הבלוטות 'HC-06 שלי (עבד) לקצב שידור של 1, 382, 400 באוד עם הפקודה AT+BAUDC. מאז שהארדואינו המחובר אליו לא הצליח להשתמש במודול עם ספריית SoftwareSerial. ניסיתי לשחזר את קצב השידור עם סדרת החומרה של Arduino (סיכות 0 ו -1) ללא הצלחה.

ניסיתי גם לגוגל את הנושא מבלי למצוא פתרון סביר. אולי שימוש ביציאה טורית מובנית של מחשב יכול היה להוות פתרון (עם הזזה ברמת ההיגיון של 12V עד 3V3), אך למחשב שלי אין את היציאה המיושנת הזו, ולכן נאלצתי למצוא פתרון אחר.

שלב 1: מה שאתה צריך

מה שאתה תצטרך
מה שאתה תצטרך
  • לוח Arudino/Genuino עם ברירת המחדל Atmel ATMEGA328P-PU MCU (@16MHz).
  • מודול בלוטות 'HC-06 מאזין ל- 1, 382, 400 baud
  • Arduino IDE בסיסי מ-

שלב 2: הפתרון

הפתרון
הפתרון
הפתרון
הפתרון

שים לב כי ההוראה והפתרון מיועדים לתרחיש 1, 382, 400 באוד (AT+BAUDC). הפתרון לא יעבוד עבור קצבי שידור אחרים. לטיפול במקרים אחרים עיין בשלבים המתחילים משלב 3.

הפתרון ממש פשוט.

  1. חבר את סיכת ה- VCC של HC-06 לפין 5V של Arduino.
  2. חבר את סיכת ה- GND של HC-06 לסיכת ה- GND של Arduino.
  3. חבר את סיכת ה- RXD של HC-06 לסיכה 2 של Arduino.
  4. השאר את סיכת ה- TXD של HC-06 ללא חיבור (או התחבר לסיכה 8).
  5. העלה סקיצה של hc06reset.ino.
  6. התוכנית תגדיר את HC-06 למצב 115, 200 baud (AT+BAUD8).
  7. השתמש במודול HC-06 ששוחזר כמו בעבר.

שלב 3: מאחורי הקלעים …

מאחורי הקלעים…
מאחורי הקלעים…
מאחורי הקלעים…
מאחורי הקלעים…

ספריית SoftwareSerial המגיעה עם Arduino IDE מסוגלת לשדר לכל היותר 115, 200 סיביות לשנייה, כך שהיא לא מהירה מספיק כדי לתקשר בקצב השידור הרצוי של 1, 382, 400. בהתחשב בכך שלוח Arduino ברירת מחדל פועל על 16 מגה -הרץ, קצב הסיביות המקסימלי הבלתי דחוס הוא 16, 000, 000 סיביות לשנייה. אנחנו טובים עד כה!

על סמך הבנתי את SoftwareSerial.cpp, תקשורת הסידור מתבצעת על ידי הגדרת סיכת פלט גבוהה (= 1) או נמוכה (= 0) ביחס לעיכוב (הנובע משיעור השידור) בין השינויים.

  • סיכת הפלט גבוהה כברירת מחדל (כלומר אין נתונים)
  • לאחר מכן מועבר ביט התחלה (מה שמושך את הסיכה נמוך), ואז
  • 8 סיביות נתונים מועברות מ- LSB ל- MSB, (+5V כאשר הסיביה 1 ו -0 אחרת) ואז
  • מועבר סיבית עצירה (מה שמושך את הסיכה גבוה)

בדרך זו מועבר 1 בתים באמצעות 10 סיביות.

ההודעה שעלינו לשלוח היא AT+BAUD8 (ללא / n, / r בסוף). פקודה זו מחזירה את HC-06 ל- 115, 200 קצב שידור שניתן לטפל בספריות רגילות.

על מנת לשלוח סיביות במהירות 1, 382, 400 סיביות/שנייה, לכל ביט יש לנו 1/1, 382, 400 שניות זמן (זה בערך 723.38 ns) לכל ביט. Arduino פועל על 16, 000, 000 Mhz, כך שכל מחזור נמשך 1/16, 000, 000 שניות - כלומר 62.5 ns לכל מחזור.

באמצעות קוד הרכבה AVR אנו יכולים להשתמש בפקודה OUT כדי להגדיר את סיכת הפלט גבוה או נמוך ו- NOP להמתין מחזור מעבד אחד בדיוק. שתי הפקודות אוכלות בדיוק מחזור מעבד אחד. באופן זה ניתן לכסות את זמן הסיביות של 723.38 ns על ידי 11 עד 12 הוראות ארדואינו לכל ביט מועבר. דבר אחד שיש לקחת בחשבון: הפקודה OUT קובעת בייט שלם בבת אחת, לכן עלינו לבחור PORTx כאשר זו אינה בעיה. שימוש ב- ATMEGA328P-PU למשל PORTD (סיכות ארדואינו 0-7) מושלם למצב זה. לאחר הגדרת הסיבית, רק הזמן הנכון צריך לחלוף שנעשה על ידי 10 עד 11 NOPs וזהו.

תוכל למצוא פרטי חישוב בקובץ האקסל שלהלן. קובץ זה יצר את הוראות ההרכבה הנדרשות לתוכנית. היה צורך לבצע החלפות בודדות לאחר הדבקת הקוד שנוצר.

שלב 4: אפשרויות קריאה/ שיפור נוספות

  • אולי ניתן ליצור ספריית SoftwareSerial מהירה יותר באמצעות הטכניקה שתוארה בשלב הקודם.
  • FedericoK2 יצר כלי נהדר שמייצר את קוד השחזור HC-06 עבור כל קצב סיביות אפשרי. גש לאתר כאן: https://tools.krum.com.ar/save_your_hc-06/ תודה לך FedericoK2

מוּמלָץ: