Firmware e circuito de conexão USB 2.0 direta ATtiny45

9

Quero criar meu próprio dispositivo USB modular usando um ATtiny45 que simplesmente envia dados para o PC via USB. Como não estou lendo dados, uma conexão de maneira única (ATtiny -> PC) ficaria completamente bem.

Estou usando um Arduino Uno como ISP com o esboço padrão do ArduinoISP carregado de dentro do Arduino Software. Estou pensando em usar o AVRDUDE para programar o ATtiny45 com o Arduino como ISP, porque quero poder usar o código C compilado no HEX, pois é mais avançado que o Langue de programação do Arduino.

Meus pensamentos básicos do circuito: insira a descrição da imagem aqui

Como você pode ver, eu quero uma conexão USB "direta". Até agora eu sei que tenho que usar uma solução baseada em software para isso.

  1. Eu gerenciei o SoftwareSerial para trabalhar com o meu ATtiny45. Para isso, usei o software Arduino para programar o ATtiny45 com o seguinte código:

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

    Observe que eu não uso o Pin 3 (ainda), mas preciso defini-lo para SoftwareSerial.

    Dessa forma, usando o SoftwareSerial, eu era capaz de enviar dados do ATtiny diretamente para o pino TX do meu Arduino UNO que tinha um esboço em branco carregado para este teste. Eu estava usando o Serial Monitor do Arduino Software para ler os dados no COM4 (no meu caso) porque meu PC não reconheceu nenhum dispositivo (porta COM), pois tentei conectar o ATtiny programado diretamente a um cabo USB.

    Infelizmente, só tenho caracteres unicode estranhos no Serial Monitor. Eu acho que é porque os dados estão em formato hexadecimal ou algo assim. Então eu notei que preciso conectar um USB / Serial Converter entre o USB e o ATtiny45 ... Eu procurei por esses conversores, mas não quero usar nenhuma placa pré-fabricada, pois quero tudo meus componentes em uma única placa. Eu acho que um chip FTDI seria "demais" para o meu projeto, não é? (Tem pinos muito pequenos para soldar ...)

  2. O V-USB foi a minha segunda abordagem, pois não precisa de um conversor USB / Serial (como eu sei). Então, para usar o V-USB, eu precisaria usar o AVRDUDE, como mencionei anteriormente.

    Encontrei este belo exemplo do V-USB EasyLogger . Ele contém um design de circuito e um exemplo de firmware. (C / C ++ / HEX)

    A única coisa que quero saber é: Preciso realmente fazer meu circuito parecer com o mostrado no exemplo? -> insira a descrição da imagem aqui

O que mais eu preciso saber sobre esse tipo de conexão USB? (Por que eu preciso de um conversor USB / Serial? Posso conectar o +5 e o VCC? Quais componentes eu preciso absolutamente? Que tipo de sinal eu preciso enviar via TX? Bits? Hex? Que voltagem ele precisa ser estar ? )

Obrigado por todas as suas respostas.


ATUALIZAR

Aqui estão alguns links adicionais que realmente me ajudaram em alguns pontos. Mas ainda não o entendi completamente ...

o primeiro -> http://www.ernstc.dk/arduino/tinycom.html

e o segundo -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (role para baixo até a seção "Saída serial")

Ás
fonte
2
Sim, pelo menos se você não quiser violar muito as especificações dos limites elétricos . Observe que o conector "USB" no diagrama superior está gravemente errado. D + / D- não são linhas de transmissão e recepção distintas, mas sim um par diferencial bidirecional .
Chris Stratton
Sinto muito pelo meu desenho ruim. Eu realmente não sou o cara elétrico, mas um programador. O "desenho" era apenas uma visualização dos meus pensamentos que eu tinha em mente ao planejar este projeto.
Ás

Respostas:

5

Você pode comunicar o ATtiny45 para USB diretamente, sem um conversor FTDI.

Para fazer tudo funcionar, você precisará da biblioteca V-USB .

Um bom exemplo de tudo o trabalho é aqui , que ele usa o mesmo exemplo de EasyLogger.

O mesmo autor tem outras dicas e projetos interessantes com USB e uC.

Um circuito de amostra com o ATtiny:

esquemático

simular este circuito - esquemático criado usando o CircuitLab

