Forum: Projekte & Code µ-wire - USB auf ATtiny10


von Tim  . (cpldcpu)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Tim  . (cpldcpu)


Lesenswert?


von Takao K. (takao_k) Benutzerseite


Lesenswert?

16f1455

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en556969

14K FLASH
1K RAM
USB
14 pins

ca. 1.50 Euro

USB Stack fertig vorhanden

von Tim  . (cpldcpu)


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.

: Bearbeitet durch User
von Max D. (max_d)


Lesenswert?

Wow! Hut ab.
Ich hätte nicht gedacht, dass USB auf einen tiny10 passt.

von F. F. (foldi)


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. ;-)

von Tim  . (cpldcpu)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Takao K. (takao_k) Benutzerseite


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.

von Tim  . (cpldcpu)


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.

: Bearbeitet durch User
von Takao K. (takao_k) Benutzerseite


Lesenswert?

Muss ich nicht toll finden und das ist halt meine Meinung.

von F. F. (foldi)


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.

von Sean G. (atmega318)


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...

von F. F. (foldi)


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.

von :-) (Gast)


Lesenswert?

Takao K. schrieb:
> Muss ich nicht toll finden und das ist halt meine Meinung.

Dein Kommentar ist überflüssig! Du hast nicht verstanden was Tim uns da 
präsentiert! Als "Nicht-Golf-Spieler" finde ich Golf auch nicht toll, 
aber in nem Golf-Forum wäre so ein Kommentar genauso überflüssig! Ist 
halt meine Meinung!

von Tim  . (cpldcpu)


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.

von Tim  . (cpldcpu)


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.

von Tim  . (cpldcpu)


Lesenswert?


von F. F. (foldi)


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.

von Dennis S. (sixeck)


Lesenswert?

Es ist VERDAMMT faszinierend, was selbst auf allerkleinsten System zum 
laufen gebracht werden kann. Fettes Respekt, werd ich mir auch mal 
anschauen was du da verzapfst hast.

von Tim  . (cpldcpu)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Marius S. (lupin) Benutzerseite


Lesenswert?

Den Angstkondensator kann man auch weg lassen oder zumindest direkt an 
den Tiny klemmen.

von Tim  . (cpldcpu)


Lesenswert?

Marius S. schrieb:
> Den Angstkondensator kann man auch weg lassen oder zumindest direkt an
> den Tiny klemmen.

Interessanterweise ist die LED am kritischsten, daher hängt der 
KOndensator dort.

von Davis (Gast)


Lesenswert?

Respekt!

Wusste doch gleich, dass ich dich "provozieren" kann :)

Beitrag "Re: Micronucleus - USB-Bootloader für ATtiny"

von Tim  . (cpldcpu)


Lesenswert?

Davis schrieb:
> Beitrag "Re: Micronucleus - USB-Bootloader für ATtiny"

Da habe ich allerdings versagt, denn der Bootloader-Teil fehlt noch :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.