Forum: Mikrocontroller und Digitale Elektronik Hilfe beim Brett von Stirn lösen [Analoge Sensoren Atmega328p]


von sid (Gast)


Lesenswert?

'Nabend..

ich bin irgendwie heute besonders vernagelt,
und müsste mir mal kurz Euer Brecheisen leihen..

Ich fang mal vorne an:
ich hab vier MPX5050DP mit denen ich den Unterdruck der vier 
Ansaugkanäle in meiner Mofa auslesen will.
jetzt hätte ich gerne 120 Samples pro Sensor über alle vier Takte
also jeweils 6° Kurbelwellendrehung voneinander entfernt.
(2 volle KW Umdrehungen)

Mit nur wenig overhead Mathezeug brauch ich zum auslesen eines Sensors
etwa 124µs sodass ich mit Leerlaufdrehzahl (1200 U/min)
genug Zeit hab (138.8µS pro Grad an der Kurbelwelle)
und die einzelnen Sensorergebnisse nur etwa ein Grad voneinander 
verschoben sind..
kein Problem bis hier.

Aaaber ich möchte eben gerne auch wissen ob sich am Druckverlauf was 
ändert wenn der Motor sich, na sagen wir in 'spielfreudigeren' Gefilden 
dreht.

Und da mein maximaler Drehmoment erst bei 11000 U/min anliegt.. naja
eben auch gerne bis zum Drehzahlbegrenzer (13500 U/min) weil es ja kaum 
mehr einen Unterschied macht.

Nun wird das mit der Zeitspanne dann aber merklich knapp, da
jedes Grad auf der Kurbelwelle bei 13500 U/min schon nurnoch 12.45µS 
dauert und das auslesen eines einzelnen Sensors damit schon 10° auf der 
KW verschlingt.

Heisst natürlich im Umkehrschluss, dass ich meinen Datenspeicher eben 
länger als Zwei Umdrehungen füllen muss,
mein Problem nun ist es den jeweils (drehzahlabhängig) möglichst 
kürzesten Weg zu finden.
Immer in Hinsicht darauf, dass zwei aufeinanderfolgende Werte im 
Speicher eines Sensors 6° voneinander entfernt sein sollen.
Und voneinander halt möglichst geringen Abstand haben
Im extremfall (da ich eh 16 Umdrehungen brauche)
auch gerne Im Abstand von 720° versteht sich.

Irgendwie fällt es mir grade echt schwer mich durch die ganzen 
Kurbelwellenwinkel und microsekunden zu fressen ohne aus den Augen zu 
verlieren dass der 16MHz getaktete Atmega328p microsekunden eh nur in 
vielfachen von 4 wahrnehmen kann.

Ein vermutlichst triviales Problem, aber -wie gesagt- bin grad echt 
nicht in der Lage das aufzudröseln.
Könnte jemand kurz auf die richtige Herangehensweise zeigen

Danke!

von Guest (Gast)


Lesenswert?

Man kann mich gerne korrigieren aber ich glaube das kannst du mit dem 
Atmega vergessen. Die 12.45µS pro Grad glaube ich dir jetzt mal hab es 
nicht nachgerechnet. Das sind ca. 80Khz. Der Atmega328p hat einen ADC 
der 15Ksp/s hat, da du 4 Kanäle gemultiplext misst, bleiben dir pro 
Sensor 3,75Ksp/s. Das heißt dir steht nur alle 200µs eine neue Messung 
zur Verfügung.

von Guest (Gast)


Lesenswert?

Hab mich vertrippt. 260µs Abstand zwischen den Messungen.

von Christoph M. (mchris)


Lesenswert?

>ich hab vier MPX5050DP mit denen ich den Unterdruck der vier
>Ansaugkanäle in meiner Mofa auslesen will.

Ein Vierzylindermofa. Bei uns hatten die früher nur einen Zylinder mit 
kleiner 50ccm.
Poste doch mal deine Meßkurven und das Programm, damit man mal sehen 
kann, ob überhaupt was zeitlich aufgelöst wird.

von foobar (Gast)


Lesenswert?

Bei 6° ergeben sich bei 1200U/min eine Samplerate von 1200Hz, bei 
13500U/min entspr 13500Hz.  Pro Kanal.  Sollte machbar sein, entweder 
einen Kanal nach dem anderen (insg 8U), oder evtl mit ein paar 
Abstrichen und Tricksereien auch parallel in 2U.  Wie bekommst du denn 
die Drehzahl rein?  Das einfachste wäre natürlich direkt nen 6°-Puls aus 
nem Drehencoder ;-)  Bei nem 360°-Puls (1 pro Umdrehung), müßtest du 
dessen Abstand messen, durch 60 Teilen und das als Trigger-Intervall 
setzen.

Aber: sind die Drucksensoren für die hohen Drehzahlen überhaupt schnell 
genug?  Der Hersteller empfiehlt ne RC-Filter mit 650Hz am Ausgang um 
den Dreck wegzufiltern ...

von foobar (Gast)


Lesenswert?

> Ein Vierzylindermofa. Bei uns hatten die früher nur einen Zylinder mit
> kleiner 50ccm.

Hab ich mir auch gedacht - und 13500U/min haben die auch nicht 
geschafft, trotz 2-Takt ;-)

von c-hater (Gast)


Lesenswert?

sid schrieb:

> Ein vermutlichst triviales Problem

Mathematisch schon.

fs = 13500/60*60*4 = 54000

Das Problem ist: bei dieser Samplerate kannst du mit dem eingebauten 
AD-Wandler nur noch knapp 7 verwertbare Bits erwarten.

Außerdem sind 16MHz Takt recht ungünstig. Um deine Samplerate zu 
erreichen, mußt du einen Timer zu Hilfe nehmen und den AD-Wandler durch 
den triggern lassen. Weil:

54000*13 = 702000 ADC-Takt

16000000/16 = 1000000
16000000/32 =  500000

Der gewünschte ADC-Takt läge also ziemlich genau in der Mitte zwischen 
den beiden allein mit den Mitteln der ADC tatsächlich erreichbaren.

von abalo (Gast)


Lesenswert?

sid schrieb:
> ich hab vier MPX5050DP
> Mit nur wenig overhead Mathezeug brauch ich zum auslesen eines Sensors
> etwa 124µs sodass ich mit Leerlaufdrehzahl (1200 U/min)
> genug Zeit hab (138.8µS pro Grad an der Kurbelwelle)

Der MPX5050DP hat eine response time (10% -> 90%) von 1ms. Schnellere 
Druckänderungen erscheinen erst erst gar nicht am Ausgang.

https://www.nxp.com/docs/en/data-sheet/MPX5050.pdf

von Hugo H. (hugohurtig1)


Lesenswert?

abalo schrieb:
> Der MPX5050DP hat eine response time (10% -> 90%) von 1ms. Schnellere
> Druckänderungen erscheinen erst erst gar nicht am Ausgang.

War schneller ...

#Response Time(7)
7.Response Time is defined as the time for the incremental change in the 
output to go from 10% to 90% of its final value when subjected to a
specified step change in pressure.
tR — 1.0 — ms

Datenblatt lesen hilft oft :-)

https://www.kistler.com/?type=669&fid=101576&model=document

: Bearbeitet durch User
von H.Joachim S. (crazyhorse)


Lesenswert?

Und es gibt sowieso nicht "den Druck" bzw Unterdruck im Saugrohr, das 
ist eine oszillierende Gassäule.
Sprich: Ort des Sensors, Frequenz (also Drehzahl) und garantiert 
auftretende Resonanzen und Übersprechen aus den anderen Saugrohren via 
Airbox haben entscheidenden Einfluss auf den Messwert.
Mit den passenden math. Modellen kann man das aber gut "geraderechnen", 
das funktioniert aber garantiert nicht auf nem ATMega online.
Aber wenn schon der Sensor keine ausreichende Bandbreite hat ist sowieso 
alles sinnlos.

von sid (Gast)


Lesenswert?

Hey, dank Euch schonmal..

