Forum: Mikrocontroller und Digitale Elektronik atmega328 avrdude verification error


von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Hi

Ich habe ein Problem mit meinem Atmega328.
Wenn ich einen "bestimmten" Sketch per avrdude hochladen will
bekomme ich eine Fehlermeldung:
1
avrdude: verifying ...
2
avrdude: verification error, first mismatch at byte 0x0000
3
         0x00 != 0x0c
4
avrdude: verification error; content mismatch
5
6
avrdude: safemode: lfuse changed! Was 22, and is now 0
7
Would you like this fuse to be changed back? [y/n]
Ich habe dann bisher mit CTRL+R abgebrochen...


Kurz zur Vorgeschichte:
Ich habe einem Arduino Nano den Atmega328 entlötet
und auf meine selbst entworfene  Platine gelötet. Kurz und knapp
wollte ich einfach nur den Atmega haben und nicht den ganzen
Schnulz vom Arduino Board um die Stromaufnahme auf ein minimum zu 
reduzieren. Der Atmega läuft außerdem nun mit 3.3V. Logischerweise 
schreibe ich meine *.hex Dateien nun per UsbAsp Clone auf den Atmega und 
nicht via "hochladen" in der Arduino IDE. Ich habe ihn erfolgreich
auf 1Mhz interner Oszillator und Ausgabe des Systemtakts auf PB0 
programmiert.  Meine Fuses sind damit:
1
E:FF, H:D9, L:22

Zum programmieren benutze ich die Arduino IDE und lasse mir dann den 
Sketch als hex exportieren.
Damit auch das Timing (1MHz) stimmt habe ich diese Anweisung in der 
"boards.txt" geändert:
1
nano.build.f_cpu=1000000L

Ein einfacher Blink Sketch der PD1 und eine daran gehängte LED im 
Sekunden Takt blinken lässt funktioniert tadellos:
1
void setup() {
2
  // put your setup code here, to run once:
3
DDRD = B00000010; //set PD1 as output
4
}
5
6
void loop() {
7
  // put your main code here, to run repeatedly:
8
9
  PORTD = B00000010;
10
  delay(500);
11
  PORTD = B00000000;
12
  delay(500);
13
}
avrdude gibt keinerlei Fehlermeldungen raus und der Sketch läuft:
1
...
2
Reading | ################################################## | 100% 0.33s
3
4
avrdude: verifying ...
5
avrdude: 638 bytes of flash verified
6
7
avrdude: safemode: Fuses OK (E:FF, H:D9, L:22)
8
9
avrdude done.  Thank you.

Nun wollte ich mein SSD1306 Oled an dem Atmega testen, habe alle libs in 
Arduino IDE runtergeladen und ein minimalen Sketch geschrieben.
1
#include <SPI.h>
2
#include <Wire.h>
3
#include <Adafruit_GFX.h>
4
#include <Adafruit_SSD1306.h>
5
6
#define SCREEN_WIDTH 128 // OLED display width, in pixels
7
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
8
9
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
10
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
11
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
12
13
14
15
void setup() {
16
  display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // Address 0x3D for 128x64
17
  display.clearDisplay();
18
19
  display.setTextSize(1);             // Normal 1:1 pixel scale
20
  display.setTextColor(WHITE);        // Draw white text
21
  display.setCursor(0,0);             // Start at top-left corner
22
  display.println("Hello, world!");
23
  display.display();
24
}
25
26
void loop()
27
{}

Wenn ich nun diesen Sketch exportiere und versuche auf den Atmega zu 
schreiben bekomme ich die obige Fehlermeldung...
Warum versucht gerade dieser Sketch die Fuses beim hochladen zu ändern 
und der Blink Sketch nicht? Warum will er die Fuses auf 0 ändern?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ich glaube nicht, dass er die Fuses wirklich ändern will. Für mich sieht 
das eher so aus, dass die Kommunikation gestört ist und avrdude daher 
"denkt", die Fuse wäre unabsichtlich verändert worden.

Bei der Kombination 3,3V und USBASP geht bei mir direkt eine rote Lampe 
an. Ist dir bewusst, dass die allermeisten USBASP trotz 3,3V Jumper 
immer mit 5V Signalen arbeiten?

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Stefanus F. schrieb:

> Bei der Kombination 3,3V und USBASP geht bei mir direkt eine rote Lampe
> an. Ist dir bewusst, dass die allermeisten USBASP trotz 3,3V Jumper
> immer mit 5V Signalen arbeiten?

Upps,Danke! das ist mir neu... Schnell mal auf 5V zurückgejumpert und 
tada,
keine Fehlermeldung mehr.

Wo genau ist da das Problem wenn UsbAsp mit 5V anstatt mit 3.3V 
kommuniziert? Oder sendet er dann die MISO und MOSI mit 3.3V und VCC mit 
5V oder andersrum?

von Stefan F. (Gast)


Lesenswert?

Paul G. schrieb:
> Wo genau ist da das Problem wenn UsbAsp mit 5V anstatt mit 3.3V
> kommuniziert?

Du hast mich missverstanden. Die meisten USBASP kommunizieren immer mit 
5V, obwohl der Jumper auf 3,3V gesteckt ist. Der Jumper steuert nur die 
Versorgungsspannung für das Target.

Es macht aber keinen Sinn, das Target mit 3,3V zu versorgen und dann mit 
5V Signalen zu arbeiten. Damit riskiert man bloß, etwas kaputt zu 
machen. Denn alle Signale dürfen maximal 0,5V höher sein, als die 
Versorgungsspannung (gilt für beide Seiten, siehe "Electrical 
Characteristics" im Datenblatt).

Außerdem sollte dieser Vtarget PIN eigentlich genau anders herum 
arbeiten. Das Target soll damit den Programmieradapter versorgen, eben 
damit er sich an dessen Versorgungsspannung anpasst.

Diese USBASP Programmer sind schön billig aber in meinem Augen eine 
grobe Fehlkonstruktion. Die Erkenntnis ist nicht neu und es gibt längst 
Lösungen die nur wenige Cent mehr kosten.Trotzdem stellen Sie ihre 
Produktion nicht um. So ist das mit dem Chinaschrott. Manche Sachen sind 
gut, aber es kommt leider auch sehr viel schlechtes aus Asien.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Stimmt, du hast recht, ich habe es gerade auf meinem Ozzi gesehen das 
VCC 3.3V hat und MOSI mit 5V sendet egal was ich jumper...

Dann schreibe ich die Programme halt mit 5V VCC und stecke so lange alle 
3.3V Peripherie ab und dann im Normalbetrieb wieder drann...

von Stefan F. (Gast)


Lesenswert?

Paul G. schrieb:
> Dann schreibe ich die Programme halt mit 5V VCC und stecke so
> lange alle 3.3V Peripherie ab und dann im Normalbetrieb wieder drann...

Kannst du so machen. Oder du schleifst 180Ω Widerstände in die 
Signal-Leitungen ein. Die begrenzen dann den Strom, der durch die 
Überspannung fließt. Ist zwar nicht ganz sauber aber geht.

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.