Micrologiciel et circuit de connexion USB 2.0 directe ATtiny45

9

Je veux créer mon propre périphérique USB modulaire à l' aide d'un ATtiny45 qui envoie simplement des données au PC via USB. Je ne lis pas de données, donc une connexion à sens unique (ATtiny -> PC) serait tout à fait correcte.

J'utilise un Arduino Uno en tant que FAI avec le croquis ArduinoISP standard chargé à partir du logiciel Arduino. Je pense utiliser AVRDUDE pour programmer l'ATtiny45 avec l'Arduino en tant que FAI car je veux pouvoir utiliser le code C compilé en HEX car il est plus avancé que l'Arduino Programming Langue.

Mes pensées de base sur le circuit: entrez la description de l'image ici

Comme vous pouvez le voir, je veux une connexion USB "directe". Jusqu'à présent, je sais que je dois utiliser une solution logicielle pour cela.

  1. J'ai réussi SoftwareSerial à fonctionner avec mon ATtiny45. Pour cela, j'ai utilisé le logiciel Arduino pour programmer l'ATtiny45 avec le code suivant:

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

    Veuillez noter que je n'utilise pas (encore) la broche 3 mais je dois le définir pour SoftwareSerial.

    De cette façon, en utilisant SoftwareSerial, j'ai pu envoyer des données de l'ATtiny directement dans la broche TX de mon Arduino UNO qui avait un croquis vierge chargé dessus pour ce test. J'utilisais le moniteur série du logiciel Arduino pour lire les données sur COM4 (dans mon cas) parce que mon PC n'a reconnu aucun appareil (port COM) car j'ai essayé de raccorder l'ATtiny programmé directement à un câble USB.

    Malheureusement, je n'ai obtenu que d'étranges caractères Unicode dans le moniteur série. Je pense que c'est parce que les données sont au format hexadécimal. J'ai donc remarqué que je dois connecter un convertisseur USB / série entre USB et ATtiny45 ... J'ai cherché de tels convertisseurs, mais je ne veux pas utiliser de cartes prédéfinies, car je veux que tout mes composants sur une seule carte. Je pense qu'une puce FTDI serait beaucoup trop pour mon projet, n'est-ce pas? (Il a des broches trop petites pour souder ...)

  2. V-USB était alors ma deuxième approche, car il n'a pas besoin d'un convertisseur USB / série (comme je le sais). Donc, pour utiliser V-USB, je devrais utiliser AVRDUDE comme je l'ai mentionné plus tôt.

    J'ai trouvé ce bel exemple V-USB EasyLogger . Il contient une conception de circuit et un exemple de firmware. (C / C ++ / HEX)

    La seule chose que je veux savoir est: ai-je vraiment besoin de faire ressembler mon circuit à celui montré dans l'exemple? -> entrez la description de l'image ici

Que dois-je savoir d'autre sur ce type de connexion USB? (Pourquoi ai-je besoin d'un convertisseur USB / série? Puis-je simplement brancher le +5 et le VCC? De quels composants ai-je absolument besoin? Quel type de signal dois-je envoyer via TX? Bits? Hex? De quelle tension a-t-il besoin être ? )

Merci pour toutes vos réponses.


MISE À JOUR

Voici quelques liens supplémentaires qui m'ont vraiment aidé sur certains points. Mais je ne l'ai toujours pas bien compris ...

le premier -> http://www.ernstc.dk/arduino/tinycom.html