Guest schrieb:
> Die 12.45µS pro Grad glaube ich dir jetzt mal hab es
> nicht nachgerechnet. Das sind ca. 80Khz. Der Atmega328p hat einen ADC
> der 15Ksp/s hat
ja sind aber lustigerweise 12._3_45µs (klingt ausgedacht, ich weiss)
denn ich muss mich leider an floats klammern und die sind langsamer als 
ints..
sodass ich bei 132µS pro Lesezugriff lande, nicht 124 :(
(analog read ~109µS plus zählerschleife plus float Zeug)

Christoph M. schrieb:
> Ein Vierzylindermofa. Bei uns hatten die früher nur einen Zylinder mit
> kleiner 50ccm.
> Poste doch mal deine Meßkurven und das Programm, damit man mal sehen
> kann, ob überhaupt was zeitlich aufgelöst wird.
zwei Räder.. macht bräppbräppbräpp und rollt = Mofa..

Kann später die Jungs mal Freiluft atmen lassen,
aber anklemmen mag ich sie grad nicht; Müsst ich ne Stunde das Mofa für 
zerlegen bis ich überall drankomm, da hab ich nur so Mittel Lust zu für 
'aus Spass' ;)
Aber klar n demo-read kannste kriegen denk ich.
zeitliche Auflösung ist aber kein grosses Thema,
ich schreib die Werte nur in ein Array und zeig den Plot später statisch 
an.(also semi-statisch hab mich noch nicht für ein Sinnvolles 
Aktualisierungsintervall entschieden)

foobar schrieb:
> Bei 6° ergeben sich bei 1200U/min eine Samplerate von 1200Hz, bei
> 13500U/min entspr 13500Hz.  Pro Kanal.  Sollte machbar sein, entweder
> einen Kanal nach dem anderen (insg 8U), oder evtl mit ein paar
> Abstrichen und Tricksereien auch parallel in 2U.  Wie bekommst du denn
> die Drehzahl rein?  Das einfachste wäre natürlich direkt nen 6°-Puls aus
> nem Drehencoder ;-)  Bei nem 360°-Puls (1 pro Umdrehung), müßtest du
> dessen Abstand messen, durch 60 Teilen und das als Trigger-Intervall
> setzen.

Drehzahl ist ein echt heikles Thema grad.. Kaggomobil möchte mich 
dahingehend ärgern..
ich hab aber n digitales 5V Drehzahlsignal am Tacho, im schlimmsten Fall 
greif ich das ab... hate gehofft ich hätte n Servicestecker, der 
verändert aber nur das Einsprtzmapping... na Hauptsache... :()

der KW Positionssensor triggert nur einmal pro Umdrehungen leider, kann 
also keine Winkelgenaue KW Position auslesen.
Ich bin auch nicht zu pingelig was die 6° angeht ehrlich gesagt.
mir geht's nur darum eine sinnvoll hohe Auflösung (120 werte) über den 
vollen viertaktzyklus (720°) zu bekommen, und möglichst gleichmässige 
Abstände zu haben versteht sich. (das sind rechnerisch eben 6°)

der mir wichtigste Fall (Leerlauf zum Drosselklappenabgleich der 
Einspritzanlage) funktioniert mit Trigger Intervall ganz ordentlich
(4-8µs Fehler über 4x120 samples finde ich akzeptabel grade)
Ich messe die Zeit zwischen zwei Umdrehungen ehrlich gesagt garnicht,
ich 'erwarte' mathematische Übereinstimmung und errechne direkt den 
Abstand der 'Lesungen' anhand der Drehzahl (also bei 1200U/min 833.3µS 
für zwei Abfragen an Sensor 1) und Sensoren 2,3 und 4 passen halt da 
bequem noch zwischen, also laufen die in derselben Schleife mit.

Das ist die Schleife die mir Momentan die Stirn vernagelt..
denn das funktioniert so bis maximal 2000 rpm
(bei ints statt floats komm ich wie gesagt auf 124µs und hab n 
Leseabstand von 500µS pro sensor [und die anderen drei passen noch 
dazwischen])

Das hilft mir halt nur für den Drosselklappenabgleich, nicht aber um 
Fehler in der Einspritzanlage zu erkennen oder undichte Ventile oder 
oder oder...
dafür brauch ich halt deutlich mehr Drehzahl.

foobar schrieb:
> Aber: sind die Drucksensoren für die hohen Drehzahlen überhaupt schnell
> genug?  Der Hersteller empfiehlt ne RC-Filter mit 650Hz am Ausgang um
> den Dreck wegzufiltern ...
Ja das hab ich aber ehrlich gesagt auch zu spät gelesen, weiss ich noch 
nicht wie ich das realisieren kann sinnvoll..
Weiss garnicht genau.. irgendjemand hatte die MPX in nem Selbstbau 
Zweizylinder Synchrontester auf youtube... und das hat mir schon 
gereicht um sie als versuchsobjekt in Betracht zu ziehen ;)

