เฟิร์มแวร์และวงจรของ ATtiny45 direct USB 2.0 Connection


9

ฉันต้องการสร้างอุปกรณ์ USBแบบแยกส่วนของตัวเองโดยใช้ ATtiny45ที่เพียงแค่ส่งข้อมูลไปยังพีซีผ่านทาง USB ฉันไม่ได้อ่านข้อมูลดังนั้นการเชื่อมต่อทางเดียว (ATtiny -> PC) ก็ไม่เป็นไร

ฉันใช้Arduino Uno เป็น ISPพร้อมร่าง ArduinoISP มาตรฐานที่โหลดจากภายในซอฟต์แวร์ Arduino ฉันคิดว่าจะใช้ AVRDUDE เพื่อเขียนโปรแกรม ATtiny45 กับ Arduino เป็น ISP เพราะฉันต้องการที่จะใช้รหัส C ที่คอมไพล์กับ HEX เพราะมันเป็นขั้นสูงกว่า Arduino Programming Langue

ความคิดพื้นฐานของฉันเกี่ยวกับวงจร: ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นฉันต้องการการเชื่อมต่อ USB "โดยตรง" จนถึงตอนนี้ฉันรู้ว่าฉันต้องใช้โซลูชันซอฟต์แวร์พื้นฐานสำหรับเรื่องนี้

  1. ฉันจัดการSoftwareSerialเพื่อทำงานกับ ATtiny45 ของฉันแล้ว สำหรับสิ่งนี้ฉันได้ใช้ซอฟต์แวร์ Arduino เพื่อเขียนโปรแกรม ATtiny45 ด้วยรหัสต่อไปนี้:

    #include <SoftwareSerial.h>
    #define rxPin 3
    #define txPin 4
    SoftwareSerial serial(rxPin, txPin);
    
    void setup() {
        pinMode(rxPin, INPUT);
        pinMode(txPin, OUTPUT);
        pinMode(led, OUTPUT);     
        serial.begin(4800);
    }
    
    void loop() {
        serial.println("1");
        delay(1000);
    }

    โปรดทราบว่าฉันไม่ได้ใช้ Pin 3 (ยัง) แต่ฉันจำเป็นต้องกำหนดสำหรับ SoftwareSerial

    ด้วยวิธีนี้โดยใช้ SoftwareSerial ฉันสามารถส่งข้อมูลจาก ATtiny โดยตรงไปยังเข็มหมุด TX ของ Arduino UNO ของฉันที่มีร่างเปล่าโหลดไว้สำหรับการทดสอบนี้ ฉันกำลังใช้ Serial Monitor ของซอฟต์แวร์ Arduino เพื่ออ่านข้อมูลใน COM4 (ในกรณีของฉัน) เพราะพีซีของฉันไม่รู้จักอุปกรณ์ใด ๆ (พอร์ต COM) เนื่องจากฉันพยายามขอ ATtiny ที่ตั้งโปรแกรมไว้โดยตรงกับสาย USB

    น่าเสียดายที่ฉันมีอักขระ Unicode แปลก ๆ ใน Serial Monitor ฉันคิดว่าเป็นเพราะข้อมูลอยู่ในรูปแบบเลขฐานสิบหกหรือมากกว่านั้น ดังนั้นฉันจึงสังเกตเห็นว่าฉันต้องเชื่อมต่อตัวแปลง USB / อนุกรมกับ USB และ ATtiny45 ... ฉันได้ค้นหาตัวแปลงดังกล่าว แต่ฉันไม่ต้องการใช้บอร์ดที่สร้างไว้ล่วงหน้าเนื่องจากฉันต้องการทั้งหมด ส่วนประกอบของฉันในบอร์ดเดียว ฉันคิดว่าชิป FTDI จะมีวิธี "มาก" เกินไปสำหรับโครงการของฉันใช่ไหม (มีพินเล็กเกินกว่าที่จะบัดกรี ... )

  2. V-USBเป็นวิธีที่สองของฉันเนื่องจากไม่ต้องการตัวแปลง USB / อนุกรม (เท่าที่ฉันรู้) ดังนั้นในการใช้ V-USB ฉันจำเป็นต้องใช้ AVRDUDE ตามที่ได้กล่าวไปแล้ว

    ฉันได้พบตัวอย่างที่ดีEasyLogger V-USB มันมีการออกแบบวงจรและเฟิร์มแวร์ตัวอย่าง (C / C ++ / HEX)

    สิ่งเดียวที่ฉันอยากรู้คือฉันต้องทำให้วงจรของฉันเหมือนที่แสดงในตัวอย่างหรือไม่? -> ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องทราบอะไรอีกบ้างเกี่ยวกับการเชื่อมต่อ USB ชนิดนี้ (เหตุใดฉันจึงต้องใช้ตัวแปลง USB / อนุกรมฉันสามารถขอ +5 & VCC ได้ไหมฉันต้องใช้องค์ประกอบใดบ้างฉันต้องส่งสัญญาณประเภทใดใน TX TX บิตบิตฐานสิบหกแรงดันไฟฟ้าใดที่ต้องการ เป็น ? )

