Forum: Mikrocontroller und Digitale Elektronik AVR: mehere schnelle synchrone Signale gleichzeitig einlesen


von Karl F. (kafido)


Lesenswert?

Hallo Leute,

ich hätte das auch Meßschieber die 1001te nennen können, aber dann 
macht's ja erst gar keiner auf ;-)

Spaß beiseite, ich möchte mit einem Mega328p die Daten von mehreren 
(mind. 3, eher 4-5) Meßschiebern gleichzeitig einlesen.
Die ganzen einschlägigen Seiten wie Yadro, Shumatech usw. kenne ich und 
hab auch fast alle Beiträge zu diesem Thema hier im Forum gelesen.
Die Daten von einem Meßschieber einlesen ist auch überhaupt kein 
Problem.

Für die, die die Seiten nicht kennen:
Das schwierigste, weil schnellste Protokoll dürfte wohl das 2x24 sein.
http://www.yadro.de/digital-messleiste/protokoll.html#a2
direkt gefolgt vom 21 Bit-Protokoll. (Beide 70-80kHz Clock)
Die BCD(6/7)-Protokolle sind verhältnismäßig langsam ...

Ich frage mich nur, ob/wie es realisierbar ist, mit einem Mega328p/16MHz 
3-5 solcher synchronen Signale parallel einzulesen (die Signale sind 
natürlich untereinander nicht synchron, sondern völlig unabhängig).
Zunächst mal hab ich nur zwei externe Interrupts (INT0/INT1), die ich 
eigentlich schon für was anderes brauche - außerdem sind's eh nur zwei.
Dann wären da noch die PC-Ints ...

Bevor ich also nach 3 vertanen Nächten frustriert aus dem Fenster 
springe, ist das mit Polling überhaupt zu schaffen?

Hat jemand ne gute Idee, wie das mit (wenig) externer Hardware (z.B. 
Schieberegister) besser zu schaffen ist?
Evtl. 1 D-FF pro Meßschieber-Eingang? Damit würde man zumindest die Zeit 
zum Einlesen des Datenbits von 1/2 Clock auf 1 Clock verlängern.
Wenn's zuviel externe HW wird, kann ich auch gleich 3-5 ATtinys nehmen, 
für jeden Meßschieber einen ...

Ich freu mich auf gute Ideen ...
... oder zur Not auch auf ein 'laß es sein, ist nicht zu schaffen'

Gruß
- Karl

von Falk B. (falk)


Lesenswert?

Kann vielleicht gehen, ist aber schon sehr aufwändig. Nimm ieber drei 
kleine Attinys, jeder liest EINEN Meßschieber ein und sendet die Daten 
per SPI/USART/I2C zum Master. Fertig.

MfG
Falk

von Joachim (Gast)


Lesenswert?

Hm, vielleicht versteh ich das ja jetzt falsch, aber kannst du nicht 
einfach einen kompletten IO-Port einlesen? Dann kannst du ja quasi immer 
8 Bit gleichzeitig einlesen. Aber das ist zu einfach, ich hab bestimmt 
was falsch verstanden...

Gruß

von Karl F. (kafido)


Lesenswert?

Joachim schrieb:
> Hm, vielleicht versteh ich das ja jetzt falsch, aber kannst du nicht
> einfach einen kompletten IO-Port einlesen? Dann kannst du ja quasi immer
> 8 Bit gleichzeitig einlesen. Aber das ist zu einfach, ich hab bestimmt
> was falsch verstanden...

ja, das wär einfach - wenn die Meßschieber brav alle ihre Daten synchron 
anliefern würden. Da aber jeder - wie in jedem Meeting ;) - einfach dann 
losquatscht, wenn es ihm grade passt, wird das nix ...

@Falk:
Im moment wehr ich mich noch ein wenig dagegen, mehrere uC's in dem 
Projekt einzusetzen - ein ATmega und ein paar TTLs wären mir lieber, 
auch wenn die TTLs das Gleiche kosten wie ein ATtiny. Nur wenn dann das 
TTL-Grab teuerer wird als mehrere uCs, wird's blöd ...
Das Ganze ist ein low cost Projekt, alles soll so billig wie 
irgendmöglich sein.