Der Atmega selber ist ja schon nicht schnell genug..
109µS braucht er für's auslesen eines Sensors..
deswegen muss ich das Auslesen ja sinnvoll auf mehrere Umdrehungen 
verteilen,
Sensor eins sollte lesen  0, 6, 12, 18, 24...Grad
ich bin aber mit 0, 726, 12, 738, 24 .. Grad einverstanden
oder jedem notwendigen addieren von 720°,
es soll halt nur zeitlich so kompakt wie möglich passieren

c-hater schrieb:
> Das Problem ist: bei dieser Samplerate kannst du mit dem eingebauten
> AD-Wandler nur noch knapp 7 verwertbare Bits erwarten.
Ne das kommt leider auch nicht wirklich in Frage
Deswegen will ich die Samplerate ja im "verfügbaren" Bereich halten
und die Lesezyklen lieber etwas ausdehnen,
ich hab lieber n sinnhaftes Bit mehr als ne zehntel Sekunde Zeit gespart 
;)
(bei 225 U/s sind n paar Umdrehungen eher verschmerzbar als ne 
bescheidenen Auflösung, nicht wahr ;))

Rechnerisch sollten bis etwa 1850 U/min alle vier Sensoren in zwei 
Umdrehungen je 120 mal gelesen werden können (2000U/min bei ints... 
egal)
bei 2700 U/min passen noch drei Sensoren in mein Zeitfensterchen von 
dann 370µs zwischen zwei Primärsensorlesungen
bei 3750 U/min würden knapp noch zwei Sensoren gelesen werden können
und bei 7550 U/min komm ich auf ziemlich exakt 6° pro 132µS

und ab da wird's dann echt spannend weil ich pro Sensor mehr als 2 
Umdrehungen brauche (und ich bin ja noch n gaaaanzes Stück von der 
Drehzahl weg die spannend wird)

von Hugo H. (hugohurtig1)


Lesenswert?

sid schrieb:
> Der Atmega selber ist ja schon nicht schnell genug..
> 109µS braucht er für's auslesen eines Sensors..
> deswegen muss ich das Auslesen ja sinnvoll auf mehrere Umdrehungen
> verteilen,

Dein Sensor kann gar nicht so schnell messen - liest Du eigentlich alle 
Beiträge?

von H.Joachim S. (crazyhorse)


Lesenswert?

:-)
Ansonsten: externe A/D-Wandler, dann kanst du alle 4 Kanäle gleichzeitig 
messen und hast dann Zeit genug, die in den 6° auszulesen.
-entweder ein Chip mit tatsächlich 4 Wandlern
-Chip mit 1 Wandler, aber 4 S/H
-4 Wandlerbausteine

SPI kannst du mit 10MHz takten, das reicht locker.

von holla die waldfee (Gast)


Lesenswert?

Hugo H. schrieb:
> sid schrieb:
>> Der Atmega selber ist ja schon nicht schnell genug..
>> 109µS braucht er für's auslesen eines Sensors..
>> deswegen muss ich das Auslesen ja sinnvoll auf mehrere Umdrehungen
>> verteilen,
>
> Dein Sensor kann gar nicht so schnell messen - liest Du eigentlich alle
> Beiträge?

zu viel von dem Output des Mofas eingeatmet

von sid (Gast)


Lesenswert?

Hugo H. schrieb:
> Dein Sensor kann gar nicht so schnell messen - liest Du eigentlich alle
> Beiträge?

Heul doch nicht gleich... abalo's und Deinen Beitrag hatte ich NICHT 
gelesen (hatte vor meiner Antwort die Seite nicht neu geladen und sie 
nicht gesehen)
Und weil das Antworten länger gedauert hat als gedacht bin ich danach 
auch los...


Ich brauch keine 80% range von dem Chip..
ich denke ich werd eh nie wirklich mehr als 30kPa vakuum ziehen
trotzdem blöd ~750µS bei maximal zu erwartender Änderung
bei laufendem Motor wird die Änderung sich eher im Bereich von 1-2kPa 
abspielen; nichts desto trotz, bei langen Sättigungsphasen
ist eben schon bei knapp über Leerlauf Schluss und ich muss über mehrere 
Umdrehungen zählen.. doof..
aber abgesehen davon dass es die Dringlichkeit der Frage erhöht
ändert sich doch nicht viel am Inhalt, oder?

