Forum: Mikrocontroller und Digitale Elektronik Atmega328p mit internem Oszillator bei 3,3V


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

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.

von langhaarrocker (Gast)


Lesenswert?

Was verwendest Du für eine Spannungsversorgung? Wie steht's um 
Blockkondensator?

von M. K. (sylaina)


Lesenswert?

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.

von Einer K. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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?

von Thomas E. (thomase)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

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 ;)

von Arduinoquäler (Gast)


Lesenswert?

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]

von Joachim B. (jar)


Lesenswert?

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.

von Dietrich L. (dietrichl)


Lesenswert?

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 ;-))

von Peter (Gast)


Lesenswert?

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?

von Einer K. (Gast)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von THOR (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.