Bootzeit bzw. Latenz ATmega 328

Hallo,

kurze Frage:

Ich möchte einen Standalone Arduino mit einem ATmega 328 aufbauen, der eine translatorische Beschleunigung messen soll (mit ADXL3xx Sensorboard) und dann ab einem Schwellwert eine Aktion durchführt. Der ATmega 328 und das Sensorboard werden aber erst mit Eintreten dieser Beschleunigung mit Strom versorgt.

Wie lange dauert es, von Beginn der Stromversorgung bis der Arduino die erste verlässliche Beschleunigung berechnet/ausgelesen hat?

Vielen Dank für eure Hilfe!

wenn du den Bootlader runter schmeisst, sofort
Oder du machst erst gar keinen drauf.

Die Anzahl Takte, bis zur Arbeitsaufnahmen wird mit den Takt Fuses festgelegt.

Und ja, auf den Bootloader solltest du verzichten, wenn dich dieser zu lange aufhält.

Ist leider schon wieder etwas länger her, dass ich mich ausgiebig mit µCs und Arduino beschäftigt habe, aber war das nicht so:

Blanko-Chip ATmega328 kaufen -> Bootloader mit Arduino ISP drauf laden -> in Arduino geschriebenes Programm draufspielen -> Chip funktioniert standalone -> glücklich sein. ?

Wie genau funktioniert das ohne den Bootloader? (Ich weiß ehrlich gesagt auch gar nicht so genau, was der macht. :D)

Zu den Takt Fuses: Ehm. Ich glaube ich habe bei meinem letzten standalone Arduino einen externen 16 MHz crystal verbaut. Es gibt auch einen internen Taktgeber, der war aber langsamer, oder?

Sorry, dass ich gerade nicht so im Thema bin. Spiele nur ein Projekt erstmal im Kopf durch. :smiley:

Hi

Wer bestimmt, daß der Wert überschritten ist, wenn die Messung zur Feststelung dieses Wertes erst nach dem Feststellen der Überschreitung eingeleitet wird?
Wenn Du akut schon einen Geber hast, Der jetzt den Arduino zuschaltet, brauchst Du Diesen doch gar nicht erst.

MfG

postmaster-ino:
Wer bestimmt, daß der Wert überschritten ist, wenn die Messung zur Feststelung dieses Wertes erst nach dem Feststellen der Überschreitung eingeleitet wird?

Oh, da habe ich mich missverständlich ausgedrückt.

Der Arduino wird eingeschaltet, sobald überhaupt eine translatorische Beschleunigung vorliegt.

Ob diese innerhalb gewisser Grenzen liegt, oder diese Überschreitet soll der Arduino dann überprüfen.

Eventuell ist der Übergang zwischen >translatorische Beschleunigung vorhanden< und >Beschleunigungsgrenzwert überschritten< eben relativ kurz. Daher die Frage, wie schnell der Arduino den Wert Beschleunigung überprüfen kann.

Schrauber47:
....
Blanko-Chip ATmega328 kaufen -> Bootloader mit Arduino ISP drauf laden -> in Arduino geschriebenes Programm draufspielen -> Chip funktioniert standalone -> glücklich sein. ?

Wie genau funktioniert das ohne den Bootloader? (Ich weiß ehrlich gesagt auch gar nicht so genau, was der macht. :D)

Wenn du den Sketch per ISP drauf spielst, wird der Bootloader nicht mehr verwendet, quasi deaktiviert.

Hi

Wie lange der µC zum Arbeiten braucht, steht im entsprechendem Datenblatt.
Suche dort nach SUT (Start Up Time).
Du brauchst ja schon etwas Zeit, bis der Quarz richtig schwingt - wenn Du den Arduino non-stop am Strom lässt, hast Du diese Zeit gespart.

MfG

Ist der Sleepmodus nicht sinnvoller als den Atmega von der Versorgung zu trennen? Du weißt schon daß wenn der ATmega keine Versorgungsspannung bekommt auch auf keinem der Pins Spannung sei darf?

Ob diese innerhalb gewisser Grenzen liegt, oder diese Überschreitet soll der Arduino dann überprüfen.

Wenn eine Beschleunigung stattgefunden hat dann ist ein nachträgliches Messen, egal ob 100µS danach oder 1mS danach immer zu spät. Der Triggerevent ist immer vorbei. Der ATmega braucht zeit zu starten und auch der Beschleunigungssensor.

Wie sieht denn die Triggerschaltung denn aus?

Grüße Uwe

Hab mal stellvertretend beim ADXL335 nachgeschaut:
Turn-On Time whitout No external filter: 1ms

Turn-on time is dependent on CX, CY, CZ and is approximately 160 × CX or CY or CZ + 1 ms, where CX, CY , CZ are in microfarads (μF).

Der ATmega braucht je nach Taktquelle und Modus (BOD aktiv, Slow oder Fast power rising (einstellbar)) zB für Low Power Crystal Oscillator CLock (Standarteinstellung von Arduino) 1014 Clock bis ca 16k Clock + 65mS ab Resetende.

Die korrekte Einstellung und damit die Startup-Zeit hängt von der Qualität (Schnelligkeit auf Sollspannung zu kommen ) der Spannungsversorgung ab. Die Zeit variert von ca 7,3µS bis ca 65mS ab erreichen der minimalen Resetendespannung (ca1,6V) . Der Reset hängt von BOD-Einstellung bzw von der Schnelligkeit der Spannungsversorgungsanstieg ab. Der Spannungsversorgungsanstieg sollte zwishen 0,01 und 10 V/mS betragen und somit ist ein Anstieg von 0 bis 5V in schnellstens 0,5mS erlaubt.

Grüße Uwe

HotSystems:
Wenn du den Sketch per ISP drauf spielst, wird der Bootloader nicht mehr verwendet, quasi deaktiviert.

Und wieso soll ich ihn dann "runter schmeißen"?

postmaster-ino:
Wie lange der µC zum Arbeiten braucht, steht im entsprechendem Datenblatt.
Suche dort nach SUT (Start Up Time).

Ich habe das Datenblatt gefunden, aber leider finde ich da nichts zu Start-up time/SUT.

uwefed:
Ist der Sleepmodus nicht sinnvoller als den Atmega von der Versorgung zu trennen? Du weißt schon daß wenn der ATmega keine Versorgungsspannung bekommt auch auf keinem der Pins Spannung sei darf?

Der sleep Modus wäre tatsächlich wesentlich praktischer. Um möglichst wenig Einbauaufwand zu haben, wäre es jedoch schön, den Arduino erst mit einsetzen der Beschleunigung einzuschalten.

Das mit den Pins wusste ich noch nicht, ist aber auch kein Problem: An denen liegt im ausgeschalteten Zustand keine Spannung an.

uwefed:
Wie sieht denn die Triggerschaltung denn aus?

Der Trigger leitet selbst die Beschleunigung ein. Als Beispiel kann man sich eine elektrisch aktuierte Bremse vorstellen. Dieses Triggersignal (=Versorgungsspannung elektr. Bremse) soll aus Gründen der Einfachheit gleichzeitig als Versorgungsspannung für den Arduino genutzt werden. Daher die zeitkritische Anforderung.

Bremse wird betätigt -> µC wird mit Spannung versorgt -> µC misst aktuelle (negative) Beschleunigung -> µC schaltet bei Überschreitung des Schwellwert einen Transistor

uwefed:
Hab mal stellvertretend beim ADXL335 nachgeschaut:
Turn-On Time whitout No external filter: 1ms

Turn-on time is dependent on CX, CY, CZ and is approximately 160 × CX or CY or CZ + 1 ms, where CX, CY , CZ are in microfarads (μF).

Das hört sich ja erstmal gar nicht schlecht an. Obwohl ich nicht weiß, man da jetzt groß ausrechnen soll. Die Kapazität der Kondensatoren im Sensor ist doch konstant, oder nicht?

uwefed:
Der ATmega braucht je nach Taktquelle und Modus (BOD aktiv, Slow oder Fast power rising (einstellbar)) zB für Low Power Crystal Oscillator CLock (Standarteinstellung von Arduino) 1014 Clock bis ca 16k Clock + 65mS ab Resetende.

Die korrekte Einstellung und damit die Startup-Zeit hängt von der Qualität (Schnelligkeit auf Sollspannung zu kommen ) der Spannungsversorgung ab. Die Zeit variert von ca 7,3µS bis ca 65mS ab erreichen der minimalen Resetendespannung (ca1,6V) [...]

Auch das hört sich eher unkritisch an. Zum Vergleich: Als zeitkritisch betrachte ich in etwa eine Totzeit bis zur Messung von etwa 200 - 300 ms.

