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
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.
@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...)
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.
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.
@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... :-)
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.
@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?
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...)
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?
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.)
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.
> 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... :-)