Gruß
- Karl

von Tipp-Geber (Gast)


Lesenswert?

Senden die Messleisten zyklisch? Wenn ja, mit welcher Frequenz wird ein 
komplettes Datenpaket gesendet?

Wie schnell soll die Aktualisierung der Anzeige erfolgen? Vermutlich um 
die 10 Hz?

von nicht ich (Gast)


Lesenswert?

Hat der 328p nicht nen ganzen Berg Pinchange-Interrupts? Damit müsstest 
du das doch relativ einfach einlesen können.

von Peter D. (peda)


Lesenswert?

Karl F. schrieb:
> Spaß beiseite, ich möchte mit einem Mega328p die Daten von mehreren
> (mind. 3, eher 4-5) Meßschiebern gleichzeitig einlesen.

Warum muß es gleichzeitig sein?

Ich würde sie einfach nacheinander einlesen.
Laut Deinem Link kann man sie auf 50/s hochsetzen, das ist /4 immer noch 
viel schneller, als ein Mensch ablesen kann.


Peter

von Martin (Gast)


Lesenswert?


von Michael (Gast)


Lesenswert?

Falls die CPU-Leistung beim Parallelverarbeiten aller Datenströme der 
Engpaß ist und die Meßrate nicht allzu hoch sein muß, könnte die CPU die 
Daten im Zeitmultiplex aufnehmen, d.h. der µC kümmert sich immer reihum 
nur um einen Meßschieber und schaltet erst nach Empfang eines gültigen 
Datensatzes zum nächsten Meßschieber weiter. Das Auswählen könnte z.B. 
über ein bzw. zwei TTL Multiplexer laufen, die dann einen Meßschieber 
zum µC durchschalten.

von Meßgeselle (Gast)


Lesenswert?

Also der Vorschlag das von mehreren einzelnen kleinen Atmegas per Kanal 
zu erledigen ist simpel, effizient, pragmatisch , praktisch und gut !

GUT !

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Bei 80kHz und 16MHz hast du 2000 Takte Zeit um maximal 5x1 bit 
auszuwerten, das sollte selbst mit Interrupts reichen. Dafür nicht nur 
einen sondern mehrer Prozessoren zu langweilen finde ich irgendwie fies 
;-)

Eine andere Idee wäre, per Timer bpsw. alle 500 Takte einen Port 
einzulesen und diesen in 8 parallele Bitströme umzuwandeln (per 
shift/rotate). Alle 4000 Takte ergibt das 8 bytes zum Analysieren mit 
mindestens 3-bit hintereinander pro Impuls. Wenn die Protokolle je 
AVR-Pin bekannt sind kann man das Pollen bei den langsameren 
entsprechend seltener machen.

Mark

von Karl F. (kafido)


Lesenswert?

Mark L. schrieb:
> Bei 80kHz und 16MHz hast du 2000 Takte Zeit um maximal 5x1 bit
> auszuwerten, das sollte selbst mit Interrupts reichen.

Klingt auf den ersten Blick sehr verlockend.
Dumm nur, dass 16e6 / 80e3 = 200 (nicht 2000)
Dann wird das Ganze schon etwas knapper ...

- Karl

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

XMega verwenden und Event-System und DMA nutzen. Jedem Messschieber 
einen Port spendieren, dann kann man locker parallel arbeiten. Die CPU 
muss die Daten dann nur noch verarbeiten, nicht aber wegschaufeln.

Edit: Eventuell liessen sich die 8 UARTs / 4 SPIs des XMega verwenden, 
dann hat man noch 8x länger Zeit, bevor man reagieren muss.

von Karl F. (kafido)


Lesenswert?

Martin schrieb:
> FPGA

Knut Ballhause schrieb:
> XMega verwenden

Hallo Leute,

ich dachte ich hatte mich klar ausgedrückt:
ich will das mit einem Mega328p machen.
Das ist gesetzt, weil die Meßschieber nur Teil eines anderen Projektes 
sind.

Wenn das mit dem alleine nicht zu machen ist, dann bekommt er entweder 
ein paar TTLs oder ein paar Tinys zur Seite gestellt.

