Atmega 328P 3.3V 8MHz Custom Board: Millis stimmen nicht

Hallo zusammen

Ich habe mir ein Board erstellt, dass einen Atmega 328P enthält und mit 8.00MHz an 3.3V laufen soll. Ich konnte den Sketch via MKII downloaden und ein erstes Blink Program funktioniert soweit.

Einzig die Blinkfrequenz verwirrt mich: Das Signal wechselt alle 7Sekunden statt alle Sekunden.

Der 8.00MHZ Quarz ist mit 8.00B angeschrieben und wurde mit 2x22pF Kondensatoren erweitert.

Jemand eine Idee was ich falsch mache?

Der Code ist doch eigentlich simple.

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 1000) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Vermutlich Fuses falsch gesetzt.

Ah ja Gott die Fuses.. Ich habe da noch nichts gesetzt.

Hat jemand gerade eine Anleitung zur Hand wie ich diese über MKII setzen kann?
Ich werde jetzt mal googeln.

Danke für den Tipp!

Avrdude kann das.
Dazu gibts auch eine Dokumentation.

Ok Super service!! Danke

Bootloader brennen

ICh möchte das Teil ohne Bootloader haben. Sollte doch gehen oder?

Klar.
Bootloader brennen, mit USBasp ein Sketch Uploaden und schon ist der Bootloader weg.

Hast du ausser deinem Selbstbauboard auch noch einen richtigen Arduino?

skorpi08:
Klar.
Bootloader brennen, mit USBasp ein Sketch Uploaden und schon ist der Bootloader weg.

Die Bootloader Fuses bleiben dann gesetzt.

Das kann dann sogar eine Zeit gut gehen, aber wenn das Anwenderprogramm bis in den Bereich geht, wirds knallen.

HotSystems:
Hast du ausser deinem Selbstbauboard auch noch einen richtigen Arduino?

Ja hab ich... Wieso?

stofarmi:
Ja hab ich... Wieso?

Dann kannst du mit dem Teil problemlos den richtigen Bootloader flashen und anschließend auch den Sketch flashen.

Das geht mit ArduinoasISP.

Dann kannst du mit dem Teil problemlos den richtigen Bootloader flashen

Hmm..
Will er doch gar nicht...
Und die Fuses kann man auch mit dem MKII schreiben.
Sogar aus der ArduinoIDE heraus, mit dem passenden boards.txt Eintrag.
(und das, ohne den Bootloader zu schreiben)

combie:
Hmm..
Will er doch gar nicht...
Und die Fuses kann man auch mit dem MKII schreiben.
Sogar aus der ArduinoIDE heraus, mit dem passenden boards.txt Eintrag.
(und das, ohne den Bootloader zu schreiben)

Ja richtig.
Kannst du mir mit dem boards.txt helfen? Blick da noch nicht durch.

combie:
Hmm..
Will er doch gar nicht...
Und die Fuses kann man auch mit dem MKII schreiben.
Sogar aus der ArduinoIDE heraus, mit dem passenden boards.txt Eintrag.
(und das, ohne den Bootloader zu schreiben)

Ok,sollte ja auch nur ein einfache Alternative sein.
Und der Bootloader wird ja beim Flashen per ISP wieder entfernt.

Und der Bootloader wird ja beim Flashen per ISP wieder entfernt.

Die dann falsch gesetzten Fuses werden nicht automatisch korrigiert.
Die Rache (für diese Schlampigkeit) wird irgendwann aus dem Hinterhalt zuschlagen!

@Combie: Wäre es möglich das du mir bei dem boards.txt helfen könntest?

Ich krieg das nicht hin.

Am besten wäre es wenn ich den MKII als Programmer auswählen kann uns es dann die Fuses setzt.

combie:
Die dann falsch gesetzten Fuses werden nicht automatisch korrigiert.
Die Rache (für diese Schlampigkeit) wird irgendwann aus dem Hinterhalt zuschlagen!

Ja ok in dem Fall ist das keine Lösung.

stofarmi:
@Combie: Wäre es möglich das du mir bei dem boards.txt helfen könntest?

Ich krieg das nicht hin.

Am besten wäre es wenn ich den MKII als Programmer auswählen kann uns es dann die Fuses setzt.

Och....

Setze die Fuses erstmal zufuß...

Hier habe ich mal sowas gemacht:
http://forum.arduino.cc/index.php?topic=316396.10
Da sind allerdings auch Bootloader drin.
Aber als Vorlage evtl brauchbar.

Guter Tip Danke:

atmega328bb.name= Custom ATmega328 (3.3V, 8 MHz)
atmega328bb.build.mcu=atmega328p
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
atmega328bb.upload.tool=arduino:avrdude

atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.tool=arduino:avrdude
atmega328bb.bootloader.extended_fuses=0x05

atmega328bb.upload.protocol=avrispmkII
atmega328bb.upload.maximum_size=32256

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.lock_bits=0x0F

atmega328bb.build.f_cpu=8000000L

Jetzt zeigt es noch rot an: Board arduino:avr:atmega328bb doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328BB

Funktioniert aber soweit... eventuell weiss jemand noch wie ich den Schönheitsfehler beheben kann :slight_smile:

Danke