et le second -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (faites défiler jusqu'à la section "Sortie série")

Ace
la source
2
Oui, vous, au moins si vous ne voulez pas violer les spécifications limites électriques trop mal . Veuillez noter que votre connecteur "USB" dans votre diagramme supérieur est grossièrement mal étiqueté. D + / D- ne sont pas des lignes d'émission et de réception distinctes, mais plutôt une paire différentielle bidirectionnelle .
Chris Stratton
Je suis désolé pour mon mauvais croquis. Je ne suis vraiment pas le gars électrique, mais un programmeur. Le "dessin" n'était qu'une visualisation de mes pensées que j'avais en tête lorsque je planifiais ce projet.
Ace

Réponses:

5

Vous pouvez communiquer directement l'ATtiny45 vers USB, sans convertisseur FTDI.

Pour que tout fonctionne, vous aurez besoin de la bibliothèque V-USB .

Un très bon exemple de tout ce qui fonctionne est ici , qu'il utilise le même exemple d'EasyLogger.

Le même auteur a d'autres bons conseils et projets avec USB et uC.

Un exemple de circuit avec l'ATtiny:

schématique

simuler ce circuit - Schéma créé à l'aide de CircuitLab

Butzke
la source
Le demandeur a déjà examiné V-USB.
Ignacio Vazquez-Abrams
Merci beaucoup. J'essaierai cela dès que possible. Mais d'abord, je veux vous demander la meilleure façon de programmer l'ATtiny45 avec la bibliothèque V-USB .. Je ne sais pas quoi et comment faire .. J'ai examiné AVRDUDE. pour l'instant je sais que je dois charger un bootloader ??? au petit ainsi qu'au firmware (fichier hex ??). Et je pense que je dois compiler le code C (par exemple l'exemple easylogger) après avoir changé le code de mon application. droite ?
Ace
et pourriez-vous aussi "simplifier" le circuit au strict minimum? Je suis confus à cause, par exemple, de la LED ... je n'ai vraiment pas besoin de composants supplémentaires comme des LED ou des capteurs pour le moment.
Ace
et quel type de diodes sont D2 & D3? Des diodes Schottky?
Ace
et aussi, qu'en est-il des bits de fusible? et à la fin du message que vous avez lié, ils disent quelque chose sur les fusibles ?? J'ai entendu dire que si je fais quelque chose de mal avec les fusibles, je peux ruiner le minuscule?
Ace
5

Fondamentalement, l'USB est un protocole de communication de haut niveau avec des exigences spécifiques pour la conduite, la synchronisation et la terminaison au niveau de la ligne de signal. Ce n'est pas aussi simple que série, il a des lignes de données différentielles et un codage NRZI, une interrogation requise, une négociation, etc. C'est pourquoi vous avez besoin d'un adaptateur USB / série, ou pourquoi vous avez besoin d'une implémentation matérielle ou logicielle USB.

Alors que l'USB utilise une alimentation de 5 V, les lignes de signal sont en fait de 3,3 V à 3,6 V. C'est pourquoi le circuit VUSB que vous montrez utilise des diodes zener sur ces deux lignes. Le Tiny ne peut pas simplement fonctionner à 3,3 V car il ne peut pas être cadencé à 16 MHz à 3,3 V.

Les autres pièces, R1-R3, D1, D2 et C1, C2, sont des pièces minimales requises. Ce n'est pas vraiment demander beaucoup de fonctionnalités que vous obtenez. Voir cette page pour une liste de tous les projets qui utilisent vusb.

Le commutateur, R4 et LED1 font tous partie de l'exemple de micrologiciel d'enregistrement de données spécifique et peuvent être évités si vous n'en avez pas besoin / modifiez le micrologiciel.

Passant
la source
Merci pour cette réponse. Je savais que les lignes de données usb utilisent ~ 3,3V. Mais ce que je ne comprends pas, c'est la définition exacte du signal USB? N'est-ce pas une rangée de morceaux? Je ne peux pas simplement "émuler" ces bits avec le bon timing dans une boucle (activer et désactiver le signal d'accord)? J'ai déjà la minuscule utilisation de l'oscillation interne pour fonctionner à 8 MHz et un boudrate série de 4800, donc le timing ne devrait pas être le problème selon certains articles de blog que j'ai trouvés ...
Ace
1
@Ace 4800 bps est de 4,8 kHz. La faible vitesse USB est de 1,5 MHz et il y a l'encodage, la parité, les descripteurs USB et tout. VUSB "émule" les données USB, mais c'est très très complexe.
Passerby
1
@Ace en gros, vous essayez de faire l'équivalent de quelqu'un qui essaie d'utiliser du code morse sur un ordinateur, en appuyant sur le moniteur.
Passerby
HAHA XD La raison pour laquelle j'utilise un boudrate de 4800 est expliquée dans le deuxième lien de ma mise à jour.
Ace
1

Beaucoup trop de questions pour répondre dans un seul post, mais voici quelques points rapides:

Certains microcontrôleurs contiennent un «point de terminaison» USB et le matériel correspondant, mais le site Atmel montre que l'ATTiny45 n'en contient pas.

Par conséquent, vous ne pouvez pas simplement connecter les ports du microcontrôleur à un connecteur USB comme celui-ci, car l'USB est un bus compliqué à la fois au niveau électronique et au niveau du protocole.

Cependant, comme indiqué dans les commentaires ci-dessous, vous effectuez une recherche dans le bon sens avec V-USB, je ne l'ai pas utilisé, je laisserai donc les autres commenter.

Les puces FTDI ne sont pas trop difficiles à souder, mais un PCB approprié avec une résistance de soudure le rendra plus facile.

Auparavant, j'ai utilisé quelque chose comme ce câble FT232 :

Câble USB FT232
(source: ftdichip.com )

Il a la puce FTDI intégrée dans le connecteur USB et gère tous les niveaux de traduction tout en fournissant de l'énergie. L'extrémité est un simple connecteur à pas de 0,1 "que vous pouvez connecter à un en-tête de broche.

Ils sont disponibles sur eBay à des prix raisonnables.

David
la source
Ici, lisez.
Ignacio Vazquez-Abrams
C'est assez intéressant. Je vais modifier mon message en conséquence, peut-être que quelqu'un d'autre peut m'aider avec les spécificités du V-USB.
David
@David - Oui, VUSB émule essentiellement l'USB. Votre message est correct en général, mais en particulier la famille ATTiny peut être connectée à USB via cette méthode.
Gustavo Litovsky
Merci pour votre réponse. J'aurais dû penser que je prévois de construire le projet sur une seule carte dotée d'une tête USB A (comme celle-ci computerkabelversand.de/pictures/picturesbig/… ). Donc, fondamentalement, cela ressemble à une clé USB commune. pas de câbles, juste une prise 3 broches à l'autre extrémité. c'est pourquoi je l'ai appelé "modulaire". de cette façon, je peux programmer l'ATtiny individuellement (il est amovible) et avoir mes différents capteurs / appareils connectés aux 3 ou 4 broches (le RX que je n'utilise pas encore).
Ace
1
J'ai vu cela aujourd'hui qui pourrait vous être utile: rayonshobby.net/?p=7363
David