Evtl. ist das mit dem alternierenden Auslesen noch eine Idee.
Worst case wäre (glaube ich) wenn die Meßschieber nicht auf 50x gestellt 
sind und die 4x zeitgleich von mehreren Meßschiebern reinlaufen.
Ich werd mir das mal näher anschauen.

Danke für's mitdenken.

Gruß
- Karl

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Karl F. schrieb:
> ich will das mit einem Mega328p machen.

Dann mach.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Karl F. schrieb:
> Dumm nur, dass 16e6 / 80e3 = 200 (nicht 2000)
> Dann wird das Ganze schon etwas knapper ...

Oje, sorry da hab' ich mich ziemlich blöd verrechnet.
Dürfte aber trotzdem gehen, nur nicht ganz so bequem.

von Peter D. (peda)


Lesenswert?

Ich verstehe auch nicht, warum man unbedingt Meßschieber mit 
verschiedenen Protokollen verwenden muß.
Wenn alle das gleiche Protokoll sprechen, sollte es deutlich einfacher 
sein.


Peter

von citb (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ich verstehe auch nicht, warum man unbedingt Meßschieber mit
> verschiedenen Protokollen verwenden muß.

Das wird wohl daran liegen, wie immer.


Karl F. schrieb:
> Das Ganze ist ein low cost Projekt, alles soll so billig wie
> irgendmöglich sein.


citb

von Dietrich L. (dietrichl)


Lesenswert?

Karl F. schrieb:
> Evtl. ist das mit dem alternierenden Auslesen noch eine Idee.

Ich habe die Schieblehrenanzeige SLA1 von ELV:
http://www.elv.de/output/controller.aspx?cid=683&detail=10&detail2=69830
Sie hat 4 Kanäle und macht das mit einem Multiplexer.

Eingangsschaltung: Ziehwiderstände nach Masse, Resetschaltung koppelt 
Signal mit Diode ein, ein Jumper ermöglicht die Fernversorgung der 
Schieblehre mit 1,5V.
Dann kommt eine Pegelanpassung mit 4x LM393 und danach der Multiplexer 
(2x CD4503). Die beiden Signale gehen an PD6 und PD7. Der Prozessor 
scheint ein ATmega32 zu sein.

Gruß Dietrich

von Karl F. (kafido)


Lesenswert?

citb schrieb:
> Peter Dannegger schrieb:
>> Ich verstehe auch nicht, warum man unbedingt Meßschieber mit
>> verschiedenen Protokollen verwenden muß.
>
> Das wird wohl daran liegen, wie immer.
>
> Karl F. schrieb:
>> Das Ganze ist ein low cost Projekt, alles soll so billig wie
>> irgendmöglich sein.
>
> citb

Hallo Leute,

das liegt nicht NUR daran, dass es kostengünstig sein muss, sondern auch 
daran, dass es auf den Meßschiebern nicht draufsteht, was sie für ein 
Protokoll sprechen. Wenn ich drei gleiche Meßschieber im Laden kaufe, 
dann sind die sicherlich gleich, aber wenn ich zum Anbau an eine 
Maschine - vom selben Händler(!) - einen Meßschieber in 150mm, einen in 
250mm und einen in 500mm kaufe, dann kann das gut sein, dass die 
unterschiedliche Protokolle sprechen ... das Interface steht bei diesen 
Dingern nunmal nicht im Vordergrund. Ein weiterer möglicher Grund ist 
der stufenweise Ausbau einer Maschine - ein Jahr später gibt's evtl. 
dieses Modell Meßschieber nicht mehr bzw. man kann aus o.a. Grund 
zumindest nicht gezielt einen kaufen, der ein bestimmtes Protokoll 
spricht, leider.

Gruß
- Karl

Nachtrag: Wenn ich mir das aussuchen könnte, würde ich nur welche mit 
dem BCD6-Protokoll verwenden. Die 'zappeln' nicht, der Meßwert ist 
stabil und das Protokoll ist relativ langsam, so dass das Einlesen von 
mehreren Meßschiebern überhaupt kein Problem wäre ...

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.