ขอขอบคุณสำหรับทุกคำตอบของคุณ.


UPDATE

นี่คือลิงค์ aditional ที่ช่วยฉันจริงๆในบางจุด แต่ฉันก็ยังไม่เข้าใจมันอย่างเต็มที่ ...

อันแรก -> http://www.ernstc.dk/arduino/tinycom.html

และครั้งที่สอง -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (เลื่อนลงไปที่ส่วน "ซีเรียลเอาท์พุท")


2
ใช่คุณทำอย่างน้อยถ้าคุณไม่ต้องการที่จะละเมิดข้อกำหนดวงเงินไฟฟ้ามากเกินไปไม่ดี โปรดทราบว่าตัวเชื่อมต่อ "USB" ของคุณในไดอะแกรมด้านบนของคุณนั้นไม่มีป้ายกำกับผิด ๆ D + / D- ไม่ได้ส่งที่แตกต่างกันและรับสาย แต่เป็นค่าคู่แบบสองทิศทาง
Chris Stratton

ฉันขอโทษสำหรับร่างที่ไม่ดีของฉัน ฉันไม่ใช่คนไฟฟ้า แต่เป็นโปรแกรมเมอร์ "การวาดภาพ" เป็นเพียงการสร้างภาพความคิดของฉันที่ฉันมีอยู่ในใจขณะที่ฉันกำลังวางแผนโครงการนี้
Ace

คำตอบ:


5

คุณสามารถสื่อสาร ATtiny45 ไปยัง USB ได้โดยตรงโดยไม่ต้องใช้ตัวแปลง FTDI

ในการทำให้ทุกอย่างทำงานคุณจะต้องใช้ไลบรารีV-USB

ตัวอย่างที่ดีของการทำงานทุกอย่างอยู่ที่นี่ซึ่งมันใช้ตัวอย่างเดียวกันจาก EasyLogger

ผู้เขียนคนเดียวกันมีเคล็ดลับและโครงการอื่น ๆ ที่มี USB และ uC

วงจรตัวอย่างที่มี ATtiny:

แผนผัง

จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab


ผู้ถามได้ดู V-USB แล้ว
Ignacio Vazquez-Abrams

ขอบคุณมาก. ฉันจะลองทำสิ่งนี้ให้เร็วที่สุด แต่ก่อนอื่นฉันต้องการถามคุณเกี่ยวกับวิธีการโพรบเพื่อเขียนโปรแกรม ATtiny45 ด้วย V-USB lib .. ฉันไม่แน่ใจว่าจะทำอย่างไรและอย่างไร .. ฉันดู AVRDUDE จนถึงตอนนี้ฉันรู้ว่าฉันต้องโหลด bootloader ??? เพื่อขนาดเล็กเช่นเดียวกับเฟิร์มแวร์ (ไฟล์ฐานสิบหก) และฉันคิดว่าฉันต้องรวบรวมรหัส C (เช่นตัวอย่าง easylogger) หลังจากฉันเปลี่ยนรหัสสำหรับแอปพลิเคชันของฉัน ใช่มั้ย
Ace

