Forum: Mikrocontroller und Digitale Elektronik ATMega328P viel zu langsam, wieso?


von Mathis S. (mathis_s)


Lesenswert?

Hallo,
ich arbeite mit einem Arduino Uno. Für diesen habe ich mir ein ISP 
Shield hergestellt, damit ich ATMega328P's flashen kann. Das hat bis 
gestern auch wunderbar funktioniert. Seitdem sind alle aufgespielten 
Programme (ich nutze auch die Arduino Software) viel zu langsam. 
Ausprobiert habe ich bereits die Hardware zu tauschen in der der ATMega 
eingesetzt werden soll, Arduino getauscht. 6 ATMegas getauscht. .h 
Dateien gelöscht und neu heruntergeladen, Arduino Software deinstalliert 
und neu heruntergeladen. Es hilft alles nichts, der Fehler bleibt 
bestehen. Woran kann das liegen??? Software, die aufgespielt werden 
soll, wurde nicht verändert. Bitte um Hilfe!!!

von chris (Gast)


Lesenswert?

CLKDIV8

von Mathis S. (mathis_s)


Lesenswert?

chris schrieb:
> CLKDIV8

Das habe ich auch schon in div. Foren gelesen. Aber jedoch nur unter 
anderen Programmierprogrammen (Sagt man das so?). Wie gehe ich da mit 
der Arduino Software ran?

von Cyblord -. (cyblord)


Lesenswert?

Mathis S. schrieb:
> chris schrieb:
>> CLKDIV8
>
> Das habe ich auch schon in div. Foren gelesen. Aber jedoch nur unter
> anderen Programmierprogrammen (Sagt man das so?). Wie gehe ich da mit
> der Arduino Software ran?

Dafür gibt's das "Fuse-Shield". Damit kann man auch die CLKDIV8 Fuse 
umstellen.

von Mathis S. (mathis_s)


Lesenswert?

Cyblord -. schrieb:
> Mathis S. schrieb:
>> chris schrieb:
>>> CLKDIV8
>>
>> Das habe ich auch schon in div. Foren gelesen. Aber jedoch nur unter
>> anderen Programmierprogrammen (Sagt man das so?). Wie gehe ich da mit
>> der Arduino Software ran?
>
> Dafür gibt's das "Fuse-Shield". Damit kann man auch die CLKDIV8 Fuse
> umstellen.

Aber wieso verstellt sich das von allein? Da habe ich ja nie was dran 
gemacht?!

von Jan H. (jan_m_h)


Lesenswert?

Mathis S. schrieb:
> chris schrieb:
>> CLKDIV8
>
> Das habe ich auch schon in div. Foren gelesen. Aber jedoch nur unter
> anderen Programmierprogrammen (Sagt man das so?). Wie gehe ich da mit
> der Arduino Software ran?

Die Arduino IDE nutzt zum flashen AVRDUDE.

Öffne mal cmd.exe und gib avrdude ein.

Mathis S. schrieb:
> Aber wieso verstellt sich das von allein? Da habe ich ja nie was dran
> gemacht?!

Die ist normalerweise drin. Sollte aber raus, weil man sonst nur ein 
achtel der gewählten Taktquelle hat

: Bearbeitet durch User
von Mathis S. (mathis_s)


Lesenswert?

Jan H. schrieb:
> Mathis S. schrieb:
>> chris schrieb:
>>> CLKDIV8
>>
>> Das habe ich auch schon in div. Foren gelesen. Aber jedoch nur unter
>> anderen Programmierprogrammen (Sagt man das so?). Wie gehe ich da mit
>> der Arduino Software ran?
>
> Die Arduino IDE nutzt zum flashen AVRDUDE.
>
> Öffne mal cmd.exe und gib avrdude ein.



der Befehl "avrdude" ist entweder falsch geschrieben oder konnte nicht 
gefunden werden.

von Jan H. (jan_m_h)


Lesenswert?

Mathis S. schrieb:
> der Befehl "avrdude" ist entweder falsch geschrieben oder konnte nicht
> gefunden werden.

