µ-wire - USB auf ATtiny10

#3567841
Lesenswert?

Hier mal ein echter "Hack" für Leute die sich gerne mit Low-Level 
Programmierung auf dem AVR beschäftigen:

Um das USB-Protokoll und V-USB besser zu verstehen, habe ich eine 
mini-USB Anwendung auf einem ATtiny10 implementiert. Anbei ein Bild. Der 
Mikrocontroller gibt sich dem Rechner gegenüber als Little-Wire Device 
aus und steuert über das Protokoll eine WS2811/WS2812 LED an.

https://github.com/cpldcpu/u-wire

Little-Wire:
http://littlewire.cc/

V-USB belegt selbst in der kleinsten Implementierung noch ca. 1.5kb 
Flash und benötigt ca. 40 bytes RAM. Der ATtiny10 hat aber nur 1kb 
flash, 32 bytes RAM und 16 statt 32 Register. Es waren also einige 
Tricks notwendig, um den Code klein genug zu bekommen. Ein zentraler 
Punkt war die Implementierung von V-USB ohne Interrupts (siehe auch 
http://cpldcpu.wordpress.com/2014/03/02/interrupt-free-v-usb/). Dadurch 
konnte die Stacknutzung und die Menge der nötigen USB-Buffer reduziert 
werden.

Nervig ist, dass der ATtiny10 immer noch nicht richtig von AVR-GCC 
unterstützt wird. Ich musste LDS/STS über Macros erzeugen. Ein Ticket 
dafür ist bei Atmel seit Monaten offen.
Angehängte Dateien:
#3582110
Lesenswert?

Takao K. schrieb:
> 16f1455

Und? Was hat das damit zu tun?
Der ATtiny10 kostet <0.40EUR und kommt im SOT23 Gehäuse. Ich bin mir 
ziemlich sicher, dass die äquivalenten SOT23 PIC-Typen kein Software USB 
können. Du kannst ja gerne das Gegenteil beweisen :)

Alternativen mit Hardware-USB gibt es viele. Das ist aber nicht Sinn der 
Sache.

Am interessantesten unter den Low-cost Devices sind im Moment die neuen 
STM32F0 mit USB ohne Quarz. Die haben einen Cortex M0 core. Einen 70er 
Jahre PIC muss man sich wirklich nicht mehr antun.
#3582145
Lesenswert?

Tolle Sache und meinen Respekt dafür!

Im Moment habe ich zwar keine richtige Zeit für uC's, aber ich bin auch 
ein Tiny10 Fan.

Ich habe einen Universalprogrammadapter gebaut, mit dem du den Reset 
zurück setzen kannst und ein Sockel ist auch drauf, damit man die vorm 
löten schon programmieren kann.
Wir können ja hier eine Fan Gemeinde gründen. ;-)
#3582161
Lesenswert?

Max D. schrieb:

Danke!

F. Fo schrieb:
> Ich habe einen Universalprogrammadapter gebaut, mit dem du den Reset
> zurück setzen kannst und ein Sockel ist auch drauf, damit man die vorm
> löten schon programmieren kann.

So etwas werde ich brauchen. Ich habe eine Platine für µ-Wire designed. 
Auf der ist leider kein Platz mehr für einen ISP connector (Bild). Meine 
Idee war bisher, zum programmieren einfach ein Device auf ein SOT23 
Breakout Board zu kleben.
Angehängte Dateien:
Persönliche Seite #3582181
Lesenswert?

Tim    schrieb:
> Takao K. schrieb:
>> 16f1455
>
> Und? Was hat das damit zu tun?
> Der ATtiny10 kostet <0.40EUR und kommt im SOT23 Gehäuse. Ich bin mir
> ziemlich sicher, dass die äquivalenten SOT23 PIC-Typen kein Software USB
> können. Du kannst ja gerne das Gegenteil beweisen :)
>
> Alternativen mit Hardware-USB gibt es viele. Das ist aber nicht Sinn der
> Sache.
>
> Am interessantesten unter den Low-cost Devices sind im Moment die neuen
> STM32F0 mit USB ohne Quarz. Die haben einen Cortex M0 core. Einen 70er
> Jahre PIC muss man sich wirklich nicht mehr antun.

Was deine email soll ist mir nicht klar.

70er Jahre PIC?

Was bringt dass denn wenn du das USB protokoll so weit verstuemmelst 
dass du nicht mal enumerieren kannst, die Datenrate nur 10% im Control 
mode ist, und der Flash 95% voll ist?

Nur um zu beweisen dass es mit Ach und Krach geradeso geht.

Viel Spass. Fuer den 16F1455 brauchste auch keinen Quartz.
#3582273
Lesenswert?

> Was bringt dass denn wenn du das USB protokoll so weit verstuemmelst
> dass du nicht mal enumerieren kannst, die Datenrate nur 10% im Control

Natürlich funktioniert das Enumerieren, sonst würde das Device gar nicht 
erkannt werden.

> Nur um zu beweisen dass es mit Ach und Krach geradeso geht.

Ich glaube Du hast nicht verstanden was ein "Hack" ist. :)

Es geht tatsächlich darum, zu zeigen was auf einem ATtiny10 möglich ist.
#3582305
Lesenswert?

Tim    schrieb:
> Max D. schrieb:
>
> Danke!
>
> F. Fo schrieb:
>> Ich habe einen Universalprogrammadapter gebaut, mit dem du den Reset
>> zurück setzen kannst und ein Sockel ist auch drauf, damit man die vorm
>> löten schon programmieren kann.
>
> So etwas werde ich brauchen. Ich habe eine Platine für µ-Wire designed.
> Auf der ist leider kein Platz mehr für einen ISP connector (Bild). Meine
> Idee war bisher, zum programmieren einfach ein Device auf ein SOT23
> Breakout Board zu kleben.

Weil es das ist und man ja so einen kleinen, wenig leistungsfähigen uC 
nur für Aufgaben nimmt, die nur wenig Raum zur Verfügung stellen, ist 
das der einzige Weg, das gescheit zu machen.
Den Sockel gibt es für ca. 21 Euro bei ebay.
12 Volt auf dem Reset habe ich einfach mit einem Umschalter belegt.
Das ist nicht zeitkritisch.
#3582310
Lesenswert?

@cpldcpu
Richtig geil! In Verbindung mit den 8mm WS2812 LEDs gibt das Blink(1) 
den Todesstoss ;) Ich frage mich gerade, ob man das ganze so konzipieren 
könnte, dass ausser der LED nichts aus der USB Buchse rausschaut?

Bei USB Stecker als Leiterbahn muss die Platine ja 2mm dick sein, jetzt 
könnte man ja aber stattdessen die Platine 0.6mm dick machen und unten 
alle Teile drauf, und dann eine zweite Platine mit Aussparungen unten 
draufleimen. Dann sieht es aus, als ob es nur eine 8mm LED in einer USB 
Buchse wäre...
#3582318
Lesenswert?

Sean Goff schrieb:
> @cpldcpu
> Richtig geil! In Verbindung mit den 8mm WS2812 LEDs gibt das Blink(1)
> den Todesstoss ;) Ich frage mich gerade, ob man das ganze so konzipieren
> könnte, dass ausser der LED nichts aus der USB Buchse rausschaut?
>
> Bei USB Stecker als Leiterbahn muss die Platine ja 2mm dick sein, jetzt
> könnte man ja aber stattdessen die Platine 0.6mm dick machen und unten
> alle Teile drauf, und dann eine zweite Platine mit Aussparungen unten
> draufleimen. Dann sieht es aus, als ob es nur eine 8mm LED in einer USB
> Buchse wäre...

Wäre sogar eine Anwendung zum Test des USB Anschlusses möglich.
Womit auch der "angebliche Unsinn" sinnig wird.
#3583797
Lesenswert?

Sean Goff schrieb:
> @cpldcpu
> Richtig geil! In Verbindung mit den 8mm WS2812 LEDs gibt das Blink(1)
> den Todesstoss ;) Ich frage mich gerade, ob man das ganze so konzipieren
> könnte, dass ausser der LED nichts aus der USB Buchse rausschaut?
>
> Bei USB Stecker als Leiterbahn muss die Platine ja 2mm dick sein, jetzt
> könnte man ja aber stattdessen die Platine 0.6mm dick machen und unten
> alle Teile drauf, und dann eine zweite Platine mit Aussparungen unten
> draufleimen. Dann sieht es aus, als ob es nur eine 8mm LED in einer USB
> Buchse wäre...

Das müsste eigentlich möglich sein. Vielleicht werde ich noch einmal 
eine Variante mit PCB-Stecker designen.  Die 0.6 mm Platinen kann man 
leider nicht bei OSH Park bestellen.
#3583798
Lesenswert?

F. Fo schrieb:
> Weil es das ist und man ja so einen kleinen, wenig leistungsfähigen uC
> nur für Aufgaben nimmt, die nur wenig Raum zur Verfügung stellen, ist
> das der einzige Weg, das gescheit zu machen.
> Den Sockel gibt es für ca. 21 Euro bei ebay.
> 12 Volt auf dem Reset habe ich einfach mit einem Umschalter belegt.
> Das ist nicht zeitkritisch.

Ich werde mein Glück erst einmal mit einer Frickellösung probieren. Die 
Platinen kommen in ca. 2 Wochen - mal schauen.
#3583810
Lesenswert?

Tim, ich habe das auch nur auf Lochraster.
Habe wohl schon Platinen gemacht, aber für THT ist mir das, wenn es 
Einzellösungen sind (was ja meistens der Fall ist), einfach zu viel 
Aufwand.
Jetzt fange ich so allmählich an auf SMD umzusteigen und da sieht es 
schon wieder anders aus.
Lochraster, ich nehme fast nur noch Streifenraster, ist schnell gemacht 
und da kommt es auf die Funkion an.
#3591833
Lesenswert?

Jetzt wird auch die Hardware optimiert. Schaltung anbei.

- Der Controller wird mit 3.3V betrieben dadurch entfallen die 
Zener-Dioden.
- Zur Spannungsregelung wird eine LED verwendet. Rote Low-Current LEDs 
liefern den richtigen Spannungsabfall.
- Die Serienwiderstände kann man bei Low-Speed USB weglassen. Bei der 
niedrigen Bitrate sind Reflektionen noch kein Problem.

Damit passt die Schaltung auf eine 0.3" x 0.4" Platine.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren