Atmega328p "device signature 0x000000"

Gast #4408721
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
}
#4408865
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.
#4408899
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.
#4409417
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
#4409893
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.