avr-gcc _delay_ms Timings sind deaktiviert; Provider schuld?

Ich habe gerade ein AVRISP mit einem alten Arduino Nano (ATmega328p) gebaut und versucht, ein einfaches Blinkprogramm auf einen ATmega328 (nicht Picopower) zu flashen. Als ich das Programm zum ersten Mal geflasht habe, hat alles super geklappt – die 1000 ms Ein- und 1000 ms Aus-Intervall waren so, wie ich es erwartet hatte. Ich habe das Ausschaltintervall jedoch auf 100 ms geändert, und plötzlich betrug die Periode insgesamt fast 9 Sekunden – ungefähr 8 Sekunden ein und 0,8 Sekunden aus. Das Blinken der ursprünglichen Ein- und Ausschaltintervalle von 1000 ms führte ebenfalls zu einer verlängerten Periode.

Ich verwende das Makefile aus einem einfachen Blink-Tutorial ; Das einzige, was ich geändert habe, ist die Portbezeichnung und MCU. Angesichts dessen glaube ich, dass das Problem bei meinem ISP liegt ... aber was könnte einen anfänglichen Erfolg und dann einen wiederholten Misserfolg verursachen? Wenn Sie weitere Informationen benötigen (Header- oder Hex-Dump usw.), lassen Sie es mich wissen und ich werde Ihnen gerne helfen.

Antworten (1)

Das Problem ist, dass Ihre Definition von F_CPUnicht mit der Hardware übereinstimmt. Auf MCUs frisch von Atmel ist die CKDIV8Sicherung (die den CPU-Takt durch 8 teilt) programmiert, also stellen Sie sicher, dass Sie sie bei Bedarf deprogrammieren, falls Sie dies noch nicht getan haben.

Würde eine F_CPU-Fehlanpassung nicht nur die Blinkfrequenz, aber nicht das Tastverhältnis beeinflussen? Der Blinkzyklus von 50 % hat sich nach der zweiten Programmierung auf ~90 % geändert.
@JRobert: "Ich habe das Ausschaltintervall jedoch auf 100 ms geändert ..." "... das einzige, was ich geändert habe, ist die [...] MCU.
Verzeihen Sie die Amateur-Followup, aber ... ich habe Ihren Rat befolgt, und es scheint definitiv, dass F_CPU der Schuldige ist. Ich habe CKDIV8 deprogrammiert und dann F_CPU auf 20000000 gesetzt (m328 läuft mit 20 MHz). Allerdings blinkt es jetzt viel zu schnell - was habe ich falsch gemacht?
Ah, vergiss es - es wurden keine sauberen Header generiert. Danke für den Ratschlag!
@IgnacioVazquez-Abrams: Richtig - das verpasst.