ATMega328P viel zu langsam, wieso?

OP #4510621
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!!!
OP #4510646
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?!
#4510648
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
OP #4510652
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.
#4510664
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.
#4510690
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.
OP #4510694
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.
OP #4510698
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.
Gast #4510707
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.
#4510712
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.
#4510725
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.
OP #4510747
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
Gast #4510772
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.
Gast #4510822
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?
OP #4510846
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.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren