Forum: Mikrocontroller und Digitale Elektronik usbasp µC falsche LockBits Programiert


von Johannes (joeto)


Lesenswert?

Hallo liebe Community,

ich bin kompletter Anfänger und versuche gerade den USBASP nachzubauen.
Hardware ist fetig, was aber Probleme macht ist das Programmieren des 
ATMEGA-16U.
Diesen habe ich auf einem Breadboard (Quarz: 12 MHz)mit dem Arduino Uno 
als ISP versucht zu Programmieren.
Der Chip wurde von AVRDUDESS problemlos erkannt.
Also habe ich die USBASP Firmware im Anschluss ausgewählt und 
draufgespielt.
Leider ist hier ein Fehler aufgetreten.
Hier die Logs: https://pastebin.com/KHF29Rg6

Nach dem Flashen wurde der Chip auch in AVRDUDESS nicht mehr erkannt:
```
>>>: avrdude.exe -c arduino_as_isp -P COM3 -b 19200 -p m8
ERROR: Unknown signature 000000
```

Auch habe ich versucht einen 8 MHz Quarz anzuschließen aber das 
funktioniert auch nicht.

Ich vermute es liegt an den falschen
Lock-Bits und Fuses: \
0xFF \
0xE9 \
die ich beim flashen mit dem 12 MHz Quarz verwendet habe.
Mich hat auch gewundert warum im Video 
(https://www.youtube.com/watch?v=hotZdN7vTVU) der µC mit einem 8 MHz 
Quarz programmiert wird aber dann am ende auf der USBASP Platine mit 
einem 12 MhZ Quarz laufen soll.


Was kann ich jetzt machen um das ganze zu retten und vor allem richtig 
zu programmieren? Ich habe keine high-voltage Programmierer etc.

Viele Grüße und Danke für eure Mühe

Johannes

von Rainer W. (rawi)


Lesenswert?

Johannes schrieb:
> ATMEGA-16U

Welchen Prozessor hast du auf deinem Board - U2 oder U4?

> Lock-Bits und Fuses: \
> 0xFF \
> 0xE9 \

Es sollte drei Bytes geben: Low, High und Extended
https://www.engbedded.com/fusecalc/

von Johannes (joeto)


Lesenswert?

Programmieren tue ich mit dem Arduino UNO und dem ISP Sketch.
Der Mikrocontroller ist der ATMEGA8 16U. Eine Zeile drunter steht: 
2321A9H.
https://www.reichelt.de/8-bit-atmega-avr-mikrocontroller-8-kb-16-mhz-pdip-28-atmega-8-16-dip-p45024.html?&nbc=1

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Johannes schrieb:
> Nach dem Flashen wurde der Chip auch in AVRDUDESS nicht mehr erkannt:

Kein Wunder, die Fuses deaktivieren die serielle Programmierung. Du 
brauchst einen HV-Programmer bzw. einen Fuse-Resetter.

von Johannes (joeto)


Lesenswert?

Mist. Sowas hab ich nicht und das klingt auch nach recht viel Aufwand 
bzw. Kosten. Da lohnt es sich für mich wahrscheinlich eher einfach nen 
neuen ATMEGA zu holen.

Welche Fuses müsste ich den setzen damit es beim nächsten Mal 
funktioniert?
Und wie kann es sein, dass der Chip mit 8 MHz Quarz programmiert wird 
und dann später mit 12MHz läuft?

von Georg G. (df2au)


Lesenswert?

Einen "Fusebit Doctor" bekommst du fertig für unter 20€ und er ist auch 
schnell selbst gebaut. Du bist nicht der Erste, der sich "verfused".

Der Quarz beim Programmieren gibt vor, wie schnell der Vorgang laufen 
darf. Im Anwendungsbetrieb gelten die Grenzen des Datenblattes, da bist 
du relativ frei.

von Gerhard O. (gerhard_)


Lesenswert?

Johannes schrieb:
> Mist. Sowas hab ich nicht und das klingt auch nach recht viel
> Aufwand
> bzw. Kosten. Da lohnt es sich für mich wahrscheinlich eher einfach nen
> neuen ATMEGA zu holen.
>
> Welche Fuses müsste ich den setzen damit es beim nächsten Mal
> funktioniert?
> Und wie kann es sein, dass der Chip mit 8 MHz Quarz programmiert wird
> und dann später mit 12MHz läuft?

Es gibt Fuse Configurations Utilities, mit denen man die Einstellungen 
klar durch gehen kann. Auch Atmel (Microchip) Studio V7 zeigt die 
Einstellungen übersichtlich an und warnt auch vor Fehlern.

https://www.engbedded.com/fusecalc/
https://eleccelerator.com/fusecalc/fusecalc.php?chip=at86rf401
https://play.google.com/store/apps/details?id=me.chayan.avrfusecalculator&hl=en_CA&gl=US&pli=1

Wenn Du Deinen AVR retten willst, schau, ob Dir jemand im Forum mit 
einem STK500 helfen kann, den AVR wieder im HV Parallel Modus zurück 
zustellen. Vielleicht gibt es sogar jemand in der Nähe.

von Steve van de Grens (roehrmond)


Lesenswert?

Johannes schrieb:
> Sowas hab ich nicht und das klingt auch nach recht viel Aufwand bzw.
> Kosten. Da lohnt es sich für mich wahrscheinlich eher einfach nen neuen
> ATMEGA zu holen.

Gut erkannt.

von S. L. (sldt)


Lesenswert?

Der uC wurde auf Quarz umgestellt: ich vermute, dass dieser nicht 
richtig angeschlossen wurde.

Denn:
> Kein Wunder, die Fuses deaktivieren die serielle Programmierung.

Das ist seriell gar nicht möglich: "Notes: 1. The SPIEN Fuse is not 
accessible in Serial Programming mode"

von Martin H. (horo)


Lesenswert?

S. L. schrieb:
> Das ist seriell gar nicht möglich

Aber per ISP

Johannes schrieb:
> mit dem Arduino Uno als ISP

von S. L. (sldt)


Lesenswert?

> Aber per ISP

Und was, bitte, ist ISP, wenn nicht seriell?

Übrigens ließe es sich abschalten per RSTDISBL-Fuse, aber da das 'Fuse 
High Byte' mit 'E9' programmiert wurde ...

von Mario M. (thelonging)


Lesenswert?

S. L. schrieb:
> Der uC wurde auf Quarz umgestellt: ich vermute, dass dieser nicht
> richtig angeschlossen wurde.

Sieht tatsächlich danach aus. Das Schreiben der hfuse schlug schon fehl.

von Martin H. (horo)


Lesenswert?

S. L. schrieb:
> Und was, bitte, ist ISP

Asche auf mein Haupt, hatte an den Bootloader gedacht.

von Martin H. (horo)


Lesenswert?

Johannes schrieb:
> Ich vermute es liegt an den falschen
> Lock-Bits und Fuses: \
> 0xFF \
> 0xE9 \
1
avrdude.exe -c arduino_as_isp -p m8 ... -U lfuse:w:0xFF:m -U hfuse:w:0xE9:m

Damit schreibst Du aber nicht 0xFF in die Lock-Bits, sondern in die 
Low-Fuse (lfuse).
Lock wäre "-U lock:w:0xFF:m".

Vorher kannst Du Deine Werte mit einem Fuse-Calculator kontrollieren, 
z.B.:
https://www.engbedded.com/fusecalc/

Martin

von Johannes (joeto)


Lesenswert?

Also meinst du dass da nix gebricked ist sondern es Probleme mit dem 
Oszillator gibt?
Der ist aber sicher richtig verdrahtet. Zwischen Pin 9 und 10 8 Mhz und 
von denen jeweils mit 22 pF auf GND.

Was genau soll ich denn deiner Meinung nach jetzt machen um es zum 
Laufen zu bekommen?

Viele Grüße
Johannes

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

HV-Prog oder Neukauf.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Johannes schrieb:
> Was genau soll ich denn deiner Meinung nach jetzt machen um es zum
> Laufen zu bekommen?

Da du über ISP nicht die SPIEN Fuse setzen kannst, kann nur der 
Oszillator "kaputt" sein

Darum:
Johannes schrieb:
> Der ist aber sicher richtig verdrahtet.
glaube ich dir das nicht wirklich.

Johannes schrieb:
> Mich hat auch gewundert warum im Video
> (https://www.youtube.com/watch?v=hotZdN7vTVU)

Da wundert mich noch mehr!
Nur 2 der 4 Powerpins beschaltet.
Keine Abblockkondensatoren.

Wenn du das auch so gemacht hast......


Übrigens:
Warum sollte man einen USBasp nachbauen, wenn man doch einen "Arduino as 
ISP" schon da hat.

: Bearbeitet durch User
von Johannes (joeto)


Lesenswert?

Okay, kannst du mir dann sagen wie ich das richtig mache?
Oder einen Schaltplan schicken?\
Der Schwingkreis ist so aufgebaut wie der an der linken Seite: 
https://www.fischl.de/usbasp/bilder/usbasp_circuit.png

Viele Grüße und danke für Eure Mühe

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Johannes schrieb:
> Der Schwingkreis ist so aufgebaut wie der an der linken Seite:
> https://www.fischl.de/usbasp/bilder/usbasp_circuit.png

Zeig deinen!


Besser wärs eh das mit einem externen Oszillator zu machen, nicht nur 
mit einem Resonator (Quarz).

von Achim H. (pluto25)


Lesenswert?

Ein externer Clock an Pinb6 wird ihn ansprechbar machen, sollte die 
SPIEN wirklich nicht gelöscht sein.

von Martin H. (horo)


Lesenswert?

H. H. schrieb:
> Zeig deinen!
>
> Besser wärs eh das mit einem externen Oszillator zu machen, nicht nur
> mit einem Resonator (Quarz).

Bitte mal mit dem Scope (Tastkopf 1:10) an Pin XTAL2 messen, ob da ein 
Signal kommt. Ansonsten Quartz und beide Kondensatoren raus und einen 
stabilen externen Takt von z.B. 8 MHz an XTAL1 einspeisen, XTAL2 bleibt 
unbeschaltet. Wenn sich dann der Prozessor meldet, kannst Du die Fuses 
wie auf der USBASP-Seite beschrieben setzen:
1
You have to change the fuse bits for external crystal (see "make fuses").
2
# TARGET=atmega8    HFUSE=0xc9  LFUSE=0xef

Arduino F. schrieb:
> Übrigens:
> Warum sollte man einen USBasp nachbauen, wenn man doch einen "Arduino as
> ISP" schon da hat.

Oder wenn es kompakter sein soll, dann einen Nano als Programmer umbauen 
(nur eine Leitung kappen und eine nachfädeln):
https://github.com/Ho-Ro/nanoSTK_V1

Vorteil: kein USB-Problem mit der nicht norm-konformen 
VUSB-Implementierung (die gerade bei Windows Zicken machen kann), 
definierte serielle USB-Kommunikation über STK500(v1) Protokoll.

Martin

von S. L. (sldt)


Lesenswert?

an Johannes:

Wie kommt man eigentlich auf die Idee, das 'Fuse High Byte' mit 'E9' zu 
programmieren?

> Zwischen Pin 9 und 10 8 Mhz und von denen jeweils
> mit 22 pF auf GND.

Was steht genau auf dem Quarz, und was auf den beiden Kondensatoren? Ich 
frage, weil hier schon manchmal pico und nano verwechselt wurde.

von Ralph S. (jjflash)


Lesenswert?

Johannes schrieb:
> ich bin kompletter Anfänger und versuche gerade den USBASP nachzubauen.
> Hardware ist fetig, was aber Probleme macht ist das Programmieren des
> ATMEGA-16U.
> Diesen habe ich auf einem Breadboard (Quarz: 12 MHz)mit dem Arduino Uno
> als ISP versucht zu Programmieren.
> Der Chip wurde von AVRDUDESS problemlos erkannt.
> Also habe ich die USBASP Firmware im Anschluss ausgewählt und
> draufgespielt.

Kann es sein, dass Du versucht hast, einen ATmega16 mit der Firmware für 
einen ATmega8 (und den Einstellungen der Fuses für einen ATmega8) zu 
flashen?

Zwischen ATmega8 und ATmega16 gibt es nicht nur Unterschiede bzgl. der 
Speichergröße der Chips.

Wenn es also unbedingt ein USBasp sein soll, warum kaufst du dir dann 
keinen fertigen aus China (findest du für ca. 4 Euro auf Ebay).

Wenn du einen USBasp zwingend selbst bauen magst, solltest du tunlichst 
die auf
https://www.fischl.de/usbasp/
vorgeschlagenen Controller verwenden.

Wenn es "nur" darum geht, einen Programmer zu haben, hättest du auch 
deinen Arduino-Uno einfach mit dem ISP-Script weiter verwenden können, 
evtl. auch mit einem UNO-Isp-Shield:

https://www.ebay.de/itm/265740835099?hash=item3ddf63591b:g:RkQAAOSwixdirDyT&amdata=enc%3AAQAIAAAAwNDROD7ckcEP3ggnLzW36zxqUgsO1JPkJNZnbwJh71ceoRT0SxxPrbfsTysIdiXcv06RTZEakGRt55SVCt50CtYzVDRtoIarbrKNT5NpZywfij0hBMJtRj8P%2BIXeQcdY2UA89QDC9RqYedOgD3u%2BTIbrIvhLmjArDnO4Zz7BKqoYv7oyvMIbQt8%2FFtsptilnCz8kXd2F5h07apAeXu1kh77rI6%2FlS%2BLnMgxR0CCvt%2BKUQTXiPOqa3oRef5imqgXpPA%3D%3D%7Ctkp%3ABk9SR5LJx5avYw

Bezüglich deines - wohl verfusten Controllers - gibt es eine 
Bauanleitung seit geraumer Zeit im Netz um das rückgängig zu machen:

https://github.com/SukkoPera/avr-fusebit-doctor

von Steve van de Grens (roehrmond)


Lesenswert?

Arduino F. schrieb:
> Da du über ISP nicht die SPIEN Fuse setzen kannst, kann nur der
> Oszillator "kaputt" sein

Ist nicht ganz richtig. Eventuell hat er sich den Reset Pin disabled, 
oder den Debug Wire aktiviert, dann ist SPI auch nicht mehr nutzbar. 
Oder er hat den Chip für eine andere externe Taktquelle konfiguriert, so 
dass der Quarz nicht Schwingt. In dem Fall kann man noch was retten.

Dieser Aufsatz hilft eventuell, das Problem zu verstehen und Lösungen zu 
versuchen: http://stefanfrings.de/avr_verfused

von S. L. (sldt)


Lesenswert?

> Eventuell ...

Nach der ursprünglichen Angabe (und auch dem Link) wurde E9 und FF 
programmiert.

> Debug Wire aktiviert

debugWIRE bei einem ATmega8?

von Steve van de Grens (roehrmond)


Lesenswert?

S. L. schrieb:
> debugWIRE bei einem ATmega8 (oder 16)?

Oh. Die haben ja gar keinen DebugWire.

von S. L. (sldt)


Lesenswert?

Also bitte, Steve van de Grens, Zitate nicht verfälschen.

Woher kommt eigentlich das Gerücht mit dem ATmega16 - in dem Link vom 
Anfang steht doch eindeutig "avrdude: device signature = 0x1e9307 
(probably m8)"?

von Steve van de Grens (roehrmond)


Lesenswert?

S. L. schrieb:
> Woher kommt eigentlich das Gerücht mit dem ATmega16

Der wurde im Eröffnungsbeitrag genannt. Zumindest kann man den 
Schreibfehler so interpretieren. Aber egal, beide haben kein DebugWire.

: Bearbeitet durch User
von S. L. (sldt)


Lesenswert?

Nun ja, das bezog sich weniger auf Ihr debugWIRE als auf

>  Welchen Prozessor hast du auf deinem Board - U2 oder U4?
bzw.
> Kann es sein, dass Du versucht hast, einen ATmega16 ...

PS:
... von rawi bzw. jjflash, sollte ich vielleicht korrekterweise noch 
ergänzen

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Steve van de Grens schrieb:
> Arduino F. schrieb:
>> Da du über ISP nicht die SPIEN Fuse setzen kannst, kann nur der
>> Oszillator "kaputt" sein
>
> Ist nicht ganz richtig. Eventuell hat er sich den Reset Pin disabled,

Nein!
Der der genannte m16 hat keine RSTDISBL Fuse.

von Steve van de Grens (roehrmond)


Lesenswert?

Arduino F. schrieb:
> Der der genannte m16 hat keine RSTDISBL Fuse.

Das auch nicht?

Ich kenne mich mit diesen alten Modelle nicht aus. Hätte ich bloß nichts 
geschrieben ... schäm.

von Alexander S. (alesi)


Lesenswert?

Arduino F. schrieb:
> Der der genannte m16 hat keine RSTDISBL Fuse.

Johannes schrieb:
> Der Mikrocontroller ist der ATMEGA8 16U.

von S. L. (sldt)


Lesenswert?

> Hätte ich bloß nichts geschrieben ... schäm.

Tja: "si tacuisses, philosophus mansisses" - aber machen Sie sich nichts 
daraus: "Wer immer strebend sich bemüht, den können wir erlösen".

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Alexander S. schrieb:
> Johannes schrieb:
>> Der Mikrocontroller ist der ATMEGA8 16U.

Ja: Der m8 hat sie.

: Bearbeitet durch User
von Johannes (joeto)


Angehängte Dateien:

Lesenswert?

Vielen Dank für eure Beitrage und die Diskussionen :)

Martin H. schrieb:
> Bitte mal mit dem Scope (Tastkopf 1:10) an Pin XTAL2 messen, ob da ein
> Signal kommt. Ansonsten Quartz und beide Kondensatoren raus und einen
> stabilen externen Takt von z.B. 8 MHz an XTAL1 einspeisen

Hab ich gemacht. Es liegen komischerweise nur ca. 500 Hz an XTAL 2 
(siehe Anhang). Vielleicht erklärt dass das Problem. Ich probiere es 
heute Abend mal mit den vorgeschlagenen 1 MHz.

S. L. schrieb:
> Was steht genau auf dem Quarz, und was auf den beiden Kondensatoren? Ich
> frage, weil hier schon manchmal pico und nano verwechselt wurde.

Auf dem Quarz: 8.000 und auf den Kondensatoren: 221.

Danke auch für die Inspiration mit den Alternativen zum usbasp. Ich 
wollte das halt mal selber probieren damit ich "meinen eigenen" haben.

Viele Grüße
Johannes

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Johannes schrieb:
> und auf den Kondensatoren: 221.

Ohne in die Liste gesehen zu haben:
Das sind 220pF und nicht die gewünschten 22pF

Johannes schrieb:
> Auf dem Quarz: 8.000
Im Eingangsposting waren es noch 12MHz, jetzt 8?

: Bearbeitet durch User
von S. L. (sldt)


Lesenswert?

Alles klar.

PS:
220 pF; so weit waren wir schon vor drei Tagen:
> Der uC wurde auf Quarz umgestellt: ich vermute, dass
> dieser nicht richtig angeschlossen wurde.

: Bearbeitet durch User
von Johannes (joeto)


Lesenswert?

Klappt jetzt :) Auch das Flashen ging problemlos.
Es lag tatsächlich an den 220 pf statt 22 pF. Ist mir jetzt echt 
peinlich!

Vielen Dank für eure Mühe und den tagelangen Support.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Johannes schrieb:
> Ist mir jetzt echt peinlich!
Das ist OK.

Merksatz:
> Der Weg in die Hölle, ist mit falschen Annahmen gepflastert.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Es lag tatsächlich an den 220 pf statt 22 pF.
Danke Dir für die Rückmeldung!

Sowas ist nicht schlimm und ist uns allen hier schon passiert. Ich bin 
sogar der Meinung, daß ich mir bei meinen Anfängen einen älteren AVR 
wirklich durch's Abschalten der SPIEN-Fuse via SPI gebrickt habe. Kann 
ein AT90S2313 gewesen sein, das waren die ersten AVRs, die ich in der 
Hand hatte. SPIEN? Was is'n das? Brauch ich nicht - aus damit und 
schwupps konnte mich der µC nicht mehr leiden.

> Ist mir jetzt echt peinlich!
Das muss es nicht. Wer fragt, ist einmal der Dumme. Wer nicht fragt, 
bleibt sein ganzes Leben lang dumm.

von S. L. (sldt)


Lesenswert?

an Johannes:

Das Problem lag, genau betrachtet, nicht bei Ihnen als Anfänger, sondern 
vielmehr bei einigen der alten Hasen hier, die nicht richtig 
hinschauten.

