Hallo, ich würde gerne einen Atmega328p minimalistisch betreiben (ohne Oszillator) und das ganze bei 3,3V. (Laut Specs sollte die Spannung bei 8 Mhz ausreichen). Programmieren möchte ich ihn gerne über die Arduino IDE. Ich habe mir daher von der offiziellen Arduino-Seite die Boards.txt und den entsprechenden Bootloader (für den internen Oszillator) geholt und entsprechen gebrannt. https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard (unter "Minimal Circuit - Eliminating the External Clock") Der generelle Betrieb ohne Oszillator funktioniert auch, nur leider benötigt der µC mindestens ca. 3,6V. Darunter bleibt er stumm. Meine Vermutung war, dass es am Brown Out Detector liegen könnte, jedoch sollte dieser laut boards.txt Datei (s. "extended_fuses") eigentlich auf 0x05 (0b101) stehen, was laut Datasheet einem Grenzwert von deutlich unter 3,3V entsprechen sollte. Habe trotzdem testweise den Wert auf 0b111 (BOD deaktiviert) gesetzt. Danach funktioniert der µC auch eingeschränkt bei 3,3V (jedoch kann ich z.B. keinen neuen Bootloader bei dieser Versorungsspannung brennen).Nur ist es mit diesen Settings nicht möglich Sketches per seriellem Port aufspielen (Sync Fehler). Das Aufspielen von Sketches über einen ISP (also über die SPI Schnittstelle) funktioniert jedoch einwandfrei. Hat jemand eine Idee, warum der Betrieb bei 3,3V nicht funktioniert? Oder alternativ warum bei deaktiviertem BOD keine Sketches aufgespielt werden können? Würde mich über jede Hilfe freuen. P.S. Habe die Fuse Settings sowohl mit 0b111 als auch mit 0b11111111 versucht (um die oberen 5 Bits auf Default zu lassen). Kein Unterschied.
Was verwendest Du für eine Spannungsversorgung? Wie steht's um Blockkondensator?
Peter schrieb: > Der generelle Betrieb ohne Oszillator funktioniert auch, nur leider > benötigt der µC mindestens ca. 3,6V. Darunter bleibt er stumm. Bleibt er wirklich stumm? Mit dem Oszi überprüft? Der interne Oszilator ist u.a. spannungsabhängig, möglicherweise driftet die Frequenz so weit, dass der Baudratenfehler unzulässig zu hoch wird. Miss da mal mit dem Oszi den Oszilator nach.
Bei 8MHz und Serial, sollte man eigentlich den Oscal Wert für 8MHz lesen und ins OSCAL schreiben. Das mildert das Baudrate Problem meist. Oder eine dynamische Anpassung vornehmen. z.B. mit Hilfe des eingebauten Temperatursensors, oder der gegenläufigen Kennlinie des WDT Oszillator. Ansonsten mit kleinerer Baudrate arbeiten. (siehe Anhang) Bei mir laufen einige ATMega328P auf 3,3V, auch mit Bootloader, aber meist ohne. im Anhang meine Hardwaredefinition
Der normale Bootloader ist für 16Mhz gedacht, hast du das bedacht? Für serielle Kommunikation ist der interne R/C Oszillator auch bei angepasstem Bootloader nur bedingt geeignet. meisten klappt es, aber nicht immer.
Danke erstmal für das schnelle Feedback. langhaarrocker schrieb: > Was verwendest Du für eine Spannungsversorgung? Wie steht's um > Blockkondensator? Habe sowohl die 3,3 eines anderen Arduinos als auch Labornetzteil verwendet. Zwischen Vcc und Gnd sind 470µF. M. K. schrieb: > Bleibt er wirklich stumm? Habe neben den seriellen prints auch IO Pins im Sketch getoggelt. Auch da passierte nichts. Die sollte ja denke ich auch bei massivem Driften funktionieren. Stefan U. schrieb: > Der normale Bootloader ist für 16Mhz gedacht, hast du das bedacht? > > Für serielle Kommunikation ist der interne R/C Oszillator auch bei > angepasstem Bootloader nur bedingt geeignet. meisten klappt es, aber > nicht immer. Es ist ja ein - soweit ich das verstanden habe - spezieller Bootloader, der von Arduino für 8 Mhz vorgesehen gedacht ist. Oberhalb von 3,6-3,7V läuft das Ding auf internem Crystal auch einwandfrei (auch bei serieller Kommunikation). Arduino F. schrieb: > Bei 8MHz und Serial, sollte man eigentlich den Oscal Wert für 8MHz > lesen > und ins OSCAL schreiben. > [...] > Ansonsten mit kleinerer Baudrate arbeiten. (siehe Anhang) Ich habe meine boards.txt mit deinem "8MHz StdBootloader" verglichen. Sehen ziemlich identisch aus insb. uploadspeed, fuses, Bootloader-Datei etc. Das mit der Kalibrierung des Oszillators habe ich noch nicht gemacht. Ich denke aber, dass Ungenauigkeiten des Oszillators auch irgendwie nicht die Effekte erklären... Wieso läuft es z.B. überhaupt nur dann bei bei 3,3V wenn ich BOD deaktiviere (obwohl die Grenzwerte auch so passen sollten)? Normal müsste doch das herabtakten auf 8 Mhz schon reichen, um bei niedrigeren Spannungen arbeiten zu können, oder gibts diesbezüglich noch andere Settings? Und wieso läuft es bis 3,6V normal und darunter geht schlagartig nichts mehr. Die ganzen spannungsabhängigen Effekte auf den internen Oszillator würden doch denke ich nicht so schlagartig bei einem Grenzwert einsetzen, oder?
Peter schrieb: > Zwischen Vcc und Gnd sind 470µF. zwischen Vcc und GND gehören 100nF in Keramik. Und zwar direkt an den jeweiligen Versorgungspins des Controllers. Ein Atmega läuft mit 10Mhz bei 2,7V. Dein Problem ist also nicht das Verhältnis Spannung/Takt. Aber bring erstmal deine Hardware in Ordnung.
Bei 3,3V muss er mit den internen 8MHz arbeiten. Ich verwende Bod 2.7V mit 3,3V. Da ist also was anderes faul. Du kannst BOD auch auf 1.8V einstellen.
Thomas E. schrieb: > Peter schrieb: > zwischen Vcc und GND gehören 100nF in Keramik. Und zwar direkt an den > jeweiligen Versorgungspins des Controllers. > > Ein Atmega läuft mit 10Mhz bei 2,7V. Dein Problem ist also nicht das > Verhältnis Spannung/Takt. > > Aber bring erstmal deine Hardware in Ordnung. Der Tipp war gut...nicht wegen des Kondensators, sondern allgemein. Denn dabei ist mir aufgefallen, dass der Pin für die Versorgungsspannung des ADC nicht angeschlossen war (der muss auf Vcc). Shame on me :( Habe es dann reproduziert und war definiv so, dass ohne diesen Pin der Atmega328 unter 3,6V aussteigt.... mit angeschlossenem Pin funktioniert er tadellos bis 2,8V runter. Wollte ich nur mal posten, falls jemand zufällig das gleiche Problem bekommen sollte. Danke auf jeden Fall für die Antworten.
Peter schrieb: > Der Tipp war gut...nicht wegen des Kondensators, sondern allgemein. Denn > dabei ist mir aufgefallen, dass der Pin für die Versorgungsspannung des > ADC nicht angeschlossen war (der muss auf Vcc). Shame on me :( Natürlich muss AVcc mit angeschlossen werden, das steht auch im Datenblatt u.a. im Kapitel Pin Configurations ;)
M. K. schrieb: > Natürlich muss AVcc mit angeschlossen werden, das steht auch im > Datenblatt u.a. im Kapitel Pin Configurations ;) Die Hartnäckigkeit vieler Minimalisten wird nicht auszurotten sein. [sark] Grundsätzlich sind auch Kondensatoren in Mikrocontroller- Schaltungen nur lästiges, überflüssiges, unnützes Beiwerk, erzeugt bzw definiert von Nichtpraktiker-Puristen. [/sark]
Arduinoquäler schrieb: > Die Hartnäckigkeit vieler Minimalisten wie wahr, seufs, einer malt es falsch und alle malen ab mit dem Spruch: "bei dem funktioniert es ohne" Don Quijote hatte weniger zu kämpfen.
Arduinoquäler schrieb: > Grundsätzlich sind auch Kondensatoren in Mikrocontroller- > Schaltungen nur lästiges, überflüssiges, unnützes Beiwerk, > erzeugt bzw definiert von Nichtpraktiker-Puristen. Nein, das war andersherum: Kondensatorhersteller haben dieses Märchen über die Notwendigkeit von Kondensatoren verbreitet, um mehr Umsatz zu machen ;-))
M. K. schrieb: > Natürlich muss AVcc mit angeschlossen werden, das steht auch im > Datenblatt u.a. im Kapitel Pin Configurations ;) Ich weiß :( Bei vorherigen Versuchen hatte ich es auch korrekt angeschlossen... nur bei dem 3,3V/8Mhz Versuch total verplant. Hatte es nur nochmal beschrieben, falls jemand am gleichen Fehler verzweifeln sollte. Zu eurer Kondenstator "Diskussion" ;) Mein 470µF war ja laut euren Aussagen "etwas" (Faktor 4700) überdimensioniert und ich vermute die Größenordnung sollte eher bei wirklichen Leistungsspitzen des µC angewendet werden.... mich würde aber interessieren, was denn genau durch einen zu großen C passieren kann? Größere Gefahr nen Schwingkreis zu bauen? Langsameres Aufbauen der Betriebsspannung? Oder wo liegt das Risiko? Oder ist es einfach "nur" Verschwendung?
Vereinfacht ausgedrückt: Zu große Kondensatoren "reagieren" nicht schnell genug. Zu großer Widerstand (ESR) Zu große Induktivität An den AVR gehört ein 100nF Kerko. (47nF bis 220nF ist auch meist OK) Dicht dran. Möglichst dicht.
4700µF sind doch ElKos, meist Aluminium und gewickelt! Nun haben Wickel ja die hier echt unangenehme Eigenschaft einer Spule und damit Induktivität und diese mögen keine schnellen Lastwechsel und reagieren mit Induktion, der Strom wird aufrecht erhalten bei heftigen Spannungsänderungen wie man gerade vermeiden wollte an VCC. Kurz Spulen halten Ströme konstant, Kondensatoren halten Spannungen konstant. Gewünscht ist doch an VCC die Spannung konstant zu halten wenn sich die Ströme im µC ändern und jede Stromänderung soll keinen Spannungshub nach draussen zu anderen Bauteilen die auch an VCC hängen geben.
Peter schrieb: > mich würde aber interessieren, was denn genau > durch einen zu großen C passieren kann? Eine getaktete elektronische Schaltung schaltet bei jedem Takt. Das klingt jetzt trivial, ist es aber nicht. Bei jedem dieser Schaltvorgänge wird für ein paar Nanosekunden ein sehr hoher Strom gezogen. Dieser Strom wird von den kleinen Kerkos bereitgestellt. Die großen Kondensatoren sind, wie schon von Arduino Fanboy erwähnt, einfach zu langsam und entwickeln auch, wie von Joachim beschrieben, unangenehme Nebeneigenschaften. Und sie sind zu weit weg. Denn die Leiterbahnen stellen ihrerseits wieder Widerstände und Induktivitäten dar, sodaß die Versorgungsspannung für einen winzigen Moment zusammenbricht. Daß das nicht funktionieren kann, ist sicherlich einleuchtend. Schließt man ein paar Schieberegister in Kaskade an den SPI eines µC und taktet diesen einigermaßen hoch, bis zu 1/2 F_CPU beim AVR, kann man sehr schön beobachten, wie die armen 595er ohne Stützkondensatoren ausflippen und mit diesen kleinen Dingern genau das tun, was sie sollen.
Wenn du das mal selbst ausprobieren willst: Häng mal nen 470µF Elko an nen Funktionsgenerator und miss' Spannung und Strom, während du die Frequenz immer weiter hochdrehst. Bei diversen MHz verhält der sich dann wie eine ideale Spule.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.