Forum: Mikrocontroller und Digitale Elektronik Atmega328p "device signature 0x000000"


von mario (Gast)


Lesenswert?

Hallo,
ich habe das Problem ich habe einen Atmega328p aus einem Arduino Uno. 
Diesen wollte ich nun ohne das Arduino Board einsetzen, also auf einer 
eigenen Platine ohne externen Quarz. Ich habe zuerst aus Unwissenheit 
einfach meinen Code drübergebügelt ohne an den Fuses was zu ändern. Dann 
hat das Programm nicht funktioniert, daraufhin habe ich einen 
Fuserechner verwendet um die Fuses zu ändern. Das hier war der avrdude 
Befehl:

avrdude -c USBasp -p m328p -U flash:w:test.hex -U lfuse:w:0x62:m -U 
hfuse:w:0xd9:m -U efuse:w:0xff:m

Das hat beim ersten Mal auch teilweise funktioniert bloß dann kam die 
Meldung:

efuse was 0xff was changed to 7. Rechange? (Y/N)

sowas in der Art da hab ich dann ja gesagt. Danach hat er nichtsmehr 
angzeigt und nach zwei Minuten habe ich das dann mit strg+c abgebrochen. 
Jetzt kommt jedesmal diese Fehlermeldung:

avrdude: error: programm 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 done.  Thank you.

mit -F hinten dran kommt das:

avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATMEGA328P is 1E 95 0F

avrdude done.  Thank you.


Hab ich den AVR nun ruiniert oder kann ich den noch retten?
Wie hätte ich es machen müssen? Kennt irgendwer ein gutes Tutorial für 
ATmel Studio. Bisher kann ich nur mit der Arduino IDE umgehen und den 
Code dort implementieren. Deswegen habe ich auch die Import Funktion 
hergenommen.

Das ist mein Test Code.
1
/*Begining of Auto generated code by Atmel studio */
2
#include <Arduino.h>
3
4
/*End of auto generated code by Atmel studio */
5
6
7
//Beginning of Auto generated function prototypes by Atmel Studio
8
9
void setup();
10
11
void loop();
12
13
//End of Auto generated function prototypes by Atmel Studio
14
15
16
// This is the INT0 Pin of the ATMega328
17
18
int sensePin = 2;
19
20
21
void setup(){
22
23
 pinMode(sensePin, OUTPUT);
24
25
 digitalWrite(sensePin, LOW);
26
27
}
28
29
30
void loop(){
31
32
  while(true){
33
34
    digitalWrite(sensePin,HIGH);
35
36
    delay(10);
37
38
    digitalWrite(sensePin, LOW);
39
40
  }
41
42
}

: Verschoben durch Moderator
von Sascha W. (sascha-w)


Lesenswert?

Hallo,

mit den Fuses hast du den CKDIV8 drin - er läuft also mit 1MHz. 
Warscheinlich ist die Taktrate des Programmers jetzt zu hoch, also 
einfach mal mit dem entsprechenden Parameter in AVRDude auf max. 250kHz 
einstellen.

Sascha

PS: dein Beitrag währe bei μC & Elektronik besser aufgehoben gewesen.

: Bearbeitet durch User
von Mario J. (mario123456789)


Lesenswert?

Danke für deine Antwort!
Das langsamer Programmieren mache ich doch mit der -B Option? Mein 
aktuelles Kommando:
avrdude -c USBasp -p m328p -U flash:w:test.hex -U lfuse:w:0xFF:m -U 
hfuse:w:0xDE:m -U efuse:w:0x05:m -B100

Immer noch die gleiche Fehlermeldung bis auf:
avrdude: set SCK frequency to 8000 Hz

Ich habe verschiedene Werte hinter -B verwendet. Alle gleiche 
Fehlermeldung. Wenn ich -F dazu schreibe, kommt wieder das mit der 
Device signature.

P.S. Habe mir jetzt einen Account erstellt.

von Max Mustermann (Gast)


Lesenswert?

Vielleicht hast du durch einen Übertragungsfehler jetzt doch falsche 
Fuses und der uC erwartet einen Quarz. Hänge mal einen dran.

von Mario J. (mario123456789)


Lesenswert?

Hallo,
Danke für deine Antwort.
Ich hatte den Avr deswegen extra mal in das original Arduino Board 
reingesetzt, da sollte er doch den 16 MHz Takt bekommen? Es hat aber 
leider trotzdem nicht funktioniert.

von Sascha W. (sascha-w)


Lesenswert?

Mario J. schrieb:
> Hallo,
> Danke für deine Antwort.
> Ich hatte den Avr deswegen extra mal in das original Arduino Board
> reingesetzt, da sollte er doch den 16 MHz Takt bekommen?
Nein auf dem Board ist zwar ein Quarz drauf aber es gibt auch noch die 
Möglichkeit die Fuses so zu setzen das ein exteres Taktsignal erwartet 
wird. Da müsstest du dann einen Takt mit einem anderen Bauteil erzeugen. 
Dafür könntest du z.B. auch einen  2. AVR nehmen bei dem du mit der 
CLOCKOUT-Fuse den Takt an dem zugehörigen Ausgangspin ausgeben lässt. 
Manche Programmer haben auch die Möglichkeit einen Takt auszugeben.

Sascha

von Mario J. (mario123456789)


Lesenswert?

Ich habe heute das ganze auf dem gleichen Arduino Board mit einem neuen 
Atmega328p ausprobiert und den Bootloer über die Arduino Software 
gebrannt. Das hat ohne Probleme funktioniert. Nur dieser Chip macht 
Probleme.
Gibt es irgendeine Möglichkeit die Fuses zurückzusetzen auf Standard 
oder sowas?

von Mario J. (mario123456789)


Lesenswert?

Hallo,
Hab deinen Beitrag erst nicht gesehen.
An welchen Pin muss ich das Taktsignal dann hängen? Xtal1 oder?
Dann werde ich das auch mal ausprobieren.

von Mario J. (mario123456789)


Lesenswert?

Du bist super. Danke!
Ich habe mithilfe eines Arduinos einen Takt erzeugt und diesen per Kabel 
an den Xtal1 oder Xtal2 Pin des Avrs gehalten(bin mir nicht mehr sicher 
welcher, einfach ausprobieren) und habe dann mit der niedrigsten 
Geschwindigkeit die Fuses auf den Arduino Standard gesetzt.
Das Kommando:

avrdude -v -p m328p -c usbasp -P usb -U lock:w:0x3F:m -U efuse:w:0x05:m 
-U hfuse:w:0xDE:m -U lfuse:w:0xFF:m -B 500 -F

Danach konnte ich mithilfe der Arduiono IDE den normalen Bootloader 
wieder draufflashen.

Der Arduino Takt Generator Code, es sollten ungefähr 8 MHz sein:
1
void setup() {
2
  pinMode(13, OUTPUT);
3
}
4
5
void loop() {
6
  digitalWrite(13, HIGH);
7
  delayMicroseconds(1);
8
  digitalWrite(13, LOW);
9
  delayMicroseconds(1);
10
}


Vielen Dank nochmal! :)

P.S. Danke an den Moderator für das Verschieben.

: Bearbeitet durch User
von Sascha W. (sascha-w)


Lesenswert?

Ja - Xtal1 wie dem Datenblatt zu entnehmen ist.
Wie hoch ist die Betriebsspannung die du verwendest?
Sollte der BOD auf 4.3V aktiv sein würde der μC mit 3.3V auch nicht mehr 
laufen, ob das beim Flashen relevant ist hab ich noch nicht probiert.

Sascha

von Mario J. (mario123456789)


Lesenswert?

Ich habe den Chip mit 5v durch den Programmer versorgt.

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.