Eigentlich müsste das funktionieren. Zumindest hab ich bei Tante Google 
nur gefunden, dass Arduino avrdude einfach normal installiert. Bei mir 
geht's, ich hatte es aber vor der IDE drauf.

von Max D. (max_d)


Lesenswert?

Es gibt im grunde zwei möglichkeiten:
- Der Arduino ist "schuld"
- Die Software ist "schuld"

Um diese Fälle auseinander zu legen machst du folgendes:
Du schreibst (am besten an einem anderen PC) ein simpelstes blinky 
programm und lädst das auf den ardu.

Entweder blinkt es richtig, dann ist der pfusch in deinem alten code, 
oder es blinkt falsch, dann ist es an dem arduino.

von M. K. (sylaina)


Lesenswert?

Mathis S. schrieb:
> Cyblord -. schrieb:
>> Mathis S. schrieb:
>>> chris schrieb:
>>>> CLKDIV8
>>>
...
> Aber wieso verstellt sich das von allein? Da habe ich ja nie was dran
> gemacht?!

Das ist das Problem: Das ist werksseitig gesetzt, d.h. du bekommst es 
von Atmel nur mit gesetztem CLKDIV8, genauer: Der (bzw. jeder) Atmega 
verlässt Atmel mit einem Systemtakt von 1 MHz. Da der Atmega328 intern 
einen 8 MHz Oszilator hat wird hier das CLKDIV8-Fusebit (Clockteiler 
wird statt auf 1 auf 8 gesetzt beim Reset) gesetzt.

von Mathis S. (mathis_s)


Lesenswert?

Michael K. schrieb:
> Mathis S. schrieb:
>> Cyblord -. schrieb:
>>> Mathis S. schrieb:
>>>> chris schrieb:
>>>>> CLKDIV8
>>>>
> ...
>> Aber wieso verstellt sich das von allein? Da habe ich ja nie was dran
>> gemacht?!
>
> Das ist das Problem: Das ist werksseitig gesetzt, d.h. du bekommst es
> von Atmel nur mit gesetztem CLKDIV8, genauer: Der (bzw. jeder) Atmega
> verlässt Atmel mit einem Systemtakt von 1 MHz. Da der Atmega328 intern
> einen 8 MHz Oszilator hat wird hier das CLKDIV8-Fusebit (Clockteiler
> wird statt auf 1 auf 8 gesetzt beim Reset) gesetzt.

Den internen oszillator von 8MHz nutze ich nicht. Sowohl das ISP Shield 
als auch die fertige Schaltung wo der ATMega eingesetzt werden sollen 
haben eine externe crystal Beschaltung mit einem 16MHz Quarz. Und wie 
gesagt, bis gestern funktionierte ja auch alles einwandfrei. Von jetzt 
auf gleich, war dann das Problem vorhanden.

von Mathis S. (mathis_s)


Lesenswert?

Max D. schrieb:
> Es gibt im grunde zwei möglichkeiten:
> - Der Arduino ist "schuld"
> - Die Software ist "schuld"
>
> Um diese Fälle auseinander zu legen machst du folgendes:
> Du schreibst (am besten an einem anderen PC) ein simpelstes blinky
> programm und lädst das auf den ardu.
>
> Entweder blinkt es richtig, dann ist der pfusch in deinem alten code,
> oder es blinkt falsch, dann ist es an dem arduino.


Ich habe jetzt zwei Rechner, 3 Arduinos (als ISP Programmer genutzt) und 
6 ATMegas durch. Sowohl beim Alten Quellcode als auch beim Blinky 
Programm tritt nach wie vor der Fehler auf.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Mathis S. schrieb:
> Ich habe jetzt zwei Rechner, 3 Arduinos (als ISP Programmer genutzt) und
> 6 ATMegas durch. Sowohl beim Alten Quellcode als auch beim Blinky
> Programm tritt nach wie vor der Fehler auf.

Dann lösch doch endlich die CLKDIV8-Fuse!

