Forum: Mikrocontroller und Digitale Elektronik Probleme beim Programmieren meiner Schaltung mit ATMEGA 328P über Arduino IDE / AVRISP MKII


von Jannik S. (jannik_s913)


Angehängte Dateien:

Lesenswert?

Liebes Mikrocontroller Forum,

leider verzweifle ich im Moment etwas an meinem Projekt.

Mein Problem ist, dass ich weder mit dem Arduino als ISP einen 
Bootloader für die Arduino IDE brennen kann, noch mit dem AVRISP MKII.

Bei dem AVRISP MKII komm ich gar nicht zum flashen des Bootloaders, da 
es ein Problem mit dem Treiber gibt. Es kommt immer die Fehlermeldung:

Using Port                    : usb
Using Programmer              : stk500v2
avrdude: usbdev_open(): did not find any USB device "usb" 
(0x03eb:0x2104)

Versuche ich es mit dem Arduino kommt immer der Fehler:

avrdude: Device signature = 0x000102
avrdude: Expected signature for ATMEGA328 is 1E 95 0F
Double check chip, or use -F to override this check.

Meine Schaltung ist als Schaltplan.png angehängt.

Ich habe wirklich so vieles schon probiert (2 ganze Tage), von der 
Installation anderer Treiber (libusb) über das exportieren der 
kompilierten Binärdatei via Arduino Studio und dem anschließenden 
Hochladen der .elf oder der .hex Dateien in Microchip Studio 7 (das 
hochladen geht komischer Weise, aber der mikrocontroller macht dann halt 
nichts). Langsam verzweifle ich. Ich frage mich halt ob meine Schaltung 
Schuld ist, es wäre lieb wenn ein Elektronik Experte hier einmal drüber 
gucken konnte, auch wenn ich das auch schon zich mal gecheckt hab.

Das komische ist leider, dass wenn ich über das Microchip Studio über 
das Device Programming Tool, "meine Schaltung auslese", dass dann die 
korrekte Device signature angezeigt wird (siehe 1.png). Auch kann ich 
Files über das Studio hochladen, aber leider, macht der Mikrocontroller 
dann nicht, was ich Programmiert habe (das minimal Beispiel was ich 
benutzt hab schreib ich unten hin). Wenn ich also eine Datei via Arduino 
Studio als kompilierte Binärdatei speichere und dann hochlade, sieht es 
so aus, als wenn etwas hochgeladen wird (LEDs blinken, 
Fortschrittsbalken läuft durch, Bestätigung durch check "OK" usw.) und 
als Feedback kommt das alles okay ist und erfolgreich war (siehe 2.png). 
Der Controller macht aber nicht was er soll bzw. die an Pin 3 
angeschlossenen LEDs blinken nicht.

Komisch ist auch, dass wenn ich den Optiboot Bootloader über das Studio 
"brenne" (3.png), und die Fuses setze (4.png), angezeigt wird, dass 
alles geklappt hat, aber das wenn ich sie dann anschließend auslese, 
wieder ein anderer Wert drin steht (5.png). Ich kann auch nichts über 
den FTDI Adapter programmieren, nachdem der BOOTLOADER jetzt ja 
eigentlich drauf sein sollte.

Interessant ist auch, das wenn ich den Arduino as ISP mit dem Arduino 
Uno als Programmer verwendet habe und die Fehlermeldung von oben kommt, 
und ich danach den AVRISP MKII Programmer auselesen lasse, dort 
ebenfalls 0x000102 als Device signature angezeigt wird. Erst wenn ich 
die Schaltung einmal Spannungslos gemacht habe, wird wieder der korrekte 
Name im Studio angezeigt und ich kann auf die Device Information usw. 
zugreifen.

Es wäre so toll, wenn mir jemand von euch helfen könnte! Denn ich komm 
echt nicht mehr weiter!

Hier noch mein kompilierter Arduino Sketch den ich als .elf Datei auf 
meine Schaltung hochgeladen habe
1
void setup() {
2
  pinMode(3, OUTPUT);
3
}
4
void loop() {
5
  digitalWrite(3, HIGH);   
6
  delay(1000);                      
7
  digitalWrite(3, LOW);  
8
  delay(1000);                       
9
}

von Jobst M. (jobstens-de)


Lesenswert?

Layout?

Wo hat ISP seine Masse? (Am Stecker nicht!)

Bei ISP sind JP1, 2, 5 und J2, J12 nicht verbunden!?

(Wieso haben die LEDs einen 70R Vorwiderstand?)

Die 5V sind da?
Der Quarz schwingt?

Gruß
Jobst

von Sebastian (Gast)


Lesenswert?

Ich glaub BOOTSZ ist falsch. Und JP6 versteh ich nicht -- warum sollte 
am Quarz kein GND sein sollen?

LG, Sebastian

von Stefan F. (Gast)


Lesenswert?

Jannik S. schrieb:
> Mein Problem ist, dass ich weder mit dem Arduino als ISP einen
> Bootloader für die Arduino IDE brennen kann, noch mit dem AVRISP MKII.

Aber in deinen Screenshots sehe ich nur Erfolgsmeldungen.

> das hochladen geht komischer Weise, aber der Mikrocontroller
> macht dann halt nichts.

Wahrscheinlich liegt es an falscher BOOTSZ use. Er startet dann doch, 
nur stürzt er direkt ab weil er das Programm (den Bootloader) mitten 
drin statt am Anfang beginnt.

> usbdev_open(): did not find any USB device "usb"

Installiere libusb nach dieser Anleitung, falls du es anders gemacht 
hast. http://stefanfrings.de/avr_tools/libusb.html

Jannik S. schrieb:
> Komisch ist auch ... das wenn ich sie dann anschließend auslese,
> wieder ein anderer Wert drin steht

Bei den Fuses existieren einzelne Bits physikalisch nicht. Egal ob du 
sie auf 0 oder 1 setzt, beim Lesen kommt bei denen immer eine 1 heraus.

> Ich frage mich halt ob meine Schaltung Schuld ist

Gute Frage! Dazu lade ich immer ein minimales Blinky Programm auf mein 
neues Board und auf ein altes, bei dem ich ganz sicher weiß, dass es 
heile ist. Danach weiß ich, ob mein Programmieradapter und die 
zugehörige Software in Ordnung sind.

Wenn sich dann heraus stellt, dass mein eigenes Board zwar Programmiert 
werden kann, aber das Programm nicht ausführt, kontrolliere ich die 
nötigen nötigen Voraussetzungen:

1) Stromversorgung muss an allen (a)VCC Pins vorhanden sein.

2) GND muss mit allen GND Pins verbunden sein, als 0 Volt haben.

3) Die Stromversorgung muss schnell genug hoch fahren (sonst brauchst du 
einen externen Reset -> Taste drücken).

3) Der Reset Pin muss auf HIGH stehen. HIGH muss beim Reset Pin viel 
höher sein, als bei allen anderen Pins. Nämlich mehr als 90% von VCC 
(4,6V).

4) Der Quartz muss schwingen (kann man mit einem Oszilloskop durch einen 
1kΩ Widerstand an XTAL2 messen). Im Zweifelsfall den Quarz entfernen und 
von einer anderen Quelle an XTAL1 einspeisen.

von Jannik S. (jannik_s913)


Lesenswert?

Stefan ⛄ F. schrieb:
> Jannik S. schrieb:
>> Mein Problem ist, dass ich weder mit dem Arduino als ISP einen
>> Bootloader für die Arduino IDE brennen kann, noch mit dem AVRISP MKII.
>
> Aber in deinen Screenshots sehe ich nur Erfolgsmeldungen.
>

Genau das bringt mich ja so zum verzweifeln :/. Wenn ich den BOOTLOADER 
rauflade, und dann über FTDI programmieren will, dann kommen immer 
Fehlermeldungen, das die Verbindung nicht funktioniert. Also seriell 
gibt es kein Feedback und wenn ich mein Minimalbeispiel rauflade (als 
Binär kompilierte Datei), blinkt ja auch nichts, weswegen ich glaube das 
halt alles irgendwie Fehlerhaft ist.

>> das hochladen geht komischer Weise, aber der Mikrocontroller
>> macht dann halt nichts.
>
> Wahrscheinlich liegt es an falscher BOOTSZ use. Er startet dann doch,
> nur stürzt er direkt ab weil er das Programm (den Bootloader) mitten
> drin statt am Anfang beginnt.
>

Was ist denn dieses BOOTSZ und gäbe es eine Möglichkeit das zu 
verändern, also das er das nicht macht, sondern vom Anfang startet ?

>> usbdev_open(): did not find any USB device "usb"
>
> Installiere libusb nach dieser Anleitung, falls du es anders gemacht
> hast. http://stefanfrings.de/avr_tools/libusb.html
>

Das mache ich nochmal!

> Jannik S. schrieb:
>> Komisch ist auch ... das wenn ich sie dann anschließend auslese,
>> wieder ein anderer Wert drin steht
>
> Bei den Fuses existieren einzelne Bits physikalisch nicht. Egal ob du
> sie auf 0 oder 1 setzt, beim Lesen kommt bei denen immer eine 1 heraus.
>

Okay danke dir, das wusste ich nicht, bin da noch am Anfang!

>> Ich frage mich halt ob meine Schaltung Schuld ist
>
> Gute Frage! Dazu lade ich immer ein minimales Blinky Programm auf mein
> neues Board und auf ein altes, bei dem ich ganz sicher weiß, dass es
> heile ist. Danach weiß ich, ob mein Programmieradapter und die
> zugehörige Software in Ordnung sind.
>

Das werde ich auch probieren, nur das ich dann den Pin ändern muss, denn 
meine Schaltung ist leider fertig produziert und bestückt, aber ich lade 
mal auf dem Weg, meinen CODE auf nen UNO.

> Wenn sich dann heraus stellt, dass mein eigenes Board zwar Programmiert
> werden kann, aber das Programm nicht ausführt, kontrolliere ich die
> nötigen nötigen Voraussetzungen:
>
> 1) Stromversorgung muss an allen (a)VCC Pins vorhanden sein.
>

Das ist der Fall, das habe ich geprüft!

> 2) GND muss mit allen GND Pins verbunden sein, als 0 Volt haben.
>

Das auch!

> 3) Die Stromversorgung muss schnell genug hoch fahren (sonst brauchst du
> einen externen Reset -> Taste drücken).
>

Wie kann ich das kontrollieren, ob dass schnell genug ist. Die Schaltung 
für meine Spannungsversorgung ist als typical electrical circuit aus dem 
Datenblatt des verwendeten ICs entnommen.

> 3) Der Reset Pin muss auf HIGH stehen. HIGH muss beim Reset Pin viel
> höher sein, als bei allen anderen Pins. Nämlich mehr als 90% von VCC
> (4,6V).
>

Der Reset Pin ist auf 5,03V

> 4) Der Quartz muss schwingen (kann man mit einem Oszilloskop durch einen
> 1kΩ Widerstand an XTAL2 messen). Im Zweifelsfall den Quarz entfernen und
> von einer anderen Quelle an XTAL1 einspeisen.

Würde ich denn was hochladen können wenn der Quarz nicht schwingen 
würde, weil ich ja eigentlich auf externen Quarz umgeschaltet hab ?

Vielen Dank erstmal bis hierher für den vielen Input.

Liebe Grüße

Jannik

von Jannik S. (jannik_s913)


Lesenswert?

Sebastian schrieb:
> Ich glaub BOOTSZ ist falsch. Und JP6 versteh ich nicht -- warum sollte
> am Quarz kein GND sein sollen?
>
> LG, Sebastian

Dies ist meine erster Versuch, und ich war mir nicht sicher ob ich das 
verbinden muss, deswegen habe ich das als solderjumper gemacht. Ich habe 
die Brücke aber verbunden, also ist der Quarz mit GND verbunden.

Was ist dieses BOOTSZ und was mache ich, wenn es falsch ist?

Auch dir vielen Dank!!!

Liebe Grüße

Jannik

von Jannik S. (jannik_s913)


Lesenswert?

Jobst M. schrieb:
> Layout?
>
> Wo hat ISP seine Masse? (Am Stecker nicht!)
>

Die Masse nehme ich von meiner "Programmierschnittstelle" für den FTDI, 
die direkt daneben liegt auf der Platine. Ich hab aus Platzgründen quasi 
einen freiverdrahteten ISP, das Layout packe ich in den Anhang von 
diesem Post.

> Bei ISP sind JP1, 2, 5 und J2, J12 nicht verbunden!?
>
> (Wieso haben die LEDs einen 70R Vorwiderstand?)
>

Die 70 R resultieren aus einer Spannung von 3,2 V der verwendeten LEDs 
und einem Strom von 25 mA (Rv = (5V-3,2V)/0,025A = 72 Ohm). Alles 
Solderjumper also die JPs sind verlötet. Also wie Verbindungen.

> Die 5V sind da?

Die 5V sind überall, und mein Chip wird ja auch erkannt, ganz komisch.

> Der Quarz schwingt?
>

Der Quarz müsste auch schwingen, da ich ja den Chip auf den externen 
Quarz umgestellt habe, und ich ihn doch sonst nicht mehr erreichen 
könnte oder? Ich komm halt nirgends ran um den zu messen. Kann es sein 
das er nicht schwingt aber der Mikrocontroller trotzdem ansprechbar ist 
usw.?

Auch dir vielen Dank für dein Hilfe, das Layout und nen Bild von der 
Platine poste ich als extra Post nochmal

Jannik

von Jannik S. (jannik_s913)


Angehängte Dateien:

Lesenswert?


von Stefan F. (Gast)


Lesenswert?

Jannik S. schrieb:
>> 3) Die Stromversorgung muss schnell genug hoch fahren (sonst brauchst du
>> einen externen Reset -> Taste drücken).
> Wie kann ich das kontrollieren, ob dass schnell genug ist.

Mit einem Oszilloskop. Wenn der µC beim Einschalten des Netzteils nicht 
startet, aber nach Druck auf den Reset Knopf, dann hast du 
wahrscheinlich dieses Problem.

Jannik S. schrieb:
> Was ist dieses BOOTSZ und was mache ich, wenn es falsch ist?

Normalerweise startet der µC das Programm an Adresse 0. Der Bootloader 
liegt aber am oberen Ende des Flash Speichers. Mit der BOOTSZ Fuse 
stellt man ein, an welcher Stelle der Mikrocontroller starten soll, als 
den Anfang des Bootloaders. Der aktuelle Arduino Bootloader ist 2 kB 
groß, dementsprechend muss die Fuse eingestellt werden.

Jannik S. schrieb:
> Die 70 R resultieren aus einer Spannung von 3,2 V der verwendeten LEDs
> und einem Strom von 25 mA

Normalerweise betreibt man LEDs mit 1-5 mA.

Jannik S. schrieb:
> Der Quarz müsste auch schwingen, da ich ja den Chip auf den externen
> Quarz umgestellt habe, und ich ihn doch sonst nicht mehr erreichen
> könnte oder?

Korrekt.

von Jannik S. (jannik_s913)


Angehängte Dateien:

Lesenswert?

Hallo Stefan,

Ich hab deine Anleitung verfolgt, aber leider sagt er mir, dass der 
beste Treiber bereits installiert ist (siehe Anhang, auch ein gelbes 
Ausrufezeichen gibt es bei mir nicht), soll ich meinen Deinstallieren 
und dann deinen?

Könntest du mir verraten wie ich die BOOTSZ Fuse einstellen kann?

Liebe Grüße Jannik

von Stefan F. (Gast)


Lesenswert?

Jannik S. schrieb:
> leider sagt er mir, dass der
> beste Treiber bereits installiert ist

Mit "der beste" meint Windows "der neueste", das muss nicht unbedingt 
der beste sein. Du guckst da allerdings auf den falschen Eintrag, das 
ist nicht der libusb Treiber, den avrdude braucht.

von Jannik S. (jannik_s913)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> Jannik S. schrieb:
>> leider sagt er mir, dass der
>> beste Treiber bereits installiert ist
>
> Mit "der beste" meint Windows "der neueste", das muss nicht unbedingt
> der beste sein. Du guckst da allerdings auf den falschen Eintrag, das
> ist nicht der libusb Treiber, den avrdude braucht.

Komischerweise gibt es bei mir aber keinen Eintrag der so heisst, bzw. 
wo würde ich den denn finden?

Alles total komisch! Hab auch den ISP Programmer getestet, wenn ich das 
auf ein Arduino so hochlade, wie ich es beschrieben hat, führt der mein 
blink Sketch aus, meine Schaltung aber eben nicht, gibt es eine 
Möglichkeit, die BOOTSZ Fuse so zu verändern?

Vielen Dank nochmal!!

von Stefan F. (Gast)


Lesenswert?

Jannik S. schrieb:
> Komischerweise gibt es bei mir aber keinen Eintrag der so heisst, bzw.
> wo würde ich den denn finden?

Vermutlich weil du den libusb Treiber noch nicht installiert hast oder 
weil du den Programmieradapter (den du bei der Installation des Treibers 
ausgewählt hast) nicht angesteckt hast.

Jannik S. schrieb:
> wenn ich das auf ein Arduino so hochlade, wie ich es
> beschrieben hat, führt der mein blink Sketch aus

Vermutlich, weil beim Arduino die BOOTSZ Fuse schon ab Werk richtig 
eingestellt ist.

> gibt es eine Möglichkeit, die BOOTSZ Fuse so zu verändern?

Das machst du mit der Software die zu deinem Programmieradapter gehört. 
Oder mit avrdude. Oder mit irgendeiner GUI zu avrdude. Auf meiner Seite 
habe ich ja eine empfohlen.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

So wird der libusb Treiber angezeigt, wenn er richtig installiert wurde.

von Georg M. (g_m)


Lesenswert?

Jannik S. schrieb:
> die an Pin 3
> angeschlossenen LEDs blinken nicht.

Ich sehe die LED D2 am Pin 17, PB5/SCK, (Arduino-Pin 13).

von Stefan F. (Gast)


Lesenswert?

Ich habe meine Installationsprozedur von libusb gerade in einer frischen 
VM getestet. Sie funktioniert immer noch genau so wie beschrieben.

von BlaBla (Gast)


Lesenswert?

Jannik S. schrieb:
> Ich kann auch nichts über
> den FTDI Adapter programmieren, nachdem der BOOTLOADER jetzt ja
> eigentlich drauf sein sollte.

Am FTDI RX und TX gekreuzt?

von Stefan F. (Gast)


Lesenswert?

Wenn du mit der Arduino IDE den Bootloader installierst, dann wird 
(soweit ich weiß) automatisch auch ein Blink-Sketch mit installiert. 
Auch werden die Fuses automatisch eingestellt. Die LED muss also 
blinken. Wenn nicht, hast du einen Hardwarefehler.

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Der aktuelle Arduino Bootloader ist 2 kB
> groß,
Nein!
Das ist ein Irrtum / Nebelkerze.

Der aktuelle UNO Bootloader ist 512 Byte groß.

uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0xFD

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Das ist ein Irrtum / Nebelkerze.

Oh, das habe ich wohl mit dem alten Bootloader verwechselt.

512 bytes sind 256 Words, dann ist die Fuse ja doch richtig.

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Oh, das habe ich wohl mit dem alten Bootloader verwechselt.
Alte und neue Bootloader gibts nur beim Nano.

von EAF (Gast)


Lesenswert?

Nachtrag:
EAF schrieb:
> Alte und neue Bootloader gibts nur beim Nano.
Wobei beide die gleichen Bootloader Size Fuses gesetzt haben.

von Jannik S. (jannik_s913)


Lesenswert?

Liebes Mikrocontroller Forum,

vielen Dank für den tollen Input, einmal mehr hat sich gezeigt, wie 
wichtig sorgfältiges arbeiten ist. Ich hab den Fehler endlich gefunden, 
nachdem ich nochmal Stefans Liste in aller Ruhe durchgegangen bin! 
tatsächlich war der Taster Falsch (öffner) und beim messen betätigt 
(Controller lag andersrum, da unten die Beschriftungen der Pins sind), 
wodurch die 5V anlagen und es den Anschein hatte, dass alles richtig 
ist. Wenn ich den Controller dann umgedreht habe zum uploaden, war der 
Taster nicht mehr betätigt und der Controller dauerhaft auf Reset! Sowas 
blödes!

Ich möchte mich entschuldigen, dass ich hier eure Zeit mit sowas dummen 
beansprucht hab! Trotzdem habe ich viel gelernt und werde jetzt zu 
mindestens nach Stefans Anleitung meinen AVRISP ins Arduino Studio 
einbinden!

Nochmal vielen Dank an alle, der Thread kann geschlossen werden!

Liebe Grüße Jannik

von Sebastian (Gast)


Lesenswert?

Noch ein Nachtrag. Du wolltest ja ursprünglich zum Testen eine ganz 
einfache blink.ino.elf ohne jeden Bootloader einprogrammieren. Das ist 
ein guter Ansatz. Dann hättest du aber die BOOTRST fuse löschen sollen, 
die ja dazu führt dass beim reset der Bootloader (an der Adresse BOOTSZ) 
aufgerufen wird.

LG, Sebastian

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.