Also, was meinste.. haste dazu n Vorschlag oder wollste mit der kleinen 
Waldfee zu Mami um ihr zu sagen dass ich Euch nicht hab mitspielen 
lassen?

H.Joachim S. schrieb:
> Ansonsten: externe A/D-Wandler, dann kanst du alle 4 Kanäle gleichzeitig
> messen und hast dann Zeit genug, die in den 6° auszulesen.
> -entweder ein Chip mit tatsächlich 4 Wandlern
> -Chip mit 1 Wandler, aber 4 S/H
> -4 Wandlerbausteine

Das würde ja leider nicht viel ändern in dem Fall,
ausser dass ich das misalignment loswürde,
Da ja offenbar der Flaschenhals direkt im Sensor liegt.

hier MPX21-er... zweizylinder aber dennoch beruhigend zu sehen erstmal 
;)
(danke Arno!)
Beitrag "Synchrontester für Drosselklappen"

back to Schüppe...

von foobar (Gast)


Lesenswert?

> Der Atmega selber ist ja schon nicht schnell genug..
> 109µS braucht er für's auslesen eines Sensors..

Wie kommst du auf diese Zahl?

von c-hater (Gast)


Lesenswert?

foobar schrieb:
>> Der Atmega selber ist ja schon nicht schnell genug..
>> 109µS braucht er für's auslesen eines Sensors..
>
> Wie kommst du auf diese Zahl?

Der Typ ist ganz sicher ein Arduidiot. Und genau so ist er an diese Zahl 
gekommen. Er hat einfach einen AnalogRead()-Aufruf in loop() plaziert. 
Jede Wette...

von sid (Gast)


Lesenswert?

foobar schrieb:
> Wie kommst du auf diese Zahl?

c-hater schrieb:
> Der Typ ist ganz sicher ein Arduidiot. Und genau so ist er an diese Zahl
> gekommen. Er hat einfach einen AnalogRead()-Aufruf in loop() plaziert.
> Jede Wette...

Der Typ haut Dir ganz sicher n paar aufs Maul solltest Du ihm irgendwann 
übern Weg laufen..

Aber Recht haste.. hab in der Schleife gelesen (glaub 10k mal) und dann 
dividiert

mal mit, mal ohne banal Mathe (hab sogar überflüssige Mulitplikation und 
Division vorher gegeneinander gekürzt, was wahrhaften Idioten schon 
schwer fällt selbst bei so simplen Dingen wie /60*60 ;))
mal mit linearer Arraybefülllung mal mit phasenverschobener..
solange bis ich ne Dauer hatte die mir stabil und vorhersehbar genug 
schien..
wie sonst möchtest Du den Durschnittswert errechnen?

Und ja mal per ADC Register tatsächlich auch per ArduinoLibrary
(ich bin alt.. ich mag bequem!)
und da ich eh auf die Konvertierung warten muss war der Unterschied 
wirklich nicht nennenswert .
Aber damit macht der 4Wandler AD Chip fast wieder Sinn, muss ich nochmal 
n bisschen drüber nachdenken.

die Phasenverschobenen Arrays haben mich übrigens auf die Lösung 
gebracht.
oder zumindest eine vertretbare Lösung ohne aufgerüstete Hardware.
brauch ja nur die kleinstmögliche Winkeldistanz als 6x
dann kann array[x] = ADC .. uups 'tschuldige .. analogRead(A0) :D
bei allen (asser der magischen 7) verlier ich pro 720° an der 
Kurbelwelle 1000000/RPM an µs also insgesamt maximal 528µs
dauert der ganze Kram also 64ms oder weniger egal bei welcher Drehzahl..

Damit kann ich sicherlich leben oder was meint Ihr?
könnte mich sogar fast dazu hinreissen lassen es mal mit der 
millisekunde zu testen (121ms klingt auch nicht so als würde mein Bart 
dadurch grauer)

von Guest (Gast)


Lesenswert?

