Idee: 8Bit-Logik-Analysator mit nem Mega162

dino03

Aktives Mitglied
27. Okt. 2008
6.760
20
38
Sprachen
  1. BascomAVR
  2. Assembler
Hallo zusammen,

nur mal ne Idee ...

Es wär doch mal praktisch, für die Fehlersuche nen Logik-Analysator zu bauen.
8Bit (8 Eingänge) sollten da normalerweise reichen. Also ein schnelles RAM mit
8Bit und minimum 32k-Adressen Also 32kByte (62256 oder ähnlich). Damit man
auch längere Sequenzen wie eine Bus-Kommunikation mitlesen kann.

Wenn man mit kleineren Sample-Takten arbeitet könnte man alles über den
Mega162 machen. Bei höheren Sample-Takten müßte man das RAM über CE
daueraktiv halten um die Zugriffszeiten weiter zu minimieren und das RAM mit
Bus-Multiplexern vom Mega auf einen Binärzähler schwenken, der dann mit
etwas Digitallogik direkt die Sample-Daten ins RAM packt. Damit sollte man so
um die 10MHz Abtastrate hinbekommen.

Für die Anzeige kann man dann über den Mega162 das RAM ansprechen und
die Impuls-Diagramme auf nem GLCD anzeigen. Man muß ja nicht unbedingt
eine Interpretation der Daten machen (also zB bei I2C die Datenbytes anzeigen)
es reicht ja schon wenn man die Impulsfolgen im Display sehen kann und
eine Zeitskala hat.

Bei 32k-Samples kann man auch mit nem Cursor über die Samples fahren
oder evtl Zoomen (nur jeden 2ten, 4ten oder 8ten anzeigen). Oder man
ver-ODERt für den Zoom 2, 4 oder 8 Samples zu einem und zeigt ihn dann
an.

Naja ... im Moment nur ne Idee ...

EDIT: Mal das Pinout angesehen ...
ATmega162_PDIP40.jpg
PortA+PortC = Daten/Adressen fürs RAM
PortB = Daten GLCD
PE1,PD6,PD7 = Steuerung RAM
PD0,PD1 = Kommunikation UART zum PC
PE0,PE1,PD2,PD3,PD4,PD5 = für Steuerung GLCD, Tasten, ...
Mit dem Speicherinterface und dem GLCD ist der Mega162 am Ende seiner
Pins angekommen. Also wird man keine 8 Eingänge mehr frei haben.
Ergebnis ... Man muß bei diesem Mega die Signalerzeugung für das Samplen
und die Eingänge extern mit Digitaltechnik machen. Oder man verwendet nen
AVR mit mehr Pins. Dann ist man aber auch gleich bei den TQFP64-Gehäusen.
Auf jeden Fall wird es mit den Pins verdammt eng :rolleyes:

EDIT2: Also das GLCD benötigt anscheinend 6 Steuerleitungen.
Damit sind die Pins am Ende und es ist nichts mehr für Tasten frei.
Also entweder nen größeren AVR oder die gesamte RAM-Adressierung
extern machen. :( Schade ... 40Pin wär noch Anfänger-Löt-freundlich
gewesen. Und die Pins mehrfach verwenden gibt beim Programmieren
wieder nen Knoten im Hirn :D

Gruß
Dino
 
Hi Dino,

Prinzipiell finde ich es eine Super idee :) will ich auch schon länger mal machen aber komme nie dazu ich denk auch dass 8 Bit langen müssten und 10MHz für den Hobbybedarf auf jeden fall auch ..

Einzigste ich würde weg von dem M162, habe ihn vor Jahren schon in einem Produkt eingesetzt und naja das teil hat ein paar macken und wird von Atmel auch nicht mehr so ge"fordert". Die FAES mögen das ding auch nicht mehr irgendwie *g*. (Mir hat er immer Super gefallen weil er 2 Uarts hat aber dafür gibt es ja mittlerweile ersatz) mit dem Externen Ram hm naja .. der Mega128 ist ja auch nicht wild zu löten. Was mir da eben mehr gefallen würde wäre dass er auch noch ADCs hätte .. damit könnte man sich nicht nur aufs Digitale begrenzen (oder man macht nen schnellen Externen ADC hinzu geht ja auch)


aber so im allgemeinen hört sich das gut an :)
 
Sowas schwebte mir auch schon im Kopf rum, find die Idee damit gut. Obgleich ich eigentlich einen Datenlogger bauen wollte der die Daten an den PC Sendet (USB ^^ aber da def. mit FT232, besagter Kumpel will von seinem Kurs irgnedwie nicht abweichen und mag den FT232 uns Konsorten einfach nicht Oo) und das man sie dort auswertet ...

Find die Idee gut
 
Hallo,

Prinzipiell finde ich es eine Super idee :) will ich auch schon länger mal machen aber komme nie dazu ich denk auch dass 8 Bit langen müssten und 10MHz für den Hobbybedarf auf jeden fall auch ..
mit 10MHz Abtastrate sollte man ohne Probleme 2MHz Signale darstellen
können. Ne Glitch-Erkennung pro Eingang könnte man machen, finde ich
aber schon etwas zu heftig. Da ist ne große Speichertiefe (32k) schon
wichtiger und einfacher. Und 8Bit ... Man muß ja nicht unbedingt den
gesamten Datenbus und die Steuersignale bei Schaltungen mitlesen.
Die Steuersignale reichen meißtens aus.

Einzigste ich würde weg von dem M162, habe ihn vor Jahren schon in einem Produkt eingesetzt und naja das teil hat ein paar macken und wird von Atmel auch nicht mehr so ge"fordert". Die FAES mögen das ding auch nicht mehr irgendwie *g*. (Mir hat er immer Super gefallen weil er 2 Uarts hat aber dafür gibt es ja mittlerweile ersatz) mit dem Externen Ram hm naja .. der Mega128 ist ja auch nicht wild zu löten. Was mir da eben mehr gefallen würde wäre dass er auch noch ADCs hätte .. damit könnte man sich nicht nur aufs Digitale begrenzen (oder man macht nen schnellen Externen ADC hinzu geht ja auch)


aber so im allgemeinen hört sich das gut an :)
Also das mit dem M162 war hauptsächlich wegen dem Speicherinterface.
Jetzt würde ich wegen der Frequenz und wegen PCINTs eher auf den M644
gehen. Da die Pins sowieso nicht ausreichen und wegen der Abtastfrequenz
würde ich dann die Speicheradressierung mit nem 16Bit-Dualzähler mit Preset
machen. Der kann dann die 10MHz Takt (Abtastung) in die Speicheradressen
umsetzen für den Samplevorgang. Für das Auslesen über den Mega kann man
Adressen vorgeben (Preset) und dann die Daten aus dem RAM holen. Dafür
bräuchte man beim Mega lediglich 8Bit-Bus und ein paar Steuersignale für
den Digitalkram. Man sollte aber einen 16Bit-Zähler beim Samplevorgang
mitlaufen lassen, in dem man nachher den Triggerpunkt speichert. Das wäre
wichtig um die Werte vor und hinter dem Triggerzeitpunkt im Speicher
identifizieren zu können. Der Timer läuft dann synchron zum externen für
das RAM und startet beim Triggerpuls. Stop ist dann bei der halben
Speichertiefe. Also bei 32k-Speicher ist nach 16384 Stop für den internen,
der dann auch gleich den Samplevorgang stoppt. Dadurch hat man im RAM
16k vor und 16k hinter dem Triggerereignis. Durch Änderung des Stopvorgangs
kann man die Menge vor und hinter dem Triggerereignis ändern. Also zB
nur 4k vor dem Trigger und der Rest dahinter.

0---------T-----------32k
0----T----------------32k
0-----------------T---32k

T ist der Triggerzeitpunkt

Das externe RAM läuft dann sozusagen als Ring-Buffer und wird immer wieder
überschrieben. Erst beim Triggerereignis weiß der Controller wieviel Samples
er noch machen soll bis der Vorgang gestoppt wird. Das kann man dann
über ein Compare-Ereignis beim 16Bit-Zähler machen (Hoffe ich mal)

Als Eingänge würde ich MOSFETs nehmen, damit man auch Schaltungen
mit 3,3V oder 2,5V analysieren kann. Also diskrete Eingagsstufen.

Man könnte jetzt auch noch einen ADC-Eingang des AVRs verwenden um
Analoge werte zu loggen. Wegen den 12Bit muß man dann allerdings immer
2 Bytes des RAMs verwenden. Damit hätte dann das 32k-RAM 16k 12Bit
Samples im Analog-Modus. Das sollte auch für einiges reichen. Und wenn
man dann mit 10kSamples/s oder 20kSamples/s im Analogmodus arbeitet
sollte das für Audio oder Meßwerte auch reichen. Das geht dann allerdings
ohne Hardware-Beschleunigung komplett durch den AVR und wird wohl im
Endeffekt bei der Samplerate eher durch den ADC begrenzt.

Gruß
Dino
 
Hi,

ja der M644 ist auch gut geb ich dir recht.


Das mit den ADCs find ich auch nicht so das problem wenn die etwas langsamer gehen .. zur not könnte man ja auch nen externen adc nehmen.
 
Ich hab mal ein wenig in meinen eca-Listen geblättert ...
man bräuchte dafür einen 8Bit-Binärzähler mit Parallel-Load
Also alternativ nen 74161 würde gehen. Ist aber nur 4Bit.
Aber das laden muß synchron mit dem Takt passieren. Das
gefällt mir nicht. Reset und Laden müßte asynchron gehen.
Beim 74163 muß sogar der Reset synchron mit dem Takt
übernommen werden. Grütze.

Sampletakt-Umschaltung mit den Vorteilern könnte man mit
nem 74139 (2x4Bit Muxer) machen. Dann kann man auf
10Ms/s , 5Ms, 2Ms, 1Ms, 500ks, 200ks, 100ks, 50ks, 20ks
gehen und auch externen Sample-Takt anlegen. Sollte reichen.
Zum Runterteilen braucht man dann noch einen 2x Dezimalzähler
und einen :5 und :2 um auf die angegebenen Sampleraten zu
kommen.

Das Speichern müßte man mit dem doppelten Sampletakt und ner
kleinen Signalerzeugung machen ...
also bei 10Ms/s => 20MHz Takt und ein FlipFlop. Damit erzeugt man
folgende Signale ...


CodeBox Signalerzeugung
Takt :-___---___---___---___---_ doppelter Sampletakt
Q-FF :-______------______------_ FlipFlop-Ausgang :)2 geteilt)
Cycle: 0 1 2 3 0 1 2 3
Count:-_ -_ -_ RAM-Adresse erhoehen (negative Flanke Q-FF)
Latch: _- _- Eingang latchen (positive Flanke Takt bei Q-FF=Low)
Write: -___- -___- Write-Puls für RAM (Takt Low bei Q-FF=High)

Also mit einem FF und 2 Gattern kann man die Signale für den Samplevorgang
erzeugen.

Man könnte natürlich die gesamte externe Logik auch in einen CPLD packen :D
Hab ich aber noch nie was mit gemacht ...

Gruß
Dino
 
Hallo,

wollte mal nachfragen ob du schon gedanklich etwas weiter gekommen bist ?

*neugierig bin* ^^
im Moment bin ich ein wenig am grübeln, wie man den Speicher (SRAM) am
besten als Dual-Ported einmal vom Atmel und einmal vom 16Bit-Zähler (TTLs)
ansprechen kann ohne zuviele Pins am Atmel zu verbraten und ohne ein
TTL-Grab zu hinterlassen :D

Also dieses ...

Atmel-----D0-7/A0-15-----SRAM-----D0-7/A0-15------Sample-Steuerung

Am optimalsten wären 2 TTL-ICs, die einen 8Bit-Binärzähler enthalten, den
man mit einem Wert laden kann und der dann im Sample-Vorgang mit 10MHz
die Adressen hochzählt.

Die Logik sollte auf jeden Fall einfach sein, nicht zuviel Programm-Gewurschtel
brauchen usw ... wie üblich die Eierlegende WollMilchSau :D

Mal sehen ...

Ich hab darum auch schon an einen CPLD oder nen FPGA gedacht. Das wird
dann aber gleich wieder riesen HighTech ...

Die Gedanken wandern also noch ... ;)

Gruß
Dino
 
Hi Dino,

grübelz um so mehr ich das XPlain Board anschau .. (XMega) um so mehr würd mir das für so nen LogicAnalysator gefallen....

Man könnte gleichzeitig noch die ADCs / DACs nutzen um ne I/O Karte daraus zu baun.

Die UARTs könnte man nutzen um nen PC -> I²C / SPI Anbindung zu kriegen.

SRAM und Speicher on Board

Board sehr günstig (gibts um 30€) oder hier im Shop auch.

Man könnte den AudioAMP DAC Sogar vergewaltigen und nen Signalgenerator draus bauen für kleinere Freq.


Das wäre dann alles so ne richtig schöne kleine Eierlegende Wollmilchsau ^^
Von der Power denk ich müsste es auch hinhauen (ich muss gestehen ich hab noch keinen XMega richitg eingesetzt nur mal damit gespielt) aber das wäre auch n Positiver grund sowas zu nutzen ^^.

Es sind ja nur 2 Ports rausgeführt aber naja man kann ja die Taster / Leds auch noch "Umbauen"

*sowas würde mich ja schon reizen* ^^


Was haltest du von der idee ?
 
Hallo,

also der Logik-Analysator sollte möglichst einfach nachzubauen sein,
möglichst wenig ICs haben und mit Standard-Bauteilen bestückt sein.

Gründe: Damit auch Anfänger Probleme auf Bussystemen finden können.

Nen Mega128 auf einer Trägerplatine mit Steckern für 2,54mm Raster ist
dabei annehmbar (also sowas wie das Mega128-Board hier im Shop).
XMegas sind aber im Moment für Anfänger noch ne Nummer zu hoch.
So interessant das auch sein mag :D Aber irgendwo muß man leider die
Grenze ziehen.

Im Moment bin ich immer noch an dem verdammten Zähler-Problem dran.
Ich suche gut erhältliche Bausteine, die einen 8Bit-Zähler mit Preset
enthalten.

Teilweise denk ich schon da dran, einen CPLD oder was ähnliches zu
verwenden, der dann sozusagen vom Mega per ISP mit seiner Logik
gefüttert wird damit man nicht extra nen Progger für den braucht. Aber
da hab ich bis jetzt zu wenig mit gemacht und die meißten sind nur noch
mit TQFP oder ähnlichem. PLCCs (wegen Fassung) sind schon etwas rar.

Also im Endeffekt brauch ich für die Speicheransteuerung nen 16Bit-Zähler
der 10MHz verkraftet, den man parallel im 8Bit-Modus mit einem Wert
laden kann und bei dem man den aktuellen Zählerstand im Triggerzeitpunkt
in ein Register sichern kann das dann vom Mega abgefragt wird. Theoretisch
kann man das mit 4 Bausteinen machen, wenn ich 8Bit-Binärzähler mit
Preset finde und da 2x 74597 als Speicher für den Triggerpunkt dransetze.

Na mal sehen ... Irgendwann werde ich da was finden ...

EDIT: So ... Mein Grafik-Tablett ist jetzt auch am kleinen Lappi installiert ;)
LA-Idee_01.jpg
So hab ich mir das mit den Zählern, Registern und dem Speicher gedacht.
Das S&H-Latch puffert die Eingangswerte von den Probes zwischen.
Der Zähler läuft im Kreis und erhöht die Schreibadresse des SRAM für den
Speichervorgang. Wenn ein Triggerereignis ausgelöst wird, dann wird die
Speicheradresse des Ereignisses im 16Bit-Latch gepuffert und über einen
Counter des ATmega wird je nach Wunsch entweder die halbe Speichertiefe
weitergearbeitet (dann ist das Triggerereignis in der Mitte der gesampleten
Daten) oder man läßt nur noch 100 oder 200 oder beinahe die gesamte Tiefe
weitersamplen. Dann kann man sich ansehen was vor dem Ereignis oder was
danach passiert. Die Samplesteuerung soll hauptsächlich von externer
Logik erledigt werden (Geschwindigkeit) aber die Gesamtsteuerung übernimmt
der Atmel. Genau so wie das Auslesen der Daten aus dem SRAM. Dafür
werden die Lese-Adressen in den Zähler geladen (Parallel-Load) und dann die
Daten aus dem SRAM ausgelesen. Dann eins hoch und das nächste lesen.

So hab ich mir das also gedacht. ;)

Gruß
Dino
 
Hallo Dino,

ich währe kein guter Elektroniker (auch Bastler) gewesen, hätte ich diese Idee nicht auch schon gehabt. Allerdings währe ich von etwas höheren Abtastfrequenzen ausgegeangen. In Zeitschriften (CT??) hat es schon mal solche Projecte gegeben, und dort wurden auch PLD-s benutzt.
-- Was ich hier nur schnell anhängen möchte, bevor sich jemand für die hier erwänten S-Rams (62256 o. ä.) entscheident, es gibt noch schnellere SRAMS, - die oben erwähnten sind ca. 100 uS schnell es gibt equivalente die 15 oder gar 10uS schnell sind und im schmalen Dip gehäuse.. Mir fällt schell nur Die Nummer deren Bezeichnung ein, 199 z.B. Sie wurden in den etwas äleren PC´s benutzt...
 
Logik-Analaiser

Fortsetzung.
- in den älteren PC-s vor ca 6-7 Jahren?, wurden sie als RAM-2? benutzt, die Rambank die vom Pentium dann direkt bedient wurde (oder umgekehrt) eine ganz schnelle S-Ram Speicherbank . Die heutigen Prozessoren des PC haben dieses Ram meines Wissens integiriert. Es ist das Ram in dem, dem Prozessor die Vorausichtlichen mikro- Befehle profilaktisch im voraus zur verfügung gestellt werden....

Wolfgang,

vorläufig soviel..
 
Hi Wolfgang,

Fortsetzung.
- in den älteren PC-s vor ca 6-7 Jahren?, wurden sie als RAM-2? benutzt, die Rambank die vom Pentium dann direkt bedient wurde (oder umgekehrt) eine ganz schnelle S-Ram Speicherbank . Die heutigen Prozessoren des PC haben dieses Ram meines Wissens integiriert. Es ist das Ram in dem, dem Prozessor die Vorausichtlichen mikro- Befehle profilaktisch im voraus zur verfügung gestellt werden....
Die RAMs die ich zuhause habe liegen bei 55ns Zugriffszeit. Wenn man sie
dauernd aktiv läßt, dann liegt man noch darunter. An CPLDs hab ich auch
schon gedacht um die Sample-Logik damit zu bauen. Das ist als Projekt zum
nachbauen allerdings nicht geeignet da man dafür auch noch nen JTAG für
die Programmierung bräuchte was die meißten wohl nicht haben. Mit FPGAs
will ich erst garnicht anfangen (jedenfalls nicht dabei) weil man dann noch
nen Config-EEPROM bräuchte und die Dinger löttechnisch für Anfänger sehr
schwierig sind.

Ich versuche das so zu bauen das ich nen Logikanalysator für Anfänger
bekomme der löttechnisch mit möglichst wenig DIP-ICs aufzubauen ist.
Das Ding kann dann bei der Fehlersuche helfen.

Für mich selber würde ich auch lieber einen mit 200-300MHz Samplerate
bauen der über CPLD oder FPGA synchron mit mehreren SRAMs läuft um
die Datenrate zu schaffen. Das ist aber hier im Forum ein wenig Overkill
und außerdem gibt es bereits für um die 200,-eur USB-LAs die mindestens
100MHz Samplingrate schaffen und eine gute Auswertesoftware mitliefern.

Für die meißten Anwendungen (1Wire, I2C, ...) wird aber wohl eine
Samplingrate von 10MHz allemal ausreichen. Ist eben alles auch eine
Kosten/Nutzen-Frage ob man sich so ein Ding baut oder doch besser
kauft und wenn kaufen dann in welcher Größe.

Gruß
Dino
 
so ist es Dino,

aus dem idealen und möglichen einen Kompromiss zu finden ist die Lösung..
-Ein Logik-Analizer der einige Signale erkennt und darstellen kann ist besser, als einer der in meinen "grauen Zellen" als Future herummspinnt und praktisch nicht realisierbar ist. Darum: -----ist das einfache leider nicht gut genug und dass "bessere" von mir nicht realisierbar.
- das ist mein Wiederspruch!

p.s. Als ich jünger war, konnte ich mich einfacher für "das mögliche" entscheiden..Darum war ich "praktisch gesehen" viel erfolgreicher...

Wolfgang
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)