(Atmel-) Mikrocontroller: Interrupts und "lange" ISRs

Ich bin dabei derzeit eine Atomuhr zu basteln (Physics Package

der Pulse angelangt.

Ich werde vermtulich erst mal einen 8-Bit-Atmel verwenden

zu recht belehrt hat ist das "Geriatronik", es gibt ARM-Controller

"saubere" Vorgehensweise interessieren. Das ganze mit roher

600MHz-Arm Cortex hat sicher keinerlei Probleme, wie unelegant man auch immer programmiert.

Das hab ich mittlerweile geschafft (nach einigem Datenblatt- Studium).

Jetzt habe ich folgendes Problem: Das ganze geht "meistens"

das tut auch nicht weh.

Nur zu manchen Zeitpunkten (Jahresanfang Mitternacht GMT,

zeitkritischen Teil (Sekunden, Minuten) vom weniger zeitkritischen Teil (Stunden, Tage, Wochentag, Monat ...) getrennt abzuarbeiten?

/ralph

--
----------------------------------------------------------------------------- 
                                                              https://aisg.at 
 Click to see the full signature
Reply to
Ralph Aichinger
Loading thread data ...

Sekunden weiter laufen.

Wobei das auch nicht so arg lange dauern sollte.

Reply to
Thorsten Böttcher

Jau ;-)

und einen Portpin hi schaltet beim Funktionseintritt und beim verlassen den pin wieder runterzieht, toggeln etc. Man kann dann auf dem scope

Bei dem Abfragen der Variablen (Speicherbereich des RAMs) aufpassen,

in dem Moment neue Werte in den Speicher schreiben kann, wenn die Berechnungsroutine den Wert ausliest. Abhilfe dazu z.B. den IR sperren und nach dem Lesen wieder freigeben.

--
mit freundlichen Gruessen/ best regards Joerg Niggemeyer Dipl.Physiker 
WEB: http://www.nucon.de    https://www.led-temperature-protection.com 
 Click to see the full signature
Reply to
Joerg Niggemeyer

Ah, das ist clever. Gerade wenn das Timing gefragt ist, dann ist

wirkliche Option.

/ralph

--
----------------------------------------------------------------------------- 
                                                              https://aisg.at 
 Click to see the full signature
Reply to
Ralph Aichinger

ist.

;-O

--
mit freundlichen Gruessen/ best regards Joerg Niggemeyer Dipl.Physiker 
WEB: http://www.nucon.de    https://www.led-temperature-protection.com 
 Click to see the full signature
Reply to
Joerg Niggemeyer

...

Vieles kann man vorab ermitteln und in einer Tabelle halten, z.B. die beweglichen

hat der Controller fast den ganzen Tag Zeit zum Ausrechnen.

bei uns von der PTB festgelegt.

Interessanter wird die initiale Synchronisation mit der exakten Atomzeit. Da wirst du wohl ein GPS Zeitnormal, das auf 1ms genau ist, brauchen. Eine Handeinstellung wie bei einer normalen Digitaluhr geht ja nicht.

--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de
Reply to
Peter Heitzer

Hier sicherlich unkritisch. Aber

weitere asynchrone Takte. Liefern manchmal

zu debuggen sind wenn sie selten auftreten.

Alle meine simplen Anwendungen a la

Endlosschleife die bei Tastendruck am Terminal

: RUN \ ( --- ) BEGIN < Anwendung > TERMINAL? UNTIL ;

FORTH ist eben etwas anders.

Programmiersprachen empfehlenswert.

MfG JRD

Reply to
Rafael Deliano

Mal sehen.

Ja ;)

so 15-150 ns genau relativ zu UTC, sofern man ein brauchbares Signal

formatting link

wird, dann wird:

  1. das an der seriellen Schnittstelle anliegende NMEA-Zeitsignal auf

externe Vorteiler resetted)

3 die aus dem NMEA-Signal geparste Uhrzeit und das Datum in den internen

Ja ;)

so 15-150 ns genau relativ zu UTC, sofern man ein brauchbares Signal

formatting link

wird, dann wird:

  1. das an der seriellen Schnittstelle anliegende NMEA-Zeitsignal auf

externe Vorteiler resetted)

3 die aus dem NMEA-Signal geparste Uhrzeit und das Datum in den internen

/ralph

--
----------------------------------------------------------------------------- 
                                                              https://aisg.at 
 Click to see the full signature
Reply to
Ralph Aichinger

Die moderne Alternative zum AVR ist der Cortex-M und die laufen nicht mit 600 MHz, sondern eher so mit 48...200 MHz, je nach Modell. Selbst

Gefummel gibt's obendrein. Und viel billiger als diese AVRs ist er auch noch.

ekelhaften AVR Harvard Architektur mehr hat. Lookuptable im ROM? Einfach per Pointer drauf zugreifen. Endlich hat PROGMEM und read_pgm_byte() ein

wieder.

Trotzdem ist es nicht so, dass du mit grober Rechenleistung so schlecht programmieren kannst, wie du willst. Gerade wenn dir Latenz wichtig ist, musst du schon nachdenken, wie du's hinschreibst.

Stichwort hier ist ISR/DSR. Im ISR machst du nur die unbedingt notwendigen Sachen, in der DSR (Deferred Service Routine) dann das,