PS:
So, wie man eine Nadel am besten in einem Heuhaufen versteckt, lässt 
sich auch die Lösung eines Problems in einer Flut von irreführenden 
Beiträgen verstecken - wie soll da ein Anfänger durchsteigen.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

S. L. schrieb:
> Das Problem lag, genau betrachtet, nicht bei Ihnen als Anfänger,

Das ist eine irrationale Projektion!

Denn:
Es kam mehrfach der Hinweis auf den Oszillator!
Worauf der TO sagte: Der Schaltungsteil ist OK!

Spätestens mit den 221 war klar, dass da ein Irrtum/Fehlannahme des TO 
vorliegt.

Sicherlich gab es auch ein paar (unbeabsichtigte?) Nebelkerzen!
z.B.
1. m16 vs. m8
2. Lockbits/Fuses
3. 8MHz vs. 12MHz

Also bitte nicht auf die Helfer schimpfen, sondern anerkennen, dass das 
Problem identifiziert wurde, trotz der ganzen (unabsichtlichen?) 
Verwirrspielchen.

Kein Geschimpfe, kein Geschrei.

von S. L. (sldt)


Lesenswert?

"Geschimpfe, Geschrei"? - Das ist eine irrationale Projektion!

Lassen wir es gut sein, die Sache ist ja schließlich erledigt.

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.