von Kaj (Gast)


Lesenswert?

Die CLKDIV8 Fuse ist nur gesetzt, wenn man einen neuen Atmel-Chip 
nimmt. Nimmt mein ein Arduino-Board ist die Fuse niemals gesetzt! 
Nie. Bei keinem Arduino Board.
Hast du einen Arduino Uno mit Sockel und hast den Chip getauscht?
Ja, dann kann die Fuse gesetzt sein.
Hast du aber einen Arduino Uno mit Atmel im SMD-Format gibt es keinen 
Grund weshalb die Fuse gesetzt sein sollte.

von Cyblord -. (cyblord)


Lesenswert?

Kaj schrieb:
> Die CLKDIV8 Fuse ist nur gesetzt, wenn man einen neuen Atmel-Chip
> nimmt. Nimmt mein ein Arduino-Board ist die Fuse niemals gesetzt!
> Nie. Bei keinem Arduino Board.
> Hast du einen Arduino Uno mit Sockel und hast den Chip getauscht?
> Ja, dann kann die Fuse gesetzt sein.
> Hast du aber einen Arduino Uno mit Atmel im SMD-Format gibt es keinen
> Grund weshalb die Fuse gesetzt sein sollte.

> Für diesen habe ich mir ein ISP
> Shield hergestellt, damit ich ATMega328P's flashen kann.

Wenn man per ISP drauf geht, kann man natürlich auch die Fuses ändern. 
Auch versehentlich.

Weil Arduino Nutzer das Pferd aber wie immer von hinten aufzäumen, gibt 
es diese Probleme. Normalerweise ist das programmieren per ISP und das 
damit verbundene setzen der Fuses absolute Grundlage für jeden AVR 
Nutzer. Mal schnell eine Fuse löschen ist da kein Ding mehr.

Aber Arduinos fehlt das Werkzeug, die Software und das gesamte 
Verständnis für alles. Da ist nur Leere.

von Mathis S. (mathis_s)


Lesenswert?

Frank M. schrieb:
> Mathis S. schrieb:
>> Ich habe jetzt zwei Rechner, 3 Arduinos (als ISP Programmer genutzt) und
>> 6 ATMegas durch. Sowohl beim Alten Quellcode als auch beim Blinky
>> Programm tritt nach wie vor der Fehler auf.
>
> Dann lösch doch endlich die CLKDIV8-Fuse!

Ja, würde ich ja gerne. Wenn du mir verrätst wie...

von Mein grosses V. (vorbild)


Lesenswert?

Mathis S. schrieb:
> Und wie gesagt, bis gestern funktionierte ja auch alles einwandfrei. Von
> jetzt auf gleich, war dann das Problem vorhanden.

"Gestern gings noch" ist immer ein Indiz dafür, daß das Problem vor der 
Schaltung sitzt. Da verändert sich nichts von selbst.

Wenn du deine Fuses lesen und einstellen kannst, dann kontrolliere das 
und stelle es ggf. richtig ein. Wenn du das nicht kannst, läuft jeder 
neu erworbene Controller mit 1MHz intern.

Wenn dir die Geschwindigkeit und die Genauigkeit des internen 
Oszillators ausreichen, kannst du den Taktteiler, der mit der 
CKDIV8-Fuse vorgegeben wird, auch per Software einstellen. In der 
AVR-Lib gibt es dafür die "power.h", die eine komfortable Funktion dafür 
bereitstellt. Wie das bei Arduino aussieht, weiss ich nicht. Aber das 
lässt sich natürlich auch "zu Fuß" einstellen. Näheres sagt dir das 
Datenblatt.

Mathis S. schrieb:
> Ich habe jetzt zwei Rechner, 3 Arduinos (als ISP Programmer genutzt) und
> 6 ATMegas durch. Sowohl beim Alten Quellcode als auch beim Blinky
> Programm tritt nach wie vor der Fehler auf.

Daß du uns das mitteilst, bringt dich kein bißchen weiter. Der einzige 
Weg ist, die Fuses zu kontrollieren und ggf. richtig einzustellen.

von Max D. (max_d)


Lesenswert?

avrdude -c avrisp -p m328p -P hier dein COM-Port -U lfuse:w:0xd7:m -U 
hfuse:w:0xd9:m -U efuse:w:0xfc:m

von Dieter F. (Gast)


Lesenswert?


von Flip B. (frickelfreak)


Lesenswert?

Drücke einmal auf bootloader installieren, dann ist das Problem weg. 
Dann beschäftigst du dich einmal mit den Datenblättern der eingesetzten 
komponenten und hinterfragst mal die funktionsweise der tools die du 
einsetzt.

von Mathis S. (mathis_s)


Lesenswert?

Flip B. schrieb:
> Drücke einmal auf bootloader installieren, dann ist das Problem
> weg.
> Dann beschäftigst du dich einmal mit den Datenblättern der eingesetzten
> komponenten und hinterfragst mal die funktionsweise der tools die du
> einsetz

Flip B. schrieb:
> Drücke einmal auf bootloader installieren, dann ist das Problem
> weg.
> Dann beschäftigst du dich einmal mit den Datenblättern der eingesetzten
> komponenten und hinterfragst mal die funktionsweise der tools die du
> einsetzt.

Ich traue es mich kaum zu schreiben....
bei all der Hektik gestern, habe ich den Schritt total vergessen :-/
 ein ganz ganz fettes DANKE :'D

von Stefan F. (Gast)


Lesenswert?

> Sowohl das ISP Shield als auch die fertige Schaltung wo der ATMega
> eingesetzt werden sollen haben eine externe crystal Beschaltung mit
> einem 16MHz Quarz.

Ein angeschlossener Kristall wird nicht automatisch verwendet. Auch dazu 
müssen Fuses gesetzt werden. Nur so zur Info, falls du dich später 
nochmal über "falsche" Taktraten wunderst.

von Rudolph (Gast)


Lesenswert?

Mathis S. schrieb:
> Für diesen habe ich mir ein ISP Shield hergestellt, damit ich ATMega328P's 
flashen kann.

Dieser Schritt ist mir ehrlich gesagt nicht klar.
Mal davon ab, dass die Teile ja normalerweise per Bootloader über den 
USB-Anschluss geflasht werden.

Die UNOs die ich hier für die Azubis rumliegen habe, die haben einen 
sechs-poligen ISP Header mit verbaut.
Du hast also ein Shield gebaut das einen ISP-Header drauf hat statt den 
ohnehin vorhandenen zu benutzen? Warum?

von Mathis S. (mathis_s)


Angehängte Dateien:

Lesenswert?

Rudolph schrieb:
> Mathis S. schrieb:
>> Für diesen habe ich mir ein ISP Shield hergestellt, damit ich ATMega328P's
> flashen kann.
>
> Dieser Schritt ist mir ehrlich gesagt nicht klar.
> Mal davon ab, dass die Teile ja normalerweise per Bootloader über den
> USB-Anschluss geflasht werden.
>
> Die UNOs die ich hier für die Azubis rumliegen habe, die haben einen
> sechs-poligen ISP Header mit verbaut.
> Du hast also ein Shield gebaut das einen ISP-Header drauf hat statt den
> ohnehin vorhandenen zu benutzen? Warum?

Weil ich keinen Arduino bauen will, sondern den ATMega328P der zufällig 
auch auf dem Arduino Uno sitzt in einer Schaltung als Stand alone 
betreiben will. Der Arduino mit shield dient nur dazu, die Software auf 
den ATMega328 zu spielen. Hierbei wird auf dem Arduino das 
Beispielprogramm ArduinoISP installiert. Das Shield hat den Vorteil, 
dass es einen null-Kraft Sockel verbaut hat, sodass ich die ATMega's nur 
aufkelmmen brauche.

: Bearbeitet durch User
von Rudolph (Gast)


Lesenswert?

Ein bisschen mehr Information und es macht deutlich mehr Sinn. :-)

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.