Forum: Mikrocontroller und Digitale Elektronik Logic Analyzer bauen


von mr.chip (Gast)


Lesenswert?

Hallo

Um meine Ausrüstung noch etwas zu komplettieren, denke ich derzeit 
darüber nach, einen Logic Analyzer zu bauen. Es gibt ja das 
mikrocontroller.net-Projekt (Mir aber bald etwas zu wild und zudem noch 
etwas chaotisch.) sowie weitere vorgestellte Eigenbaulösungen. Und 
eigentlich habe ich Lust, selbst etwas zu entwickeln.

Das Gerät werde ich einerseits zum Debuggen von Mikrocontroller- und 
CPLD-Schaltungen (Ähm, am liebsten später auch für FPGAs, aber wohl 
unrealisitisch.), andererseits aber auch fürs "reverse engineering" von 
irgendwelchen Geräten und Protokollen verwenden. (Computermaus, 
Diskettenlaufwerk, Wiimote, Handy-IR-Port - nur so als Beispiele)

Ich weiss nun nicht recht, was ich brauche und wo die Schwierigkeiten 
liegen. Vielleicht könnt ihr mir ja etwas weiterhelfen :-)

1. Samplerate. Mehr als 50 MHz dürften mit dem vorgesehenen XC9572 kaum 
drin liegen. Reicht das? Wie weit reicht das? Und ist das überhaupt 
realistisch?

2. Analogteil. Soweit ich es sehe, werden die zu analysierenden Signale 
5 V oder 3.3 V haben. Dürfte ja eigentlich beides vom XC9572 verstanden 
werden. Aber welche besonderen Probleme könnten die bis zu 50 MHz 
schnellen Signale mit sich bringen?

3. Triggerung. Was braucht man hier in der Praxis?

4. Speichertiefe...?

Jaja, ich weiss, etwas konfus :-)

Gruss

Michael

von Benedikt K. (benedikt)


Lesenswert?

Ich würde mir nicht allzuviel Gedanken über Samplerate usw. machen. Wenn 
mit dem CPLD eben nur 40MHz drin sind, dann sind 60MHz eben nur das 
Wunschziel (die Werte sind jetzt einfach mal willkührlich gewählt).
Schau was du an Speicher bekommst und bau das Ding.

Wenn du damit arbeitest merkst du was fehlt, dann kannst du immer noch 
das Ding erweitern oder eine 2. Version bauen, bei der alle 
Schwachstellen der 1. Version behoben sind.

Ich würde mal mindestens 16bit, besser 32bit ansetzen. Speichertiefe 
einige 10k oder besser >100k bis max. 1M.
Bis einige 10MS ist relativ leicht. Über 50MHz wird es schwer, da man 
dann auf Laufzeiten auf den Leitungen achten muss usw.

von mr.chip (Gast)


Lesenswert?

@Benedikt: 16 bit - damit meinst du die Anzahl Kanäle? Ich dachte 
eigentlich an 8 Bit und 64 kByte Speicher. Wofür braucht man denn so 
viele Kanäle, und vorallem eine solche Speichertiefe? (Ich habe noch nie 
mit einem Logic Analyzer gearbeitet, und leider auch keine Gelegenheit 
dazu - das erleichtert die Planung natürlich nicht unbedingt...)

von Benedikt K. (benedikt)


Lesenswert?

Sagen wir mal du steuerst irgendwas an (HD44780 LCD oder sowas in der 
Art) dann brauchst du 8bit Datenbus + Steuersignale. Also schonmal >8 
Leitungen, daher 16 als Minimum. Falls noch ein 8 oder 16bit Adressbus 
dazukommt sind es dann die 32.