และคุณสามารถ "ลดความซับซ้อน" ของวงจรให้เหลือน้อยที่สุดได้หรือไม่? ฉันสับสนเพราะเช่น LED ... ฉันไม่ต้องการส่วนประกอบเพิ่มเติมเช่น LED หรือเซนเซอร์ในเวลานี้
Ace

และไดโอดชนิดใดคือ D2 & D3 ไดโอด Schottky?
Ace

และอะไรคือสิ่งที่เกี่ยวกับบิตฟิวส์? และท้ายที่สุดของโพสต์ที่คุณเชื่อมโยงพวกเขาพูดอะไรเกี่ยวกับฟิวส์? ฉันได้ยินมาว่าถ้าฉันทำผิดกับฟิวส์ฉันสามารถทำลายสิ่งเล็ก ๆ ได้ไหม?
Ace

5

โดยทั่วไปแล้ว USB เป็นโปรโตคอลการสื่อสารระดับสูงที่มีข้อกำหนดเฉพาะสำหรับการขับขี่ในระดับสายสัญญาณระยะเวลาและการยกเลิก มันไม่ง่ายเหมือนซีเรียล แต่ก็มีสายข้อมูลที่แตกต่างกันและการเข้ารหัส NRZI การสำรวจที่จำเป็นการจับมือ ฯลฯ นั่นคือเหตุผลที่คุณต้องใช้อะแดปเตอร์ USB / Serial หรือทำไมคุณต้องใช้ฮาร์ดแวร์ USB หรือซอฟต์แวร์

ในขณะที่ USB ใช้ไฟ 5V สายสัญญาณเป็น 3.3V ถึง 3.6V นี่คือเหตุผลที่วงจร VUSB ที่คุณแสดงใช้ไดโอดซีเนอร์ในสองบรรทัด Tiny ไม่สามารถทำงานที่ 3.3V เพียงเพราะมันไม่สามารถโอเวอร์คล็อกที่ 16MHz ที่ต้องการที่ 3.3V

ชิ้นส่วนที่เหลือ R1-R3, D1, D2 และ C1, C2 เป็นชิ้นส่วนที่ต้องการขั้นต่ำเปล่า นั่นไม่ได้เป็นการถามถึงคุณสมบัติที่คุณได้รับ ดูหน้านี้สำหรับรายการของโครงการทั้งหมดที่ใช้ vusb

สวิตช์ R4 และ LED1 เป็นส่วนหนึ่งของตัวอย่างเฟิร์มแวร์การบันทึกข้อมูลที่เฉพาะเจาะจงและสามารถหลีกเลี่ยงได้หากคุณไม่ต้องการ / เปลี่ยนเฟิร์มแวร์


ขอบคุณสำหรับคำตอบนั้น ฉันรู้ว่าสายข้อมูลของ usb ใช้ ~ 3.3V แต่สิ่งที่ฉันไม่เข้าใจคือสัญญาณ USB ถูกกำหนดอย่างไร นั่นไม่ใช่แถวของบิตเหรอ? ฉันสามารถ "เลียนแบบ" บิตเหล่านั้นด้วยจังหวะที่ถูกต้องในลูป (เปิดหรือปิดสัญญาณไม่ได้) หรือไม่? ฉันมีการใช้งานเล็ก ๆ OSC ภายในเพื่อให้ทำงานที่ 8MHz และ boudrate อนุกรม 4800 ดังนั้นระยะเวลาที่ไม่ควรจะมีปัญหาตาม blogposts บางอย่างที่ฉันได้พบ ...
Ace

1
@Ace 4800 bps คือ 4.8 khz ความเร็วต่ำ USB คือ 1.5 MHZ และมีการเข้ารหัส parity ตัวอธิบาย usb และทุกอย่าง VUSB ทำการ "จำลอง" ข้อมูล usb แต่ซับซ้อนมาก
Passerby

1
@ โดยทั่วไปแล้วคุณกำลังพยายามทำสิ่งที่เทียบเท่ากับคนที่พยายามใช้รหัสมอร์สบนคอมพิวเตอร์โดยแตะที่จอภาพ
Passerby

Haha XD เหตุผลที่ฉันใช้ boudrate 4800 นั้นได้อธิบายไว้ในลิงค์ที่สองในการอัพเดตของฉัน
Ace

1

มีคำถามมากเกินไปที่จะตอบในโพสต์เดียว แต่นี่คือจุดด่วนบางประการ:

ไมโครคอนโทรลเลอร์บางตัวมี "จุดปลาย" USB และฮาร์ดแวร์ที่เกี่ยวข้อง แต่ไซต์ Atmelแสดงว่า ATTiny45 ไม่มี

ดังนั้นคุณจึงไม่สามารถเชื่อมต่อพอร์ตไมโครคอนโทรลเลอร์กับขั้วต่อ USB แบบนั้นได้เพราะ USB เป็นบัสที่ซับซ้อนทั้งในระดับอิเล็กทรอนิกส์และระดับโปรโตคอล

อย่างไรก็ตามตามที่ระบุไว้ในความคิดเห็นด้านล่างที่คุณกำลังค้นหาตามเส้นด้านขวาด้วย V-USB ฉันไม่ได้ใช้สิ่งนี้ดังนั้นจะปล่อยให้คนอื่นแสดงความคิดเห็น

ชิป FTDI นั้นไม่ยากเกินกว่าจะบัดกรี แต่ PCB ที่เหมาะสมที่มีตัวต้านทานประสานจะทำให้ง่ายขึ้น

ก่อนหน้านี้ฉันใช้สาย FT232 แบบนี้ :

สาย USB FT232
(ที่มา: ftdichip.com )

มีชิป FTDI ฝังอยู่ในตัวเชื่อมต่อ USB และจัดการการแปลทุกระดับในขณะที่ยังจ่ายพลังงาน ปลายคือขั้วต่อพิทช์ 0.1 "แบบง่ายซึ่งคุณสามารถเชื่อมต่อกับส่วนหัวของพิน

พวกเขามีอยู่ใน eBay ในราคาที่สมเหตุสมผล



นั่นเป็นเรื่องที่น่าสนใจมาก ฉันจะแก้ไขโพสต์ของฉันตามนั้นบางทีอาจมีคนอื่นช่วยด้วยข้อมูลเฉพาะของ V-USB
เดวิด

@David - ใช่ VUSB จำลอง USB โดยทั่วไป โพสต์ของคุณถูกต้องโดยทั่วไป แต่ตระกูล ATTiny สามารถเชื่อมต่อกับ USB ได้โดยเฉพาะด้วยวิธีนี้
Gustavo Litovsky

ขอบคุณสำหรับคำตอบ. ฉันควรจะกล่าวว่าฉันวางแผนที่จะสร้างโครงการบนบอร์ดเดียวที่มีหัว USB (เช่นนี้ computerkabelversand.de/pictures/picturesbig/เป็นต้น) โดยทั่วไปดูเหมือนว่าจะเป็นแท่ง USB ทั่วไป ไม่มีสายเคเบิลเพียงแค่ 3pin-jack ที่ปลายอีกด้านหนึ่ง นี่คือเหตุผลที่ฉันเรียกมันว่า "แบบแยกส่วน" ด้วยวิธีนี้ฉันสามารถตั้งโปรแกรม ATtiny แยกต่างหาก (มันสามารถถอดออกได้) และมีเซ็นเซอร์ / อุปกรณ์ที่แตกต่างกันของฉันเชื่อมต่อกับ 3 หรือ 4 (RX ที่ฉันยังไม่ได้ใช้) เหลือหมุด
Ace

1
เห็นสิ่งนี้ในวันนี้ซึ่งอาจเป็นประโยชน์สำหรับคุณ: rayshobby.net/?p=7363
David
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.