Firmware e circuito di connessione diretta USB 2.0 ATtiny45


9

Voglio creare il mio dispositivo USB modulare utilizzando un ATtiny45 che invia semplicemente dati al PC tramite USB. Non sto leggendo i dati, quindi una connessione a senso unico (ATtiny -> PC) sarebbe completamente a posto.

Sto usando un Arduino Uno come ISP con lo sketch ArduinoISP standard caricato dal software Arduino. Sto pensando di utilizzare AVRDUDE per programmare ATtiny45 con Arduino come ISP perché voglio poter usare il codice C compilato in HEX poiché è più avanzato di Arduino Programming Langue.

I miei pensieri di base sul circuito: inserisci qui la descrizione dell'immagine

Come puoi vedere, voglio una connessione USB "diretta". Finora so che devo usare una soluzione basata su software per questo.

  1. Ho gestito SoftwareSerial per lavorare con il mio ATtiny45. Per questo ho usato il software Arduino per programmare ATtiny45 con il seguente codice:

    #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);
    }

    Si noti che non utilizzo Pin 3 (ancora) ma devo definirlo per SoftwareSerial.

    In questo modo, utilizzando SoftwareSerial, sono stato in grado di inviare dati dall'ATtiny direttamente al pin TX del mio Arduino UNO su cui è stato caricato uno schizzo vuoto per questo test. Stavo usando il monitor seriale del software Arduino per leggere i dati su COM4 (nel mio caso) perché il mio PC non ha riconosciuto alcun dispositivo (porta COM) mentre provavo a collegare l'ATtiny programmato direttamente a un cavo USB.

    Sfortunatamente ho ottenuto strani caratteri Unicode nel monitor seriale. Penso che sia perché i dati sono in formato esadecimale o giù di lì. Quindi ho notato che ho bisogno di collegare un convertitore USB / seriale tra l'USB e l'ATtiny45 ... Ho cercato tali convertitori, ma non voglio usare nessuna scheda prefabbricata, dal momento che voglio tutto i miei componenti su una singola scheda. Penso che un chip FTDI sarebbe troppo "troppo" per il mio progetto, no? (Ha pin troppo piccoli per saldare ...)

  2. V-USB era quindi il mio secondo approccio, dal momento che non ha bisogno di un convertitore USB / seriale (come so). Quindi per usare V-USB avrei bisogno di usare AVRDUDE come ho detto prima.

    Ho trovato questo bell'esempio V-USB EasyLogger . Contiene una progettazione di circuiti e un firmware di esempio. (C / C ++ / HEX)

    L'unica cosa che voglio sapere è: devo davvero far sembrare il mio circuito come mostrato nell'esempio? -> inserisci qui la descrizione dell'immagine

Cos'altro devo sapere su questo tipo di connessione USB? (Perché ho bisogno di un convertitore USB / seriale? Posso semplicemente collegare +5 e VCC? Di quali componenti ho assolutamente bisogno? Che tipo di segnale devo inviare tramite TX? Bit? Hex? Di quale tensione ha bisogno essere ? )

Grazie per tutte le tue risposte


AGGIORNARE

Ecco alcuni link adizionali che mi hanno davvero aiutato in alcuni punti. Ma non l'ho ancora capito del tutto ...

il primo -> http://www.ernstc.dk/arduino/tinycom.html

e il secondo -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (scorrere fino alla sezione "Uscita seriale")


2
Sì, almeno se non si desidera violare troppo male le specifiche del limite elettrico . Si noti che il connettore "USB" nel diagramma superiore presenta un'etichetta gravemente errata. D + / D- non sono linee distinte di trasmissione e ricezione, ma piuttosto una coppia differenziale bidirezionale .
Chris Stratton,

Mi dispiace per il mio cattivo schizzo. Non sono davvero il tipo elettrico, ma un programmatore. Il "disegno" era solo una visualizzazione dei miei pensieri che avevo in mente mentre stavo pianificando questo progetto.
Ace

Risposte:


5

È possibile comunicare direttamente da ATtiny45 a USB, senza un convertitore FTDI.

Per far funzionare tutto è necessaria la libreria V-USB .

Un ottimo esempio di tutto ciò che funziona è qui , che utilizza lo stesso esempio di EasyLogger.

Lo stesso autore ha altri suggerimenti e progetti interessanti con USB e UC.

Un circuito di esempio con ATtiny:

schematico

simula questo circuito - Schema creato usando CircuitLab


Il richiedente ha già guardato V-USB.
Ignacio Vazquez-Abrams,

Grazie mille. Lo proverò appena posso. Ma prima voglio chiederti il ​​modo migliore per programmare l'ATtiny45 con la lib V-USB .. Non sono sicuro di cosa e come fare .. Ho esaminato AVRDUDE. finora so che devo caricare un bootloader ??? al piccolo così come al firmware (file esadecimale ??). E penso di dover compilare il codice C (ad esempio l'esempio di easylogger) dopo aver modificato il codice per la mia applicazione. giusto ?
Ace

