Forum: Projekte & Code 1-Kanal logic-analyser für Mega8 in C


von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Bastler,

für alle, die nicht das Geld für einen „richtigen“ Logic-Analyser 
ausgeben können, hier eine low-cost-Lösung mit Beschränkung auf einen 
einzigen Kanal (was für die Analyse von RC5-Sequenzen, DCF77 etc. aber 
auch völlig ausreicht.)

Das Funktionsprinzip:
Der 16-Bit-Timer1 eines Mega8 in Verbindung mit einem zusätzlichen Byte 
zeichnet die Flankenwechsel an ICP1 oder am Analog-Comparator mit 24 
Bit-Auflösung auf.
Abhängig vom eingestellten Wert des Prescalers lassen sich (bei 16MHz 
mc-Takt)  Ereignisse in einer Auflösung von 0.5us bis 64us über einen 
Zeitraum bis 8.4 bis 1073 Sekunden speichern. Allerdings mit der 
Einschränkung auf insgesamt maximalen 300 Taktwechsel, denn je Ereignis 
werden 3 Byte für das Ablegen des Zeitstempels im SRAM benötigt, sind 
also 300x 3 = 900 Byte (und der Mega8 hat nur 1024 Byte SRAM).
Die Steuerung sowie die Änderung aller Parameter des Logic-Analysers 
erfolgt über ein Terminalprogramm (z.B. hTerm), auch die Ausgabe des 
Ergebnisses erfolgt über die serielle Schnittstelle ans Terminal (und 
kann ggf. von dort zur weiteren Bearbeitung in einer Tabellenkalkulation 
exportiert werden).
Die Ausgabe kann wahlweise in als:
(-a1) unbearbeitete Liste der Counterwerte,
(-a2) Ausgabe der Counterstände an jeden Pegelwechsel mit 
Differenzberechnung,
(-a4) Dauer von Low- und High-Pegel mit Summe von Low-und High-Pegel (= 
Counts je Takt)


Hardwareanforderungen:
Mega8 mit 16MHz Quarz, MAX232 für die serielle Schnittstelle, ggf. noch 
ein Poti, wenn der analog comparator als Eingang des Signals genutzt 
werden soll.
Der Input wird an Pin ICP1 (wenn -c0) oder am Analog-Comparator erwartet 
(wenn -c1 gesetzt ist)
4 LED‘s sind für die Statusmeldungen an PC3-PC0 vorgesehen.
PC3 - Power on
PC2 - Warten auf Trigger
PC1 - Scannen
PC0 - Ready (PC1 und PC0 togglen während des Scans bei jedem 16Bit 
Counter Overflow.

Weitere Beschreibungen gibts im zip-File.

happy analysing

Michael S.

von Steffen (Gast)


Lesenswert?

Hallo,

was hat es mit den 24 Bit auf sich?

Steffen.

von Michael S. (Gast)


Lesenswert?

@ Steffen (Gast)

Ein 16-Bit Timer/Counter läuft nach 256*256 Counts über und beginnt 
wieder bei 0 zu zählen.
Bei einem Prescale von 8 und 16.000.000 MHz Takt passiert das nach:
256  256  (8 / 16.000.000) = 0.032768 Sekunden.
Wenn man also über einen längeren Zeitraum loggen (mit eindeutigen 
Werten) möchte, dann reicht ein 16-Bit Counter nicht aus.
Ein weiteres Byte verlängert den Zeitraum um den Faktor 256.
Alternativ kann man den Prescaler erhöhen, reduziert damit aber auch die 
Auflösun:.
Prescale = 64 -> Aufllösung 4us
Prescale = 256 -> Auflösung 16us
Prescale = 1024 -> Aufllösung 64us
Bei einem Prescale von 1024 und einem 16Bit Counter ist das 
Log-Intervall
256  256  (1.024 / 16.000.000) = 4,194 ... Sekunden.
Für eine DCF77 - Signal also auch noch etwas kurz (sofern die Werte 
eindeutig sein sollen !) .
Aber du kannst den Counter natürlich auf 16-Bit reduzieren, dann ist es 
möglich, 50% mehr Flanken aufzuzeichnen.
Alles klar ?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Naja der counter startet doch bei 0...
Bei jedem Flankenwechsel speicherst du den 16bit Wert
Wenn ein Überlauf auftritt ohne das ein Flankenwechsel auftrat 
speicherst du einen Wert.

Dann "weißt" du immer wann ein Überlauf standfand oder nicht?

von Skua (Gast)


Lesenswert?

Wer sagt den das die Zahlen immer gleich lang sein müssen.
Einfach nur 7 bit nutzen bit 8 zeigt an ob Zahl zuende.
Wird bei MIDI files so gemacht.

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.