Forum: Mikrocontroller und Digitale Elektronik Arduino + AVRISP MK2: SPI Clock Speed


von Tim (Gast)


Lesenswert?

Hallo,

habe einen ATtiny85 mit einem externen Quarz 8 MHz.
Zum Programmieren verwende ich die Arduino IDE zusammen mit einem AVRISP 
MK2.

Das funktioniert auch gut, ob mit oder ohne CKDIV8 Fuse, also mit einem 
Controller-Takt von 8 MHz oder 1 MHz. Die Fuses ändere ich mit dem Atmel 
Studio. Dort ist eine SPI-Geschwindigkeit von 125 kHz eingestellt, wie 
auch in der Arduino-IDE (siehe unten).

Um etwas Strom zu sparen, habe ich den Quarz auf 4 MHz geändert, erst 
mal ohne die CKDIV8 Fuse, so dass die 4 MHz laufen.

Mit dem Atmel Studio kann ich wie gewohnt auf den Controller zugreifen.
Mit der Arduino IDE funktioniert das aber nicht mehr.
Dort steht
1
SCK period      : 8.00 us
also ein SPI-Takt von 125 kHz.

Wenn ich mich richtig erinnere, muss der Takt des Controllers mindestens 
4x höher sein, als der SPI-Takt, das wären also 500 kHz. Mit dem Quarz 
von 4 MHz liege ich da gut drüber, das ist auch noch viel schneller als 
mit dem 8 MHz Quarz und der CKDIV8 Fuse.

Trotzdem klappt das Programmieren nicht, es gibt die Fehlermeldung
1
Beim Hochladen des Sketches ist ein Fehler aufgetreten
2
avrdude: stk500v2_command(): command failed
3
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Unknown status 0x00
4
avrdude: initialization failed, rc=-1
5
         Double check connections and try again, or use -F to override
6
         this check.

Wenn ich wieder den 8 MHz-Quarz verwende, klappt die Programmierung.

Da mit dem Atmel-Studio der Zugriff in jedem Fall funktioniert, darf man 
wohl annehmen, dass der 4 MHz-Quarz grundsätzlich funktioniert.
Irgendwie verstehe ich das nicht...
Vielleicht kann mir das jemand erklären. Auch, wie man diese in der 
Fehlermeldung angegebene Option "-F" aktiviert, vielleicht klappt es ja 
damit?

Besten Dank!
Tim

von Stefan F. (Gast)


Lesenswert?

Teste manuell mit einem Kommando wie diesem:

avrdude -c stk500v2 -P COM6 -B16 -p attiny2313

Probiere kleinere Zahlen bei -B, bis es nicht mehr geht. Dann weißt du, 
mit welchem mindest-Wert du die Arduino IDE (boards.txt) konfigurieren 
musst.

Ich empfehle dir, weit von der Schwelle (wo es nicht mehr geht) weg zu 
bleiben.

Von -F kann ich nur abraten. Du riskierst damit den Chip durch flasch 
gesetzte Fuses wegen Kommunikationsfehler dauerhaft zu blockieren.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

hast du im Arduino IDE Board Menü unter Werkzeuge auch die 
Takteinstellung auf 4MHz geändert?

von Tim (Gast)


Lesenswert?

Danke für diese Antworten!

Ja, den Takt habe ich in der Arduino-IDE entspr. auf 4 MHz angepasst.

Stefan ⛄ F. schrieb:
> Teste manuell mit einem Kommando wie diesem:
> avrdude -c stk500v2 -P COM6 -B16 -p attiny2313

Wie bzw. wo kann ich das manuell testen? In der Kommandozeile? Werde das 
gleich mal versuchen.

von Stefan F. (Gast)


Lesenswert?

Tim schrieb:
> Wie bzw. wo kann ich das manuell testen? In der Kommandozeile?

Ja

von Tim (Gast)


Lesenswert?

Bekomme das leider nicht hin, es kommt die Fehlermeldung
1
avrdude: ser_open(): can't open device "USB": Das System kann die angegebene Datei nicht finden.

In der Arduino-IDE steht im Output, dass der USB-Port verwendet wird
1
Using Port                    : usb
2
Using Programmer              : stk500v2

Mit einer Software zur Anzeige der USB-Eigenschaften (USB Tree View) 
wird für den AVRISP MK2 auch kein COM-Port angezeigt.

Dann bleibt wohl nur, direkt in dieser Datei boards.txt 
rumzuprobieren...

Nur finde ich dort im Abschnitt
1
attinyx5.name=ATtiny25/45/85
keine Einträge zur Programmiergeschwindigkeit.

Wonach müsste ich denn suchen?

von EAF (Gast)


Lesenswert?

Tim schrieb:
> Nur finde ich dort im Abschnittattinyx5.name=ATtiny25/45/85
> keine Einträge zur Programmiergeschwindigkeit.
Das nicht, aber in der zugehörigen plattform.txt die AVRdude Parameter.

Auch eine Integration ins Werkzeug->Board Menü sollte so möglich sein

von Tim (Gast)


Lesenswert?

Hmm, welcher Eintrag wäre das? Habe auch in der Datei avrdude.conf 
geschaut, nichts gefunden.

Sorry, finde mich da nicht zurecht...

von Stefan F. (Gast)