Butzke
fonte
O autor da pergunta já olhou para V-USB.
Ignacio Vazquez-Abrams
Muito obrigado. Vou tentar isso o mais rápido possível. Mas primeiro quero pedir uma maneira mais adequada de programar o ATtiny45 com a V-USB lib. Não sei o que e como fazer. Analisei o AVRDUDE. até agora eu sei que tenho que carregar um gerenciador de inicialização ??? para o minúsculo, bem como o firmware (arquivo hexadecimal ??). E acho que preciso compilar o código C (por exemplo, o exemplo do easylogger) depois de alterar o código do meu aplicativo. certo ?
Ace
e você também poderia "simplificar" o circuito ao mínimo? Fico confuso por causa, por exemplo, do LED ... eu realmente não preciso de nenhum componente adicional, como LEDs ou sensores no momento.
Ás
e que tipo de diodos são D2 e ​​D3? Diodos Schottky?
Ás
e também, o que há com os bits do fusível? e no final do post que você ligou, eles dizem algo sobre fusíveis? Ouvi dizer que se eu fizer algo errado com os fusíveis, posso arruinar o minúsculo?
Ás
5

Basicamente, o USB é um protocolo de comunicação de alto nível com requisitos específicos para condução, sincronização e terminação no nível da linha de sinal. Não é tão simples quanto serial, possui linhas de dados diferenciais e codificação NRZI, sondagem necessária, handshake etc. É por isso que você precisa de um adaptador USB / Serial ou por uma implementação de hardware ou software USB.

Enquanto o USB usa energia de 5V, as linhas de sinal são na verdade de 3,3V a 3,6V. É por isso que o circuito VUSB que você mostra usa diodos zener nessas duas linhas. O Tiny não pode simplesmente funcionar em 3,3V, porque não pode ser sincronizado nos 16MHz necessários em 3,3V.

O restante das peças, R1-R3, D1, D2 e ​​C1, C2, são peças mínimas necessárias. Isso realmente não está pedindo muito pelos recursos que você obtém. Veja esta página para obter uma lista de todos os projetos que usam vusb.

O comutador, R4 e LED1 fazem parte do exemplo específico de firmware de registro de dados e podem ser evitados se você não precisar dele / alterar o firmware.

Transeunte
fonte
Obrigado por essa resposta. Eu sabia que as linhas de dados do usb usam ~ 3.3V. Mas o que eu não entendo é: como exatamente o sinal USB está definido? Esses não são uma fileira de bits? Não posso simplesmente "emular" esses bits com o tempo certo em um loop (sintonizando e desligando o sinal)? Eu já tenho o pequeno uso do osc interno para executar em 8MHz e um boudrate série de 4800, de modo que o timing não deve ser o problema de acordo com alguns blogposts que eu encontrei ...
Ace
11
O @Ace 4800 bps é de 4,8 khz. A velocidade baixa do USB é de 1,5 MHZ E há codificação, paridade, descritores de USB e tudo mais. O VUSB "emula" os dados usb, mas é muito, muito complexo.
Transeunte
11
@ Ace, basicamente, você está tentando fazer o equivalente a alguém tentando usar código morse em um computador, tocando no monitor.
quer
HAHA XD A razão pela qual estou usando um boudrate de 4800 é explicada no segundo link da minha atualização.
Ace
1

Muitas perguntas para responder em uma postagem, mas aqui estão alguns pontos rápidos:

Alguns microcontroladores contêm um "ponto final" USB e o hardware relevante, mas o site da Atmel mostra que o ATTiny45 não.

Portanto, você não pode simplesmente conectar as portas do microcontrolador a um conector USB como esse, porque o USB é um barramento complicado no nível eletrônico e de protocolo.

No entanto, conforme observado nos comentários abaixo, você está pesquisando nas linhas corretas com V-USB, eu não usei isso, portanto deixarei outros comentarem.

Os chips FTDI não são muito difíceis de soldar, mas um PCB adequado com resistência à solda tornará mais fácil.

Anteriormente, usei algo como este cabo FT232 :

Cabo USB FT232
(fonte: ftdichip.com )

Possui o chip FTDI embutido no conector USB e lida com toda a tradução de nível, além de fornecer energia. O final é um conector simples de passo de 0,1 "que você pode conectar a um cabeçalho de pinos.

Eles estão disponíveis no eBay por preços razoáveis.

David
fonte
Aqui, leia.
Ignacio Vazquez-Abrams
Isso é bem interessante. Vou editar minha postagem de acordo, talvez alguém possa ajudar com os detalhes do V-USB.
David
@ David - Sim, VUSB basicamente emula USB. Sua postagem está correta em geral, mas especificamente a família ATTiny pode ser conectada ao USB por esse método.
Gustavo Litovsky
Obrigado pela sua resposta. Eu deveria ter pensado que estou planejando construir o projeto em uma única placa com uma cabeça USB A (como esta, computerkabelversand.de/pictures/picturesbig/… ). então basicamente parece um pendrive comum. sem cabos, apenas um conector de 3 pinos na outra extremidade. por isso chamei de "modular". Dessa forma, sou capaz de programar o ATtiny individualmente (é removível) e tenho meus diferentes sensores / dispositivos conectados aos pinos 3 ou 4 (o RX que ainda não uso).
Ás
11
Vi isso hoje que pode ser de utilidade para você: rayshobby.net/?p=7363
David