Forum: Mikrocontroller und Digitale Elektronik externe 8Bit Daten (geclockt) mit ARM verarbeiten - wie?


von Joachim S. (styggy)


Lesenswert?

Hallo,

einen Gruß an alle Mitglieder hier im Forum - und ein frohes neues Jahr!

Ich bin neu hier und habe eine Frage, weiß aber nicht, wo genau ich die 
stellen kann.

Kurz zum Hintergrund: habe nach Jahrzehnten der "Abstinenz" vor zwei 
Jahren wieder mit Linux angefangen und bin mittlerweile auf PC im Kernel 
Bereich unterwegs (Treiber).
Die Logik verstehe ich, auch wenn es in den Details noch sehr langsam 
geht.
Gebt mir Zeit :-)

Bin auf embedded ARM Prozessoren gesto0en und möchte da gerne 
hineintauchen.

Mein konkretes Problem - bevor ich mir jetzt ein Evaluation Board zulege 
- ist folgendes:

Ich möchte gerne einen Logic Analyser bauen. Also Abgreifen von 
digitalen Signalen über ein embedded System und nachfolgende Analyse. 
Könnte auch ein Oszilloskop werden, spielt keine Rolle. Sollte auf jeden 
Fall verdammt schnell sein.

Thema ist, ich bekomme z.B. von einem externen A/D Wandler 
kontinuierlich 8bit Werte mit ner Clock und Valid etc. Evtl. noch ein 
Start-Bit zur Synchronisation. Evtl. auch seriell, dann aber definitv 
mit Start-Bit. (Kommt auf die Hardware vor dem System an, die ich 
natürlich gerne 100%ig flexibel halten möchte).

Diese Werte muss ich irgendwie verarbeiten. Sei es über DMA (dann 
brauche ich irgendeinen Chip, der die geclock'ten Daten sammelt und per 
DMA schreibt, oder einen Bus zum embedded Prozessor, der in wie auch 
immer aussehende Speicherbereiche schreibt.

Irgendwie habe ich da nach extensiver Suche noch keine Idee, wie und ob 
das funktionieren kann. SW im ARM oder Chip? Wenn Chip, welcher, bzw. 
wonach muss ich suchen? Stichwort?

Für Hilfe wäre ich dankbar. Hoffe, ich kann meinen Knoten lösen. Auch 
für Hinweise, ob vielleicht in anderen Threads oder HowTo?.

Grüße
Joachim

von (prx) A. K. (prx)


Lesenswert?

Joachim Von stieglitz schrieb:

> Ich möchte gerne einen Logic Analyser bauen.

Das klingt eher so, als hättest du bei CPLDs oder FPGAs vorbei schauen 
sollen. Die tun sich damit leichter. Den ARM nutzt man dann zur 
Auswertung, nicht zum sampeln.

von Joachim S. (styggy)


Lesenswert?

Hi,

wow - superschnell. Danke.

Habe - irgendwie vergeblich - nach FPGAs gesucht. Die machen doch 
irgendwie nur Verarbeitung von Daten. Habe das aber nicht wirklich 
verstanden, wenn ich ehrlich bin.

CPLDs sagen mir nach kurzer Durchsicht der hier verfügbaren Doku nichts.

Hatte gehofft, es gibt eine "normale" Methode, wie externe Daten im Arm 
verarbeitet werden können.
Analog sozusagen zum Verarbeiten im PC von PCI Devices über Interrupt 
mit Buffer.

Also etwas peripheres, dass mir nen Buffer erzeugen kann aus nem 
geclockten seriellen oder 8bit parallenen Signal.

Edit: bin aber hoffnungsvoll, dass ich hier einen Hinweis bekomme, wo 
ich mich schlau machen kann. Es geht mehr darum, wie ich die Datenworte 
in den ARM bekomme.
z.B. 16000 Werte übertragen, oder N Werte übertragn, bis neuer 
Synchronimpuls kommt, dann wieder warten und speichern bzw. DMAen oder 
buffern.

Grüße
Joachim

von Michael G. (let)


Lesenswert?

Hier etwas praktisches:
http://www.mikrocontroller.net/articles/MiniLA

Da hast du Peripherie die deiner CPU Daten zur Verfügung
stellt. Ich denke das du mit einem ARM ö.ä. nicht weit kommen
würdest.

In der Artikelsammlung gibt es vielleicht noch mehr in der
Richtung.

von Joachim S. (styggy)


Lesenswert?

Hi Michael,

danke für die Info.
Klar, es gibt sowas (Logic Analyzer) bestimmt schon, aber meine Idee ist 
anders. Vielleicht sollte ich den Logic Analyzer löschen. Der hat sowas 
"digitales".

Mein Ziel ist es, beliebige Analoge Werte (Spannung, Strom, Kraft, 
Schwingung, also Weg) analog zu digital zu konvertieren. Aber nicht mit 
mit evtl. vorhandenen ADCs sondern mit diskreten externen Schaltungen. 
Einfach um 100%ig flexibel zu sein. Ob mein Adapter nun 
Temperaturverläufe (langsam) oder Spannungsverläufe meines 
Zündkreislaufs im Auto (immer noch langsam) oder Spektralanalysen eines 
Empfangssignals (verdammt schnell) macht, wäre dann egal. Die externen 
Bausteine kriege ich hin.

Also Input = 8bit Wort oder serieller Stream. Wie beim PCIe - ich habe 
externe Karten, die sampeln. Hier ist es aber einfacher, da ich nur die 
vorhandenen Buffer per Interrupt lesen muss und gut ist. Das ist 
einfach, aber ich benötige für verschiedene Anwendungen verschiedene PCI 
Karten. Das ufert dann aus...

Meine Schnittstelle hätte ich gerne auf 8bit parallel oder seriell 
digital. Was mein embedded System dann draus macht, ist reine SW.

Irgendwie muss man doch externe 8bit Worte per DMA oder so empfangen und 
vernünftig verarbeiten können? Ist doch prinzipiell nichts anderes als 
die PCI Karten, die entweder onboard oder per DMA dann per Interrupt 
buffern? Der ARM ist doch trotz RISC ein "normaler Prozessor? Somit 
sollten zumindest DMA Controller verfügbar und anbindbar sein, oder 
andere elegantere Lösungen?

Wie gesagt - bin da blank - trotz intensiver Recherchen und es fehlt der 
Funke, wie ich mit dem ARM externe geclockte Daten empfangen kann (ohne 
den Proc nur damit zu beschäftigen, auf Daten zu warten und auch noch 
unsicher bzgl. der Clock Synchronisation zu sein).

Grüße
Joachim

von (prx) A. K. (prx)


Lesenswert?

Wenns nicht allzu garstig eilig ist, dann holt man heute Analogdaten 
seriell über SPI ab. Und wenn der ARM DMA drin hat, dann passiert das so 
ganz nebenbei.

Parallel geht das aber auch, wenns unbedingt sein muss. Ich meine die 
STM32 können getriggert durch einen Timer Daten von einem Parallelport 
per DMA in den Speicher schaufeln. Obs auch mit externem Trigger geht 
habe ich grad nicht parat.

von Joachim S. (styggy)


Lesenswert?

ups, cool - das stm32 scheint in die richtige Richtung zu gehen!

Aber das muss ich erstmal verdauen, bevor ich weiss, ob es funktionert, 
bzw. ich es implementieren kann, sieht nicht einfach aus. Newbie eben.

Keine "einfache" Lösung? Dann muss ich versuche, mich mit dem ST DMA 
controller zu verständigen (ich mag ST wirklich, by the way).

Und muss nochmal die paralelle Variante prüfen - hatte den Eindruck nach 
dem ersten Lesen, dass er parallel kann.
Außerdem kann das "Biest" wohl 12 DMA Channels gleichzeitig. Irgendwie 
ne Herausforderung, andererseits auch ein Kostenfaktor (der "Cortex" 
aleine riecht schon teuer), da ich nur einen einzige DMA Channel 
brauche. Aber da kann ich noch bei ST suchen.

Hilft mir jedenfalls erstmal weiter.

Bin aber dennoch auf der Suche nach einem "einfachen" 8bit DMA Zugriff.

von Frank K. (fchk)


Lesenswert?

Joachim S. schrieb:

> Irgendwie muss man doch externe 8bit Worte per DMA oder so empfangen und
> vernünftig verarbeiten können? Ist doch prinzipiell nichts anderes als
> die PCI Karten, die entweder onboard oder per DMA dann per Interrupt
> buffern? Der ARM ist doch trotz RISC ein "normaler Prozessor? Somit
> sollten zumindest DMA Controller verfügbar und anbindbar sein, oder
> andere elegantere Lösungen?

Ich hätte da ein FIFO genommen (von IDT gibts da einiges, leider auch 
viele alte Kamellen mit 5V Vcc), in das Deine externe Schaltung ihre 
Daten reintaktet, das Half-Full-Flag auf eine Interruptleitung, und wenn 
das FIFO dann halbvoll ist, kannst Du es dann in einer optimierten 
Schleife ohne weitere Abfragen leeren. Das sollte eigentlich relativ fix 
gehen, auch ohne DMA.

Um welche Taktraten geht es hier eigentlich?

fchk

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.