Ich habe einen "usbasp"-Programmierer von AliExpress für die Verwendung mit meinen ATtiny84A AVR-Geräten gekauft. Auf der Oberseite der Platine ist der Text "USBASP V2.0 LC Technology" aufgedruckt, und es sieht ungefähr so aus:
Ich habe ein C232HM (FTDI)-Kabel, das ich seit einiger Zeit erfolgreich als Avrdude-Programmierer verwende, sodass ich weiß, dass meine AVR-Geräte funktionieren und dass ich die richtigen Pins am ATtiny84 verwende.
Leider habe ich mit diesem neuen Programmierer keinen Erfolg gehabt. Nach dem Verbinden von VCC (mit Jumper J1 auf 5V gesetzt), GND, MOSI, MISO, SCK und RESET (und dreifachem Prüfen!) avrdude
ergibt sich folgender Fehler:
$ avrdude -c usbasp -p attiny84 -vvvv
avrdude: Version 6.3, compiled on Sep 17 2016 at 02:19:28
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/usr/local/Cellar/avrdude/6.3/etc/avrdude.conf"
User configuration file is "/Users/me/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : usbasp
avrdude: usbasp_open("usb")
avrdude: seen device from vendor ->www.fischl.de<-
avrdude: seen product ->USBasp<-
AVR Part : ATtiny84
Chip Erase delay : 4500 us
PAGEL : P00
BS2 : P00
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 6 4 0 no 512 4 0 4000 4500 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
flash 65 6 32 0 yes 8192 64 128 4500 4500 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: usbasp_initialize()
avrdude: usbasp_transmit("USBASP_FUNC_GETCAPABILITIES", 0x00, 0x00, 0x00, 0x00)
avrdude: usbasp_spi_set_sck_period(0)
avrdude: auto set sck period (because given equals null)
avrdude: usbasp_transmit("USBASP_FUNC_SETISPSCK", 0x00, 0x00, 0x00, 0x00)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: usbasp_transmit("USBASP_FUNC_CONNECT", 0x00, 0x00, 0x00, 0x00)
avrdude: usbasp_program_enable()
avrdude: usbasp_transmit("USBASP_FUNC_ENABLEPROG", 0x00, 0x00, 0x00, 0x00)
<= [01]
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: usbasp_close()
avrdude: usbasp_transmit("USBASP_FUNC_DISCONNECT", 0x00, 0x00, 0x00, 0x00)
avrdude done. Thank you.
Es funktioniert nicht mit einer externen 5-V-Versorgung (J1 entfernt) oder mit J1 auf 3,3 V eingestellt.
Mit meinem Oszilloskop kann ich sehen, dass die Uhr mit etwa 92,6 kHz läuft, aber die MISO- und MOSI-Signale haben eine sehr niedrige Amplitude - etwa 1,1 V für MISO und 0,8 V für MOSI. Diese Spannungen erscheinen mir etwas niedrig:
Ich habe gelesen, dass J3 verwendet werden kann, um den Programmierer in den "langsamen" Modus zu versetzen (beachten Sie, dass der ATtiny84, den ich gerade zu programmieren versuche, bereits mit 8 MHz vom internen Oszillator läuft). Beim Hinzufügen von J3 sehe ich jedoch keine Änderung der Taktrate - es läuft immer noch mit etwa 92,6 kHz.
Nach dem, was ich gelesen habe, neigen die "chinesischen" USB-Programmierer dazu, mit einer Version der Software auszuliefern, die die Erkennung der Taktgeschwindigkeit ermöglicht. -B
Ich bin mir jedoch nicht sicher, ob dies zur Unterstützung der Option "-B" führt, da das Oszilloskop zeigt, dass die Uhr immer noch mit 92,6 kHz läuft, unabhängig davon, welchen Wert ich angebe.
Ich habe sichergestellt, dass keine anderen Schaltkreise den Programmierer stören. Ich habe auch einen zweiten, "frischen" ATtiny84 ausprobiert (also Sicherungen immer noch auf 1 MHz eingestellt), ebenfalls ohne Erfolg. Der C232HM-Programmierer funktioniert jedoch einwandfrei.
Also scheint nichts, was ich gelesen habe, mit dem zu korrelieren, was ich auf meinem Gerät sehe. Ich frage mich, ob diese MOSI/MISO-Spannungen zu niedrig sind (und warum) und ich bin auch verwirrt darüber, warum weder J3 noch -B
die Taktrate zu beeinflussen scheint.
Was könnte falsch sein? Was kann ich noch untersuchen?
EDIT: Weitere Informationen hinzugefügt.
Der ATtiny erhält etwa 5,1 V vom Programmierer. Dies scheint während des Vorgangs nicht zu schwanken oder abzufallen.
Spuren mit ATtiny84 vorhanden:
Die RESET-Leitung wird vom Programmierer zweimal auf Low gezogen, und die MOSI-Leitung geht auf ca. 3,3 V. Dann nach ca. 100ms beginnt der SCL bei 0-5V zu pulsieren, ca. 94 kHz, und es gibt Aktivität sowohl auf der MOSI- als auch auf der MISO-Leitung, aber es sieht ziemlich schrecklich aus:
Ohne ATtiny84 (SLK, RESET, MISO und MOSI Floating) sieht der Bereich so aus:
Die magentafarbene Spur ist MOSI und steigt auf etwa 5 V an, sieht aber hässlich aus (vielleicht weil sie schwebt):
Es gibt auch irgendeine Art von Signal auf MISO, vielleicht Störungen von MOSI?
Ich habe einen 330-kOhm-Widerstand zwischen MOSI und GND und einen 1-MOhm-Widerstand zwischen MISO und GND (immer noch kein ATtiny vorhanden) und es hat die Spuren ein wenig aufgeräumt:
Was ich jedoch nicht wirklich verstehe, ist, warum das MOSI-Signal (Magenta) so unsauber ist und warum auf MISO (Cyan) ein Taktsignal vorhanden ist.
Ich habe mit einem ähnlichen Problem an meinen Haaren gezogen, und da mir Ihre Informationen beim Einstieg geholfen haben, dachte ich, ich würde mein Ergebnis teilen und hoffen, dass es Ihnen helfen kann. Zunächst einmal verwende ich ein USBASP, das wie Ihres aussieht .
Ich hatte Erfolg mit attiny13 und 45. Ich hatte keine Probleme mit dem attiny13, aber das attiny45, das ich bekam, war standardmäßig auf die Verwendung einer externen Uhr eingestellt. Das heißt, Sie müssen einen Quarz verwenden (ich habe erfolgreich mit 8MHz und 16MHz getestet), um zuerst mit dem Chip zu sprechen. Sobald Sie kommunizieren können, können Sie die Sicherungen so einstellen, dass sie die interne Uhr verwenden. Sobald Sie dies getan haben, wird Ihr Kristall nicht mehr benötigt.
Abgesehen davon blieb mein attiny85 stumm, obwohl ich 8-, 16- und 20-MHz-Quarze getestet und genau die gleiche Verkabelung verwendet hatte.
Wie Sie habe ich etwas Müll auf MISO bemerkt. In meinem Screenshot habe ich die gleichen Farben wie du verwendet. Wie Sie sehen können, bekomme ich zunächst Müll auf MISO, aber nach einem Reset und einer kurzen Verzögerung (~110µs) scheint MISO aufzuwachen und sich selbst zu verhalten.
Als Referenz lautet der Befehl, den ich zum Testen verwendet habe:
avrdude -c usbasp -p t85 -B4
Das -B4
ist wichtig und ich habe erfolgreich zwischen -B4 und -B20 getestet. Es verlangsamt die Uhr und -B4 war das Minimum für mich, damit es funktioniert. Ich hatte aber Chips, die NICHT mit -B4 geantwortet haben. Um konservativ zu sein, habe ich mit -B16 begonnen.
Ein weiterer interessanter Punkt im Vergleich zu Ihren Screenshots ist, dass meine Reset-Leitung immer LOW ist und kurz auf UP geht. Das scheint bei dir umgekehrt zu sein. Ich habe nicht überprüft, ob dies ein normales Verhalten für das von Ihnen verwendete Attiny84 ist.
Ich hatte das gleiche Problem mit meinem Attiny 25. Als ich -B 4 hinzufügte, stellte mein usbasp eine Uhr auf eine niedrigere Frequenz ein. Sieht so aus, als ob der SCK bis 750000 Hz eingestellt werden kann und der Chip erst ab 187500 Hz und langsamer arbeitet. Mein Chip wird sogar bei einer SCK-Frequenz von 1000 Hz erkannt. Da ich .bat-Dateien verwende, um meine Chips zu programmieren. Ich füge einfach ein -B4 hinzu, um die Uhr zu senken und mich an die Arbeit zu machen. Danke, dass du mir den Befehl gezeigt hast.
Bruce Abbott
DavidA
Janka
DavidA
Bruce Abbott
DavidA
Chris Stratton
DavidA