Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino-Nachbau ohne Quarz? Was beachten?
Hallo,
für eine (zeitunkritische, nur manuelle Taster on/off) Schaltung möchte ich die dazu notwendigen Bauteile des Arduino mit auf meine eigene Platine verlöten. Auf den Quarz könnte ich verzichten und die interne Taktung des ATMEL 328 verwenden. Zumindest ist mir das theoretisch bekannt. Der Quarz incl. der 2 gegen GND gesetzten Kondensatoren sitzt am ATMEL zwischen PIN 9 und 10. Kann ich diese 3 Bauteile einfach weglassen und dann schaltet der ATMEL von sich aus (mangels externer Taktquelle) automatisch auf seinen internen Takt? Oder muss zusätzlich auch im verwendeten Sketch etwas verändert werden, was dem ATMEL sagt, "schalte bitte auf deinen internen Takt"?
Andi
oberallgeier
23.05.2020, 09:59
.. Bauteile des Arduino .. eigene Platine .. Quarz .. verzichten .. schaltet der ATMEL von sich aus .. automatisch auf seinen internen Takt ..Hi Andi,
schön wärs, wenn das automatisch ginge. Da hätten viele (auch ich) in der Anfangszeit weniger Probleme mit "verfusten" Controllern gehabt => WENN der Controller mal auf Quarz eingerichtet ist, weigert er sich ohne seinen Taktgeber irgend eine Arbeit zu tun. Aber es gibt einen positiven Anteil an der Frage/Antwort: fabrikfrisch sind die Controller so eingerichtet (gefuset - also die Fusebits=einstellbare Parameter des Controllers - klick mal hier (https://rn-wissen.de/wiki/index.php?title=Avr#Die_Fusebits) - sind voreingestellt), dass die Controller ohne Quarz arbeiten. Sie werden durch den internen Takt mit einem achtel des 8 MHz -Taktgebers bedient; sprich: sie ticken dann mit 1 MHz. Fabrikfrisch.
Das war aber nur der Punkt 1.
Fazit :
Ein FABRIKfrischer controller muss nicht "umgestellt" werden, der taktet mit 1 MHz, kann aber auf 8 MHz gestellt werden.
Ein "arduino"-konformer Controller müsste auf Quarz mit 16 MHz eingestellt sein - ohne Quarz funzt der nur als Stromverbraucher.
.. für eine (zeitunkritische, nur manuelle Taster on/off) Schaltung ..Ich verstehe eigentlich kaum was von arduino, insbes. nicht von der plattformspezifischen Programmierung - und ich kenne auch Dein Programm nicht.
Trotzdem Punkt 2:
Ich weiß ich nicht, ob Dein Programm später vielleicht doch die arduinospezifischen 16 MHz voraussetzt. Es wird aber z.B. der Bootloader ohne Quarz schon mal nicht funktionieren, ebenso Arduinokommandos zu Zeitabfragen u.ä.
Guten Morgen,
wenn es ohne Quarz sein soll, würde ich auch auf das andere Arduino-Gedöns verzichten, zumal ohne Quarz eine serielle Kommunikation zum flashen eh nicht möglich sein wird. Man kann sich einen Arduino als ISP-Flasher programmieren. Du musst dann auf deiner Anwendung mit dem Taster lediglich zusätzliche 4 Pins zur Pogrammierung (und natürlich GND und VCC) als Pinheader einplannen. Das setzen der korrekten Fuses ist dann auch notwendig, wie oberallgeier schon richtig angemerkt hat.
Viele Grüße
Andreas
Hallo Andi!
Ich habe mal was zusammengesucht.
Ich bin auf zwei Seiten gestoßen, die weiterhelfen sollten.
Erste ist in Englisch gehalten, hat aber die Beschreibung, wie man die richtige Auswahl in die Arduino-IDE rein bekommt.
Es ist notwendig, dass das File: boards.txt bearbeitet wird.
Dort muss ein passender Eintrag rein, mit entsprechenden Einstellungen. Diesen Code findet man auf dieser Seite.
https://www.instructables.com/id/USBASP-Bootloading-a-ATMega328p-with-a-8mhZ-intern/
Für den Fall, dass Du Dich damit nicht auskennst, folgendes.
Boards.txt ist im Arduino-Verzeichnis zu finden (arduino/avr/boards.txt).
In diese Datei fügt man diesen Code ein und speichert die Datei, danach die Arduino-IDE neu starten.
################################################## ############
atmega328bb.name=ATmega328 on a
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega3 28_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
Die Zweite Seite ist in Deutsch gehalten, dort steht beschrieben, wie man einen ATmega328P, mit internem Clock,
programmieren kann.
https://wolles-elektronikkiste.de/atmega328p-standalone-betreiben
Nachtrag:
Ich bin gerade drüber gestolpert, dass das Obige nicht ganz korrekt ist.
Die Arduino-IDE zeigte mir diverse Hinweise.
Deswegen habe ich noch mal gesucht und auch gefunden.
Hier also eine dritte Seite: https://forum.mysensors.org/topic/3018/tutorial-how-to-burn-1mhz-8mhz-bootloader-using-arduino-ide-1-6-5-r5
Dort gibt es ein File: breadboard-1-6-x.zip (https://www.arduino.cc/en/uploads/Tutorial/breadboard-1-6-x.zip)
Das enthält sowohl den boards.txt-Eintrag, als auch einen Bootloader, der bei mir von der Arduino-IDE akzeptiert wird.
Ich hatte schon einen Bootloader installiert, aber irgendwie bekam ich eine Fehlermeldung. Habe den aus dem ZIP-File genommen
und den anderen überschrieben, scheint in Ordnung zu sein. Zumindest keine Fehlermeldung bezüglich des Bootloaders.
Was den Eintrag im Boards.txt angeht, meldet die Arduino-IDE auch wieder, es fehle etwas. Nämlich der "atmega328bb.build.board"-Eintrag.
Ich habe bei mir einfach einen hinzugefügt.
MfG
oberallgeier
24.05.2020, 10:16
Hi Andi,
im Nachgang zu meinem Post noch zwei Programmierhilfen.
Einmal ein Bildschirmdump (klick hier) (https://dl.dropbox.com/s/jdad017ap9dp74n/Fuses_328_IntOsz.jpg?dl=0) vom Programmieren der Fuses aus dem AVRStudio4. Darin ist die Programmierung der SUT_CKSEL (Start Up Table, Clock Selekt) gezeigt - mit allen Möglichkeiten die beim mega328(P) verfügbar sind; bevorzugt die 8 MHz-Variante (blau unterlegt). Die andern Fuses stehen so, wie ich beim 3238er üblicherweise die Fuses setze. BODLEVEL, also Brown-out detection Level habe ich meist auf 2,7 V gestellt oder gar abgeschaltet (disabled). Der Test auf BODLEVEL bewirkt ein Abschalten des Controllers, wenn die eingestellte Spannung unterschritten wird.
Dazu noch nen screen dump von dem Fusecalkulator (nochn Klick (https://dl.dropbox.com/s/n3hovyd0xyulczu/fusecalc.jpg?dl=0)) mit dem online das Setzen der Fuses getestet/geübt/etc werden kann. Der ist mit diesem Link (https://www.engbedded.com/fusecalc/) zu finden.
Im Übrigen kann man mit dem Herabsetzen des Taktes auf 8 MHz - und mit der dann auch viel größeren Toleranz des Taktes - ne serielle Datenübertragung (UART) mit 9,6 kBd, manchmal aber nur noch mit 4800 Bd machen. Aber es geht *ggg* bei den meisten Computern.
Viel Erfolg
Danke für Eure Antworten. Möglicherweise habe ich das falsch ausgedrückt. Ich möchte einen bereits auf einem normalen UNO programmierten ATMEL-von diesem dann entfernen und in meiner Schaltung einsetzen. Dort soll dann nichts mehr programmiert werden, das wird nur einmalig (auf separatem Board) programmiert und soll dann dauerhaft in meiner Schaltung laufen, integriert auf meiner eigenen Platine, auf der sich auch die anderen Sachen dann befinden.
Wenn ein Quarz notwendig ist, würde es dann auch ein 10 MHz tun (statt des 16 MHz)? Ich habe noch 10er rumliegen und müsste dann keine 16er extra neu kaufen. Und bei dem Sketch kommt es nicht auf 100stel Sekundenbruchteile an in der Ausführung. Könnte ich einfach einen 10 MHz nehmen ohne irgendwas in der Programmierung des ATMEL zu verändern?
Andi
Ich habe auch schon einen andern Quarz eingesetzt. Hab's einfach ausprobiert. Die Timings stimmen dann nicht mehr (delay() ... micros() ... etc., und die serielle Schnittstelle u.U. auch nicht), aber funktioniert hat es.
MfG
Danke nochmals. Habe mir jetzt mal die Anleitungen (Eure Links) angeschaut. Da muss ich mich einarbeiten, aber auf den ersten Blick sind da schon viele nützliche Hinweise enthalten.
Danke
Andi
oberallgeier
25.05.2020, 08:56
.. Wenn ein Quarz notwendig ist, würde es dann auch ein 10 MHz tun (statt des 16 MHz)? .. noch 10er rumliegen und müsste dann keine 16er extra neu kaufen ..Also ich sehe bei (D)einer zeit-unkritischen Anwendung nicht wirklich nen Grund statt des internen Oszillators mit 8 MHz einen Quarz mit 10 MHz zu verwenden. Die zeitliche Stabilität des Quarzes ist zwar deutlich besser als die des internen Oszillators - aber - wenns sowieso egal ist . . . Ich habe z.B. bei (m)einer Temperatursteuerung für den LabornetzteilVentilator auch keinen Quarz. Ob die PWM mit 3,9 kHz schaufelt oder viereinhalb ist ja nu wirklich egal. Das ist sicher weitab von irgendwelchen Eigenfrequenzen. Und wenn Du "nur" Tasten abfragen willst . . . sollte die Zeit auch eine untergeordnete Rolle spielen. Dies also aufgrund meiner wenigen Erfahrungen OHNE Quarz - die aber problemlos funktionieren.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.