Verzögerung von Impulsen um 100us

Es ist bei 200kHz Signalfrequenz und damit wohl vorzugsweise 2MHz Samplerate zumindest keine Freude. Man würde es wohl nicht mit Controller machen. Sondern entweder FPGA das genügend RAM an Board hat oder TTL-Grab.

Wenn man sich auf 8 Bit Dynamik beschränkt:

  • 8 Bit A/D-Wandler mit Latch
  • 8 Bit D/A-Wandler mit Latch
  • 8kx8 SRAM 70nsec davon aber nur 256 Byte benutzen
  • 8 Bit Zähler 74HC40xx als Adreßgenerator fürs RAM
  • Steuerlogik 74HCxx
  • ( eventuell per Poti einstellbarer RC-)Taktgenerator für die Steuerlogik, muß mit 8MHz klappern. Die Steuerlogik macht in ihren 4 Schritten:
  • Lesezyklus RAM auf Latch des D/A.
  • Schreibzyklus A/D auf RAM. Starten der nächsten A/D-Wandlung
  • inkrementieren des Adereßzählers.
  • no Operation

Knackpunkt ist der Flash-A/D-Wandler sowie D/A-Wandler die man eventuell nicht bei Reichelt/Conrad findet. Sonst ist es aber simple Technik nur eben mit Nachteil viel Fädeldraht.

MfG JRD

Reply to
Rafael Deliano
Loading thread data ...

snipped-for-privacy@gmx.at schrieb:

Ein ganz anderer Ansatz. Mit einem Funktionsgenerator (z.B. HP33120A, geht aber sicher auch mit anderen) kann man einen einmaligen Burst durch ein externes Signal triggern. Dann reduziert sich der Aufwand auf einen Komparator und Verzögerung für den Triggerimpuls. Ich kenne mich da nicht aus, aber das könnte mit einem Timer 555 funktionieren. Aber da gibt es ja jede Menge Spezialisten für diesen Baustein. Ich würde es mit einem MSP430F2101 für ~1EUR realisieren. Der hat einen Komparator und 1% Taktgenerator on Board.

Gruß Rolf

Reply to
Rolf Mennekes

snipped-for-privacy@gmx.at schrieb:

So ist es. Die elektro-akustischen-Wandler sind ziemlich schmalbandig. Das Nutzsignal müßte dem Träger aufmoduliert werden. Also aufwändig.

--
mfg hdw
Reply to
horst-d.winzler

Rafael Deliano schrieb:

Der TED-Bildplattenspieler besaß mW auch Eimerketten. Nur werden die Typen nicht mehr zu bekommen sein.

--
mfg hdw
Reply to
horst-d.winzler

  • Prozessor mit 2x 8 Bit Port, z.B. PIC 16f627 und dann so wie in meinem Posting weiter oben beschrieben

Mit nem Prozessor statt RAM+Latch+Zähler sieht die Schaltung ziemlich simpel aus.

Gruß

Stefan DF9BI

Reply to
Stefan Brröring

Bin weiterhin der Meinung daß wegen der hier hohen Geschwindigkeitsanforderungen ein beliebiger 8 Bit Controller mühsam ist. Eine lineare Codesequenz für 256 Byte auf 68HC08

1 $: 0100 LDA, PB STA, PA LDA, 0100 STA, PD 5 MBS, PD 5 MBC, NOP, NOP, NOP, ... 01FF LDA, PB STA, PA LDA, 01FF STA, PD 5 MBS, PD 5 MBC, 1 $ JMP, \ 4 3 3 4 4 4 3 = 25 cyc \ write D/A read A/D restart A/D Jump/delay

würde wohl 25 Zyklen benötigen. Bei 8 MHz also 3,1usec statt 0,5usec. Möglich daß es PIC oder AVR knapp schaffen würden.

MfG JRD

Reply to
Rafael Deliano