Die hohe Speichertiefe kommt dadurch zustande, wenn man z.B. die 
komplette Initialisierung vom LCD aufzeichnen möchte. Haben die Impule 
z.B. 1µs Breite muss man mit mindestens >1MHz aufzeichnen. Bei 64k wären 
das gerade mal etwa 64ms. Da man bei der LCD Initialisierung öfters mal 
Pausen im Milisekundenbereich hat (und um Sicherzugehen manchmal auch 
10ms verwendet), wird das ganze schon etwas knapp.
Daher haben eigentlich fast alle gekauften Logikanalyser einer zweiten 
Aufzeichnungsmodus, der nicht dumm mit x MHz aufzeichnen, sondern nur 
dann etwas abspeichert wenn sich irgendwas auf den Leitungen ändern 
(Änderung + Zeitpunkt müssen gespeichert werden). Das spart vor allem 
bei nicht allzuviel Aktivität auf den Leitungen Speicherplatz. 
Allerdings ist das nicht ganz so einfach zu bauen wie das dumme 
Aufzeichnen. Daher lieber etwas mehr Speicher nehmen, dafür wird aber 
die Entwicklung des Logikanalysers einfacher.
Das sind zumindest meine Erfahrungen.

von Schorsch (Gast)


Lesenswert?

Bei der Planung solltest du auch daran denken, wie du die Daten zur 
Anzeige bringst. Sinnvoll wäre hier natürlich der PC, d. h. du mußt eine 
geeignete Schnittstelle auswählen. Und schleßlich brauchst du ne 
gescheite Software auf PC-Seite. Excel und Konsorten sind zwar ne 
Lösung, die aber auf Dauer nerven.

Aus der Not heraus habe ich mir an einem Samstag (oder war's ein 
Sonntag?) mal einen LA mit einem dsPIC gebaut. Einfach einen Port 
genommen, den gepollt und die Werte direkt in das SRAM geschrieben. Dank 
der DSP-Funktionalität (Hardwareunterstützung von Schleifen) konnte ich 
damit 10MHz Abtastrate erreichen und dieses Teil hat mir schon sehr 
viele gute Dienste geleistet.

Um ne Computermaus zu belauschen, reicht das allemal. Zwar ist der 
Speicher etwas begrenzt, aber besser als nichts.

von mr.chip (Gast)


Lesenswert?

@Benedikt: Klingt logisch wegen der Speichertiefe. Du nennst die 
intelligente Aufzeichnung, dazu kommt mir noch das Thema Triggerung in 
den Sinn:

Was für Trigger sollte man einbauen? Eine reine Erkennung, ob auf einer 
Leitung was läuft, finde ich etwas mager. Ich dachte an 
Flanken/Zustandserkennung auf etwa 4 Leitungen sowie ein komplexeres 
Muster (ca 8 Bit lang) auf einer Leitung. Oder ist das völlig 
übertrieben?

@Schorsch: Die PC-Software ist auch noch so eine Sache. Da es hier 
offenbar schon gute Lösungen für Eigenbau-LAs gibt, evtl. werde ich eine 
solche verwenden. Den LA selbst möchte ich aber selbst entwickeln. Eine 
andere Lösung für die Software wäre ein Scripting-System, wo man mittels 
einer einfachen Programmiersprache beliebige Auswertungen coden kann. 
Aufwandsmässig ist sowas aber dann wohl ausserhalb dem vorgesehenen Bau 
eines kleinen Tools... :-)

von Stefan (Gast)


Lesenswert?

@Schorsch:

Dein projekt "LA mit einem dsPIC" klingt interessant, könntest Du das 
hier veröffentlichen?
Danke.

von Schorsch (Gast)


Lesenswert?

LOL kann ich tun, aber gib mir etwas Zeit. Außer dem Quelltext ist da 
nämlich nix vorhanden :)

von Benedikt K. (benedikt)


Lesenswert?

Die Triggerung kann man vom Aufwand her locker derart kompliziert 
machen, dass man damit einen eigenen CPLD füllen kann.
Ich habe es mir einfach gemacht und einfach ein 1Bit Latch genommen:
Daten und Takt sind an jedes der 16 Eingangssignale schalt und 
invertierbar.
Als Triggerbedingung erhält man dann: Start wenn Low auf Leitung 5 und 
eine steigende Flanke auf Leitung 2.
Das ist zwar ziemlich wenig als Triggermöglichkeit, aber mir hat es 
meistens gereicht. Ich triggere dann z.B. auf die Resetleitung oder auf 
fallende Flanke von WR\ wenn CS\ Low ist oder so.

Zur Darstellung der Daten nutze ich ein einfaches, selbstgeschriebenes 
C++ Programm, das speziell an meinen Logikanalyser angepasst ist (für 
eine Echtzeitdarstellung) oder GTKWave zum Darstellen der 
aufgezeichneten Daten.

@Schorsch:
An dem dsPIC Code wäre ich auch interessiert.

von mr.chip (Gast)


Lesenswert?

@Benedikt: Dann werde ich meine Triggerung auch nicht allzu kompliziert 
machen. Evtl noch eine Mustererkennung über einige Bits auf einer 
Leitung.

Unschlüssig bin ich noch beim Analogen teil, d.h. die Eingänge. Direkt 
an die Pins (für 3.3 und 5 V) oder doch noch Levelshifter ran?

von Benedikt K. (benedikt)


Lesenswert?

Ich habe bei mir normale HCT245 verbaut. Die haben TTL Schaltschwelle, 
erkennen also in 3-5V Systemen die Pegel korrekt.
Allerdings ist das keine saubere Lösung. Legt man einmal mehr als 5V an, 
sind die Eingangspuffer hinüber (ich zähle garnichtmehr wie oft ich die 
schon getauscht habe: einen Pin daneben erwischt, Plopp, Mist, das war 
die 12V Leitung...)

von mr.chip (Gast)


Lesenswert?

Und wenn man zum Schutz noch einen Serienwiderstan 1 oder 10k Ohm 
einbaut? Da die Eingänge sowieso hochomig sind, sollte der 
Spannungsteilereffekt sich ja sehr in Grenzen halten.

Was für Anschlüsse sieht man eigentlich am besten vor, d.h., wie greift 
man die Signale ab?

von Benedikt K. (benedikt)


Lesenswert?

mr.chip wrote:
> Und wenn man zum Schutz noch einen Serienwiderstan 1 oder 10k Ohm
> einbaut? Da die Eingänge sowieso hochomig sind, sollte der
> Spannungsteilereffekt sich ja sehr in Grenzen halten.

Für Gleichspannung stimmt das, aber rechne mal bei 10pF Eingangskapzität 
und 10k die Grenzfrequenz aus...

> Was für Anschlüsse sieht man eigentlich am besten vor, d.h., wie greift
> man die Signale ab?

Ich habe bei mir D-SUB Buchsen eingebaut. Auf die obere Reihe die 16 
Eingänge, auf die untere GND. So hat man immer abwechselnd Signal, GND, 
Signal, GND... Das Hilft übersprechen zu vermeiden.
Da schließe ich dann entweder direkt passende Kabel an die z.B. 
Anschlüsse für ISA Bus oder ähnliches haben, oder Testklemmen (gibts 
z.B. bei Reichelt für <1€ bis >5€ pro Klemme, je nach Qualität.)

von Dirk (Gast)


Lesenswert?

Hallo, ich hab mein Intronix LA aufgeschraubt. Die Eingangsstufe besteht 
aus einem Frequenzkompensiertenspgteiler. Der FPGA ist ein Cyclone II 
und zur Übertragung der Daten ist ein FT245 drauf. 
Konfigurationsspeicher konnte ich auf der PCb nicht entdecken.


von mr.chip (Gast)


Lesenswert?

> Für Gleichspannung stimmt das, aber rechne mal bei 10pF Eingangskapzität
> und 10k die Grenzfrequenz aus...

Autsch, ja. Was man auch so allerlei beachten muss... :-)

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.