e potresti anche "semplificare" il circuito al minimo indispensabile? Mi confondo a causa, ad esempio, del LED ... in questo momento non ho davvero bisogno di componenti aggiuntivi come LED o sensori.
Ace

e che tipo di diodi sono D2 e ​​D3? Diodi Schottky?
Ace

e anche, che dire dei bit Fuse? e alla fine del post che hai collegato, dicono qualcosa sulle micce ?? Ho sentito che se faccio qualcosa di sbagliato con i fusibili, posso rovinare il piccolo?
Ace

5

Fondamentalmente, USB è un protocollo di comunicazione di alto livello con requisiti specifici per la guida, il cronometraggio e la terminazione a livello di linea di segnale. Non è semplice come seriale, ha linee dati differenziali e codifica NRZI, polling richiesto, handshaking, ecc. Ecco perché è necessario un adattatore USB / seriale o perché è necessaria un'implementazione hardware o software USB.

Mentre USB utilizza un'alimentazione a 5 V, le linee del segnale sono in realtà da 3,3 V a 3,6 V. Questo è il motivo per cui il circuito VUSB che mostri utilizza diodi zener su quelle due linee. Il Tiny non può semplicemente funzionare a 3.3V perché non può essere sincronizzato con i 16MHz necessari a 3.3V.

Il resto delle parti, R1-R3, D1, D2 e ​​C1, C2 sono parti minime richieste nude. Questo non sta davvero chiedendo molte funzionalità. Vedi questa pagina per un elenco di tutti i progetti che usano vusb.

Lo switch, R4 e LED1 fanno tutti parte dell'esempio di firmware di registrazione dati specifico e possono essere evitati se non sono necessari / cambiano il firmware.


Grazie per quella risposta Sapevo che le linee dati dell'USB usano ~ 3.3V. Ma quello che non capisco è, come viene definito esattamente il segnale USB? Quelle non sono una fila di pezzi? Non posso semplicemente "emulare" quei bit con il giusto timing in un loop (sintonizzare il segnale on e off)? Ho già il piccolo uso dell'osc interno per funzionare a 8MHz e un boudrate seriale di 4800, quindi i tempi non dovrebbero essere il problema secondo alcuni blogposts che ho trovato ...
Ace

1
@Ace 4800 bps è 4,8 khz. USB a bassa velocità è 1,5 MHZ E c'è codifica, parità, descrittori USB e tutto. VUSB "emula" i dati USB, ma è molto complesso.
Passante dal

1
@Ace fondamentalmente, stai cercando di fare l'equivalente di qualcuno che cerca di utilizzare il codice morse su un computer, toccando il monitor.
Passante dal

HAHA XD Il motivo per cui sto usando un boudrate di 4800 è spiegato nel secondo link del mio aggiornamento.
Ace

1

Troppe domande a cui rispondere in un post, ma qui ci sono alcuni punti rapidi:

Alcuni microcontrollori contengono un "endpoint" USB e l'hardware pertinente, ma il sito Atmel mostra che ATTiny45 no.

Pertanto non è possibile semplicemente collegare le porte del microcontrollore a un connettore USB del genere, poiché l'USB è un bus complicato sia a livello elettronico che a livello di protocollo.

Tuttavia, come notato nei commenti qui sotto, stai cercando nella giusta direzione con V-USB, non l'ho usato, quindi lascerò altri a commentare.

I chip FTDI non sono troppo difficili da saldare, ma un PCB adeguato con resistenza di saldatura renderà più semplice.

In precedenza ho usato qualcosa come questo cavo FT232 :

Cavo USB FT232
(fonte: ftdichip.com )

Ha il chip FTDI incorporato nel connettore USB e gestisce la traduzione di tutti i livelli fornendo anche energia. L'estremità è un semplice connettore passo 0,1 "che è possibile collegare a un header di pin.

Sono disponibili su eBay a prezzi ragionevoli.



Questo è abbastanza interessante. Modificherò il mio post di conseguenza, forse qualcun altro può aiutare con le specifiche V-USB.
David,

@David - Sì, VUSB sostanzialmente emula l'USB. Il tuo post è corretto in generale, ma in particolare la famiglia ATTiny può essere collegata a USB tramite questo metodo.
Gustavo Litovsky,

Grazie per la tua risposta. Avrei dovuto pensare che stavo progettando di costruire il progetto su una singola scheda che avesse una testa USB A (come questa computerkabelversand.de/pictures/picturesbig/… ). quindi in pratica sembra una comune chiavetta USB. nessun cavo, solo un jack a 3 pin all'altra estremità. ecco perché l'ho chiamato "modulare". in questo modo sono in grado di programmare l'ATtiny singolarmente (è rimovibile) e ho i miei diversi sensori / dispositivi collegati ai pin sinistro 3 3 o 4 (l'RX che non uso ancora).
Ace,

1
Ho
David
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.