Discussion:
mikrocontroller mit mehr als einem Quadrature-Decoder Timer
Add Reply
Matthias Weingart
2019-09-19 06:36:05 UTC
Antworten
Permalink
Hi,

ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,
die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?
Ich hab schon recherchiert, leider ist das nicht leicht rauszufinden. Da das
Feature kaum in den Filtern der Distris oder Hersteller auftaucht, muss man
sich erst durch Datenblätter oder Appnotes kämpfen...
Also beim STM32 können es nur die "Advanced timer" und da hat man oft nur
einen davon drin, in den größeren Controllern aber manchmal sogar schon zwei
und ganz selten sogar drei.
https://www.st.com/resource/en/application_note/dm00042534.pdf

Welche Controller gibt es noch? (Mir reichen da Typen mit 16 MHz Takt und ein
paar kB RAM, gern auch mehr, Hauptsache sie sind keine Stromschlucker ;-).

M.
--
Thorsten Böttcher
2019-09-19 07:25:52 UTC
Antworten
Permalink
Post by Matthias Weingart
Also beim STM32 können es nur die "Advanced timer" und da hat man oft nur
Bist Du sicher?
Ich hab jetzt mal spontan in das Datenblatt des STM32F7xx und STM32L4xx
reingeschaut, und dort unterstützen die Advanced-Timer und die
General-Purpose-Timer quadrature Encoder.
Und davon gibts dann schon mehr als 2.
Post by Matthias Weingart
einen davon drin, in den größeren Controllern aber manchmal sogar schon zwei
und ganz selten sogar drei.
https://www.st.com/resource/en/application_note/dm00042534.pdf
Welche Controller gibt es noch? (Mir reichen da Typen mit 16 MHz Takt und ein
paar kB RAM, gern auch mehr, Hauptsache sie sind keine Stromschlucker ;-).
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstützen.
Matthias Weingart
2019-09-19 08:20:56 UTC
Antworten
Permalink
Post by Thorsten Böttcher
Also beim STM32 können es nur die "Advanced timer" und da hat man oft
nur
Bist Du sicher?
Nee eben nicht. Drum frag ich ja auch hier :-). In der unten verlinkten App-
Note steht das leider auch wieder nicht eindeutig drin - d.h. ich hätte auch
noch die Datenblätter wälzen müssen und dabei kenne ich mich mit den Dinger
noch gar nicht aus.
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstÃŒtzen.
Super, danke.

M.
--
Andreas Fecht
2019-09-19 08:43:49 UTC
Antworten
Permalink
Post by Matthias Weingart
Post by Thorsten Böttcher
Post by Matthias Weingart
Also beim STM32 können es nur die "Advanced timer" und da hat man oft nur
Bist Du sicher?
Nee eben nicht. Drum frag ich ja auch hier :-). In der unten verlinkten App-
Note steht das leider auch wieder nicht eindeutig drin - d.h. ich h�tte auch
noch die Datenbl�tter w�lzen m�ssen und dabei kenne ich mich mit den Dinger
noch gar nicht aus.
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstützen.
Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 Stück hin.

Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.

https://www.st.com/en/development-tools/stm32cubemx.html

Gruß Andreas
Matthias Weingart
2019-09-19 08:54:08 UTC
Antworten
Permalink
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstÃŒtzen.
Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StÃŒck hin.
Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.
https://www.st.com/en/development-tools/stm32cubemx.html
Mhh ja, aber dabei bin ich doch gerade erst dabei mir einen neuen Controller
auszusuchen. Da wollte ich eigentlich ohne Installationsorgien auskommen. ;-)
AT XMEGA und Pics kommen ja auch noch in Frage und bestimmt viele andere mehr
- nur die MSP430-Timer z.B. können das gar nicht ;-).

M.
--
Thorsten Böttcher
2019-09-19 09:09:08 UTC
Antworten
Permalink
Post by Andreas Fecht
Post by Matthias Weingart
Post by Thorsten Böttcher
Post by Matthias Weingart
Also beim STM32 können es nur die "Advanced timer" und da hat man oft nur
Bist Du sicher?
Nee eben nicht. Drum frag ich ja auch hier :-). In der unten verlinkten App-
Note steht das leider auch wieder nicht eindeutig drin - d.h. ich h�tte auch
noch die Datenbl�tter w�lzen m�ssen und dabei kenne ich mich mit den Dinger
noch gar nicht aus.
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstützen.
Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 Stück hin.
Ich hab das Datenblatt nur überflogen, kann sein dass nicht alle von den
Timern das unterstützen. Aber definitiv gehts auch mit den GP-Timern,
und nicht nur mit den Advanced.
Matthias Weingart
2019-09-19 13:35:36 UTC
Antworten
Permalink
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstÃŒtzen.
Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StÃŒck hin.
Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.
https://www.st.com/en/development-tools/stm32cubemx.html
Mhh, hab das jetzt mal installiert. Man muss aber trotzdem wissen, an welchen
Flags man drehen muss? Auf Anhieb sehe ich da nicht, welche Register ich
verändern muss, um einen Timer auf Quadrature-Modus zu bekommen.
Was hast Du da eingestellt?

M.
--
Andreas Fecht
2019-09-19 18:39:06 UTC
Antworten
Permalink
Post by Matthias Weingart
Post by Andreas Fecht
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstützen.
Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 Stück hin.
Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.
https://www.st.com/en/development-tools/stm32cubemx.html
Mhh, hab das jetzt mal installiert. Man muss aber trotzdem wissen, an welchen
Flags man drehen muss? Auf Anhieb sehe ich da nicht, welche Register ich
ver�ndern muss, um einen Timer auf Quadrature-Modus zu bekommen.
Was hast Du da eingestellt?
M.
Klick auf einen Timer, der das unterstützt (z.B. TIM2).
Bei Combined Channels kann man dann "Encoder Mode" auswählen.

Gruß Andreas
Matthias Weingart
2019-09-20 05:50:42 UTC
Antworten
Permalink
Post by Matthias Weingart
Post by Thorsten Böttcher
Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstÃŒtzen.
Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StÃŒck hin.
Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.
https://www.st.com/en/development-tools/stm32cubemx.html
Mhh, hab das jetzt mal installiert. Man muss aber trotzdem wissen, an
welchen Flags man drehen muss? Auf Anhieb sehe ich da nicht, welche
Register ich verï¿œndern muss, um einen Timer auf Quadrature-Modus zu
bekommen. Was hast Du da eingestellt?
M.
Klick auf einen Timer, der das unterstÃŒtzt (z.B. TIM2).
Bei Combined Channels kann man dann "Encoder Mode" auswÀhlen.
Ahhh, da steckt das! Danke. Sogar der LowPower-Timer kann Encoder-Mode.
Damit kann dann z.B. sogar der nur 32 pinnige STM32L0 sogar 4 Encoder (sofern
man einen Timer nicht für andere Zwecke braucht).

M.
--
Thorsten Böttcher
2019-09-20 06:08:17 UTC
Antworten
Permalink
Post by Matthias Weingart
Ahhh, da steckt das! Danke. Sogar der LowPower-Timer kann Encoder-Mode.
Damit kann dann z.B. sogar der nur 32 pinnige STM32L0 sogar 4 Encoder (sofern
man einen Timer nicht für andere Zwecke braucht).
Falls man neben den 4 Encodern noch weitere Timer benötigt, nimmt man
halt einen STM32L0 mit mehr Timern. IM LQFP 32 sind maximal 7 verfügbar.
Sieghard Schicktanz
2019-09-21 18:52:58 UTC
Antworten
Permalink
Hallo Andreas,
Post by Andreas Fecht
Register ich ver�ndern muss, um einen Timer auf Quadrature-Modus zu
bekommen. Was hast Du da eingestellt?
...
Post by Andreas Fecht
Klick auf einen Timer, der das unterstützt (z.B. TIM2).
Bei Combined Channels kann man dann "Encoder Mode" auswählen.
Wieso heißt eine Funktion zum _De_kodieren eines Signal(paare)s bei diesen
Dingern eigentlich _En_coder? Hat da jemand was verwechselt?
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Johannes Bauer
2019-09-21 20:23:14 UTC
Antworten
Permalink
Post by Sieghard Schicktanz
Wieso heißt eine Funktion zum _De_kodieren eines Signal(paare)s bei diesen
Dingern eigentlich _En_coder? Hat da jemand was verwechselt?
"Rotary Decoder" ist vermutlich als Suchbegriff ungeeignet; jemand, der
nach der Funktionalität sucht, sucht wohl am ehesten nach Timer + Rotary
Encoder support.

Gruß,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
MaWin
2019-09-19 09:49:52 UTC
Antworten
Permalink
Post by Matthias Weingart
ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert.
Na ja, schlechte Programmierung, man kann bereits mit einem AVR vier Encoder
mit 1 Mio Abtastungen pro Sekunde einlesen.
Post by Matthias Weingart
D.h. ich will da lieber ne Hardware im Controller, die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?
Siehe
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Der H8/3003 und H8S (2 Kanäle) H8SX (4 Kanäle), ATXmega (3 Kanäle bis Osz/4)
und STM32F4 (6 Kanäle) machen das in Hardware
--
MaWin, Manfred Winterhoff, mawin at gmx dot net
Homepage http://flexiblebird.bplaced.net/
dse-FAQ: http://dse-faq.elektronik-kompendium.de/
Hans-Peter Diettrich
2019-09-19 10:17:37 UTC
Antworten
Permalink
Post by Matthias Weingart
ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,
die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?
Quadratur-Dekodierung ist ein Klacks für jeden Controller. Deiner
Beschreibung entnehme ich, daß Du möglicherweise das Meßverfahren ändern
solltest, mit Interrupt vom Encoder statt von einem Timer?

Wieviele Encoder hast Du denn, mit wievielen Impulsen pro Sekunde maximal?

DoDi
Bernd Laengerich
2019-09-19 10:35:41 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Interrupt vom Encoder statt von einem Timer?
Potentiell prellende Encoder direkt an einen Interrupt zu hängen ist meist
keine gute Idee.

Bernd
Hans-Peter Diettrich
2019-09-19 12:51:52 UTC
Antworten
Permalink
Post by Bernd Laengerich
Post by Hans-Peter Diettrich
Interrupt vom Encoder statt von einem Timer?
Potentiell prellende Encoder direkt an einen Interrupt zu hängen ist
meist keine gute Idee.
Prellende Encoder sind eine dumme Idee. Prellen können AFAIR nur
mechanische Kontakte, und die sind so langsam, daß sie per Software
entprellt werden können. Wenn das so nicht mehr funktioniert, ist ein
Entprellen auch mit Hardware nicht mehr möglich. Andere Encoder können
nicht prellen, eignen sich also für eine Abfrage per Interrupt.

DoDi
MaWin
2019-09-19 10:48:01 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Quadratur-Dekodierung ist ein Klacks für jeden Controller. Deiner
Beschreibung entnehme ich, daß Du möglicherweise das Meßverfahren ändern
solltest, mit Interrupt vom Encoder statt von einem Timer?
Das ist ungefähr das blödeste, was man machen kann,
denn wenn es dann wirklich mal prellt, wird der Controller mit
haufenweise Interrupts überfahren, schneller als
er sie abarbeiten kann. Welche er verliert ist Zufall.

Man muss dann vorher per Hardware entprellen, damit
kann man sich die Software-Entprellung ganz sparen.
--
MaWin, Manfred Winterhoff, mawin at gmx dot net
Homepage http://flexiblebird.bplaced.net/
dse-FAQ: http://dse-faq.elektronik-kompendium.de/
Matthias Weingart
2019-09-19 13:39:20 UTC
Antworten
Permalink
Post by MaWin
Post by Hans-Peter Diettrich
Quadratur-Dekodierung ist ein Klacks für jeden Controller. Deiner
Beschreibung entnehme ich, daß Du möglicherweise das Meßverfahren ändern
solltest, mit Interrupt vom Encoder statt von einem Timer?
Das ist ungefähr das blödeste, was man machen kann,
denn wenn es dann wirklich mal prellt, wird der Controller mit
haufenweise Interrupts überfahren, schneller als
er sie abarbeiten kann. Welche er verliert ist Zufall.
Man muss dann vorher per Hardware entprellen, damit
kann man sich die Software-Entprellung ganz sparen.
Naja mit Port-Interrupts - das hab ich schön bleiben lassen. Zuverlässig
funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem festen
Takt abtastet - dann stört auch prellen nicht wirklich - da wackelt dann der
Wert nur um ein Digit hin- und her, es gehen keine Zählimpulse verloren - was
ihmo das wichtigste ist. (sofern nur eine Flanke prellt, wenn natürlich beide
gleichzeitig Prellen ist das ganz schön böse ;-).

M.
--
Hans-Peter Diettrich
2019-09-19 14:52:06 UTC
Antworten
Permalink
Post by Matthias Weingart
Naja mit Port-Interrupts - das hab ich schön bleiben lassen.
Ja wenn Du so ein Experte bist, kann ich diesen Thread ja killen.

DoDi
Johannes Bauer
2019-09-20 11:54:45 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Post by Matthias Weingart
Naja mit Port-Interrupts - das hab ich schön bleiben lassen.
Ja wenn Du so ein Experte bist, kann ich diesen Thread ja killen.
Dein "Experten"rat wird sicherlich schmerzlich vermisst werden. Damit
hast du's Matthias dann so richtig gezeigt.

Gruß,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Gerald Oppen
2019-09-19 19:45:41 UTC
Antworten
Permalink
Naja mit Port-Interrupts - das hab ich sch�n bleiben lassen. Zuverl�ssig
funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem festen
Takt abtastet - dann st�rt auch prellen nicht wirklich - da wackelt dann der
Wert nur um ein Digit hin- und her, es gehen keine Z�hlimpulse verloren - was
ihmo das wichtigste ist. (sofern nur eine Flanke prellt, wenn nat�rlich beide
gleichzeitig Prellen ist das ganz sch�n b�se ;-).
Dann musst Du die Entprellung noch optimieren... Irgendwann ist dann
natürlich die Grenze in Bezug auf die Drehgeschwindigkeit erreicht.

Gerald
Thorsten Böttcher
2019-09-20 05:25:33 UTC
Antworten
Permalink
Post by Matthias Weingart
Naja mit Port-Interrupts - das hab ich schön bleiben lassen. Zuverlässig
Ich hab das vor Jahren mal so gemacht, 3 Drehgeber in einem System,
Interrupt auf die steigende Flanke. Im Interrupt den 2. Pin gelesen und
daran entschieden ob ich inkrmentieren oder dekrementieren muss.
Das hat immer Problemlos funktioniert, und ist IMHO noch heute im Einsatz.
Post by Matthias Weingart
funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem festen
Takt abtastet - dann stört auch prellen nicht wirklich - da wackelt dann der
Naja, es geht auch einfacher, ohne den Prozessor ständig zu unterbrechen.
Wolfgang Allinger
2019-09-20 10:48:00 UTC
Antworten
Permalink
Post by Thorsten Böttcher
Post by Matthias Weingart
Naja mit Port-Interrupts - das hab ich schön bleiben lassen. Zuverlässig
Ich hab das vor Jahren mal so gemacht, 3 Drehgeber in einem System,
Interrupt auf die steigende Flanke. Im Interrupt den 2. Pin gelesen und
daran entschieden ob ich inkrmentieren oder dekrementieren muss.
Das hat immer Problemlos funktioniert, und ist IMHO noch heute im Einsatz.
me too :) encoder von hp



Saludos (an alle Vernünftigen, Rest sh. sig)
Wolfgang
--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt!
Ich diskutiere zukünftig weniger mit Idioten, denn sie ziehen mich auf
ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p
(lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Sieghard Schicktanz
2019-09-21 18:57:57 UTC
Antworten
Permalink
Hallo Thorsten,
Post by Thorsten Böttcher
Post by Matthias Weingart
funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem
festen Takt abtastet - dann stört auch prellen nicht wirklich - da
wackelt dann der
Naja, es geht auch einfacher, ohne den Prozessor ständig zu unterbrechen.
Sicher geht das bei einem "richtigen" Encoder so, da prellt auch nichts.
Es geht halt so nicht "so gut", wenn man das mit so einem Fingerdrehknopf
machen soll, der einfach ein paar mechanische Kontaktfederlen mit einer
Plastikscheibe auf- und zudrückt. Also solche Dinger, wie sie inzwischen in
fast jedem neueren Meßgerät (Oszilloskop, z.B.) zum Einstellen der
Meßparameter sitzen.
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Hans-Peter Diettrich
2019-09-22 02:08:52 UTC
Antworten
Permalink
Post by Sieghard Schicktanz
Es geht halt so nicht "so gut", wenn man das mit so einem Fingerdrehknopf
machen soll, der einfach ein paar mechanische Kontaktfederlen mit einer
Plastikscheibe auf- und zudrückt.
Dann muß man eben von Hand entprellen, da sind Interrupts nur hinderlich.

Wie lange prellen denn die Kontakte?

DoDi
Rainer Knaepper
2019-09-22 10:25:00 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
Es geht halt so nicht "so gut", wenn man das mit so einem
Fingerdrehknopf machen soll, der einfach ein paar mechanische
Kontaktfederlen mit einer Plastikscheibe auf- und zudrückt.
Dann muß man eben von Hand entprellen, da sind Interrupts nur
hinderlich.
Ich imitiere das so, wie man das von einfachen SPS kennt: Zyklisch
abfragen und letzten und aktuellen Zustand vergleichen. Bei händisch
betätigten Drehgebern kein Problem. Bei "schnellen" Gebern ist das
latürnich problematisch, aber die sind ja eher nicht mechanisch und
prellen nicht.

Wobei ich vor Jahren mal eine Maus hatte, bei der das Mausrad
tatsächlich einen mechnischen Geber hatte. Mit zunehmendem Alter und
Verschleiß verhielt die sich schon sehr knuffig. Da hat der
Mausprogrammierer wohl auch beim Entprellen geschlampt ;-)

Rainer
--
Die Boulevardmedien haben genug damit zu tun, Fremdenhass
zu schüren und danach scheinheilig Nazis und anderes Gesocks
als Asylgegner zu verharmlosen. (Jörg Tewes in ct.ger)
olaf
2019-09-19 14:36:36 UTC
Antworten
Permalink
ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.?.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
Es hindert dich keiner auch mehr Pins gleichzeitig einzulesen wenn du
sie geschickt an einem 8Bit-Port verteilst.
gl?cklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
Es gibt sicher Anwendungen wo man einen Hardwareencoder zu schaetzen
weiss, aber IMHO eher selten. Einfach deshalb weil die Mechanik nicht
die schnellste ist.
belastet die CPU mit recht vielen und h?ufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,
Kann das sein das du nur Controller kennst wo man die
Interruptprioritaeten nicht frei einstellen kann?
die das macht.
Welche Controller haben (m?glichst mehrere) Timer, die auch Quadratur-
Dekodierung k?nnen?
Ich kann jetzt aus dem Kopf keine Nummern nennen, aber ich bin mir
sicher das bei Renesas bei den Industriekontrollern gesehen zu haben.

Olaf
Matthias Weingart
2019-09-20 05:58:01 UTC
Antworten
Permalink
Post by olaf
gl?cklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
Es gibt sicher Anwendungen wo man einen Hardwareencoder zu schaetzen
weiss, aber IMHO eher selten. Einfach deshalb weil die Mechanik nicht
die schnellste ist.
Naja, irgendwie kommt man dann doch oft schneller an die Grenzen des Systems
als man vorher denkt ;-). Hatte mal einen Linearencoder - Auflösung 10um -
wenn man den ein wenig schneller bewegte, verlor der gleich Impulse trotz
100kHz Abtastrate. Da hatte ich mich "verschätzt" und eine Baustelle mehr.
Das Encodersystem konnte mit 10MHz liefern! Da wäre ein Hardwreencoder toll
gewesen.
Post by olaf
Kann das sein das du nur Controller kennst wo man die
Interruptprioritaeten nicht frei einstellen kann?
Naja das nützt ja nix, wenn in der Hauptschleife
DINT;
"tu was kritisches";
EINT;
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8 bit System
sauber und sicher lesen will, die in einem Interrupt verändert werden.
Post by olaf
Ich kann jetzt aus dem Kopf keine Nummern nennen, aber ich bin mir
sicher das bei Renesas bei den Industriekontrollern gesehen zu haben.
Ja stimmt, Renesas war auch immer toll bei der Ausstattung der Controller.

M.
--
Wolfgang Allinger
2019-09-20 11:04:00 UTC
Antworten
Permalink
Naja das n?tzt ja nix, wenn in der Hauptschleife
DINT;
"tu was kritisches";
EINT;
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8 bit System
sauber und sicher lesen will, die in einem Interrupt ver?ndert werden.
Einfach 2x lesen und vergleichen, wenn ungleich, nochmal.