Du könntest auch akzeptieren das für deine Anwendung das Teil zu langsam 
ist und einen Controller verwenden der ADCs besitzt die schnell genug 
sind. Dann müsstest du doch tatsächlich keine Abstriche machen und nicht 
noch ein extra IC benutzen. Wenn du unbedingt bei Arduino bleiben willst 
nimm ein BluePill der F103 hat meine ich 1Msps und wenn es auch normales 
C sein darf bei dem man keine Arduino Libs hat nimm ein Nucleo32/64 da 
gibts F3 und co mit 3-5Msps. Teilweise haben die sogar 2 oder 3 ADCs. 
Ich meine sogar die Nucleos lassen sich mit der ArduinoIDE 
programmieren? Zumindest teilweise bin da nicht so auf dem laufenden.

von sid (Gast)


Lesenswert?

Guest schrieb:
> Du könntest auch akzeptieren das für deine Anwendung das Teil zu langsam
> ist und einen Controller verwenden der ADCs besitzt die schnell genug
> sind. Dann müsstest du doch tatsächlich keine Abstriche machen und nicht
> noch ein extra IC benutzen.

Mein Nano wurde höchstwissenschaftlich ausgesucht..
"pseudo randomly generated sample" glaub ich nennt man das
(kurz: er ist mir aus der Schublade gefallen... tadaaa :D)
Ist mir völlig Hupe welcher Prozessor dranklemmt,
ich hatte ihn halt grade in der Hand,
liess sich kurz an den USB Port klemmen (ich hatte ja gesagt, dass ich 
bequem erstmal gut finde ;)) und er schien mir alles zu haben was ich 
glaubte zu brauchen.

Wie ich vielleicht schon angemerkt habe ist das mehr Prokrastination
als alles Andere..
will halt wissen wie weit ich es so treiben kann mit Code
(falls jemand das SynX von X-log kennt... )
quasi wie nah man mit 'nix' and die Funktionen kommt..
vielleicht ein zwei Andere;
Also n billiges Display geschossen, n paar Sensoren geordert
(alles nahezu genauso wissenschaftlich.. das Erstbeste was mir in die 
Finger kam)

Auf Lochrasterkarten gespuckt und mal gucken...
SOLLTE das in irgendeiner Form dauerhaft brauchbar sein,
also es statt "Tonne" das Label "Verbesserungswürdig" erhält,
dann mach ich mir n Kopf um 'vernünftige' Hardware;
wie ordentliches PCB, n besseres Display
(nextion find ich zum würgen, wollte das aber mal probiert haben)
ordentliche Signalfilter, Stromversorgung, eventuell n SignalAmp und son 
Zeug (hätte auch lieber 12bit ADWandler ehrlich gesagt)

Aber mal ernsthaft, ich find jetzt ~64ms garnicht sooo schlimm (ohne 
extra ad wandler),
im Gegenteil, bin ja sogar Willens (in der Hoffnung auf ein klareres 
Signal der Sensoren) 121ms zu tolerieren.
und beides kann der Kleine noch locker verarbeiten.
bei 15ksps sind das 480 von 960 respektive 1815 möglichen Samples die 
ich nehme oder hab ich mich da verrechnet?

Ist der BluePill nicht n ARM Cortex? klingt mir overkill n bisschen..
egal.. guck ich mir mal an für den Fall dass ich noch was in besagte 
Schublade werfen will :D (ne ernsthaft ich hab da gerne solch Spielzeug 
drin)

ich guck erstmal wie lange sone Schleife in Wirklichkeit braucht..
(ja .. loops.. schon wieder.. und jaaa mehrere zum Durchschnitt 
rechnen... uiuiui.. kicher)

Nächster Schritt wär dann glaub ich n Datenlogger (der SD Slot im 
Nextion ist ja leider wertlos)
In der Schublade staubt noch n NodeMCU vor sich hin kicher... mal 
sehen

von foobar (Gast)


Lesenswert?

> Aber Recht haste [...]

War das jetzt unbedingt nötig, c-hater in allen Punkten zu bestätigen? 
:-/

Der 328 ist nicht zu langsam, du benutzt ihn nur falsch.  Mit deiner 
Aufgabe bist du an die Grenze gekommen, was mit Arduino (dem 
SW-Framework, nicht den Boards) sinnvoll machbar ist.  Das ist, als wenn 
du versuchst, mit Fischertechnik ein Meßgerät zu bauen.  Schnapp dir das 
Datenblatt des Atmega328 und schau, was das Teil wirklich kann.



PS: Man muß nicht unbedingt an der kritischsten Stelle langsame 
Rechnoperation machen, wenn man sie auch gemütlich im Anschluß 
durchführen kann.

PPS: Falls du in Kode von mir irgendwo etwas wie "/60*60" siehst: lass 
es drin - der "Idiot" wusste, was er tut!

von P.Isa (Gast)


Lesenswert?

sid schrieb:
> 124µs
> ...
> 138.8µS
> ...
> 12.45µS

Guest schrieb:
> 12.45µS
> ...
> 15Ksp/s
> ...
> 3,75Ksp/s

c-hater schrieb:
> fs = 13500/60*60*4 = 54000

Wer findet die Fehler?

Tip:
https://de.wikipedia.org/wiki/Elektrischer_Leitwert
https://de.wikipedia.org/wiki/Hertz_(Einheit)

von Aber, aber (Gast)


Lesenswert?

@sid: dubist mir aber eine knalltüte. Nimm doch jeden 5ten Order 10ten 
Messwert, du alle Zeit der Welt im Gegensatz zu Controller.

von Hugo H. (hugohurtig1)


Lesenswert?

sid schrieb:
> Also, was meinste.. haste dazu n Vorschlag oder wollste mit der kleinen
> Waldfee zu Mami um ihr zu sagen dass ich Euch nicht hab mitspielen
> lassen?

Ein bisschen schwer von Begriff und ein loses Mundwerk - eine schlechte 
Kombination. Da ist auch ein Link

Beitrag "Re: Hilfe beim Brett von Stirn lösen [Analoge Sensoren Atmega328p]"

von Dieter (Gast)


Lesenswert?

P.Isa schrieb:
> Wer findet die Fehler?

Erleuchte uns? Ich sehe den Zusammenhang mit dem Leitwert und der 
Sampelrate grade nicht.

von sid (Gast)


Lesenswert?

foobar schrieb:
> Der 328 ist nicht zu langsam, du benutzt ihn nur falsch.  Mit deiner
> Aufgabe bist du an die Grenze gekommen, was mit Arduino (dem
> SW-Framework, nicht den Boards) sinnvoll machbar ist.
LOL, das erste ist mit Sicherheit korrekt :D
Ich hab die Register nicht alle im Kopf und noch weniger die 
dazugehörigenden Bits..
nichts desto trotz findet das meiste in Bitregistern statt
(cheatsheets sei dank ...) der 'abgenickte' code steckt
in nem AVR-Studio Projekt, nicht in dem Arduino Ding
(obschon ich da den serial plotter mag ;))

Nach n paar Durchläufen durch den ADC (register notiert)
und n paar durch das lazylibrary hab ich kaum Unterschiede in der 
Geschwindigkeit festgestellt.
gebe aber zu dass ich für die Schleifen viermal denselben Pin las
und jeweils auf den ADC gewartet hab und eben nicht auf ne ISR gesetzt 
hab.
Wüsste jetzt auch nicht wie ich vier sensoren 'zeitgleich' in eine 
Konvertierungswarteschlange schickte, wenn du da n snippet hast, danke 
ich Dir für den Tipp.


Dieter schrieb:
> Erleuchte uns? Ich sehe den Zusammenhang mit dem Leitwert und der
> Sampelrate grade nicht.

er nimmt mir übel dass ich das s gross-schrieb
Sekunde ist kleines s.. Siemens Grosses.

ksps (kilo-spmples-per-second) hat kein Schrägstrich

klingt mir etwas Kleinlich... aber das wär jetzt das einzige was ich an 
den Zitaten da 'falsch' sähe.

und 13500/60*60*4 = 54000
abgesehen von 60-ern (was im Grunde nicht falsch ist sondern nur 
überflüssig)
seh ich da nix denn 13500 * 4 ist tatsächlich 54000.

Ich gehe aber davon aus, dass P.Isa mit amerikanischem PEMDAS Mist denkt
und es damit als 13500/14400 liesst (also 13500/(60*60*4)) was 0.9375 
wär.
könnten dann aber fast auch schon 13500/(60*60) * 4 sein also 15...
man weiss es nicht :D

von Dieter (Gast)


Lesenswert?

sid schrieb:
> ksps (kilo-spmples-per-second) hat kein Schrägstrich

Wozu der Strich das p heißt doch schon per / pro :D Ich kenn das auch 
nur so "ksps"

Naja Hauptsache er konnte sich mitteilen :D

von sid (Gast)


Lesenswert?