EDIT:
Im Onlineshop von Conrad steht, dass der ATmega einen internen Taktgeber mit 20 MHz hat. Weshalb sollte ich dann überhaupt einen (langsameren) externen 16 MHz Quarz verwenden?

Hi

0,3 Sekunden vom Bremsbeginn bis zur Messung?
Erscheint mir irgendwie arg lange, in der Zeit habe ich fast meinen Boliden in drei Zügen gewendet.

MfG

Auf dem Vorfeld eines Flughafens? Weil Bolide und enge Straße zum Wenden in dieser Zeit passt nicht so ganz :wink:

Gruß Tommy

postmaster-ino:
0,3 Sekunden vom Bremsbeginn bis zur Messung?
Erscheint mir irgendwie arg lange, in der Zeit habe ich fast meinen Boliden in drei Zügen gewendet.

Jetzt wo du das so sagst, erscheint mir das auch irgendwie lange. Dann korrigiere ich mich auf etwa 100-150 ms. :smiley:

Die Messung selbst geht dann ja innerhalb einiger Takte, also relativ flott.

Und wieso soll ich ihn dann "runter schmeißen"?

Wenn die Bootloader Fuses gesetzt bleiben wird beim Start Zeit für 256 bis 2048 NOP verplempert.
Aber du hast ja eilig, also komplett runter werfen, nicht nur halb.

Hi

Schrauber47:
EDIT:
Im Onlineshop von Conrad steht, dass der ATmega einen internen Taktgeber mit 20 MHz hat. Weshalb sollte ich dann überhaupt einen (langsameren) externen 16 MHz Quarz verwenden?

Weil der interne RC-Oszillator nicht sonderlich genau ist - wenn Du Zeiten messen willst, ist ein Quarz anzuraten.
Hier wertest Du aber nur Werte eines externen Sensors aus - da sollte die Stabilität des Taktes eine untergeordnete Rolle spielen.

Musst halt die Fuses richtig setzen, daß der ATmega auch den internen Oszillator anwirft.

MfG

Der interne RC Oszillator schwingt sich deutlich schneller ein, als ein Quarz das kann.

Schrauber47:
Und wieso soll ich ihn dann "runter schmeißen"?

Weil der Bootloader ca 4 S wartet ob ein upload gemacht werden soll und erst danach den Sketch aufruft.

Ich habe das Datenblatt gefunden, aber leider finde ich da nichts zu Start-up time/SUT.

Wenn Du das falsche Datenblatt anschaust
http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf

Bremse wird betätigt -> µC wird mit Spannung versorgt -> µC misst aktuelle (negative) Beschleunigung -> µC schaltet bei Überschreitung des Schwellwert einen Transistor

Ich erinnere Dich daß die Spannungsversorgung im Auto sehr gestöhrt ist und daß ein Umbau zum Entzug der die Zulassung führen kann.

Schrauber47:
Das hört sich ja erstmal gar nicht schlecht an. Obwohl ich nicht weiß, man da jetzt groß ausrechnen soll. Die Kapazität der Kondensatoren im Sensor ist doch konstant, oder nicht?

Da ist der zusätzliche Kondensator gemeint. Bitte lies das Datenblatt des Sensors.

EDIT:
Im Onlineshop von Conrad steht, dass der ATmega einen internen Taktgeber mit 20 MHz hat.

Davon weiß ich nichts.

Grüße Uwe

Schrauber47:
EDIT:
Im Onlineshop von Conrad steht, dass der ATmega einen internen Taktgeber mit 20 MHz hat. Weshalb sollte ich dann überhaupt einen (langsameren) externen 16 MHz Quarz verwenden?

Mal wieder eine Beschreibung von Conrad die missverständlich ist.
Da steht folgendes z.B. auf https://www.conrad.de/de/embedded-mikrocontroller-atmega328-mu-vqfn-32-5x5-microchip-technology-8-bit-20-mhz-anzahl-io-23-1266980.html

Takt-Frequenz 20 MHz
Oszillator-Typ Intern

Ziemlich blöd geschrieben...
Der hat einen 8Mhz und einen 128khz Oszillator intern. Was anderes geht nur extern!
Das Datenblatt bei Conrad ist auch nur die kurze Version.

Da gibt es das komplette Datenblatt:
http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf

Im Kapitel 13 (ab Seite 49) werden die verschiedenen Taktquellen beschrieben.

Gruß, Jürgen