1-Kanal logic-analyser für Mega8 in C

Gast #1018196
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.
Angehängte Dateien:
Gast #1018298
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 ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren