Forum: Projekte & Code AVR USB Logik Analysator für unter 15 EUR


von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Hallo,



ich habe hier einen kleinen Logik Analysator gebastelt. Das besondere
ist eigentlich das die Hardware nur ein ATMega32 und ein USBN9604 ist.

http://www.ixbat.de/index.php?page_id=92

Es gibt ein kleines Konsolenprogramm (ein grafisches folgt evtl. bald)
mit dem man die Messungen starten und steuern kann.


Der Logik Analysator kann in 3 Arten betrieben werden.
1. Online Modus (max. 250KHz), ueber den USB Bus werden die Daten
abgeholt so das es zu keinem Stau kommt.
2. Interne Modus, es werden bis zu 1000 Werte in den internen RAM
gespeichert die danach abgeholt werden koennen. (sollte bis 4 MHz
gehen)
3. Snapshot Modus, hier kann man einzelne Werte abholen. Ist eher fuer
langsame Versuche.

Dazu gibt es zwei Triggerarten:
Einmal einen der auf die Flanke von einem Signal schaut und wenn das
entsprechende Ereignis aufgereten ist statet die Messung (online oder
intern)

Oder man gibt ein Muster vor welches immer verglichen wird, und wenn es
uebereinstimmt startet ebenfalls die Messung.

Das ganze laeuft unter Windows und Linux.


Gruss Bene

von Lupin (Gast)


Lesenswert?

ist schon cool, aber irgendwie sinnlos :(

Externes SRAM und ein CPLD könnten ein bischen mehr speed bringen.

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Es ging ja nicht um Speed. Sondern einfach guenstig messen.
Beim CPLD brauchst dann auch wieder ne Datenuebertragung, der SRAM ist
dann oft schlecht zum loeten usw....

Also einfach ohne grosse Aktionen messen, so dass es fuers Basteln
langt.

von Kola (Gast)


Lesenswert?

Cooles Teil,

ich hatte sowas auch schon ewig vor! Nun werde ich dein nehmen!

Dickes Lob!

von Frank (Gast)


Lesenswert?

ich find auch dass es als Bastlerobjekt was richtig Feines ist. Klar
wirds ne Menge besserer Geräte geben aber der Aufwand hier ist einfach
bestechend einfach und die Leistung dürfte für die meisten Bastler mehr
als ausreichend sein. Ich denk, bei der nächsten Reichelt-Bestellung
sind die nötigen Teile einfach mal mit dabei um so ein Ding einfach mal
nebenbei aufgebaut zu haben. Daumen hoch und weiter so!

bye

Frank

von Stephan H. (stephan-)


Lesenswert?

@Benedikt,
gute Idee, klein schnucklig und für serielle Protokolle völlig
ausreichend. Den probiere ich mal.

@Lupin,
" Externes SRAM und ein CPLD könnten ein bischen mehr speed
bringen."

und genau da sind alle hiesigen Projekte immer gescheitert oder zu
aufwendig geowrden.

von Sputnik (Gast)


Lesenswert?

250kHz..schafft das nicht auch schon der LPT-Port alleine?

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Puh keine Ahnung, aber mit USB in Kombination mit der libusb
(http://libusb.sf.net) hat man eine Betriebssystem unabhaengige schoene
Schnittstelle.

Dazu hat man direkt eine Spannungsversorgung dabei.

Und die Anzahl der USB Schnittstellen an einem PC im Gegensatz zur
parallelen Schnittstelle ist klar auch ein Vorteil fuer USB.

Ich denke man sollte neue Projekte wenn moeglich immer mit aktuellen
Schnittstellen durchfuehren.

von Stephan H. (stephan-)


Lesenswert?

Hallo Benedikt,
laß Dich von den 250 kHz nicht runter machen.
VIEL interseeanter finde ich die OFFLINE Methode mit 4-5 MHz.
Läßt sich da mit ext RAM zB. aus alten 486ér Board noch was rausholen?

Wie siehts mit ner geschlossenen Oberfläche aus ???
Ohne 2 Programme mit Parameterübergabe nutzen zu müssen ??
Da ist noch Potential, denke ich.


Ich meine für die kleinen Analyser Dinge reicht der DICKE aus !!!
Und wer mehr braucht, soll es auch haben.... aber nicht für 15 EUR !!

Also bleib dran....

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Also fuer den "dickeren Geldbeutel" waere der ATMega128 eine feine
Sache. Der hat ein externes Speicherinterface.

Jedoch ist der auch wieder in SMD Bauweise.

Beim ATMega32 haette noch genug Ports frei und koennte so ein Interface
emulieren.
Die ATmegas schaffen pro Takt einen Befehl, also braucht ein Befehl ca
62 ns (bei 16MHz). Wenn man mal sagt wir wollen mit 5 MHz aufzeichnen
muesste man alle 200 ns Daten lesen.

Ich glaube das wird fast zu knapp (3 Befehle fuers Speichern).

Bei 1 MHz was auch super schnell ist fuer diese Messungen haetten wir
Zeit fuer 16 Befehle, denk damit sollte sich RAM vollschreiben lassen.

Hast du mit einem bestimmten Baustein schon Erfahrung? Dann sollte man
das verwirklichen, wobei da natuerlich wieder ein Baustein in DIP  Form
besser waere so kann man es einfacher nachbauen.

Ich schau nachher mal meine Speicherschachtel durch. Irgendeinen Atmel
Speicher habe ich evtl. noch ist nur die Frage wie schnell die sich
beschreiben lassen und wie gross die sind.

von Benedikt (Gast)


Lesenswert?

Wiso nehmen alle gleich mega32 aufwärts ?
Ein mega8515 bietet auch ein Speicherinterface und ausreichend Speicher
für solche Programme.

Mit einer Pseudo DMA Schaltung (AVR erzeugt WR Impuls und die Adressen,
die Daten laufen direkt zum SRAM), sollte man ohne großen Aufwand ein
Byte pro 6 Takte aufzeichnen können:

loop:
ld temp, X+
cpi XH, WERT
brne loop

Das macht bei 16MHz also maximal 2,66MByte/s.

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Ah der ist ja cool, den kannte ich gar nicht.

Danke werde ich mir gleich mal bestellen.

Kennst du einen 64 K Speicher in DIP ? Das waere dann die ideale
Kombination.

von Benedikt (Gast)


Lesenswert?

64k Speicher sind sehr selten.
Es gibt nur 2k,8k,32k,128k usw.
Schau mal bei Reichelt, da gibt es 55ns SRAM.
Ansonsten ein 386 oder 486er Mainboard schlachten.

von Stephan H. (stephan-)


Lesenswert?

@Benedikt,
ah jetzt sehe ich durch. du bist ein neuer Benedikt. von dem anderen
hatte ich ja schon ne Menge Stoff gelesen.
Also auf den alten 386ér und 486ér Boards sind meit sowas wie 24257
drauf. Ist nen 32k x 8 SRAM CMOS. Die haben 15nS !!!!!
Die wären warscheinlich ideal für sowas.
Billig beschaffbar, DIL und schnell. Ich habe hier noch einige.
1 oder 2 Stk davon sollten doch schon reichen oder ??
Datenblatt:
http://www.datasheetcatalog.com/datasheets_pdf/W/2/4/2/W24257AK-20.shtml

Also schaun mer mal.

von Axel Heider (Gast)


Lesenswert?

Hallo,

ich habe mit mal folgendes überlegt und bauer das gerade. Auf einem
486er Board hab ich noch 8x TC55328P-20 gefunden (32k Speicher, 20ns).
5 4-bit Zähler (74HCT161) werden zu einem 20 Bit Zähler
zusammengeschaltet und damit habe ich einen 20 Bit Address-Bus. 15 Bit
(0-14) sind für die Addressen pro TC55328P , Address-Bus Leitungen
15,16,17 gehen in einen 74HCT138 (3-8 Decoder invering), so dass ich
die 8 TC55328P jeweils über die /CE Leitung ein/aus-schalten kann. Die
Ausgänge der TC55328P werden auf einen 8 Bit Datenbus gegeben. An diese
Bus sind auch die 5 74HCT161 angeschlossen, denn diese Zähler können
auch mit einem Wert programmiert werden. Damit habe ich einen
Speichermodul, das nach Aussen nur noch den 8 Bit Datenbus hat sowie
ein paar Steuerleitungen, über die die folgenden Funktionen realisiert
werden: ReadMem, WriteMem, IncAddress, ResetAddress, SetAddress (an der
Stelle bin ich noch am überlegen, welche Steuerleitungen ich brauche).

Um dieses Modul in einem Logic Analyzer zu nutzen lasse ich von einem
Quarz nun die Auzeichnungsfreuenz vorgeben. Dabei kann der Quarz
entweder direkt an die Leitung IncAddress angeschlossen werden oder
noch ein Teiler zwischengeschaltet werden. Vom AVR wird dann nur noch
ein die Leitung "WriteMem" kontrolliert. Sobald die auf High geht
werden Daten aufgeteichnet. Später kann der AVR die Daten dann
auslesen. Damit sollten eigentlich nur noch die 20ns der TC55328P der
begrenzende Faktor sein und nicht mehr der AVR. Ich glaube zwar nicht,
dass damit auch praktisch 50MHz erreicht werden können, aber 10 MHz
erscheinen mir doch realistisch.

Soweit meine Idee. Was dann noch fehlt ist ein Trigger Schaltkreis
sowie eine autmatische Abschaltung wenn der Speicher voll ist bzw. zu x
Prozenz voll ist. Letzteres könnte dann verwendet werden, um auch Daten
vor dem Tigger-Event aufzeichnen zu können. Die
Auszeichnungs-Abschaltung plane ich evtl über einen zweiten Zähler zu
realisieren, der dann synchon zu den 74HCT161 des Speichers läuft. Er
wird mit einem bestimmten Wert programmiert (je nachdem, wieviel Daten
vor/nach dem Trigger-Event verfügbar sein sollen), wenn der Trigger
zuschlägt. Da er auch aus 74HCT161 besteht, dann kann das Carry-Signal
verwendet werden, um einen Überlauf zu erkennen. Dieser löst dann das
Ende der Aufzeichnung aus und der AVR muss sich hier ebenfalls um
nichts kömmenr. Er schaltet das das hanze nur schaft und bekommt am
Ende noch einen Interrupt, wenn die Aufzeichnung fertig ist. Dann liest
er die Daten aus und dann die dem PC geben.

Was meint hier, ist das Projekt bzw der Ansatz letztlich realistisch,
um rein mit Standard-Logokbauteilen das Maximum rauszuholen?

von Manuel (Gast)


Lesenswert?

Gute Idee!

>Da er auch aus 74HCT161 besteht, dann kann das Carry-Signal
>verwendet werden, um einen Überlauf zu erkennen. Dieser löst dann das
>Ende der Aufzeichnung aus und der AVR muss sich hier ebenfalls um
>nichts kömmenr.

Aber warum nicht einfach ne And-logik so beschalten das sie bei der
gewünschten addresse ein high ausgibt?
Oder hab ich da jetz was falsch verstanden?

MfG
Manuel

von Axel Heider (Gast)


Lesenswert?

Das mit der AND-Logik wäre auch machbar. Aber das halte ich für
wesentlich aufwendiger, weil das noch mehr Bauteile braucht. Mit den
161er (von denen ich genug in der Basatelkiste habe) wären das 5 ICs
und es würde für jede 20 Bit Adresse gehen.
Ich kommt zumindest jetzt gerade nicht drauf, wie so eine AND-Logik aus
Standardbauteilen aussehen könnte, die auch für jede Adresse geht.

Axel

von smi (Gast)


Lesenswert?

Also die and logic ist einfach wenn der ram voll ist sind alle adressen 
auf 1 also 0xFFFFF.Die Gatter mit je einem eingang an die Adressleitung
so schalten sich 10 gatter frei die dann 5 dann 2(3Leitungen) dann 1 
dann zu letzt einer der High get.
| |  | |  | |  | |  | |  | |  | |  | |  | |  | |
A1A2 A1A2 A1A2 A1A2 A1A2 A1A2 A1A2 A1A2 A1A2 A1A2
 \    /    \    /    \    /    \    /    \    /
  A1A2      A1A2      A1A2      A1A2      A1A2
     \     /             \               
       A1A2                A1A2          /
           \                           
            -----A1A2-----             /
                    \                 /
                     ------A1A2------
                             |
Die Logic kann mann auch mit 4er And Gatter machen.
Mit 2ern $ pro IC Sind das 5 IC´s

von Neo (Gast)


Lesenswert?

Gibt es die Variante auch ohne die USB geschichte?
Ich werd aus dem Quelltext nicht ganz klar, wird der USB-Chip noch zum 
Steuern benutzt?
Ist es möglich noch etwas mehr Samples als 1000 zu bekommen, aber da 
wird es vermutlich ein Speicherproblem geben?

Ich find das Projekt sehr Interessant, leider hab ich es bisher nicht 
geschaft die Software auf dem PC zum laufen zubekommen, ich benutz Win 
und irgendwie find ich nicht die richtigen Programme dafür, Bitte um 
Hilfe.

Gruß Neo

von Chris (Gast)


Lesenswert?

Wie wäre es, anstatt 8bit, 2 oder 4bit zu haben, aber bei 4 oder 2facher
samplerate. Für mich würde es genügen, wenn man zwischen den Modi 
umschalten kann.

von Philipp K. (philippk) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo

ich bin auch sehr begeistert von dieser Idee, und hab mir vorgenommen 
eine GUI zu machen, damit man nicht mehr von der Konsole aus alles 
machen muss. Leider läuft beim mir das Ding noch nicht so richtig.
Wenn ich das Programm folgendermassen starte:

logic2vcd -f messung.vcd -R online -s 1ms -n 1000

dann bleibt er mir bei found hängen, und das bei XP und openSuse 11. 
Kann mir da wer weiterhelfen? Ich bin mir auch nicht ganz sicher ob der 
INF Treiber für Windows korrekt ist, den ich dafür abgeändert habe. Im 
Anhang sin die Dateiversionen die ich verwendet habe


P.S. Wers noch nicht weiss, bei openSuse ist USBProg bereits in den 
Repositories drin.

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.