Forum: Mikrocontroller und Digitale Elektronik HP3478A: SRAM durch ATmega48 ersetzt


von Volker B. (Firma: L-E-A) (vobs)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

nachdem mir das Theater mit der regelmäßigen Kontrolle der 
Pufferbatterie in meinem HP3478A auf Dauer zu blöd wurde, kam mir die 
Idee, den SRAM-Baustein durch einen ATmega48 zu ersetzen. Zuvor musste 
ich jedoch den Inhalt des SRAMs sichern. Dazu wurde kurzerhand die 
i8039-MCU gesockelt. Aus einem alten DIL-Sockel bastelte ich mir einen 
einfachen Adapter, an den über Flachkabel an ein kleines 
ATmega16-Evaboard gekoppelt wurde. So konnte das SRAM (und auch gleich 
noch das ROM) schnell ausgelesen und deren Inhalt via RS232 auf dem PC 
gesichert werden.

Im nächsten Schritt wurde das SRAM ebenfalls ausgelötet und an seine 
Stelle ein Sockel gelötet. In diesen Sockel wird das mega48-Modul 
gesteckt, wie aus den beigefügten Bildern ersichtlich. Da Bauhöhe zur 
Genüge zur Verfügung stand und ich mir beim Layout "keinen abbrechen" 
wollte, steht die AVR-Platine senkrecht.

Zur Applikation des AVR gibts nicht viel zu sagen. Er arbeitet mit einem 
20-MHz-Quarz. Die 8 Adressleitungen liegen an PortD. Das Low-Nibble von 
PortC liegt am Daten-Bus. C.5 ist mit CE2 verbunden, /CE1, OD und R/W 
liegen an Port B, an welchem auch die ISP-Schnittstelle hängt, deren 
Signale nicht anderweitig verwendet werden.

Der AVR liest die Justagedaten aus seinem EEPROM. Im EEPROM liegen sie 
gepackt, also immer zwei Nibbles in einem Byte vor. Im RAM bekommt jedes 
Nibble sein eigenes Byte.

Schreibzugriffe landen zuerst im RAM, parallel dazu wird ein Flag 
gesetzt. Erfolgt eine gewisse Zeit kein Zugriff auf das emulierte SRAM, 
so speichert der AVR die geänderten Daten im EEPROM ab.

Die eigentliche I/O-Routine ist in Assembler programmiert. Das einzige 
Problem, das mich längere Zeit beschäftigte, war dem Umstand geschuldet, 
dass die MCU des Messgeräts /CE1 des SRAMs nach dem Lesen eines Nibbles 
offensichtlich nicht deaktiviert -- man darf also nach der Ausgabe eines 
Nibbles nicht warten bis /CE1 inaktiv wird...

Ein weiterer Vorteil dieses Aufbaus, neben der Batteriefreiheit: Nach 
einer neuen Justage können die neuen Abgleichdaten direkt aus dem EEPROM 
des AVRs ausgelesen und gesichert werden.

Grüßle,
Volker.

P.S.: Mir ist schon klar, dass dieser Ansatz ein wenig pervers ist. Die 
MCU, die lediglich das SRAM emuliert, besitzt deutlich mehr 
Rechenleistung als die beiden MCUs des Messgeräts :-)

von Uwe (Gast)


Lesenswert?

Hallo Volker,

danke für den Bericht und mir gefällt was Du realisiert hast.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Interessantes Projekt.
Ich find das ja toll, daß der Mega48 schnell genug ist SRAM zu 
emulieren.
Wie schnell ist der RAM-Bus auf dem Messgerät ?

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Dennis Heynlein schrieb:

> Wie schnell ist der RAM-Bus auf dem Messgerät ?

Die i8039-MCU wird in meinem HP3478A (alte Serie von 1983, keine 
Optokoppler sondern Impulsübertrager) mit einem 5.856MHz-Quarz 
betrieben.
Lt. Intel-Timingdiagramm benötigt ein kompletter Buszyklus 12 Takte.
Im HP3478A wird das RAM-CS1 über die steigende Flanke von ALE gelatcht. 
D.h. die Adressen sind (theoretisch) nach sechs i8039-Takten oder 
6*20/5.856=20 AVR-Takten gültig. Nach weiteren sechs 8039-Takten haben 
die Daten gültig zu sein bzw. müssen übernommen werden. Beim HP3478A ist 
jedoch zu beachten, dass CE1 über mehrere Zyklen hinweg aktiv gehalten 
wird (siehe Ursprungsposting). Der AVR weiß also nicht, wann ein Zyklus 
wirklich begonnen hat. Deshalb latche ich in der ersten Hälfte lediglich 
das Adressbyte und polle OD, CE1 und R/W. Im zweiten Teilzyklus wird 
dann die Adresse berechnet, das Datenbyte aus dem RAM geladen, das 
untere Nibble ausmaskiert, der Port auf Ausgang geschaltet und das 
Nibble ausgegeben. Wenn man alles in Registern hält, reicht's gerade so.

Lesen ist etwas bequemer, da die Adressarithmetik auch noch nach der 
Übernahme der Daten erfolgen kann, der Port nicht umgeschaltet und das 
Nibble nicht maskiert werden muss

Mit 16MHz wird's schon recht knapp, da dann nur noch 16 Taktzyklen zur 
Verfügung stehen.

Tja, ein FRAM wäre vermutlich die einfachere Lösung gewesen ;-)

Grüßle,
Volker.

von Gerhard W. (wiesl)


Lesenswert?

Volker B. schrieb:
> Dennis Heynlein schrieb:
>
>> Wie schnell ist der RAM-Bus auf dem Messgerät ?
>
> Die i8039-MCU wird in meinem HP3478A (alte Serie von 1983, keine
> Optokoppler sondern Impulsübertrager) mit einem 5.856MHz-Quarz
> betrieben.
> Lt. Intel-Timingdiagramm benötigt ein kompletter Buszyklus 12 Takte.
> Im HP3478A wird das RAM-CS1 über die steigende Flanke von ALE gelatcht.
> D.h. die Adressen sind (theoretisch) nach sechs i8039-Takten oder
> 6*20/5.856=20 AVR-Takten gültig. Nach weiteren sechs 8039-Takten haben
> die Daten gültig zu sein bzw. müssen übernommen werden. Beim HP3478A ist
> jedoch zu beachten, dass CE1 über mehrere Zyklen hinweg aktiv gehalten
> wird (siehe Ursprungsposting). Der AVR weiß also nicht, wann ein Zyklus
> wirklich begonnen hat. Deshalb latche ich in der ersten Hälfte lediglich
> das Adressbyte und polle OD, CE1 und R/W. Im zweiten Teilzyklus wird
> dann die Adresse berechnet, das Datenbyte aus dem RAM geladen, das
> untere Nibble ausmaskiert, der Port auf Ausgang geschaltet und das
> Nibble ausgegeben. Wenn man alles in Registern hält, reicht's gerade so.
>
> Lesen ist etwas bequemer, da die Adressarithmetik auch noch nach der
> Übernahme der Daten erfolgen kann, der Port nicht umgeschaltet und das
> Nibble nicht maskiert werden muss
>
> Mit 16MHz wird's schon recht knapp, da dann nur noch 16 Taktzyklen zur
> Verfügung stehen.
>
> Tja, ein FRAM wäre vermutlich die einfachere Lösung gewesen ;-)

Hallo Volker,

wäre super, wenn Du das Design (SW/HW) sharen könntest :-)

wiesl

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.