Lesenswert?

Der Parameter -P COM6 git an, dass er die virtuelle serielle 
Schnittstelle COM6 verwenden soll. Die Fehlermeldung "can't open device 
USB" sagt mir, dass du keinen seriellen Port angegeben hast. Bei einem 
originalen Atmel ISP mkII ist das richtig, der hat wirklich keinen.

Für die Geräte ohne COM Port brauchst du den libusb Treiber. Da du die 
Arduino IDE schon erfolgreich verwendet hast, muss der Treiber wohl 
bereits installiert sein, denke ich.

Also irgendwo haben hier ein relevantes Informationsdefizit.

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> in der zugehörigen plattform.txt

Tim schrieb:
> Habe auch in der Datei avrdude.conf geschaut

Schau mal in die richtige Datei platform.txt im Verzeichnes des Cores 
den du verwendest.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

in meinen Notizen ist vermerkt, dass ich für die Nutzung von avrdude mit 
meinem original avrispmkII den USB Treiber mittels Zadig Tool auf 
libusb-win32 (v1.2.6.9) umstellen muss. Da die Arduino IDE "auch nur" 
avrdude verwendet sollte das nötig sein im Zusammenspiel mit einem ISP 
Programmer.
avrdude habe ich in den Systemumgebungsvariablen eingetragen.

Bsp. für Commandozeile:
1
avrdude -c avrispmkII -p m328pb -v -P usb -U flash:w:"C:\...Pfad... \File.hex":i -e

Auf der Kommandozeile sollte das hier als Test funktionieren.
1
avrdude -c avrispmkII -p m328pb -v
oder
1
avrdude -c avrispmkII -p m328pb -v -P usb

>) µC Name entsaprechend ändern

von Tim (Gast)


Lesenswert?

Ganz vielen Dank für alle Tipps!

Einen kleinen Schritt bin ich weiter, weiß aber gar nicht so recht, 
warum.

Mein Aufruf sieht jetzt so aus:
1
avrdude -c avrispmkII -p attiny85 -v -P usb -C "C:\Users\Tim\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.1.4/avrdude.conf" -B 40

Manchmal klappt das, dann öfter wieder nicht. Wenn es funktioniert, 
werden die Fuses gelesen und angezeigt. Insgesamt sehr wackelig.
Ich habe für die Option -B auch größere und kleinere Werte probiert, 
ohne wesentliche Änderung. Ab Werten kleiner ca. 12 funktioniert es dann 
gar nicht mehr.

So komme ich irgendwie nicht weiter.

Also habe ich die Fuses nochmal mit dem Atmel Studio ausgelesen, 
funktioniert 10x hintereinander.

Bevor ich mich und euch jetzt weiter plage, kann ich das vielleicht 
anders machen. Kann ich nicht irgendwie den Bootloader löschen und das 
hex-File direkt aus dem Atmel Studio programmieren? Ich finde nur nicht, 
wo die Arduino-IDE das hex-File ablegt. Jedenfalls ist es nicht im 
Sketch-Ordner.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

erscheint mit der richtigen µC ID
avrdude -c avrispmkII -p t85 -v
oder
avrdude -c avrispmkII -p t85 -v -P usb

eine Erfolgsmeldung der Signatureerkennung? Wenn ja ist alles i.O. und 
du kannst das .hex File flashen. Das überschreibt den ggf. vorhandenen 
Bootloader.

Wenn du folgendes machts
1
In der IDE alle Ausgaben einschalten.
2
Datei > Voreinstellungen > 
3
- Ausführliche Ausgabe während > beide Haken rein
4
- Compilerwarnungen > "ALLE"
5
- Zeilennummern und Codefaltung sind auch hilfreich.
6
- Ebenso 'use accessibility features'
7
- Speichern beim Überprüfen und Hochladen würde ich abschalten.
siehst du im IDE Fenster alle Ausgaben inkl. dem Pfad zum erstellten 
.hex File in einem Temp Ordner. Das kannste dann per ISP & Atmel Studio 
flashen und der Bootloader ist weg. Aber das muss auch mit avrdude auf 
der Kommandozeile funktionieren.

von Tim (Gast)


Lesenswert?

Hallo,

das Verhalten des avrdudes ist auf meinem PC wahrscheinlich nicht ganz 
so wie es sein sollte:
Mit dem in meinem letzten Beitrag genannten Aufruf funktioniert das 
Auslesen der Fuses erst mal, dann plötzlich nicht mehr. Auch nicht, wenn 
ich es 20x probiere.
Ändere ich am Aufruf dann den Parameter -B um z.B. +1, (also 41 statt 
40), klappt der Zugriff auf den Controller. Dann aber wieder nicht.

An dieser Stelle gebe ich auf, weil das bei mir hier nicht zuverlässig 
funktioniert. Jedenfalls nicht mit dem 4 MHz Quarz.

Aber dank der Anleitung von Veit D. habe ich raus bekommen, wo die 
Arduino-IDE das hex-File abspeichert, kopiere es in den Projekt-Ordner 
und programmiere es mit dem Atmel Studio.
Ist zwar etwas umständlich aber so klappt das wenigstens zuverlässig.

Euch allen vielen Dank für eure Hilfe!

Grüße
Tim

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.