Ich trenn das mal:

sid schrieb:
> und 13500/60*60*4 = 54000
> abgesehen von 60-ern (was im Grunde nicht falsch ist sondern nur
> überflüssig)
> seh ich da nix denn 13500 * 4 ist tatsächlich 54000.

Und ja ich weiss Gedankenfehler lassen sich schwer kommunizieren 
manchmal.
Ich versuch mal zu erklären, was ich glaube c-hater gemeint hat:

13500 U/min sind (DURCH 60s) 225 U/s
die vier ordne ich den vier Sensoren zu,
und die 60 nehme ich an hat er aus den Zwei Umdrehungen pro 
Verbrennungszyklus und den 120 Ablesungen gebastelt (120/2 halt)

Das ist jdf was ich daraus verstanden hatte..
sodass man rechnerisch auf 54000 Ablesungen pro Sekunde kommt
was meines erachtens mit der *13 später (Takte pro ADC konvertierung) 
bestätigt wird..
hiesse 18.518µs zur Verfügung pro Ablesung...
was n bisserl knapp ist vorsichtig formuliert.

c-hater kann mich da gerne korrigieren, aber so hatte ich ihn verstanden

von c-hater (Gast)


Lesenswert?

sid schrieb:

> und 13500/60*60*4 = 54000
> abgesehen von 60-ern (was im Grunde nicht falsch ist sondern nur
> überflüssig)

Es ist in diesem Fall zufällig überflüssig. Es ist nämlich nur in 
dieser konkreten Anwendung zweimal derselbe Zahlenwert. Die Bedeutung 
ist aber völlig verschieden.

Die erste 60 dient zur Umwandlung von U/min in U/s und kommt daher, weil 
eine Minute nunmal 60 Sekunden lang ist. Die zweite 60 hingegen steht 
dafür, das halt die gewünschten 6° in 360° genau 60 mal vorkommen, pro 
Umdrehung also 60 Samples nötig sind.

> Ich gehe aber davon aus, dass P.Isa mit amerikanischem PEMDAS Mist denkt

Die Sache ist aber: genau danach stimmt es. Klammern gibt's keine, alle 
vorkommenden Operationen sind gleichrangig, also wird der Ausdruck 
schlicht von links nach rechts ausgewertet. Und dann kommt auch genau 
das Richtige raus.

Ist doch nicht meine Schuld, wenn hier nur mathematische Vollidioten 
unterwegs sind, die nicht mal das Grundschulwissen anwendungsbereit 
haben...

von sid (Gast)


Lesenswert?

c-hater schrieb:
>> Ich gehe aber davon aus, dass P.Isa mit amerikanischem PEMDAS Mist denkt
>
> Die Sache ist aber: genau danach stimmt es. Klammern gibt's keine, alle
> vorkommenden Operationen sind gleichrangig, also wird der Ausdruck
> schlicht von links nach rechts ausgewertet.
Ne bei PEMDAS ist Multiplikation höherrangig... oder wurd das 
eingedeutscht und mir hat keiner was gesagt? Egal..

Werte ohne Einheiten sind aber ... eben 'Bedeutungslos'
Egal was P.Isa da als Fehler sieht
ich hatte Dich ja verstanden,
ging von 120 Samples/2 Umdrehungen aus statt von 360°/6gradprosample
(was hier nicht ganz zufällig dieselben 60 Samples pro Umdrehung 
ergibt ;))

Was ich vielleicht Eingangs nicht ordentlich kommuniziert habe war 
folgendes:
ich will ja garkeine 54ksps erreichen.. ich bin mit bequemen 7,58ksps 
durchaus zufrieden,

wollt von Euch wissen wie das am einfachsten zu realisieren ist dennoch 
möglichst effizient das Array zu füllen..

aber das hat sich ja vorerst erledigt :D

Guck grade wie ich ne schwingende Luftsäule auf meinen Schreibtisch 
gebastelt bekomme ohne selber ins Röhrchen hecheln zu müssen ...
Luftballon und vibrationsmotor? defekter PC Lüfter und venturi rohr?
Stethoskop und eigener Puls?

ich geh Schublade...

von c-hater (Gast)


Lesenswert?

sid schrieb:

> Ne bei PEMDAS ist Multiplikation höherrangig...

Unsinn.

https://www.mathsisfun.com/operation-order-pemdas.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.