Saludos (an alle Vernünftigen, Rest sh. sig)
Wolfgang
--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt!
Ich diskutiere zukünftig weniger mit Idioten, denn sie ziehen mich auf
ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p
(lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Johannes Bauer
2019-09-20 11:52:37 UTC
Antworten
Permalink
Post by Wolfgang Allinger
Naja das n?tzt ja nix, wenn in der Hauptschleife
DINT;
"tu was kritisches";
EINT;
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8 bit System
sauber und sicher lesen will, die in einem Interrupt ver?ndert werden.
Einfach 2x lesen und vergleichen, wenn ungleich, nochmal.
Der König der Pfuscher am Werk. Von Nebenläufigkeit offenbar nicht die
geringste Ahnung, aber einen auf Meisterprogrammierer machen.

Nee, Wolfgang, so macht man es definitiv NICHT, wenn man
deterministische Systeme baut.

Gruß,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Wolfgang Allinger
2019-09-20 22:15:00 UTC
Antworten
Permalink
Post by Johannes Bauer
Post by Wolfgang Allinger
Naja das n?tzt ja nix, wenn in der Hauptschleife
DINT;
"tu was kritisches";
EINT;
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8 bit
System sauber und sicher lesen will, die in einem Interrupt ver?ndert
werden.
Einfach 2x lesen und vergleichen, wenn ungleich, nochmal.
Der König der Pfuscher am Werk. Von Nebenläufigkeit offenbar nicht die
geringste Ahnung, aber einen auf Meisterprogrammierer machen.
Nee, Wolfgang, so macht man es definitiv NICHT, wenn man
deterministische Systeme baut.
Du bist und bleibst ein großmäuliger Schwätzer und Obermurkser.
Damit Du es besser verstehst: Arschloch, krummbohrtes!

Du fummelst an Hochspannungs Systemen, ohne die geringste Ahnung. Ich
erinnere an Deine Unfähigkeit, Datenblätter und Zeichnungen zu lesen, es
handelte sich um einen FET für 600V.

Hier geht es um Drehencoder an einen µC, nicht um irgendeinen Scheiß in
Deiner hochperformanten Engstirnigkeit.

Latürnich wird das auslesen eines 64bit Wertes der IR Ebene nur an einer
Stelle gemacht und dann nur an einer Stelle in den Variablenspeicher für
das Backgroundprogramm geschrieben.
FORTH und Kooperatives Multitasking macht da nicht die geringsten
Probleme, vor allem, wenn man MultiLevel und Multisources IR in harter
Echtzeit programmieren kann.
Aber das kannst Du auch nicht, geschweige denn es begreifen.

BTW ein Teil meiner so (mit)entwickelten Geräte (HW&SW) sind vom TÜV, Eex-
Prüfstellen, UL usw. abgenommen und werden/wurden u.a. weltweit verwendet
in Hochsichertheitsbereichen wie KKW, Brennelemente Fertigung, Offshore,
Pipeline, Raffinerien, Chemiewerken (Bayer, BASF...), Intensivmedizin,
Aerospace (NASA Space Shuttle, NortonThiokol, Bell Helicopter, Ariane,
Airbus...), Stahlindustrie, USMC, Bundeswehr, Rheinmetall, KMWeg,
BritishRail, Verkehrsteuerungen etc.pp. In über 40a kam da einiges
zusammen. Nein brauchst nicht nach Einzelheiten zu fragen, fast 100% NDA.

Und diese Firmen und Vereine schauen sich jede Zeile des Quellcodes x-mal
an, bevor sie das ok geben. Und wehe die stellen fest, dass Du was von
600V fabulierst, ohne einen Hauch von Hintergrund.

Hast Du eine Ahnung, was UL zB. für einen Zirkus macht? Die zeichnen sich
aus durch absolut null Kreativität und ersetzen Kompetenz durch Popanz.

Ich stand schon 2x vor Gericht. Bevor Du Dich jetzt freust: um als
Gutachter so Schablonenschwätzer wie Dich zu entlarven :p


Saludos (an alle Vernünftigen, Rest sh. sig)
Wolfgang
--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt!
Ich diskutiere zukünftig weniger mit Idioten, denn sie ziehen mich auf
ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p
(lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Johannes Bauer
2019-09-21 06:26:24 UTC
Antworten
Permalink
Post by Wolfgang Allinger
Post by Johannes Bauer
Nee, Wolfgang, so macht man es definitiv NICHT, wenn man
deterministische Systeme baut.
Hier geht es um Drehencoder an einen µC, nicht um irgendeinen Scheiß in
Deiner hochperformanten Engstirnigkeit.
Es ist egal, ob du an HPC Pfuschst oder bei einem Drehencoder-Code. Dein
Tipp "einfach zweimal lesen und vergleichen" ist grotesker Müll. Pfusch,
den ich schon hundertmal gesehen habe, bei Amateuren, und moniert.
Pfusch, der in SIS-Systemen dazu führen kann, dass Leute sterben, weil
so Dummköpfe wie du, denken, sie kapieren was die Maschine tut.

Das weiß jeder Informatik-Erstsemester, der eine Vorlesung über
Systemprogrammierung gehört hat. Der mal das Leser/Schreiber Problem
selber implementiert hat. Das Glück hattest du wohl nicht und
postulierst also "Lösungen", die demonstrierbar defekt sind. Das könnte
ich dir sogar als Klacks in Code beweisen, aber du ignorierst harte
Evidenz ja ohnehin, deswegen spare ich mir die Mühe.

Tu dir was Gutes und les mal TAOCP, mein lieber Freund.
Alles Gute,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Rainer Knaepper
2019-09-20 14:26:00 UTC
Antworten
Permalink
Post by Matthias Weingart
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8
bit System sauber und sicher lesen will, die in einem Interrupt
verändert werden.
double buffer?

Rainer
--
Daten sind gasförmig. Sie nehmen binnen kürzester Zeit den
maximal verfügbaren Platz ein. Und nun die weniger gute
Nachricht: sie geben ihn nicht kampflos wieder her!
(Benedict Mangelsdorff in ger.ct)
Johannes Bauer
2019-09-20 14:56:31 UTC
Antworten
Permalink
Post by Rainer Knaepper
Post by Matthias Weingart
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8
bit System sauber und sicher lesen will, die in einem Interrupt
verändert werden.
double buffer?
Nützt wirklich nur, wenn du atomisch hin- und herschalten kannst (in der
zusätlichen Zeiger-Variablen) und immer klar ist, wer auf die geteilte
Variable schreibt.

In den ganzen Fällen, in denen der Zugriff nicht atomar erfolgt, hast du
eine Race Condition, egal was du machst -- man kann in Software die
Wahrscheinlichkeit kleiner machen, dass sie ein Problem ist (z.B.
mehrfacher Zugriff/Plausibilisierung), aber die Race Condition bleibt,
deswegen ist das Pfusch.

Gruß,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Rainer Knaepper
2019-09-21 01:20:00 UTC
Antworten
Permalink
Post by Johannes Bauer
Post by Rainer Knaepper
Post by Matthias Weingart
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8
bit System sauber und sicher lesen will, die in einem Interrupt
verändert werden.
double buffer?
Nützt wirklich nur, wenn du atomisch hin- und herschalten kannst
(in der zusätlichen Zeiger-Variablen) und immer klar ist, wer auf
die geteilte Variable schreibt.
Äh, niemand schreibt dabei gleichzeitig auf dieselbe Variable. Sonst
wäre es ja kein /doppelter/ Puffer.

Aber was weiß ich schon. Mache ja nur Bastelkram in Assembler, und da
isses ziemlich einfach, zu verhindern, dass ein Interrupt einen
Speicherbereich oder Register verändert, welche(n) ich gerade
anderweitig benötige.

Rainer
--
(damals...) Wer Spitzenleistung braucht, kauft SCSI. Wem SCSI zu
teuer ist, der braucht keine Spitzenleistung.
(Richard Könning in d.c.h.l.f)
Johannes Bauer
2019-09-21 06:32:43 UTC
Antworten
Permalink
Post by Rainer Knaepper
Äh, niemand schreibt dabei gleichzeitig auf dieselbe Variable. Sonst
wäre es ja kein /doppelter/ Puffer.
Naja, aber was passiert denn dann, wenn zwei Threads gleichzeitig
schreiben wollen bzw einer während des Schreibvorgangs verdrängt wird?
Dann schreiben eben beide auf die "Schatten" Variable und es knallt.

Kann man natürlich z.B. als einfachste Variante verhindern, wenn man
während des Schreibzugriffs den anderen Thread sperrt (z.B. sei/cli),
aber gibt natürlich auch schickere Möglichkeiten.

Die Frage ist dann auch noch, was passiert wenn beide Threads gelesen
haben, einer zurückschreibt und dann der erste Thread auf der (jetzt
veralteten) Schattenkopie weiterrechnet und dann zurückschreibt. Dann
knallt es evtl eben auch. Also muss man sich da auch was überlegen.
Post by Rainer Knaepper
Aber was weiß ich schon. Mache ja nur Bastelkram in Assembler, und da
isses ziemlich einfach, zu verhindern, dass ein Interrupt einen
Speicherbereich oder Register verändert, welche(n) ich gerade
anderweitig benötige.
Hm naja ich würde sagen Nebenläufigkeit ist eines der schwierigsten
Informatik-Probleme und führt selbst bei Programmieren mit
jahrzehntelanger Erfahrung noch zu Bugs. Deswegen gibt es ja auch so
viele Ansätze, das einfacher zu machen, die alle nur so mehr oder
weniger gut funktionieren (Monitore z.B., im Embedded Umfeld dann eben
deterministisches Scheduling von Coroutinen, z.B. Priority Ceiling
Protocol, etc).

Viele Grüße,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Volker Bartheld
2019-09-21 07:57:27 UTC
Antworten
Permalink
Post by Johannes Bauer
Post by Rainer Knaepper
Äh, niemand schreibt dabei gleichzeitig auf dieselbe Variable. Sonst
wäre es ja kein /doppelter/ Puffer.
Naja, aber was passiert denn dann, wenn zwei Threads gleichzeitig
schreiben wollen [...] Die Frage ist dann auch noch, was passiert wenn
beide Threads gelesen haben, einer [...] auf der (jetzt veralteten)
Schattenkopie weiterrechnet und dann zurückschreibt. [...] ich würde
sagen Nebenläufigkeit ist eines der schwierigsten Informatik-Probleme
und führt selbst bei Programmieren mit jahrzehntelanger Erfahrung noch
zu Bugs. [...]
Man kann durchaus den Standpunkt vertreten, die bei Meltdown/Spectre
mögliche Seitenkanalattacke hätte auch etwas mit einer (impliziten)
Nebenläufigkeit zu tun. Die Möglichkeit ist ab 1995 seit Einführung der
"Out-of-Order Execution" möglich, wurde erst über 20(!) Jahre später
entdeckt und ich glaube nicht, daß die Entwickler bei Intel alles
Armateure und "auf da Brennsuppn daherschwomma" sind.

Falls sich also jemand anmaßt, das Thema als trivial abzutun, möge er
hoffentlich bald ein wenig Demut lernen.

Vol"Oans-Zwoa-Drei-Gsuffa!"ker
Andreas Fecht
2019-09-21 08:08:42 UTC
Antworten
Permalink
Post by Volker Bartheld
Man kann durchaus den Standpunkt vertreten, die bei Meltdown/Spectre
mögliche Seitenkanalattacke hätte auch etwas mit einer (impliziten)
Nebenläufigkeit zu tun. Die Möglichkeit ist ab 1995 seit Einführung der
"Out-of-Order Execution" möglich, wurde erst über 20(!) Jahre später
entdeckt und ich glaube nicht, daß die Entwickler bei Intel alles
Armateure und "auf da Brennsuppn daherschwomma" sind.
Vielleicht haben sie ja am MIT studiert :-D



Manche halten das für'n fake.
Ich denke, es ist echt.

Gruß Andreas
Marte Schwarz
2019-09-21 11:39:51 UTC
Antworten
Permalink
Hi Andreas,
Post by Andreas Fecht
Vielleicht haben sie ja am MIT studiert :-D
http://youtu.be/aIhk9eKOLzQ
Manche halten das für'n fake.
Ich denke, es ist echt.
Das ist sicher echt, wenngleich wahrscheinlich eben selektiert. Ich hab
von einem MINT-Didaktiker mal eine Schulung bekommen. Die haben unter
Studenten und Doktoranden verschiedener Fachrichtungen einen Test
gemacht, in dem es um reihen und Parallelschaltungen von gleichartigen
Glühlampen ging verbunden mit der Frage, welche der Lampen leuchten
heller, bzw gleich hell. Die Ergebnisse haben die sehr fein ausgewertet,
um auf die typischen Verständnisfehler vorzudringen. Die Quote von
Falschaussagen war nahezu gleich hoch, egal, ob es
Elektrotechnikstudierende oder angehende Physiker, Maschinenbauer ud
andere waren.

Marte
Andreas Fecht
2019-09-21 12:43:57 UTC
Antworten
Permalink
Post by Marte Schwarz
Hi Andreas,
Post by Andreas Fecht
Vielleicht haben sie ja am MIT studiert :-D
http://youtu.be/aIhk9eKOLzQ
Manche halten das für'n fake.
Ich denke, es ist echt.
Das ist sicher echt, wenngleich wahrscheinlich eben selektiert. Ich hab
von einem MINT-Didaktiker mal eine Schulung bekommen. Die haben unter
Studenten und Doktoranden verschiedener Fachrichtungen einen Test
gemacht, in dem es um reihen und Parallelschaltungen von gleichartigen
Glühlampen ging verbunden mit der Frage, welche der Lampen leuchten
heller, bzw gleich hell. Die Ergebnisse haben die sehr fein ausgewertet,
um auf die typischen Verständnisfehler vorzudringen. Die Quote von
Falschaussagen war nahezu gleich hoch, egal, ob es
Elektrotechnikstudierende oder angehende Physiker, Maschinenbauer ud
andere waren.
Bei dem Youtube-Beispiel ging es wohl um den Knackpunkt, dass sie nur
einen Draht zur Verfügung haben. Mit zwei Drähten hätten es
wahrscheinlich alle geschafft.

Gruß Andreas
Johannes Bauer
2019-09-21 13:12:52 UTC
Antworten
Permalink
Post by Andreas Fecht
Bei dem Youtube-Beispiel ging es wohl um den Knackpunkt, dass sie nur
einen Draht zur Verfügung haben. Mit zwei Drähten hätten es
wahrscheinlich alle geschafft.
Hm naja der eine, der es schafft, hat eine andere Birne -- ein typisches
Fahrradbirnchen. Die anderen sehen nach E14 aus und haben dann
vermutlich 110V, da könnte das gar nicht gehen. Wäre interessant, zu
wissen, ob das Absicht war.

Gruß,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Marte Schwarz
2019-09-22 13:36:01 UTC
Antworten
Permalink
Hi Andreas,
Post by Andreas Fecht
Bei dem Youtube-Beispiel ging es wohl um den Knackpunkt, dass sie nur
einen Draht zur Verfügung haben. Mit zwei Drähten hätten es
wahrscheinlich alle geschafft.
Nicht wirklich. ein 1,5V Block an eine Netzspannungsglühbirne wird trotz
allem nix, selbst wenn es eine amerikanische Glühbirne ist.

Marte
Johannes Bauer
2019-09-21 08:11:33 UTC
Antworten
Permalink
Post by Volker Bartheld
Man kann durchaus den Standpunkt vertreten, die bei Meltdown/Spectre
mögliche Seitenkanalattacke hätte auch etwas mit einer (impliziten)
Nebenläufigkeit zu tun. Die Möglichkeit ist ab 1995 seit Einführung der
"Out-of-Order Execution" möglich, wurde erst über 20(!) Jahre später
entdeckt und ich glaube nicht, daß die Entwickler bei Intel alles
Armateure und "auf da Brennsuppn daherschwomma" sind.
Falls sich also jemand anmaßt, das Thema als trivial abzutun, möge er
hoffentlich bald ein wenig Demut lernen.
Finde ich eine valide Interpretation. Wobei ich sogar so weit gehen
würde und Nebenläufigkeit in Hardware nochmal für einen Tick schwieriger
halte als in Software (z.B. Timing-Disparitäten weil die Clock
Distribution innerhalb eines Chips nicht gut funktioniert). Und
natürlich auch deutlich schwieriger zu debuggen.

Allerdings muss man auch sagen, dass die Spectre/Meltdown
Verwundbarkeiten wohl laut internen Dokumenten durchaus einigen
Ingenieuren dort bewußt waren, nur eben vom Management heruntergespielt
wurden und, im Interesse der Performance, dann eben ignoriert wurden.

Aber, ja, ich stimme dir zu: Nebenläufigkeit ist richtig schwer, selbst
für Experten. Und einfache Lösungen sind oft inkorrekt.

Viele Grüße,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Hans-Peter Diettrich
2019-09-21 10:35:14 UTC
Antworten
Permalink
Post by Volker Bartheld
Post by Johannes Bauer
Post by Rainer Knaepper
Äh, niemand schreibt dabei gleichzeitig auf dieselbe Variable. Sonst
wäre es ja kein /doppelter/ Puffer.
Naja, aber was passiert denn dann, wenn zwei Threads gleichzeitig
schreiben wollen [...] Die Frage ist dann auch noch, was passiert wenn
beide Threads gelesen haben, einer [...] auf der (jetzt veralteten)
Schattenkopie weiterrechnet und dann zurückschreibt.
Dann gehört der Programmierer erschossen, und auch derjenige, der einen
Ablauf so hirnrissig organisiert hat. In einem ordentlichen Design gibt
es einen (Task, Job...) der Daten erzeugt, und einen oder mehrer die
darauf zugreifen.
Post by Volker Bartheld
Falls sich also jemand anmaßt, das Thema als trivial abzutun, möge er
hoffentlich bald ein wenig Demut lernen.
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?

DoDi
Johannes Bauer
2019-09-21 11:15:01 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Post by Volker Bartheld
Post by Johannes Bauer
Post by Rainer Knaepper
Äh, niemand schreibt dabei gleichzeitig auf dieselbe Variable. Sonst
wäre es ja kein /doppelter/ Puffer.
Naja, aber was passiert denn dann, wenn zwei Threads gleichzeitig
schreiben wollen [...] Die Frage ist dann auch noch, was passiert wenn
beide Threads gelesen haben, einer [...] auf der (jetzt veralteten)
Schattenkopie weiterrechnet und dann zurückschreibt.
Dann gehört der Programmierer erschossen, und auch derjenige, der einen
Ablauf so hirnrissig organisiert hat.
Solche Parolen sind gut für deinen AfD-Stammtisch geeignet, aber für
einen sachliche Diskurs nicht zielführend.
Post by Hans-Peter Diettrich
In einem ordentlichen Design gibt
es einen (Task, Job...) der Daten erzeugt, und einen oder mehrer die
darauf zugreifen.
Ja, ne. Die Welt dreht sich nicht nur darum, wiedewiediewie du sie gern
hättest. In der Praxis gibt es durchaus Probleme, die mehrere Quellen
und Senken haben, die miteinander synchronisiert werden möchten.
Post by Hans-Peter Diettrich
Post by Volker Bartheld
Falls sich also jemand anmaßt, das Thema als trivial abzutun, möge er
hoffentlich bald ein wenig Demut lernen.
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?
Auf Jedem. Interrupts abschalten ist DER Holzhammer schlechthin, den man
nur im absoluten Notfall nutzen sollte. Funktioniert zuverlässig und
einfach, hat aber gegenüber anderen Synchronisierungsmethoden auch
erhebliche Nachteile, die man evtl. nicht in Kauf nehmen möchte. Das ist
vom verwendeten SoC *komplett* unabhängig.

Lokale Kopien nutzen im Übrigen auch nur dann etwas, wenn garantiert
ist, dass sie nicht veraltet sind bzw man das entsprechend handelt.
Interrupts nur zum Lesen und Schreiben von geteilten Daten zu sperren
führt ebenso zu Nebenläufigkeitsproblemen.

Gruß,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Volker Bartheld
2019-09-23 11:52:23 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?
Auf allen Echtzeitsystemen, die in einem Zugriff mehr als nur ein Byte
(oder was auch immer der native Datentyp ist) wegschreiben müssen. Aber es
geht doch auch gar nicht darum, jetzt einen Fall zu konstruieren, der
trivial mit diesem oder jenem Ansatz lösbar ist. Es geht darum, zu
veranschaulichen, daß Multithreading und sonstige Nebenläufigkeiten
prinzipiell zu den schwierigeren Programmieraufgaben gehören. Denn sonst
wäre das nicht in einem von mir einigermaßen willkürlich gewählten Beispiel
danebengegangen und seit Jahren (wenn nicht Jahrzehnten) ohne Fix
geblieben.

Wer unter euch ohne Sünde ist, der werfe den ersten Stein!

Volker
Gerhard Hoffmann
2019-09-23 12:22:35 UTC
Antworten
Permalink
Post by Volker Bartheld
Wer unter euch ohne Sünde ist, der werfe den ersten Stein!
Comic in dem Berliner Stadtmagazin Zitty, so vor 30 Jahren:

Rüdiger (Knollennase, doof): Kieselchen nehm - vorsichtig werf -

Publikum: Oh, die arme Sau! Nicht mal eine klitzekleine Sünde!..
Johannes Bauer
2019-09-23 12:36:02 UTC
Antworten
Permalink
Post by Volker Bartheld
Auf allen Echtzeitsystemen, die in einem Zugriff mehr als nur ein Byte
(oder was auch immer der native Datentyp ist) wegschreiben müssen.
Würde ich sogar noch einen Tick allgemeiner sehen: Auf Systemen, auf
denen Multiprozessor-Skalierbarkeit wichtig ist, gilt das ja nämlich
auch. Linux hat richtig hart gearbeitet, das BKL (Big Kernel Lock)
loszuwerden: https://de.wikipedia.org/wiki/Big_Kernel_Lock und es mit
Version 3.0 (oder 2.6.xx) dann endlich geschafft.

Gruß,
JOhannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
horst-d.winzler
2019-09-23 15:26:15 UTC
Antworten
Permalink
Post by Volker Bartheld
Wer unter euch ohne Sünde ist, der werfe den ersten Stein!
Volker
Wer zuerst trifft, lebt länger.
--
---hdw---
Hans-Peter Diettrich
2019-09-23 17:29:22 UTC
Antworten
Permalink
Post by Volker Bartheld
Post by Hans-Peter Diettrich
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?
Auf allen Echtzeitsystemen, die in einem Zugriff mehr als nur ein Byte
(oder was auch immer der native Datentyp ist) wegschreiben müssen.
... und anscheinend über keine Interrupt-Abschaltung verfügen? Die halte
ich aber für essentiell für so kleine Systeme wie hier genannt, die
einfach nur Encoder abfragen sollen. Wenn jemand für diese Aufgabe ein
OS und weiteren Pipapo benötigt, dann kann er das gerne in einem neuen
Thread diskutieren, unter "Mit Kanonen auf Spatzen schießen".
Post by Volker Bartheld
Aber es
geht doch auch gar nicht darum, jetzt einen Fall zu konstruieren, der
trivial mit diesem oder jenem Ansatz lösbar ist. Es geht darum, zu
veranschaulichen, daß Multithreading und sonstige Nebenläufigkeiten
prinzipiell zu den schwierigeren Programmieraufgaben gehören.
Unbestritten, aber solche Systeme betrachte ich nicht als
Mikrocontroller. Wenn ein Prozessor Multithreading etc. erlaubt, und
gleichzeitig Anspruch auf Echtzeitfähigkeit erhebt, dann hat der
gefälligst auch Befehle für atomare Zugriffe zu implementieren, sonst
ist das alles nur Marketinggeschwätz.

Ich weiß nicht ob es Intel war, die ein LOCK Prefix eingeführt haben.
Für die Tasksynchronisation etc. gibt es noch CMPXCHG und ähnlich
komfortable Befehle für Semaphore etc. Und wenn es die schon auf
ordinären Controllern gibt, die keinen Anspruch auf Echtzeitfähigkeit
erhebenn dann sieht man, wie weit dieses Thema vom Topic und der
hiesigen NG weg ist.

DoDi
Volker Bartheld
2019-09-24 08:43:47 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Post by Volker Bartheld
Post by Hans-Peter Diettrich
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?
Auf allen Echtzeitsystemen, die in einem Zugriff mehr als nur ein Byte
(oder was auch immer der native Datentyp ist) wegschreiben müssen.
... und anscheinend über keine Interrupt-Abschaltung verfügen?
Du schaltest also den Interrupt ab. Und serialisierst eine etwas größere
Datenstruktur. Währenddessen kann Dein Echtzeit(!)system aber nicht mehr
zeitgerecht reagieren. Also zerhackst Du die Datenstruktur und führst
einen Mutex, eine Critical Section oder sonst einen
Synchronisierungsansatz ein. Das blockt dann aber die Threads, die
möglicherweise auf den Ablageort der Datenstruktur zugreifen müssen. Ergo
erfindest Du Schattenkopien, ein Dirty-Bit, grübelst über Write-Through
und Write-Back, usw. Ich will damit sagen: Multithreading ist schwierig.

Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz einfache
Lösung, wie man die Echtzeitanforderung bei abgeschalteten Interrupts
sonst abbildet. Ich bin ja ausbildungsmäßig Physiker und kein IT-Profi.
Post by Hans-Peter Diettrich
Die halte ich aber für essentiell für so kleine Systeme wie hier genannt,
die einfach nur Encoder abfragen sollen. Wenn jemand für diese Aufgabe
ein OS und weiteren Pipapo benötigt, dann kann er das gerne in einem
neuen Thread diskutieren, unter "Mit Kanonen auf Spatzen schießen".
Das Usenet ist aber leider kein Wunschkonzert. Für den Task
"Quadrature-Encoder abfragen" würde ich - verzeih - {Quadrature, Encoder,
Arduino} in der Suchmaschine meines geringsten Mißtrauens eingeben und mir
anschauen, wie das - vermutlich - schon 1001x gelöst wurde. Als da wären:

https://github.com/PaulStoffregen/Encoder
http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino-with-solution/
https://www.rs-online.com/designspark/quadrature-encoder-basics-part-1-theory
https://playground.arduino.cc/Main/RotaryEncoders/
https://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduino/
https://cdn.sparkfun.com/datasheets/Robotics/How%20to%20use%20a%20quadrature%20encoder.pdf

Anstatt mir über potentiell geniale Eigenkreationen das Hirn zu zermartern.
Weil ich nicht am Not-Invented-Here-Syndrom leide.
Post by Hans-Peter Diettrich
Unbestritten, aber solche Systeme betrachte ich nicht als
Mikrocontroller. Wenn ein Prozessor Multithreading etc. erlaubt, und
gleichzeitig Anspruch auf Echtzeitfähigkeit erhebt, dann hat der
gefälligst auch Befehle für atomare Zugriffe zu implementieren, sonst
ist das alles nur Marketinggeschwätz.
Je nun. Ich baute mal einen Klon des Photoduino:
https://photoduino.com/documentation/hardware/photoduino-shield-3-0/
, fand heraus, daß das Display (präzise: die Hintergrundbeleuchtung) den
meisten Strom frißt. Was unpraktisch bei Langzeit-Zeitrafferaufnahmen an
der frischen Luft war. Ergo der naheliegendste Plan, einen Interrupt dafür
zu verwenden, die Hintergrundbeleuchtung nach einer gewissen Zeit
abzuschalten und bei Tastendruck oder sonstigen nennenswerten Ereignissen
wieder an.

Irgendwann ist mir aufgefallen, daß in einem anderen Anwendungsfall -
nämlich der Hochgeschwindigkeitsfotografie - ein gewisser Jitter vorhanden
ist, der das Timing zwischen Triggerevent und Auslösung des Blitzes
versaut. Der ADC vielleicht? Irgendwas in der Auslöselogik? Die
Verschlußsteuerung der Kamera selbst? Fragen über Fragen. Schließlich war
es von allem ein bißchen und natürlich auch der
Hintergrundbeleuchtungsinterrupt, wo eigentlich nur andere Interrupte
deaktiviert und ein simples Bit an den PWM-Ausgang des Arduino geschrieben
wurde.

Blöd gelaufen.

Volker
Johannes Bauer
2019-09-24 09:19:45 UTC
Antworten
Permalink
[...] Ich will damit sagen: Multithreading ist schwierig.
Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz einfache
Lösung, wie man die Echtzeitanforderung bei abgeschalteten Interrupts
sonst abbildet. Ich bin ja ausbildungsmäßig Physiker und kein IT-Profi.
Nicht verkopft, sondern den Nagel voll und ganz auf den Kopf getroffen.

Der unschlagbare Vorteil vom Sperren von Interrupts ist, dass es die
aller, allereinfachste Synchronisationsprimitive ist, die man verwenden
kann. Funktioniert absolut sicher. Die Nachteile sind aber eben genauso
gravierend und erfordern dann (wie in deinen Beispielen geschildert)
eventuell entsprechende Gegenmaßnahmen, die dann die Komplexität extrem
aufblasen können.

Viele Grüße,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Hanno Foest
2019-09-24 09:32:52 UTC
Antworten
Permalink
Post by Volker Bartheld
Du schaltest also den Interrupt ab. Und serialisierst eine etwas größere
Datenstruktur. Währenddessen kann Dein Echtzeit(!)system aber nicht mehr
zeitgerecht reagieren.
Kommt auf die Anforderungen an. "Echtzeit" heißt ja nur, daß man eine
garantierte Antwortzeit hat, aber nicht, welche das ist. Wenn der
kurzzeitig abgeschaltete Interrupt innerhalb einer klar definierten (und
nicht zu großen) Zeit wieder da ist, und hardwaretechnisch gewährleistet
ist, daß keine Interrupts verloren gehen, kann das schon mit geringem
Aufwand zielführend sein.

Mit verschiedenen und überlappenden Interrupts wird es dann wieder
schwierig. Allerdings in jedem Fall.

Hanno
Hans-Peter Diettrich
2019-09-24 11:15:54 UTC
Antworten
Permalink
Post by Volker Bartheld
Post by Hans-Peter Diettrich
Post by Volker Bartheld
Post by Hans-Peter Diettrich
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?
Auf allen Echtzeitsystemen, die in einem Zugriff mehr als nur ein Byte
(oder was auch immer der native Datentyp ist) wegschreiben müssen.
... und anscheinend über keine Interrupt-Abschaltung verfügen?
Du schaltest also den Interrupt ab.
Ja.
Post by Volker Bartheld
Und serialisierst eine etwas größere Datenstruktur.
Nein. Interrupts ändern immer nur kleine Dateneinheiten, alles andere
wäre Murks. Deine Einwände deuten offensichtlich in diese Richtung...

DoDi
Gerhard Hoffmann
2019-09-24 12:00:35 UTC
Antworten
Permalink
Post by Volker Bartheld
Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz einfache
Lösung, wie man die Echtzeitanforderung bei abgeschalteten Interrupts
sonst abbildet. Ich bin ja ausbildungsmäßig Physiker und kein IT-Profi.
Die Welt braucht mehr CPUs. Jede nur für einen überschaubaren Zweck.

Im BeagleBoneBlack hat das für mich sehr schön funktioniert.
Ein GHz-ARM für Linux und 2 PRUs für die Drecksarbeit. Die PRUs sind
andere RISCs ohne Pipeline, die man stallen könnte. Dafür nur 200 MHz,
aber man kann im 5 ns-Raster Flanken erzeugen. Alles geht taktgenau.
Jede PRU hat 32-Bit-Register mit denen man fast direttissima auf
einige Pins und Devices zugreifen kann. Interrupts gibt's nicht
wirklich für die PRUs, aber dual port buffers zum ARM.

Mit einem popeligen Coolrunner2-IF kann ich 3 LTC2500-32 ADCs mit
jeweils 100 MHz-SPI auslesen, ohne dass was verloren geht.
Post by Volker Bartheld
Irgendwann ist mir aufgefallen, daß in einem anderen Anwendungsfall -
nämlich der Hochgeschwindigkeitsfotografie - ein gewisser Jitter vorhanden
ist, der das Timing zwischen Triggerevent und Auslösung des Blitzes
versaut. Der ADC vielleicht? Irgendwas in der Auslöselogik? Die
Verschlußsteuerung der Kamera selbst? Fragen über Fragen. Schließlich war
es von allem ein bißchen und natürlich auch der
Hintergrundbeleuchtungsinterrupt, wo eigentlich nur andere Interrupte
deaktiviert und ein simples Bit an den PWM-Ausgang des Arduino geschrieben
wurde.
Blöd gelaufen.
Passiert auch den Besten.
Tektronix hatte mal ein ultraschnelles sampling scope, wo der
Aperturjitter im Takte einer nicht sehr wichtigen Warn-LED
um ein paar ps herumgetanzt ist.

Gruß, Gerhard
Rainer Knaepper
2019-09-24 17:01:00 UTC
Antworten
Permalink
Post by Volker Bartheld
Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz
einfache Lösung, wie man die Echtzeitanforderung bei abgeschalteten
Interrupts sonst abbildet.
Echtzeit bedeutet nicht "jederzeit" oder "unfaßbar schnell" oder
"zwischen jedem einzelnen Professortakt reaktionsfähig", sondern nur
"stets mit vorhersagbarer maximaler Reaktionszeit".

Wenn eine Uralt-SPS einen eine ms langen oder gar noch langsameren
Zyklus schafft, diesen aber /garantiert/, dann ist das halt "Echtzeit"
mit einer ms Auflösung.

Wer mit einem 8-bit-AVR nun unbedingt 48-bittig rechnen will, der kann
halt keine "Echtzeit" zwischen jedem Registerzugriff bei einer
Plutimikation garantieren, sondern eben nur alle 384 (Hausnummer!)
Prozessortakte. Wenn der Zwerg halt fertig ist mit der
Bitumherschieberei. Gerät der Kleine ins Stottern, muß man was
dickeres nehmen und/oder schlauer programmieren.

Aber dieses Thema hatten wir hier schon dermaßen oft, daß mich
wundert, daß es da immer noch Verständnisprobleme gibt.

Rainer
--
Muss man denn wirklich, um den Geschmack von Milch zu kritisieren,
selber Kuh sein? (Tom! Striewisch in de.rec.fotografie)
Hans-Peter Diettrich
2019-09-24 17:59:42 UTC
Antworten
Permalink
Post by Rainer Knaepper
Post by Volker Bartheld
Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz
einfache Lösung, wie man die Echtzeitanforderung bei abgeschalteten
Interrupts sonst abbildet.
Echtzeit bedeutet nicht "jederzeit" oder "unfaßbar schnell" oder
"zwischen jedem einzelnen Professortakt reaktionsfähig", sondern nur
"stets mit vorhersagbarer maximaler Reaktionszeit".
Letzteres gefällt mir noch nicht so richtig, denn man kann jedes System
mit zu vielen häufigen Interrupts überlasten. Tatsächlich kann nur
vorgegeben werden, wie lange die Bearbeitung eines Interrupts maximal
dauern darf. Für länger dauernde Operationen muß die Priorität des
Handlers heruntergesetzt werden, oder noch besser die lange Verarbeitung
in eine normale Task ausgelagert werden, damit der Handler keine
Probleme mit Reentrancy bekommt.
Post by Rainer Knaepper
Aber dieses Thema hatten wir hier schon dermaßen oft, daß mich
wundert, daß es da immer noch Verständnisprobleme gibt.
Immer wieder gern ;-)

DoDi
Rainer Knaepper
2019-09-25 12:53:00 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Post by Rainer Knaepper
Post by Volker Bartheld
Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz
einfache Lösung, wie man die Echtzeitanforderung bei
abgeschalteten Interrupts sonst abbildet.
Echtzeit bedeutet nicht "jederzeit" oder "unfaßbar schnell" oder
"zwischen jedem einzelnen Professortakt reaktionsfähig", sondern
nur "stets mit vorhersagbarer maximaler Reaktionszeit".
Letzteres gefällt mir noch nicht so richtig, denn man kann jedes
System mit zu vielen häufigen Interrupts überlasten. Tatsächlich
kann nur vorgegeben werden, wie lange die Bearbeitung eines
Interrupts maximal dauern darf. Für länger dauernde Operationen muß
die Priorität des Handlers heruntergesetzt werden, oder noch besser
die lange Verarbeitung in eine normale Task ausgelagert werden,
damit der Handler keine Probleme mit Reentrancy bekommt.
Genau in so eine Falle bin ich ja mal in einem früheren Leben
hineingerannt. Das ganze System basierte auf einem Taktgeber aus einer
RTC und interruptete halt mit 64 Hz. Die komplette Ablaufsteuerung
steckte in der ISR.

Funktionierte auch gut, aber dann kam $Chefänderungswunsch1,
$Kundenerweiterungswunsch2 und "können wir nicht jene Funktion noch
hinzupacken" sowie "$GanzAnderesGerät können wir doch auch auf der
Basis steuern" - und schwupps reichten die 16ms nicht mehr zur
Abarbeitung.

Was dann einen großzügigen Umbau des gesamten Konzepts erforderte :-)
Post by Hans-Peter Diettrich
Post by Rainer Knaepper
Aber dieses Thema hatten wir hier schon dermaßen oft, daß mich
wundert, daß es da immer noch Verständnisprobleme gibt.
Immer wieder gern ;-)
Ich schaue halt aus Elektrikerperspektive auf die Thematik, nicht
informationstheoretisch.

Rainer
--
Man sollte überhaupt keine Tests mehr lesen...
(Stefan Krah in de.comp.hardware.kuehlung+laermdaemmung)
Hans-Peter Diettrich
2019-09-25 14:31:15 UTC
Antworten
Permalink
Post by Volker Bartheld
Post by Hans-Peter Diettrich
Post by Volker Bartheld
Post by Hans-Peter Diettrich
Auf welchem Mikrocontroller ist es ein Problem, atomare Zugriffe durch
Abschalten der Interrupts zu implementieren, und mit lokalen Kopien
weiterzuarbeiten?
Auf allen Echtzeitsystemen, die in einem Zugriff mehr als nur ein Byte
(oder was auch immer der native Datentyp ist) wegschreiben müssen.
... und anscheinend über keine Interrupt-Abschaltung verfügen?
Du schaltest also den Interrupt ab. Und serialisierst eine etwas größere
Datenstruktur.
Ein Bekannter hat dafür noch eine Lösung aus BASIC Zeiten: verwendet
wird ein Ringpuffer, in dem immer nur unterschiedliche Einträge gelesen
und geschrieben werden. Das geht auch mit einem Wechselpuffer, wenn der
Consumer via Flag den gerade beschriebenen Puffer auf read-only
schaltet, und der Producer in den anderen - jetzt write-only - Puffer
schreibt.
Post by Volker Bartheld
Währenddessen kann Dein Echtzeit(!)system aber nicht mehr
zeitgerecht reagieren.
Es muß ja nur derjenige Interrupt blockiert werden, der (s)einen Teil
der Daten ändert. Das kann nicht zum Verlust von Interrupts führen, denn
was könnte ein Interrupt-Handler in der Zeit erledigen, die der
Hauptthread für das Kopieren von ein paar Bytes in Register braucht?
Post by Volker Bartheld
Aber vermutlich überkopfe ich das auch nur und es gibt eine ganz einfache
Lösung, wie man die Echtzeitanforderung bei abgeschalteten Interrupts
sonst abbildet.
Es kann doch keinen großen Unterschied ausmachen, ob jetzt ein Interrupt
von einer Kopieraktion oder einem anderen Interrupt vorübergehend
blockiert wird? So viel Zeit muß in einem ausreichend schnellen
Echtzeitsystem übrig sein.

DoDi
Matthias Weingart
2019-09-30 09:04:27 UTC
Antworten
Permalink
Aber vermutlich berkopfe ich das auch nur und es gibt eine ganz einfache
L”sung, wie man die Echtzeitanforderung bei abgeschalteten Interrupts
sonst abbildet.
Es kann doch keinen groáen Unterschied ausmachen, ob jetzt ein Interrupt
von einer Kopieraktion oder einem anderen Interrupt vorbergehend
blockiert wird? So viel Zeit muá in einem ausreichend schnellen
Echtzeitsystem brig sein.
Gehen wir mal zum ursprünglichen Thema zurück: Abtastung eines
Quadraturencoders. Den möchte ich so schnell wie eben möglich abtasten und da
kommt man dann schon an seine Grenzen, wenn man sagt: ok Porzessortakt sind 8
MHz, er schafft es in 8 Takten einen Interrupt abzuarbeiten, also könnte er
theoretisch mit 1 MHz ein Portpin abtasten. Damit wäre er zu 100%
ausgelastet. Wenn er dann doch noch (wenige) andere Dinge tun soll, wären
vermutlich maximal 500kHz sinnvoll. Wenn das Restprogramm komplex ist und
etliche andere Interrupts laufen und womoeglich auch noch eine DMA den
Speicher blockiert, dann ist man ganz schnell bei nur 20kHz angelangt, die
das System noch schafft. ;-) Da ist eine integrierte Hardwarelösung für den
Encoder doch _deutlich_ programmiererfreundlicher. :-) :-)

M.
--
Hans-Peter Diettrich
2019-09-30 12:06:07 UTC
Antworten
Permalink
Post by Matthias Weingart
Aber vermutlich berkopfe ich das auch nur und es gibt eine ganz einfache
L”sung, wie man die Echtzeitanforderung bei abgeschalteten Interrupts
sonst abbildet.
Es kann doch keinen groáen Unterschied ausmachen, ob jetzt ein Interrupt
von einer Kopieraktion oder einem anderen Interrupt vorbergehend
blockiert wird? So viel Zeit muá in einem ausreichend schnellen
Echtzeitsystem brig sein.
Gehen wir mal zum ursprünglichen Thema zurück: Abtastung eines
Quadraturencoders. Den möchte ich so schnell wie eben möglich abtasten
Wieso hängt das davon ab, was Du möchtest? Der Encoder liefert Signale
mit der ihm genehmen Frequenz, schnelleres Abtasten bringt keinerlei Gewinn.
Post by Matthias Weingart
und da
kommt man dann schon an seine Grenzen, wenn man sagt: ok Porzessortakt sind 8
MHz, er schafft es in 8 Takten einen Interrupt abzuarbeiten, also könnte er
theoretisch mit 1 MHz ein Portpin abtasten. Damit wäre er zu 100%
ausgelastet. Wenn er dann doch noch (wenige) andere Dinge tun soll, wären
vermutlich maximal 500kHz sinnvoll. Wenn das Restprogramm komplex ist und
etliche andere Interrupts laufen und womoeglich auch noch eine DMA den
Speicher blockiert, dann ist man ganz schnell bei nur 20kHz angelangt, die
das System noch schafft. ;-) Da ist eine integrierte Hardwarelösung für den
Encoder doch _deutlich_ programmiererfreundlicher. :-) :-)
Wie schnell willst Du dann mit Deinem langsamen System diese
Hardwarelösung abfragen, das dauert doch auch seine Zeit? Wäre da nicht
ein Encoder mit weniger Impulsen pro Umdrehung sinnvoller?

Dann stellt sich die (noch unbeantwortete) Frage, wozu der Encoder
benutzt werden soll. Eine Drehzahlregelung kommt mit weniger Impulsen
pro Umdrehung aus, ein Positioniersystem mit einer geringeren
Impulsfrequenz, woher kommen dann die überzogenen Erwartungen bezüglich
der Abtastrate?

Vielleicht kann man ja auch die eingebaute Hardwäre (Zähler) benutzen
und einfach nur die Impulse zählen, wenn man die Drehrichtung eh schon
kennt? Die lassen sich immer noch weit schneller abfragen als jede
externe Hardware.

Kannst Du Deine tatsächlichen Anforderungen etwas mehr konkretisieren,
damit wir nicht mit willkürlichen Frequenzen hantieren müssen, sondern
mit dem für Deine Zwecke benötigten Encoder anfangen können?

DoDi
Marte Schwarz
2019-09-30 14:18:26 UTC
Antworten
Permalink
Hi Hans-Peter,
Post by Hans-Peter Diettrich
Post by Matthias Weingart
Gehen wir mal zum ursprünglichen Thema zurück: Abtastung eines
Quadraturencoders. Den möchte ich so schnell wie eben möglich abtasten
Kannst Du Deine tatsächlichen Anforderungen etwas mehr konkretisieren,
damit wir nicht mit willkürlichen Frequenzen hantieren müssen, sondern
mit dem für Deine Zwecke benötigten Encoder anfangen können?
Die zwei Sätze da oben kennzeichnen für mich das Dilemma:

1. "So schnell, wie möglich" ist je nach Lesart total einfach. Entweder
es ist trivial, weil von der gegebenen Hardware und den gegebenen
Programmierkenntnissen abhängig, dann gehts eben nicht schneller uns ist
per Definition gut. Oder man stellt fest, dass man mit beliebig
(un-)endlichem Aufwand noch ein bisschen mehr Speed herauskitzeln kann.
Nur wird das keiner bezahlen wollen. Vor allem: Der Job wird nie fertig.
Die Erfahrung zeigt, dass es mit fortschreitender Zeit immer möglich
sein wird, noch eine schnellere Lösung zu erarbeiten...
Kurz: Die Anforderung ist unbestimmt, keiner weiss, was Matthias
tatsächlich will.

2. Wir haben keinen Plan, was Matthias eigentlich machen will. Wie soll
Ihm da jemand helfen, wenn er nicht sagt, was er braucht.

Stochern im Trüben Wasser, aber das auf höchstem Niveau. Ich bin
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
Hintergrund gehen soll...

Marte
Rainer Knaepper
2019-09-30 19:28:00 UTC
Antworten
Permalink
Post by Marte Schwarz
Stochern im Trüben Wasser, aber das auf höchstem Niveau. Ich bin
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
Hintergrund gehen soll...
Hey, DMA gab es schon für den Z-80!!!elf111

Rainer
--
So betrachtet ist ein PC ein gutes Gerät: Wenn es funktioniert, dann
ist's schön, man freut sich. Und wenn's nicht tut, dann hat man's
nicht anders erwartet ... *eg* (Dirk Ohme in de.comp.hardware.misc)
Wolfgang Allinger
2019-09-30 21:24:00 UTC
Antworten
Permalink
Post by Rainer Knaepper
Post by Marte Schwarz
Stochern im Trüben Wasser, aber das auf höchstem Niveau. Ich bin
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
Hintergrund gehen soll...
Hey, DMA gab es schon für den Z-80!!!elf111
Und fing mit 2,5MHz an :)
Hab damals für ECB-Bus einen WD? Floppy controller gehabt und für meinen
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.

Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)

Hab das ganze auf einem Mostek-Z80 Entwicklungssystem probiert und dann
auf ECB transferiert.

Dazu ein Plessey PT-52 selber restauriert nach Sturzschaden (Gehäuse
verzogen, Bild-Rohr kaputt) und aus dem Schrott bei meinem AG bekommen.



Saludos (an alle Vernünftigen, Rest sh. sig)
Wolfgang
--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt!
Ich diskutiere zukünftig weniger mit Idioten, denn sie ziehen mich auf
ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p
(lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Klaus Butzmann
2019-10-01 20:40:15 UTC
Antworten
Permalink
Am 30.09.2019 um 23:24 schrieb Wolfgang Allinger:
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.
Post by Wolfgang Allinger
Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)
Meine drei Remex nur je 800...


Butzo
Hans-Peter Diettrich
2019-10-02 05:34:45 UTC
Antworten
Permalink
Post by Wolfgang Allinger
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.
Post by Wolfgang Allinger
Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)
Meine drei Remex nur je 800...
Meine erste 8" Doppelfloppy-Station hat über 5000DM gekostet, mehr als
die dazu gehörende LSI-11. Wer bietet mehr? ;-)

Die nächste Station kostete nur noch 200DM, da war 8" schon wieder out.

DoDi
Wolfgang Allinger
2019-10-02 08:08:00 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Post by Wolfgang Allinger
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.
Post by Wolfgang Allinger
Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)
Meine drei Remex nur je 800...
Meine erste 8" Doppelfloppy-Station hat über 5000DM gekostet, mehr als
die dazu gehörende LSI-11. Wer bietet mehr? ;-)
Deine? Respekt! Oder die Deines AG?
Post by Hans-Peter Diettrich
Die nächste Station kostete nur noch 200DM, da war 8" schon wieder out.
Aha, klingt nach gebrauchter. Nicht abwertend gemeint.



Saludos (an alle Vernünftigen, Rest sh. sig)
Wolfgang
--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt!
Ich diskutiere zukünftig weniger mit Idioten, denn sie ziehen mich auf
ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p
(lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Hans-Peter Diettrich
2019-10-02 13:34:09 UTC
Antworten
Permalink
Post by Wolfgang Allinger
Post by Hans-Peter Diettrich
Post by Wolfgang Allinger
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.
Post by Wolfgang Allinger
Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)
Meine drei Remex nur je 800...
Meine erste 8" Doppelfloppy-Station hat über 5000DM gekostet, mehr als
die dazu gehörende LSI-11. Wer bietet mehr? ;-)
Deine? Respekt! Oder die Deines AG?
Meine, ich habe sie heute noch. Dazu ein Terminal gebastelt, mit
Baudraten-Umschalter, parallelem Druckerport, mit 6809 und FORTH. Den
Druckerport mit einem Schieberegister im Centronics-Stecker, quasi SPI :-)

Auf der LSI habe ich meine Dissertation getippt, gut unterstützt von
meinem Bildschirmeditor und Tastaturmakros in FORTH. Mein nächstgrößeres
Projekt war ein Autorouter, in Fortran.
Post by Wolfgang Allinger
Post by Hans-Peter Diettrich
Die nächste Station kostete nur noch 200DM, da war 8" schon wieder out.
Aha, klingt nach gebrauchter. Nicht abwertend gemeint.
Weiß nicht, der Zustand war sehr gut, einschließlich Gehäuse. Im Gehäuse
aber keinerlei Spur von Elektronik oder Steckern, sah sehr jungfräulich
aus. AFAIR hatten die Laufwerke volle Höhe des 19" Gehäuses, mit recht
großen Motoren. Ich habe sie dann an mein 6809 System angeschlossen, mit
DMA, um beim aktuellen Thema zu bleiben :-)
Diesem System hatte ich auch eine interruptgesteuerte System/User
Umschaltung mit 128K Memory Management verpaßt. Das war dann auch mein
letztes und teuerstes DIY Projekt, danach kam der Atari ST mit wenig
Bastelpotential, außer einer 256K Speichererweiterung.

DoDi
Klaus Butzmann
2019-10-02 19:22:55 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Diesem System hatte ich auch eine interruptgesteuerte System/User
Umschaltung mit 128K Memory Management verpaßt.
Pah!
Mein Eltec E2-V7 hat zwei 192k Karten :-)

Butzo
Axel Berger
2019-10-02 19:56:04 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
danach kam der Atari ST mit wenig
Bastelpotential, außer einer 256K Speichererweiterung.
Kein Komma verrutscht? Der Atari war mein erster Rechner Anfang 1990 und
kostete etwa das gleiche wie der Neunnadler dazu. Das eine MB habe ich
sofort auf 2.5 erweitert mit einem teils gelöteten, teils gesteckten
Bausatz. Aus Platzmangel wurde das Netzteil ohne Berührschutz nach
draußen verlagert.

Eine Festplatte war komplett unerschwinglich und kam etliche Jahre
später. Stattdessen genug RAM. Booten mit der Programmdiskette und
Komplettkopie in die RAMdisk. Wechsel auf die Datendiskette und Arbeit.
--
/¯\ No | Dipl.-Ing. F. Axel Berger Tel: +49/ 221/ 7771 8067
\ / HTML | Roald-Amundsen-Straße 2a Fax: +49/ 221/ 7771 8069
 X in | D-50829 Köln-Ossendorf http://berger-odenthal.de
/ \ Mail | -- No unannounced, large, binary attachments, please! --
Hans-Peter Diettrich
2019-10-02 21:29:43 UTC
Antworten
Permalink
Post by Axel Berger
Post by Hans-Peter Diettrich
danach kam der Atari ST mit wenig
Bastelpotential, außer einer 256K Speichererweiterung.
Kein Komma verrutscht?
Ich weiß nicht mehr, wieviel RAM ein 260ST original hatte. Ich habe eine
zweite Bank huckepack über die Chips drübergelötet und damit die
Kapazität verdoppelt.
Post by Axel Berger
Der Atari war mein erster Rechner Anfang 1990 und
kostete etwa das gleiche wie der Neunnadler dazu.
Ich habe gewartet, bis der Preis unter 1000.-DM gefallen ist, dann habe
ich zugeschlagen - 1988?. 10 Disketten haben noch 10.- gekostet.
Post by Axel Berger
Das eine MB habe ich
sofort auf 2.5 erweitert mit einem teils gelöteten, teils gesteckten
Bausatz.
Später hat mich jemand auch mit so einer Erweiterung beglückt - beim
Drücken bestimmter Tasten kam dann ziemlich regelmäßig ein Absturz.
Post by Axel Berger
Aus Platzmangel wurde das Netzteil ohne Berührschutz nach
draußen verlagert.
Eine Festplatte war komplett unerschwinglich und kam etliche Jahre
später. Stattdessen genug RAM. Booten mit der Programmdiskette und
Komplettkopie in die RAMdisk. Wechsel auf die Datendiskette und Arbeit.
Meiner kam mit ROMs, und auch eine OEM Festplatte habe ich mir bald
geleistet. Und einen NEC(?) Multisync Monitor, mit SW/Farbe Umschalter.
Allerdings mußte der Monitor nach jedem Umschalten heftig nachjustiert
werden.

DoDi
Axel Berger
2019-10-03 09:58:04 UTC
Antworten
Permalink
Post by Axel Berger
Bastelpotential, außer einer 256K Speichererweiterung.
Kein Komma verrutscht?
Ich weiß nicht mehr, wieviel RAM ein 260ST original hatte. Ich habe eine
zweite Bank huckepack über die Chips drübergelötet und damit die
Kapazität verdoppelt.
Dann stimmst's und Du warst offenbar schon Jahre vor mir dabei.
Und einen NEC(?) Multisync Monitor, mit SW/Farbe Umschalter.
Farbe habe ich nie vermißt. Die zu ihrer Zeit revolutionären
flimmerfreien und scharfen Monitore waren allerdings eine Schwachstelle
und starben als erstes.
--
/¯\ No | Dipl.-Ing. F. Axel Berger Tel: +49/ 221/ 7771 8067
\ / HTML | Roald-Amundsen-Straße 2a Fax: +49/ 221/ 7771 8069
 X in | D-50829 Köln-Ossendorf http://berger-odenthal.de
/ \ Mail | -- No unannounced, large, binary attachments, please! --
Klaus Butzmann
2019-10-02 19:04:00 UTC
Antworten
Permalink
Post by Hans-Peter Diettrich
Meine erste 8" Doppelfloppy-Station hat über 5000DM gekostet, mehr als
die dazu gehörende LSI-11. Wer bietet mehr? ;-)
Die nächste Station kostete nur noch 200DM, da war 8" schon wieder out.
Ich hab mich immer auf "Datei bitte auf Standardfloppy" gefreut,
statt der erwarteten HD 3,5" eine Standard!-Floppy abgeliefert und mir
vorher die Frage hard- oder softsektoriert verkniffen.


Butzo
Hans-Peter Diettrich
2019-10-02 21:38:01 UTC
Antworten
Permalink
Post by Klaus Butzmann
Post by Hans-Peter Diettrich
Meine erste 8" Doppelfloppy-Station hat über 5000DM gekostet, mehr als
die dazu gehörende LSI-11. Wer bietet mehr? ;-)
Die nächste Station kostete nur noch 200DM, da war 8" schon wieder out.
Ich hab mich immer auf "Datei bitte auf Standardfloppy" gefreut,
statt der erwarteten HD 3,5" eine Standard!-Floppy abgeliefert und mir
vorher die Frage hard- oder softsektoriert verkniffen.
Au ja, die mit den vielen Löchern ;-)

Irgendwann bekam ich 100 5,25" Floppies für 10.-DM, ohne Hüllen. Wider
Erwarten waren die recht gut, nur das Laufwerk, das ich mir dazu
anschaffen mußte, hatte einen Schlag. Erst Jahre später habe ich
bemerkt, daß anscheinend der Kopf dejustiert war und meine Floppies auf
keinem anderen Laufwerk gelesen werden konnte :-(

DoDi
Wolfgang Allinger
2019-10-01 22:24:00 UTC
Antworten
Permalink
Post by Wolfgang Allinger
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.
Post by Wolfgang Allinger
Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)
Meine drei Remex nur je 800...
Remex? Nie gehört.


Saludos (an alle Vernünftigen, Rest sh. sig)
Wolfgang
--
Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt!
Ich diskutiere zukünftig weniger mit Idioten, denn sie ziehen mich auf
ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p
(lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Uhu
2019-10-02 08:12:20 UTC
Antworten
Permalink
Post by Wolfgang Allinger
Post by Wolfgang Allinger
CP/M80 Kiste dazu das BIOS um einen IR gesteuerten DMA Treiber erweitert.
Post by Wolfgang Allinger
Jede Shuggart 8" Floppy hat mich 1000DM gekostet :)
Meine drei Remex nur je 800...
Remex? Nie gehört.
Das war ein Markenname der Ex-Cell-O aus Irvine,CA.

Und die haben in Lizenz von Shugart produziert.
markus philippi
2019-10-04 08:07:01 UTC
Antworten
Permalink
Post by Uhu
Post by Wolfgang Allinger
Remex? Nie gehört.
Das war ein Markenname der Ex-Cell-O aus Irvine,CA.
Ex-Cell-O wiederum kenne ich nur Hersteller von Sondermaschinen /
Schleifmaschinen....
Uhu
2019-10-04 08:09:26 UTC
Antworten
Permalink
Post by markus philippi
Post by Uhu
Post by Wolfgang Allinger
Remex? Nie gehört.
Das war ein Markenname der Ex-Cell-O aus Irvine,CA.
Ex-Cell-O wiederum kenne ich nur Hersteller von Sondermaschinen /
Schleifmaschinen....
Ja, die Zeiten ändern sich.
Josef Moellers
2019-10-07 14:48:49 UTC
Antworten
Permalink
Post by Uhu
Post by markus philippi
Post by Uhu
Post by Wolfgang Allinger
Remex? Nie gehört.
Das war ein Markenname der Ex-Cell-O aus Irvine,CA.
Ex-Cell-O wiederum kenne ich nur Hersteller von Sondermaschinen /
Schleifmaschinen....
Ja, die Zeiten ändern sich.
Nokia war ja auch mal Hersteller von ...

... Gummistiefeln!

Josef
Peter Heitzer
2019-10-07 15:12:59 UTC
Antworten
Permalink
Post by Josef Moellers
Post by Uhu
Post by markus philippi
Post by Uhu
Post by Wolfgang Allinger
Remex? Nie gehört.
Das war ein Markenname der Ex-Cell-O aus Irvine,CA.
Ex-Cell-O wiederum kenne ich nur Hersteller von Sondermaschinen /
Schleifmaschinen....
Ja, die Zeiten ändern sich.
Nokia war ja auch mal Hersteller von ...
... Gummistiefeln!
Und Schleifmaschine passt ja auch zu Floppy, aka "spanabhebende Datenverarbeitung" :-)
--
Dipl.-Inform(FH) Peter Heitzer, ***@rz.uni-regensburg.de
Klaus Butzmann
2019-10-02 18:59:55 UTC
Antworten
Permalink
Post by Wolfgang Allinger
Remex? Nie gehört.
Ex-Cell-O corporation remex

https://www.ebay.com/itm/Vintage-8-Internal-Floppy-Disk-Drive-Remex-Untested-For-Parts-or-Repair-/323802566555

DS/DD und mit Lock Magnet konnte die Öffnungsklappe verriegelt werden.


Butzo
Marte Schwarz
2019-10-01 08:45:24 UTC
Antworten
Permalink
Hi Rainer,
Post by Rainer Knaepper
Post by Marte Schwarz
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
Hintergrund gehen soll...
Hey, DMA gab es schon für den Z-80!!!elf111
Z80 als Mikrocontroller mit eingebauter DMA? Lass sehen!

Marte
Hanno Foest
2019-10-01 10:18:05 UTC
Antworten
Permalink
Post by Marte Schwarz
Post by Rainer Knaepper
Hey, DMA gab es schon für den Z-80!!!elf111
Z80 als Mikrocontroller mit eingebauter DMA? Lass sehen!
HD64180? Vielleicht kein Microcontroller im engeren Sinne, aber ein Z80
mit DMS ist das schon.

Hanno
Marte Schwarz
2019-10-01 18:46:14 UTC
Antworten
Permalink
Hi Hanno,
Post by Hanno Foest
Post by Marte Schwarz
Z80 als Mikrocontroller mit eingebauter DMA? Lass sehen!
HD64180? Vielleicht kein Microcontroller im engeren Sinne,
Von denen gabs wohl tatsächlich auch mal µCs. Whow. Verwendet sowas
heute noch jemand?

Marte
Rainer Knaepper
2019-10-01 22:19:00 UTC
Antworten
Permalink
Post by Marte Schwarz
Post by Rainer Knaepper
Post by Marte Schwarz
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
Hintergrund gehen soll...
Hey, DMA gab es schon für den Z-80!!!elf111
Z80 als Mikrocontroller mit eingebauter DMA? Lass sehen!
Ich schrub nicht von "eingebaut". Und du nicht von "Controller".

Rainer
--
Wer denkt, Landschaft fotografieren wäre einfach, der hat keine
Ahnung. Ich halte gute Landschaftsfotos für extrem schwer. Also
vielleicht erstmal was einfacheres probieren. Türen zum Beispiel.
(Emil Ule in de.alt.rec.digitalfotografie)
Bernd Laengerich
2019-10-02 07:48:31 UTC
Antworten
Permalink
Post by Rainer Knaepper
Ich schrub nicht von "eingebaut". Und du nicht von "Controller".
DMA *in* einer CPU wäre ja auch ziemlich witzlos. Die hat ohnehin immer "DMA".

Ich erinnere mich noch gut an den riesigen Intel ICE für einen 80188, der die
Softwarehänger eindeutig mit "Memory access timed out because co-processor on
bus" einem (ebenfalls hängenden) DMA-Transfer in die Schuhe schob :) Und die
Ursache war dann auch irgendwann klar, das war eine Race condition im
Interrupt, der den DMA-Käfer mit mehreren Kanälen neu programmiert.

Bernd
Marte Schwarz
2019-10-02 08:27:25 UTC
Antworten
Permalink
Hi Bernd,
Post by Bernd Laengerich
DMA *in* einer CPU wäre ja auch ziemlich witzlos. Die hat ohnehin immer "DMA".
Du hast entweder nicht begriffen, wozu man eine DMA braucht und was
dessen Sinn ist, oder ich verstehe nicht, was Du damit meinst, dass ein
µC immer DMA hätte. Selbstverständlich gibt es viele µC ohne DMA. Bei
fast allen läuft jeglicher Verkehr zum RAM direkt über die CPU. Es gibt
aber in der Tat µCs, bei denen z.B. der AD-Wandler völlig ohne
Beteiligung der CPU eben via DMA timergesteuert in einen zugewiesenen
Speicherbereich schreibt, während die CPU mit höherwertigen Dingen
beschäftigt wird, und sei es mit Schlafen alias Stromsparen.

Einem ATMEGA kann das nicht passieren.

Marte
Marte Schwarz
2019-10-02 08:21:55 UTC
Antworten
Permalink
Hi Rainer,
Post by Rainer Knaepper
Post by Marte Schwarz
Post by Rainer Knaepper
Post by Marte Schwarz
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
Hintergrund gehen soll...
Hey, DMA gab es schon für den Z-80!!!elf111
Z80 als Mikrocontroller mit eingebauter DMA? Lass sehen!
Ich schrub nicht von "eingebaut". Und du nicht von "Controller".
Doch. Der Betreff schreibt von einem "mikrocontroller mit...". Hier geht
es explizit nicht um irgendwelche Prozessorsysteme, sondern um
klassische µCs mit mehreren Quadraturencoder als Bedienelemente / Sensoren.

Irgendwelche Abschweife zu anderen Themenfeldern führen da nicht
wirklich zum Ziel.

Marte
Rainer Knaepper
2019-10-02 23:18:00 UTC
Antworten
Permalink
Post by Marte Schwarz
Hi Rainer,
Post by Rainer Knaepper
Post by Marte Schwarz
Post by Rainer Knaepper
Post by Marte Schwarz
erstaunt, mit welchen 8 MHz-Prozessoren eine DMA-Geschichte im
^^^^^^^^^^^
Post by Marte Schwarz
Post by Rainer Knaepper
Post by Marte Schwarz
Post by Rainer Knaepper
Post by Marte Schwarz
Hintergrund gehen soll...
Hey, DMA gab es schon für den Z-80!!!elf111
Z80 als Mikrocontroller mit eingebauter DMA? Lass sehen!
Ich schrub nicht von "eingebaut". Und du nicht von "Controller".
Doch. Der Betreff schreibt von einem "mikrocontroller mit...". Hier
geht es explizit nicht um irgendwelche Prozessorsysteme, sondern um
klassische µCs mit mehreren Quadraturencoder als Bedienelemente / Sensoren.
Irgendwelche Abschweife zu anderen Themenfeldern führen da nicht
wirklich zum Ziel.
Den Begriff "Prozessor", abschweifend vom Betreff, habe nicht ich
eingeführt in diesen Faden. Ich habe deinen Text, auf den ich mich
bezog, einmal an passender Stelle markiert.

Um was es in Teilthreads geht oder nicht geht, konnte sich im Usenet
noch nie jemand wünschen. Du benutztest den Begriff "Prozessoren" und
ich machte dazu einen eigentlich nur launig gemeinten, der
Auflockerung dienen sollenden Einwurf, wie man möglicherweise leicht
an den abschließenden Satzzeichen hätte erkennen können.


Rainer
--
Immer wenn ich irgendwo lese 'Remastered by DJ Soundso', denke ich mir:
mein Gott, früher hiess das nicht 'DJ' sondern 'Fliesenleger'. Und genau
so klingt das auch meistens. (Benedict Mangelsdorff in ger.ct)
Michael Koch
2019-09-24 08:38:36 UTC
Antworten
Permalink
Post by Matthias Weingart
Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert.
Es gibt einen Trick wie du per Software ungefähr die doppelte Geschwindigkeit einlesen kannst. Das geht so: Im schnellen Timerinterrupt werden die A und B Signale eingelesen und in ein Byte geschoben. Dieses Byte enthält also nicht nur die aktuellen Signale, sondern auch die A und B Signale zu den vergangenen drei Zeitpunkten. Dieses Byte wird nun als Eingangssignal für eine Look-up-Table genutzt, und die Tabelle liefert eine Zahl im Bereich -2...+2, die angibt um wieviel sich der Drehwinkel geändert hat. In die Erstellung dieser Tabelle musst du ein Bisschen Gehirnschmalz reinstecken und kannst dabei die Tatsache nutzen, dass sich die Drehgeschwindigkeit nicht schlagartig ändert. Fehlende Zwischenschritte können mit dieser Methode kompensiert werden.

Gruß
Michael
Matthias Weingart
2019-09-24 14:39:00 UTC
Antworten
Permalink
Post by Matthias Weingart
Post by Matthias Weingart
Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren),
besonder
s
Post by Matthias Weingart
glÃŒcklich bin ich dabei aber meist nicht - denn das ist zu langsam (
der
Post by Matthias Weingart
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und hÀufigen Interrupts, bzw. man
darf dann
Post by Matthias Weingart
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert.
Es gibt einen Trick wie du per Software ungefÀhr die doppelte
Geschwindigkeit einlesen kannst. Das geht so: Im schnellen
Timerinterrupt werden die A und B Signale eingelesen und in ein Byte
geschoben. Dieses Byte enthÀlt also nicht nur die aktuellen Signale,
sondern auch die A und B Signale zu den vergangenen drei Zeitpunkten.
Dieses Byte wird nun als Eingangssignal fÃŒr eine Look-up-Table genutzt,
und die Tabelle liefert eine Zahl im Bereich -2...+2, die angibt um
wieviel sich der Drehwinkel geÀndert hat. In die Erstellung dieser
Tabelle musst du ein Bisschen Gehirnschmalz reinstecken und kannst dabei
die Tatsache nutzen, dass sich die Drehgeschwindigkeit nicht schlagartig
Àndert. Fehlende Zwischenschritte können mit dieser Methode
kompensiert werden.
Jo danke, genau so mache ich es schon. :-)

M.
--
Mark
2019-10-10 06:43:39 UTC
Antworten
Permalink
Post by Matthias Weingart
Hi,
ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,
die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?
Ich hab schon recherchiert, leider ist das nicht leicht rauszufinden. Da das
Feature kaum in den Filtern der Distris oder Hersteller auftaucht, muss man
sich erst durch Datenblätter oder Appnotes kämpfen...
Also beim STM32 können es nur die "Advanced timer" und da hat man oft nur
einen davon drin, in den größeren Controllern aber manchmal sogar schon zwei
und ganz selten sogar drei.
https://www.st.com/resource/en/application_note/dm00042534.pdf
Welche Controller gibt es noch? (Mir reichen da Typen mit 16 MHz Takt und ein
paar kB RAM, gern auch mehr, Hauptsache sie sind keine Stromschlucker ;-).
M.
Schau Dir mal PSoC 5LP an, und im Speziellen, die Encoder Hardware Komponente.
--
Gruss
Mark
Loading...