Für PIC sieht das folgendermaßen aus: (jeder Befehl 200ns bei 20 MHz Takt, für das goto 2x200ns)

start:

MOVFW INDF ;Lade Bit aus Tabelle, hier komplettes Byte, weil ;schneller, INDF ist für indirekte Addressierung das ;Register mit der Adresse 0, Addressierung über FSR MOVWF PORTA ;Das was vorher nach w geladen wurde auf einen Port ;ausgeben MOVFW PORTB ;Lese PORTB ins Work-Register (Akkumulator) MOVWF INDF ;Schreibe PORTB Zustand in das durch FSR adressierte ;Register INCF FSR ;Incrementiere den Zeiger auf die Tabelle MOVLW 0x20 ;Anfangsadresse der Tabelle laden BTFSC FSR.7 ;Wenn Überlauf bei 8F MOVWF FSR ; dann FSR auf den Wert 0x20 setzen, Tabellenanfang goto start ; Schleife beenden

Wenn noch ein Enable/Strobe für den AD und den DA ausgegeben werden muss, wirds natürlich etwas länger.

AVR müsste auch gehen: Bei 20MHz Takt ein Maschinenzyklus 50ns

Ist aber insgesammt knapp, da hast du schon recht. Nur die Schaltung wird damit extrem simpel.

Gruß

Stefan DF9BI

Reply to
Stefan Brröring

Fuer AVR koennte es z.B. so aussehen:

---------------------------------------------------------------------- ;Registerbelegung ;Z ist immer R31:R30 .def W = R16 ;Universalregister (Ich nenne es mal auch W) .def LIML = R17 ;Adresslimit (Ende der Tabelle) .def LIMH = R18

;Konstanten .equ BASEL = 0x60 ;Basisadresse der Tabelle (0x0060) .equ BASEH = 0x00 ;(0x0100 fuer AVRs mit extended I/O) ;Anzahl der Werte in der Tabelle .equ SIZEL = 0xA7 ;167 Werte (Delay: 167 * 600ns = 100.2us) .equ SIZEH = 0x00 ;Darf auch 16Bit haben

;Initialisierung (Geht auch schneller, aber ist ja egal) INIT: LDI LIML, BASEL ;Lade 16Bit Basisadresse in LIM LDI LIMH, BASEH LDI W, SIZEL ;Addiere 16Bit Tabellengroesse ADD LIML, W LDI W, SIZEH ADC LIMH, W

;Schleife laeuft 600ns START: LDI ZL, BASEL ;Lade Basisadresse der Tabelle in Pointer Z LDI ZH, BASEH LOOP: LD W, Z ;Wert an Adresse Z aus Tabelle in W laden OUT PORTB, W ;W in Latch von Port B schreiben IN W, PINA ;Pinstatus von Port A in W laden ST Z+, W ;W an Adresse Z schreiben und Pointer erhoehen CP ZL, LIML ;16Bit Vergleich von Pointer Z mit LIM CPC ZH, LIMH BRSH START ;Am Ende => Beginne wieder am Anfang der Tabelle NOP ;Kompensiert das Laden der Basisadresse RJMP LOOP ;Schleife beenden

----------------------------------------------------------------------

Die indirekten Speicherzugriffe und die Spruenge brauchen 2 Takte, sonst alles 1 Takt zu 50ns bei 20MHz. Die Schleife braucht 12 Takte bzw. 600ns (=> Sampling erfolgt mit ca. 1.7MHz). 100us Verzoegerung waeren 2000 Takte, mit 167 Werten erreicht man 100.2us Verzoegerung.

Begrenzt man die Tabellengroesse auf 8Bit bzw. 256 Werte, dann spart das

2 Takte in der Schleife. Die Schleife braucht dann nur 10 Takte und man kommt auf 2MHz Samplingrate. Wuerde fuer 100us noch reichen (Tabelle haette dann 200 Werte und man wuerde die 100us sogar genau treffen).

Als CPU kaeme z.B. ein ATtiny44 in Frage, der hat 256 Byte RAM und darf mit 20MHz laufen.

Micha

Reply to
Michael Baeuerle

Das war die digitale Variante, offenbar war aber 8Bit analog gewuenscht. Da muesste man einen AVR mit 3 I/O-Ports nehmen (z.B. ATmega8) und noch ADC (z.B. AD7822 im "Stand alone mode") und DAC (z.B. DAC0830 im "Flow-Through mode") dranhaengen. Koennte etwa so aussehen:

---------------------------------------------------------------------- ;Registerbelegung ;Z ist immer R31:R30 .def W = R16 ;Universalregister (Ich nenne es mal auch W) .def LIML = R17 ;Adresslimit (Ende der Tabelle)

;Pins .equ ADC = PC0 ;ADC pin /CONVST sei an PC0 angeschlossen

;Konstanten .equ BASEL = 0x00 ;Basisadresse der Tabelle (0x0100) .equ BASEH = 0x01 ;Anzahl der Werte in der Tabelle (max. 255) .equ SIZEL = 0x8F ;143 Werte (Delay: 143 * 700ns = 100.1us)

;Initialisierung (Geht auch schneller, aber ist ja egal) INIT: LDI LIML, BASEL ;Lade 16Bit Basisadresse in LIM LDI W, SIZEL ;Addiere 8Bit Tabellengroesse ADD LIML, W

;Schleife laeuft 700ns START: LDI ZL, BASEL ;Lade Basisadresse der Tabelle in Pointer Z LOOP: LD W, Z ;Wert an Adresse Z aus Tabelle in W laden OUT PORTB, W ;W in DAC an Port B schreiben IN W, PIND ;ADC Daten von Port D in W laden (nach 500ns) ST Z+, W ;W an Adresse Z schreiben und Pointer erhoehen CBI PORTC, ADC ;A/D-Wandlung starten CP ZL, LIML ;8Bit Vergleich von Pointer Z mit LIM SBI PORTC, ADC ;Pulsbreite 150ns BRSH START ;Am Ende => Beginne wieder am Anfang der Tabelle RJMP LOOP ;Schleife beenden

----------------------------------------------------------------------

So koennte man prinzipiell mit 8Bit Aufloesung immer noch auf eine Samplingrate von ca. 1.4MHz kommen. Will man explizit in den DAC-Latch schreiben, dann gehen nochmal 4 Takte drauf und man landet bei ca.

1.1MHz Samplingrate.

Micha

Reply to
Michael Baeuerle

AVR ist auch etwas billiger als PIC. Ich habe AVR bisher aber nur mit WINAVR programmiert, deshalb ist mir bei Assembler der PIC etwas geläuufiger. Aber das ist ein gutes Beispiel, an dem man sehen kann, dass die ATmegas den PICs deutlich überlegen sind.

Gruß

STefan DF9BI

Reply to
Stefan Brröring

Den ATmega8 gibts im DIP-Gehaeuse bei Reichelt schon ab einem Stueck fuer 1.25 EUR. Bei der Analogloesung werden aber wohl ADC und DAC den Gesamtpreis dominieren.

... und dass man nicht pauschal alles in C programmieren sollte. Gerade AVRs lassen sich wirklich schoen in Assembler programmieren - besonders bei 16Bit und 32Bit Operationen im Vergleich zu PIC16.

Micha

Reply to
Michael Baeuerle

Reise" geschickt und wieder empfangen.

Ja, schon klar, w=FCrde mich aber f=FCr erste Tests nicht st=F6ren.

Hat man ja wieder das leidige Temperaturproblem...

Leider kann ich mit den von mir verwendeten Wandlern (Eigenkonstruktion) in kein festes, oder fl=FCssiges Material einkoppeln.

Deshalb auch meine Idee mit der Verz=F6gerungsleitung, die aber wegen der Bandbreite wohl flachf=E4llt.

/Koarl

Reply to
koarl70

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.