Hallo zusammen,
nachdem hier einige hervorragende Atmel-Spezialisten zugange sind, will ich mal meine aktuelle Problematik schildern - ein für mich äusserst seltsames Verhalten.
Auf einem Arduino Duemilanove Board läuft ein Atmega 328 mit 16 Mhz Takt. Arduino-spezifische Eigenheiten wie z.B. Bootloader kommen nicht in Frage, der Atmega könnte eigentlich auch auf jedem anderen Board sitzen.
Ich musste feststellen, daß das "delay" Kommando unter normalen Umständen nicht mehr korrekt ausgeführt wird. Ich habe deshalb ein simples Programm geschrieben, das lediglich an einem Pin eine LED für 4 Sekunden ein- und für 4 Sekunden ausschaltet, also Blinken im 4 Sekunden-Rhythmus (in C mit 2 mal "delay(4000)" bewerkstelligt, verwendet wird avr-gcc und avrdude, aber daran liegt es sicher nicht).
Die LED blinkt viel schneller als gewollt - ziemlich exakt im 1 Sek. Rhythmus, also 4x so schnell - was sich ja leicht im Vergleich mit dem Sekundenzeiger an der Armbanduhr feststellen lässt.
Ich habe dann folgende Prozedur gemacht:
- Fuses über ISP mit AVR MKII neu geflasht, anschließend reset
- siehe da: jetzt sind die Pausen korrekt (4 secs), auch mehrere resets (über reset-Taster) stören nicht
- die Freude währte nicht lange:
- Stromversorgung aus-/eingeschaltet: alter Fehler wieder da (4x schneller)
- das unveränderte Programm habe ich nochmal geflasht, derselbe Effekt.
Diese Prozedur habe ich mehrmals wiederholt, immer dasselbe Ergebnis.
Dann habe ich den Prozessor gewechselt, ein Atmega168 anstelle dem 328er - aber auch hier exakt dasselbe Verhalten. Ein fehlerhafter Prozessor scheidet somit wohl aus.
Daß sollte wohl irgendwie mit den internen Timern zu tun haben, aber warum läuft es unmittelbar nach dem Flashen der fuses immer richtig und dann nicht mehr?
Hat jemand eine Idee, wo man da ansetzen könnte ?
Danke und Gruß,
Manfred.
nachdem hier einige hervorragende Atmel-Spezialisten zugange sind, will ich mal meine aktuelle Problematik schildern - ein für mich äusserst seltsames Verhalten.
Auf einem Arduino Duemilanove Board läuft ein Atmega 328 mit 16 Mhz Takt. Arduino-spezifische Eigenheiten wie z.B. Bootloader kommen nicht in Frage, der Atmega könnte eigentlich auch auf jedem anderen Board sitzen.
Ich musste feststellen, daß das "delay" Kommando unter normalen Umständen nicht mehr korrekt ausgeführt wird. Ich habe deshalb ein simples Programm geschrieben, das lediglich an einem Pin eine LED für 4 Sekunden ein- und für 4 Sekunden ausschaltet, also Blinken im 4 Sekunden-Rhythmus (in C mit 2 mal "delay(4000)" bewerkstelligt, verwendet wird avr-gcc und avrdude, aber daran liegt es sicher nicht).
Die LED blinkt viel schneller als gewollt - ziemlich exakt im 1 Sek. Rhythmus, also 4x so schnell - was sich ja leicht im Vergleich mit dem Sekundenzeiger an der Armbanduhr feststellen lässt.
Ich habe dann folgende Prozedur gemacht:
- Fuses über ISP mit AVR MKII neu geflasht, anschließend reset
- siehe da: jetzt sind die Pausen korrekt (4 secs), auch mehrere resets (über reset-Taster) stören nicht
- die Freude währte nicht lange:
- Stromversorgung aus-/eingeschaltet: alter Fehler wieder da (4x schneller)
- das unveränderte Programm habe ich nochmal geflasht, derselbe Effekt.
Diese Prozedur habe ich mehrmals wiederholt, immer dasselbe Ergebnis.
Dann habe ich den Prozessor gewechselt, ein Atmega168 anstelle dem 328er - aber auch hier exakt dasselbe Verhalten. Ein fehlerhafter Prozessor scheidet somit wohl aus.
Daß sollte wohl irgendwie mit den internen Timern zu tun haben, aber warum läuft es unmittelbar nach dem Flashen der fuses immer richtig und dann nicht mehr?
Hat jemand eine Idee, wo man da ansetzen könnte ?
Danke und Gruß,
Manfred.