Aber ehrlichgesagt klingen deine "langwierigen" Aufgaben nicht so, als

2560, du clockst den mit 16 MHz. Du wolltest 1 kHz ISR-Frequenz. In den zwei (!) Millisekunden die du da also hast, bevor du IRQs verlierst,

sind single cycle. Das ist UNGLAUBLICH viel Leistung, die du da hast.

ist.

Johannes

Reply to
Johannes Bauer

beim Arduino anpassen oder auf sie verzichten (die laufen entweder mit 16MHz oder 8MHz), z.B.

Baudrate.

geht.

Ich werde es zumindest probieren, sobald ich die 10MHz da liegen habe ;)

/ralph

--
----------------------------------------------------------------------------- 
                                                              https://aisg.at 
 Click to see the full signature
Reply to
Ralph Aichinger

Das ist mindestens genauso aufwendig wie 2mal lesen und hat noch mehr

auf und zu. Auch Semaphoren hickhack ist aufwendiger...

Es sei denn, Du hast sowas wie JBC (8051), dann ist das sauberer und

:)))

Wolfgang

--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt! 

ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p 
 Click to see the full signature
Reply to
Wolfgang Allinger

snipped-for-privacy@gmx.de (Johannes Bauer) am 13.08.19 um 18:52:

Mithin jedesmal, wenn die ISR zweimal nacheinander zu lange dauert.

oder meinetwegen 10.000, wenn man im Schnitt mit 1.6 Takten pro Befehl rechnet?

updaten, Warteschleifen legt man da ja nicht rein.

Rainer

--


(Hergen Lehmann in ger.ct)
Reply to
Rainer Knaepper

Geht oft auch mit einer geschickt eingesetzten LED. Geht sie nie an oder nie aus (je nach Implementierung) ist was faul. Flimmert oder

Rainer

--
Wenn Du eine Platte brauchst, dann kaufe sie jetzt. Oder morgen. Oder wann 
immer Du sie wirklich brauchst, denn irgendwann muss man sterben und den 
 Click to see the full signature
Reply to
Rainer Knaepper

was den Selbstbau etwas erschwert, so man nicht vom freundlichen Chinesen

Das hat aber weniger mit Harvard Architektur zu tun, sondern mit der

--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de
Reply to
Peter Heitzer

Man legt den uC mit freigeschalteten Interrupts schlafen: sei(); sleep_mode();

Tiefschlaf versetzen.

Josef

Reply to
Josef Moellers

Na klar, die LED, die z.B. durch langsames Blinken diverese Codes

werden, wenn man ein scope dransetzt.

--
mit freundlichen Gruessen/ best regards Joerg Niggemeyer Dipl.Physiker 
WEB: http://www.nucon.de    https://www.led-temperature-protection.com 
 Click to see the full signature
Reply to
Joerg Niggemeyer

die Arduino-Plattform hat so einen reichen Schatz an Libraries

vorher jemand gemacht hat), relativ billig (15-25 Euro), gut supportet

neuerdings auch rohe Power bis 600MHz.

formatting link

Chip der im Teensy 4.0 steckt (i.MXRT1060, 600MHz Cortex-M7) ist schon eine Ansage.

Aber auch die Cortex M4 aus den kleineren Modellen sind deutlich komplexer als die 8-Bit-Atmels. Wenn man erst einsteigt in die Materie, ist das nicht so ohne.

Leider sind viele der im embedded-Bereich verwendeten Kalenderfunktionen und Zeitfunktionen stark simplifiziert: Schaltsekunden werden ignoriert, Sommerzeit-Wechsel nach irgendeinem starren Schema, etc.

Vor allem die fehlende Behandlung der Schaltsekunden tut mir weh. Wenn ich schon eine Atomuhr bastle, dann soll sie das hinkriegen (z.B.

wird.

Allerdings werde ich viele viele andere Convenience-Libraries nutzen, die es fertig gibt: Ansteuern von billigen Chinesen-Displays mit dem TM1637-Treiberchip, parsen der NMEA-Sentences vom GPS an der seriellen Schnittstelle, etc.

Naja, in der Arduino-Umgebung ist das gut gekapselt, auch wenn dem ganzen der gcc zugrundeliegt. Bei bisherigen Projekten hab ich

/ralph

--
----------------------------------------------------------------------------- 
                                                              https://aisg.at 
 Click to see the full signature
Reply to
Ralph Aichinger

Am 13.08.2019 um 18:52 schrieb Johannes Bauer:

Das geht seit ca. 5 Jahren auch einfacher:

formatting link

HTH Markus

Reply to
Markus Faust

Am 13.08.2019 um 19:54 schrieb Wolfgang Allinger:

Genau so ist das richtig gemacht.

Hmm, auf welchen Controllern soll das unsauberer oder langsamer sein?

DoDi

Reply to
Hans-Peter Diettrich

Am 14.08.2019 um 09:53 schrieb Joerg Niggemeyer:

Wenn schon Debuggen dann gleich richtig mit einem Logik-Analysator. Ist weit billiger als ein Scope und erlaubt bessere Diagnosen.

DoDi

Reply to
Hans-Peter Diettrich

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.