สารบัญ:

กู้คืนโมดูลบลูทูธ HC-06 ที่กำหนดค่าไม่ถูกต้อง: 4 ขั้นตอน
กู้คืนโมดูลบลูทูธ HC-06 ที่กำหนดค่าไม่ถูกต้อง: 4 ขั้นตอน

วีดีโอ: กู้คืนโมดูลบลูทูธ HC-06 ที่กำหนดค่าไม่ถูกต้อง: 4 ขั้นตอน

วีดีโอ: กู้คืนโมดูลบลูทูธ HC-06 ที่กำหนดค่าไม่ถูกต้อง: 4 ขั้นตอน
วีดีโอ: สอนเอาสัญญาบลูทูธเก่ามาใช้!!! 2024, พฤศจิกายน
Anonim
กู้คืนโมดูลบลูทูธ HC-06 ที่กำหนดค่าไม่ถูกต้อง
กู้คืนโมดูลบลูทูธ HC-06 ที่กำหนดค่าไม่ถูกต้อง

ฉันกำหนดค่าโมดูล HC-06 Bluetooth (ทาส) ให้เป็นอัตราบอดที่ 1, 382, 400 บอดด้วยคำสั่ง AT+BAUDC นับตั้งแต่ที่ Arduino เชื่อมต่ออยู่ก็ไม่สามารถใช้โมดูลกับไลบรารี SoftwareSerial ได้ ฉันพยายามกู้คืนอัตราบอดด้วยฮาร์ดแวร์อนุกรมของ Arduino (พิน 0 & 1) โดยไม่มีโชค

ฉันยังลองใช้ Google หัวข้อโดยไม่พบวิธีแก้ปัญหาที่เหมาะสม บางทีการใช้พอร์ตอนุกรมในตัวของคอมพิวเตอร์อาจเป็นวิธีแก้ปัญหา (ด้วยการเปลี่ยนระดับลอจิก 12V เป็น 3V3) แต่คอมพิวเตอร์ของฉันไม่มีพอร์ตที่ล้าสมัยนี้ ดังนั้นฉันจึงต้องหาวิธีแก้ปัญหาอื่น

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ

สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
  • บอร์ด Arudino/Genuino พร้อม Atmel ATMEGA328P-PU MCU (@16MHz) ที่เป็นค่าเริ่มต้น
  • โมดูลบลูทูธ HC-06 กำลังฟัง 1, 382, 400 บอด
  • Arduino IDE พื้นฐานจาก

ขั้นตอนที่ 2: การแก้ปัญหา

การแก้ไขปัญหา
การแก้ไขปัญหา
การแก้ไขปัญหา
การแก้ไขปัญหา

โปรดทราบว่าคำแนะนำนี้และวิธีแก้ปัญหาถูกสร้างขึ้นสำหรับสถานการณ์ 1, 382, 400 baud (AT+BADC) โซลูชันนี้ใช้ไม่ได้กับอัตราบอดอื่นๆ ในการจัดการกับกรณีอื่นๆ โปรดดูขั้นตอนที่เริ่มต้นจากขั้นตอนที่ 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 mode (AT+BAUD8)
  7. ใช้โมดูล HC-06 ที่กู้คืนได้เหมือนเมื่อก่อน

ขั้นตอนที่ 3: เบื้องหลัง…

เบื้องหลัง…
เบื้องหลัง…
เบื้องหลัง…
เบื้องหลัง…

ไลบรารี SoftwareSerial ที่มาพร้อมกับ Arduino IDE สามารถส่งได้สูงสุด 115, 200 บิต/วินาที ดังนั้นจึงไม่เร็วพอที่จะสื่อสารด้วยอัตรา 1, 382, 400 baud ที่ต้องการ เนื่องจากบอร์ด Arduino เริ่มต้นทำงานบน 16MHz บิตเรตสูงสุดที่ไม่มีการบีบอัดตามทฤษฎีคือ 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 ให้รอรอบ CPU หนึ่งรอบ คำสั่งทั้งสองกินถึง 1 รอบ cpu อย่างแน่นอน วิธีนี้จะครอบคลุมเวลาบิต 723.38 ns โดยคำแนะนำ Arduino 11 ถึง 12 ต่อบิตที่ส่ง สิ่งหนึ่งที่ต้องพิจารณา: คำสั่ง OUT จะตั้งค่าทั้งไบต์ในคราวเดียว ดังนั้นเราต้องเลือก PORTx ที่นี่ไม่ใช่ปัญหา การใช้ ATMEGA328P-PU เช่น PORTD (พิน Arduino 0-7) นั้นสมบูรณ์แบบสำหรับเงื่อนไขนี้ หลังจากตั้งค่าบิตแล้ว เวลาที่เหมาะสมเท่านั้นที่ต้องผ่านไป ซึ่งทำได้ 10 ถึง 11 NOPs และเท่านั้น

ดูรายละเอียดการคำนวณได้ในไฟล์ Excel ด้านล่าง ไฟล์นี้สร้างคำแนะนำแอสเซมลีที่จำเป็นสำหรับโปรแกรม ต้องทำการเปลี่ยนเพียงไม่กี่ครั้งหลังจากวางรหัสที่สร้างขึ้น

ขั้นตอนที่ 4: การอ่านเพิ่มเติม/ ความเป็นไปได้ในการปรับปรุงเพิ่มเติม

  • อาจสร้างไลบรารี SoftwareSerial ที่เร็วกว่าได้โดยใช้เทคนิคที่อธิบายไว้ในขั้นตอนก่อนหน้า
  • FedericoK2 เป็นเครื่องมือที่ยอดเยี่ยมที่สร้างรหัสกู้คืน HC-06 สำหรับทุกบิตเรตที่เป็นไปได้ เข้าสู่เว็บไซต์ที่นี่: https://tools.krum.com.ar/save_your_hc-06/ ขอบคุณ FedericoK2

แนะนำ: