Forum: Mikrocontroller und Digitale Elektronik Ist der ATtiny85 "abwärtskompatibel"?


von Frank S. (hobbyist)


Lesenswert?

Ich würde dieses kleine Projekt gerne nachbauen:

http://s-huehn.de/elektronik/klprojekte/akkutester/akkutester.htm

Brauche ich dafür zwingend den ATtiny13, den ich erst bestellen müsste, 
oder geht das auch ohne irgendwelche Veränderungen mit einem ATtiny85 
den ich hier habe?

Mit welcher Software brenne ich den ATtiny am besten? Bisher habe ich 
kleine Projekte immer mit einem Arduino und der Arduino IDE auf den 
ATtiny gebrannt. Aber in diesem Fall müssen wohl irgendwelche Fuses 
verändert werden. Mit der Arduino IDE wüsste ich nicht, wie ich das 
anstellen sollte.

Kann ich mit der anderen Software weiterhin den Arduino als Brenner 
nutzen? Oder nimmt man dafür einen USB-TTL Konverter?

Frank

von Uwe (de0508)


Lesenswert?

Hallo Frank,

einem Programmierer ist doch egal welcher µC man da hat, man nimmt das C 
Programm und passt es sich einem Bedarf an. Oder ?

Der Autor schreibt:
"Die aktuelle Software v1.00 vom 01.11.2014 für den ATtiny13A des 
Akku-Testers enthält den kommentierten Quelltext in C, das fertige 
Hex-File, das Make-File und einige andere Dateien. Bei der 
Programmierung sind unbedingt die Fuse-Bits zu beachten. Diese müssen 
folgendermaßen gesetzt werden:"

http://s-huehn.de/elektronik/klprojekte/akkutester/akkutester-attiny13a-v100.zip

von Uwe (de0508)


Lesenswert?

Hallo Frank,

Zu den ISP Programmieradaptern kannst Du dich hier:

# http://www.ehajo.de/baus%C3%A4tze/programmieradapter

informieren.

von Bernd K. (prof7bit)


Lesenswert?

Frank Saner schrieb:
> Mit welcher Software

avrdude. Das kann selbstverständlich auch die Fuses setzen (auf den 
Arduino lädst Du vorher das "Arduino-As-ISP"-Programm und legst dann die 
Reset-Leitung zeitweilig lahm (siehe Tutorials), dann ist das ein 
vollwertiger ISP-Programmer.

Für alles was in der Arduino-"IDE" nicht geht nimmst Du avrdude an der 
Kommandozeile, an der Kommandozeile entfaltet avrdude seine wirkliche 
Kraft.

___
PS: Ich habe bei Arduino-"IDE" das "IDE" in Anführungszeichen gesetzt 
denn das ist keine IDE sondern eine Krankheit. Und das sage ich nicht 
etwa weil ich das Arduino-Konzept ablehnen würde (es hat seine 
Daseinsberechtigung) sondern weil die Umsetzung einfach beschissen hoch 
3 ist, die haben ein Monster-C++-Framework erschaffen, unzähliche 
Beispielanwendungen dafür, mehrere von den Chinesen als kopierwürdig(!) 
befundene Hardwaredesigns herausgebracht und dann haben sie 99% vor dem 
Ziel aufgehört und vergessen eine vernünftige PC-Anwendung mitzulieferen 
und stattdesssen an einem Nachmittag mal eben schnell diese halbherzige 
Attrappe zusammengekloppt. Wirklich traurig.

von Uwe K. (ukhl)


Lesenswert?

Der ATtiny85 ist Pin-Kompatibel.
Aber die Architektur ist anders als beim ATtiny13.
Das HEX-File wird nicht funktionieren.
Der 13er taktet auch etwa schneller.

Das Programm ist aber sehr übersichtlich und sollte leicht für den 85er 
anpassbar sein.

Auch eine Arduino-Portierung ist sicher möglich.

: Bearbeitet durch User
von Frank S. (hobbyist)


Lesenswert?

Ich habe mir einen ATtiny13 in der Nachbarschaft besorgt und möchte 
diesen nun programmieren.

Aus meiner Kramkiste habe ich einen USB ISP Programmer herausgesucht. Er 
sieht in etwa so aus, wie dieser hier: 
http://www.ebay.de/itm/Neu-USB-ISP-USBASP-Programmiergerat-Programmierer-fur-Atmel-AVR-ATMega-51-ATTiny-/271784840180?pt=LH_DefaultDomain_77&hash=item3f47a38bf4

Den ATtiny habe ich ohne Widerstände, Kondensator und LED daran gemäß 
diesem Plan angeschlossen:
http://www.sachsendreier.com/msw/projekte/blinksdings/bild3.png

Auf meinem Ubuntu habe ich wie empfohlen avrdude installiert. Da ich 
kein großer Terminal-Fan bin, habe ich gemäß dieser Anleitung

http://forum.ubuntuusers.de/topic/installationsprobleme-avr8-burn-o-mat/

den Burn-o-mat als GUI installiert. Der läßt sich starten und ich habe 
auch die beiden erwähnten Verzeichnisse geändert.

Nun komme ich aber nicht weiter. Ich weiß nicht, welchen der ganzen 
USB-Ports, die dort zur Auswahl stehen, ich nehmen soll. Auch weiß ich 
nicht, welchen der vielen Programmieradapter ich auswählen muss.

lsusb sagt:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller
Bus 005 Device 003: ID 0483:2016 SGS Thomson Microelectronics 
Fingerprint Reader
Bus 004 Device 005: ID 03eb:c8b4 Atmel Corp.

Ich hoffe ihr könnt mir weiter helfen.


edit:
..
.
evice [zhifengsoft USBHID] on usb-0000:00:1d.2-1/input0
[11228.864104] usb 4-1: USB disconnect, device number 4
[12553.424099] usb 4-1: new low-speed USB device number 5 using uhci_hcd
[12553.655987] generic-usb 0003:03EB:C8B4.0004: hiddev0,hidraw0: USB HID 
v1.01 Device [zhifengsoft USBHID] on usb-0000:00:1d.2-1/input0
[12911.048576] usb 4-1: USB disconnect, device number 5
[13560.684067] usb 4-1: new low-speed USB device number 6 using uhci_hcd
[13560.915483] generic-usb 0003:03EB:C8B4.0005: hiddev0,hidraw0: USB HID 
v1.01 Device [zhifengsoft USBHID] on usb-0000:00:1d.2-1/input0

wird ausgegeben, wenn ich

dmesg | grep usb

eingebe.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das wird einer der vielen Programmer sein, die zum USBASP von Freund 
Fischl kompatibel sind.
Eines ist sicher, der Programmer ist kein HID Device, sondern wird eher 
das Dings unter Bus 004 Device 005 namens 'Atmel Corp.' sein.

Der Rest unter deinem Edit sind Mäuse, Tastaturen oder sonstige HID 
Sachen. Bluetooth und Fingerprint sind anscheinend in deinem Notebook 
verbaut.

von Stefan F. (Gast)


Lesenswert?

Kleiner tip: Im Gegensatz zu lsusb erzeugt dmesg eine chronologisch 
sortierte Ausgabe. Gerät anstecken, dmesg ausführen und dann siehst du 
die gesuchten Informationen immer ganz unten am Ende der Ausgabe.

von Axel S. (a-za-z0-9)


Lesenswert?

Stefan Us schrieb:
> Kleiner tip: Im Gegensatz zu lsusb erzeugt dmesg eine chronologisch
> sortierte Ausgabe. Gerät anstecken, dmesg ausführen und dann siehst du
> die gesuchten Informationen immer ganz unten am Ende der Ausgabe.

Oder gleich
1
tail -f /var/log/kern.log

um die Meldungen des Kernels "live" anzusehen. Dann auch mit 
menschen-lesbaren Timestamps. Sieht bei mir so aus:
1
Feb 27 10:41:51 alpha kernel: [  758.845304] usb 3-6.4: new low-speed USB device number 7 using xhci_hcd
2
Feb 27 10:41:51 alpha kernel: [  758.954254] usb 3-6.4: New USB device found, idVendor=16c0, idProduct=05dc
3
Feb 27 10:41:51 alpha kernel: [  758.954257] usb 3-6.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
4
Feb 27 10:41:51 alpha kernel: [  758.954258] usb 3-6.4: Product: USBasp
5
Feb 27 10:41:51 alpha kernel: [  758.954259] usb 3-6.4: Manufacturer: www.fischl.de

von Frank S. (hobbyist)


Lesenswert?

Okay, das kann ich heute Abend probieren, aber wie heisst dann konkret 
die Schnittstelle? Der Eintrag in den Settings müsste doch in der Art 
//dev//.... lauten, oder?

Frank

edit: das soll nur ein Slash sein.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> aber wie heisst dann konkret die Schnittstelle?

Genau das wird ebenfalls im Kernel log (oder dmesg) protokolliert.

Wobei der USBasp allerdings nicht über einen virtuellen seriellen Port 
angesprochen wird, sondern über die libusb.

Wenn du aber mal einen USB-UART Adapter einsteckst, wirst du sehen, dass 
der serielle Port im Log genannt wird.

von Frank S. (hobbyist)


Lesenswert?

So sieht die Ausgabe aus:

Mar  1 07:43:00 frank-ThinkPad-R60 kernel: [17455.132073] usb 2-2: new 
low-speed USB device number 2 using uhci_hcd
Mar  1 07:43:00 frank-ThinkPad-R60 kernel: [17455.364288] generic-usb 
0003:03EB:C8B4.000B: hiddev0,hidraw0: USB HID v1.01 Device [zhifengsoft 
USBHID] on usb-0000:00:1d.0-2/input0

Was genau soll ich nun im Feld "Port" eintragen?

Frank

von Ralph S. (jjflash)


Lesenswert?

Wenn das (wie abgebildet) ein USBasp Clone sein sollte, muß dieser 
(meines Wissens nach)

vid=0x16c0 pid=0x5dc

besitzen !!!


Frank Saner schrieb:
> lsusb sagt:
>
> Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 005 Device 002: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller
> Bus 005 Device 003: ID 0483:2016 SGS Thomson Microelectronics
> Fingerprint Reader
> Bus 004 Device 005: ID 03eb:c8b4 Atmel Corp.

Hier wird "nur" Atmel Corp. (wohl gefakte Ausgabe) angezeigt !! 
Gaaaaaanz sicher wird AVRDUDE (und andere Flashprogramme auch) diesen 
NICHT als USBasp identifizieren.

Ergo: einen funktionierenden Flasher besorgen !

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Ralph S. schrieb:
> Wenn das (wie abgebildet) ein USBasp Clone sein sollte, muß dieser
> (meines Wissens nach)
>
> vid=0x16c0 pid=0x5dc
>
> besitzen !!!

Korrekt!

lsusb liefert dann z.B.:
1
Bus 002 Device 002: ID ...
2
...
3
Bus 003 Device 009: ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
4
...
5
Bus 003 Device 001: ID ...

Das Gerät mit der benötigten vid und pid steckt bei meinem Rechner also 
an Bus 3, Platz 9 (bei mir ist es ein USBasp vom Typ guloprog). Genauere 
Infos liefert dann:

lsusb -s 3:9 -v
1
Bus 003 Device 009: ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
2
Device Descriptor:
3
  ...
4
  idVendor           0x16c0 Van Ooijen Technische Informatica
5
  idProduct          0x05dc shared ID for use with libusb
6
  bcdDevice            1.04
7
  iManufacturer           1 www.fischl.de
8
  iProduct                2 USBasp
9
  ...

Die Einträge bei iManufaturer und iProduct müssen ebenfalls korrekt 
sein, weil avrdude meines Wissens daran erkennt, ob es sich um einen 
USBasp handelt.

von Frank S. (hobbyist)


Lesenswert?

Nach dem Lesen diverser Forenbeiträge zum Thema habe ich mir den Atmel 
AVRISP MKII besorgt. Den ATtiny13 habe ich mit den 6 Pins 1:1 verbunden. 
Weitere Bauteile habe ich bisher nicht verbaut.

Ich habe den AVRISP MKII nun als Gerät eingestellt. Aber ich weiß immer 
noch nicht, welchen Port ich nun nehmen muss.

tail -f /var/log/kern.log sagt (nachdem ich ihn rausgezogen und wieder 
angesteckt habe):

Mar  1 14:43:10 frank-ThinkPad-R60 kernel: [22701.592128] usb 2-1: USB 
disconnect, device number 3
Mar  1 14:43:46 frank-ThinkPad-R60 kernel: [22737.616174] usb 2-1: new 
full-speed USB device number 4 using uhci_hcd

lsusb sagt dazu:

Bus 002 Device 005: ID 03eb:2104 Atmel Corp. AVR ISP mkII


lsusb -s 2:5 -v sagt dann:


Bus 002 Device 005: ID 03eb:2104 Atmel Corp. AVR ISP mkII
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        16
  idVendor           0x03eb Atmel Corp.
  idProduct          0x2104 AVR ISP mkII
  bcdDevice            2.00
  iManufacturer           1
  iProduct                2
  iSerial                 3
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval              10
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval              10

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Frank Saner schrieb:
> Ich habe den AVRISP MKII nun als Gerät eingestellt. Aber ich weiß immer
> noch nicht, welchen Port ich nun nehmen muss.

Gar keinen. Der geht nicht über seriell, der geht direkt über libusb. 
Avrdude sollte den von selbst finden.

: Bearbeitet durch User
von Frank S. (hobbyist)


Lesenswert?

Irgend etwas muss aber doch eingetragen werden, oder nicht?

Wenn ich gar nichts eintrage und versuche, die Fuses auszulesen kommt 
das hier:

/usr/bin/avrdude -C /etc/avrdude.conf -p t13 -P  -c avrispmkII  -U 
hfuse:r:/tmp/hfuse6380501372374583931.hex:r -U 
lfuse:r:/tmp/lfuse7835112631848880542.hex:r

avrdude: no port has been specified on the command line or the config 
file
         Specify a port using the -P option and try again

Frank

von Ralph S. (jjflash)


Lesenswert?

Als root auf der Konsole eingeben (damit es keine eventuellen 
Schwierigkeiten mit den udev-Regeln gibt):

avrdude -c avrispmkII -p t13

Anmerkung: das -P NICHT eingeben da du keinen Port angibst

Das ... sollte als erstes mal die Signatur des Tinys lesen

Wenn das geht, solltest du auch die Fuses lesen können:

avrdude -c avrispmkII -p t13 -U lfuse:r:-:h -U hfuse:r:-:h

von Frank S. (hobbyist)


Lesenswert?

Klappt leider nicht :(

frank@frank-ThinkPad-R60:~$ sudo avrdude -c avrispmkII -p t13
[sudo] password for frank:
avrdude: ser_open(): can't set attributes for device "/dev/ttyS0": 
Inappropriate ioctl for device

avrdude done.  Thank you.

Ich habe zur Sicherheit den Rechner vorher neu gestartet.

Frank

von Ralph S. (jjflash)


Lesenswert?

Dann ... benötigt er eben doch den Port...

entweder:

avrdude -c avrispmkII -p t13 -P /dev/ttyACM0

oder:

avrdude -c avrispmkII -p t13 -P /dev/ttyUSB0

von Frank S. (hobbyist)


Lesenswert?

Das klappt leider auch nicht.

frank@frank-ThinkPad-R60:~$ sudo avrdude -c avrispmkII -p t13 -P 
/dev/ttyACM0
[sudo] password for frank:
avrdude: ser_open(): can't open device "/dev/ttyACM0": No such file or 
directory

avrdude done.  Thank you.

frank@frank-ThinkPad-R60:~$ sudo avrdude -c avrispmkII -p t13 -P 
/dev/ttyUSB0
avrdude: ser_open(): can't open device "/dev/ttyUSB0": No such file or 
directory

avrdude done.  Thank you.

edit:
Als ich lsusb -s 2:5 -v eingegeben habe, stand in der zweiten Zeile:

Couldn't open device, some information will be missing

Könnte es etwas damit zu tun haben?

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Frank Saner schrieb:
>alph S. schrieb:
>> Dann ... benötigt er eben doch den Port...
>> entweder:
>> avrdude -c avrispmkII -p t13 -P /dev/ttyACM0
>> oder:
>> avrdude -c avrispmkII -p t13 -P /dev/ttyUSB0

> Das klappt leider auch nicht.

Klar. Ist ja auch falsch

Wenn man überhaupt einen Port angeben will (muß man bei USB-Geräten aber 
nicht), dann heißt der Port "usb"
1
avrdude -c avrispmkII -P usb ...

> frank@frank-ThinkPad-R60:~$ sudo avrdude -c avrispmkII -p t13 -P
> /dev/ttyACM0

Was soll das Theater mit sudo? Sieh lieber zu, daß du als User "frank" 
Zugriff auf das Gerät bekommst.

> Als ich lsusb -s 2:5 -v eingegeben habe, stand in der zweiten Zeile:
> Couldn't open device, some information will be missing

Das bedeutet, daß du als User "frank" keinen Zugriff auf das Gerät hast. 
Schau dir mal an, mit welcher Gruppe dein Linux das USB-Gerät anlegt. 
Bei mir ist der usbasp Gerät 6 an Bus 1:

1
~ $lsusb 
2
...
3
Bus 001 Device 006: ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
4
...
5
6
~ $ls -l /dev/bus/usb/001/006 
7
crw-rw---- 1 root plugdev 189, 5 Mar  1 19:11 /dev/bus/usb/001/006

Bei mir wird das Gerät mit der Gruppe "plugdev" (für _plug_able 
_dev_ices) angelegt. Ich bin Mitglied dieser Gruppe:

1
~ $groups 
2
axel lp dialout cdrom floppy audio dip video plugdev users netdev

Wenn du Glück hast, nimmt dein Linux schon eine generische Gruppe und du 
mußt dich nur noch zu dieser Gruppe hinzufügen. Evtl. mußt du noch eine 
udev-Regel anlegen, damit Linux das Gerät beim anstecken mit der 
passenden Gruppe anlegt. Bei mir sieht das so aus:

1
~ $cat /lib/udev/rules.d/59-usb_xl.rules
2
SUBSYSTEM!="usb", GOTO="usb_xl_end"
3
ACTION!="add", GOTO="usb_xl_end"
4
ENV{DEVTYPE}!="usb_device", GOTO="usb_xl_end"
5
6
#usbasp
7
ATTR{idVendor}=="16c0", ATTR{idProduct}=="05dc", MODE="0660", GROUP="plugdev"
8
#usbtiny
9
ATTR{idVendor}=="1781", ATTR{idProduct}=="0c9f", MODE="0660", GROUP="plugdev"
10
#pickit3
11
ATTR{idVendor}=="04d8", ATTR{idProduct}=="900a", MODE="0660", GROUP="plugdev"
12
...
13
14
LABEL="usb_xl_end"

von Bernd K. (prof7bit)


Lesenswert?

muss das nicht -c avrisp2
und nicht -c avrispmkII
heissen?

von Frank S. (hobbyist)


Lesenswert?

Ach du je, jetzt wird es schwer Linuxisch. Nicht mein Spezialgebiet. Ich 
hoffe Du hilfst mir etwas. Das hier habe ich bisher an Infos:

Bus 002 Device 004: ID 03eb:2104 Atmel Corp. AVR ISP mkII
frank@frank-ThinkPad-R60:~$ ls -l /dev/bus/usb/002/004
crw-rw-r-- 1 root root 189, 131 Mär  1 21:29 /dev/bus/usb/002/004
frank@frank-ThinkPad-R60:~$

Demnach darf nur root an das Gerät. Richtig? Wie ordne ich das Gerät 
jetzt einer Gruppe zu, auf die auch frank Zugriff hat?

von Frank S. (hobbyist)


Lesenswert?

Für jemanden, der nicht so firm in den Linuxinterna ist, ist das eine 
ganz schön schwierige Geburt. Aber hier habe ich etwas gefunden:

http://www.mikrocontroller.net/articles/AVRDUDE#Aufruf_unter_Linux_als_user_.28non-root.29

Statt "users" habe ich wie empfohlen, da es nicht kappte, "plugdev" 
genommen. Als Port wie empfohlen "usb" - und siehe da, kaum stimmen die 
Rechte, schon klappt es. Vielen Dank für den Tip!

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.