Forum: Mikrocontroller und Digitale Elektronik Schieberegister ersetzen


von Frickelprinz (Gast)


Lesenswert?

Da ist eine kuchenblechgroße Platine mit 625 x 74HCT164 SMD. Das sind 8 
Bit Schieberegister, alle hintereinander geschaltet. Die Taktfrequenz 
kommt aus einem 1MHz Quarzgenerator. Das Digitalsignal am Eingang wird 
um 625 x 8 / 1MHz = 5ms verzögert.
Wie kann man diese "Wahnsinnsplatine" ersetzen?

von Frickelkönig (Gast)


Lesenswert?

Frickelprinz schrieb:
> Wie kann man diese "Wahnsinnsplatine" ersetzen?

Du..gar nicht. Bei Dir reicht es ja nicht einmal um vernünftig zu 
trollen.

von H. H. (Gast)


Lesenswert?

FIFO

von Harald A. (embedded)


Lesenswert?

Am besten mit einem beliebigen Mikrocontroller, freie Auswahl sozusagen. 
Falls Du wenig Erfahrung hast nimmst Du z.B. Arduino, das bekommt man 
wohl hin.

von Helge S. (topflappen)


Lesenswert?

Daten mit µC empfangen, parallel in 3 62256er schreiben, am /RST der 
62256er wackeln, wieder von vorne. Ist doch easy ...

von MaWin (Gast)


Lesenswert?

Es gab schon lang vor dem 174 Schieberegister wie

https://www.ebay.de/itm/331806924463

aber damit genau 5000 zusammenzustückeln ist schwer, ich weiss nicht ob 
dieses 1MHz kann

https://www.haje.nl/product_info.php/view/all/sort/7d/language/en/products_id/1828

Also würde man das heute wohl mit einem FPGA bauen. Da dein Chip aber 
bloss 4 Pins bräuchte, sind FPGA uneffektiv.

Ein simpler uC, mit 16 MHz getaktet, kann das auch leisten. Bloss wenn 
diese 16hz synchron zum 1 MHz Clock sein müssen, also per PLL, wird das 
wieder schwieriger.

Ich bleibe beim FPGA wie LFXP2-5E-5TN144C, obwohl man eigentlich das 
nimmt, was einem der Fitter vorschlägt in der Toolchain.

von Mario M. (thelonging)


Lesenswert?

MaWin schrieb:
> Bloss wenn diese 16MHz synchron zum 1 MHz Clock sein müssen,

dann greift man dem uC mit etwas Hardware unter die Arme.

von Dieter W. (dds5)


Lesenswert?

Die 1MHz als Takt für eine SPI Schnittstelle nehmen und die Daten in 
einem Ringspeicher ablegen.
Nachdem 625 Byte eingelesen wurden, mit dem ältesten Wert anfangen alles 
wieder auszugeben.
Im Prinzip also ein im µC programmiertes FIFO.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Frickelprinz schrieb:
> Da ist eine kuchenblechgroße Platine mit 625 x 74HCT164 SMD. Das sind 8
> Bit Schieberegister, alle hintereinander geschaltet. Die Taktfrequenz
> kommt aus einem 1MHz Quarzgenerator. Das Digitalsignal am Eingang wird
> um 625 x 8 / 1MHz = 5ms verzögert.
> Wie kann man diese "Wahnsinnsplatine" ersetzen?

Wurde ja schon mehrfach gesagt.

uC
CPLD+SRAM
FPGA

Such dir was aus.

Mario M. schrieb:
>> Bloss wenn diese 16MHz synchron zum 1 MHz Clock sein müssen,
>
> dann greift man dem uC mit etwas Hardware unter die Arme.

Eben. Mit einem Schieberegister als 74HC595 am Ein- und Ausgang kriegt 
man die Wortrate auf läppische 125 kHz runter. Das kann ein uC 
problemlos einlesen, speichern und wieder ausgeben, es reicht ein ATmega 
328 ala Arduino. Experten wie unser C-hater macht's bestimmt auch ohne 
Schieberegister in ASM mit nem ATtiny85 ;-)

von Cartman (Gast)


Lesenswert?

Ich habe in alten™ Zeiten tatsaechlich mal mit D191, das muesste
zum 7491 aequivalent sein, ein 4 x 48 bit FIFO zusammenbauen muessen.
Der D191 war der Kaefer der Wahl, da er per Package die groesste :)
Kapazitaet hatte. Die zwischengespeicherten Daten stammten von
einem C520 ADC und wurden dann auf eine Digitalkassette mit
SIF1000 Interface geschrieben und dienten der Auswertung von
Daten eines Gel-Aminosaeurenanalyzers.

Aber HCT164? Zu den Zeiten haette man kaum ein knappes Kilo von diesen
Kaefern nehmen muessen.

Also ein Troll! Oder ein Bild vorzeigen!

von Cartman (Gast)


Lesenswert?

> 74HC595 am Ein- und Ausgang

Am Eingang wohl kaum...

von Falk B. (falk)


Lesenswert?

Cartman schrieb:
>> 74HC595 am Ein- und Ausgang
>
> Am Eingang wohl kaum...

Aber sicher. Seriell rein, parallel zum uC raus. OK, am Ausgang braucht 
es eher ein 165er Schieberegister, Parallel rein, seriell raus. Dazu 
noch ein /8 Teiler, welcher den Synchron/Ladetakt erzeugt. Damit ist 
alles nach außen auf dem 1 MHz Takt synchronisiert. Oder gleich brute 
force mit einem SRAM, 8x625=5000 Bytes sind heute Peanuts und man kann 
die ungenutzten 7 Bit in den Skat drücken. Braucht aber auch 2 
Adresszähler und Logik.

von H. H. (Gast)


Lesenswert?

Falk B. schrieb:
> Oder gleich brute
> force mit einem SRAM, 8x625=5000 Bytes sind heute Peanuts und man kann
> die ungenutzten 7 Bit in den Skat drücken. Braucht aber auch 2
> Adresszähler und Logik.

Im FIFO alles drin.

von Cartman (Gast)


Lesenswert?

> Aber sicher. Seriell rein, parallel zum uC raus.
Stimmt.

> am Ausgang braucht es eher ein 165er Schieberegister
Die Stelle wars also.

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:
> Experten wie unser C-hater macht's bestimmt auch ohne
> Schieberegister in ASM mit nem ATtiny85 ;-)

Nö, zu wenig RAM für die Aufgabe.

ATtiny824 z.B. würde aber reichen. 14-Pinner ist auch immer noch 
deutlich kleiner als ein Kuchenblech. Das Asm-Programm für die Aufgabe 
hätte ca. 40 Zeilen, das meiste davon für die passende 
SPI-Konfiguration.

von Cartman (Gast)


Lesenswert?

Am einfachsten waere wohl die zweckentfremdete Nutzung eines MN3207.
Der brauchte dann nur noch einen Taktgenerator.

von Andre G. (andgst01)


Lesenswert?

Warum bitte willst du das ersetzen?
Solange alles geht gibt es doch keinen Grund dafür?

Es ist einfacher ein Schieberegister zu tauschen als einen BGA FPGA!
Auch so eine Sache die man bedenken sollte: Reparierbarkeit!


Was wird mit den Schieberegistern gemacht?
LEDs ansteuern?

Es bringt nichts diese Platine kompakter zu machen wenn das "drumherum" 
trotzdem Kuchenblechgröße hat.

von Frickelprinz (Gast)


Lesenswert?

Andre G. schrieb:
> Was wird mit den Schieberegistern gemacht?
> LEDs ansteuern?

Einziger Sinn der Riesenplatine ist ein TTL-Signal um (1MHz-Quarz-genau) 
5000us zu verzögern. Die Platine hat ein Praktikant vor Jahren 
entworfen, ätzen lassen und von Hand bestückt. Die Platinendaten sind 
verschollen und können nicht wiederhergestellt werden. (Lieber Gott 
mach, dass das so bleibt)

Mit uC habe ich Berührungsängste, wenn es nur ein paar Zeilen in C sind, 
warum mag die niemand hier mal aufschreiben?

von Mario M. (thelonging)


Lesenswert?

Vielleicht so?
1
init_spi_as_slave();
2
while (1) {
3
  tx = fifo_read();
4
  while (!(SPSR & (1<<SPIF)));
5
  rx = SPDR; 
6
  SPDR = tx;
7
  fifo_write(rx);
8
}

von Cartman (Gast)


Lesenswert?

> Mit uC habe ich Berührungsängste

Hast du dir den MN3207 ueberhaupt schon angesehen?
Ein winzich kleines Kaeferchen. DIL8 glaub ich...

von m.n. (Gast)


Lesenswert?

Frickelprinz schrieb:
> warum mag die niemand hier mal aufschreiben?

Es ist einfach zu warm!

Einfach und günstig wäre für Dein Problem ein RP2040 Pico-Board mit 
Arduino IDE oder Python programmiert.
Bit0 eines Arrays mit 5000 Elementen wird mit internem 1 MHz Takt mit 
dem Eingangspegel an der Stelle "n" beschrieben und an "n+1" ausgelesen 
und auf den Ausgang geschrieben.

Die Hardware kostet fünf Euro + Versand.
Bis das Teil bei Dir auf dem Tisch liegt, sollte sich auch jemand für 
die Software gefunden haben.
Mußt allerdings sagen, ob Dir das gefällt.

von m.n. (Gast)


Lesenswert?

Cartman schrieb:
> Hast du dir den MN3207 ueberhaupt schon angesehen?

Nicht nötig. Abgesehen von anderen Defiziten kann er nur bis 500 kHz 
getaktet werden.

von Stefan F. (Gast)


Lesenswert?

Frickelprinz schrieb:
> Wie kann man diese "Wahnsinnsplatine" ersetzen?

Warum willst du sie ersetzen, welchen Vorteil versprichst du dir davon?
Was hängt denn an den parallelen Ausgängen der Schieberegister?

Frickelprinz schrieb:
> Mit uC habe ich Berührungsängste, wenn es nur ein paar Zeilen in C sind,
> warum mag die niemand hier mal aufschreiben?

Weil du erstens noch nicht darum gebeten hast und zweitens völlig unklar 
ist, wozu das ganze gut sein soll. Man kann nur dann sinnvoll 
programmieren, wenn klar ist, was das Programm tun soll.

von m.n. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Man kann nur dann sinnvoll
> programmieren, wenn klar ist, was das Programm tun soll.

Frickelprinz schrieb:
> Einziger Sinn der Riesenplatine ist ein TTL-Signal um (1MHz-Quarz-genau)
> 5000us zu verzögern.

Ist das so schwer zu verstehen?

von Stefan F. (Gast)


Lesenswert?

m.n. schrieb:
> Ist das so schwer zu verstehen?

Es klingt halt stark nach einer halben Beschreibung. Soll das heissen, 
dass die ganze Platine nur 4 Anschluss-Pins hat?

1) GND
2) VCC (wie viel Volt?)
3) Daten Eingang
4) Daten Ausgang

Und die ganze parallelen Ausgänge der Schieberegister sind wirklich 
ungenutzt? Ich frage erneut nach, weil ich das kaum glauben mag. Schon 
in den 70er Jahren gab es dafür bessere und billigere Bauteile.

von m.n. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Schon
> in den 70er Jahren gab es dafür bessere und billigere Bauteile.

Ich höre:

von Stefan F. (Gast)


Lesenswert?

m.n. schrieb:
>> in den 70er Jahren gab es dafür bessere und billigere Bauteile.
> Ich höre

"Bis 1972 war der 1103 RAM das meistverkaufte Chip auf dem Markt"
http://computer.51itpx.com/Hardware/RAM---Karten-und-Motherboards/History-of-Memory-RAM-.html
https://en.wikipedia.org/wiki/Intel_1103

Mikroprozessoren, um diese anzusprechen, gab es natürlich auch längst.

von HildeK (Gast)


Lesenswert?

Fifo wurde genannt. Es reicht ein 1k*8 Typ.
- Eingangssignal an D0
- Ausgang Q0 an D1
- Ausgang Q1 an D2 usw.
- Signalausgang ist Q7.
- Write- und Read-Clock verbinden.

Mit z.B. dem IDT72220 könnte ich mir das vorstellen: 
https://www.renesas.com/us/en/products/memory-logic/fifo-products/synchronous-fifos/72220-1k-x-8-syncfifo-50v

Solche Bausteine scheinen allerdings dünn gesät zu sein ...

von Falk B. (falk)


Lesenswert?

Frickelprinz schrieb:
> Einziger Sinn der Riesenplatine ist ein TTL-Signal um (1MHz-Quarz-genau)
> 5000us zu verzögern. Die Platine hat ein Praktikant vor Jahren
> entworfen, ätzen lassen und von Hand bestückt.

Und was macht man damit insgesamt? Verzögerungsleitung für Audioeffekte?

von H. H. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> m.n. schrieb:
>>> in den 70er Jahren gab es dafür bessere und billigere Bauteile.
>> Ich höre
>
> "Bis 1972 war der 1103 RAM das meistverkaufte Chip auf dem Markt"
> 
http://computer.51itpx.com/Hardware/RAM---Karten-und-Motherboards/History-of-Memory-RAM-.html
> https://en.wikipedia.org/wiki/Intel_1103
>
> Mikroprozessoren, um diese anzusprechen, gab es natürlich auch längst.

Wäre dennoch ein erheblicher Aufwand gewesen.


Aber es gab FIFOs mit mindestens 64 Bit, gegen Ende der 70er sicher auch 
mit deutlich mehr.

von H. H. (Gast)


Lesenswert?

HildeK schrieb:
> Fifo wurde genannt. Es reicht ein 1k*8 Typ.
> - Eingangssignal an D0
> - Ausgang Q0 an D1
> - Ausgang Q1 an D2 usw.
> - Signalausgang ist Q7.
> - Write- und Read-Clock verbinden.
>
> Mit z.B. dem IDT72220 könnte ich mir das vorstellen:
> 
https://www.renesas.com/us/en/products/memory-logic/fifo-products/synchronous-fifos/72220-1k-x-8-syncfifo-50v
>
> Solche Bausteine scheinen allerdings dünn gesät zu sein ...

NOS bekommt man noch einiges mehr.

von HildeK (Gast)


Lesenswert?

NOS?

von H. H. (Gast)


Lesenswert?

HildeK schrieb:
> NOS?

New Old Stock

von Eduard I. (eiten)


Lesenswert?

Dieter W. schrieb:
> Die 1MHz als Takt für eine SPI Schnittstelle nehmen und die Daten in
> einem Ringspeicher ablegen.
> Nachdem 625 Byte eingelesen wurden, mit dem ältesten Wert anfangen alles
> wieder auszugeben.

Die Idee ist ja genial! DANKE!

von Bernd G. (Gast)


Lesenswert?

> Solche Bausteine scheinen allerdings dünn gesät zu sein ...
Hab noch einiges davon rumzuliegen.
Bei Interesse sehe ich nach, was da ist.

von m.n. (Gast)


Lesenswert?

Eduard I. schrieb:
> Die Idee ist ja genial! DANKE!

Dann zeigt dem TO Deine Schaltung und Dein Programm. Dann wäre auch ihm 
geholfen.

HildeK schrieb:
> NOS?

Nicht Ohne Sahne.

von m.n. (Gast)


Lesenswert?

HildeK schrieb:
> Mit z.B. dem IDT72220 könnte ich mir das vorstellen:

Wie kommt man mit Bausteinen, die intern fest auf 1024 (1K) eingestellt 
sind, genau 5000 Zyklen Verzögerungszeit?

von H. H. (Gast)


Lesenswert?

m.n. schrieb:
> HildeK schrieb:
>> Mit z.B. dem IDT72220 könnte ich mir das vorstellen:
>
> Wie kommt man mit Bausteinen, die intern fest auf 1024 (1K) eingestellt
> sind, genau 5000 Zyklen Verzögerungszeit?

Man nimmt einfach 1,6384 MHz Takt.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

So könnte es gehen. Die Software sind zwei Dutzend Zeilen in C.

von m.n. (Gast)


Lesenswert?

H. H. schrieb:
> Man nimmt einfach 1,6384 MHz Takt.

Wenn's kein E5 an der Zapfsäule gibt nimmst Du bestimmt einfach Diesel.

von H. H. (Gast)


Lesenswert?

m.n. schrieb:
> H. H. schrieb:
>> Man nimmt einfach 1,6384 MHz Takt.
>
> Wenn's kein E5 an der Zapfsäule gibt nimmst Du bestimmt einfach Diesel.

Hast mal wieder nichts kapiert.

von Cartman (Gast)


Lesenswert?

m.n. schrieb:
>> Hast du dir den MN3207 ueberhaupt schon angesehen?
>
> Nicht nötig. Abgesehen von anderen Defiziten kann er nur bis 500 kHz
> getaktet werden.

Zaehl die anderen Defizite doch mal auf!

Auf etwas zu verweisen ohne es zu benennen erinnert mich
an die Rhetorik von inkompetenten Fachschulingenieuren.
Dessen Spruch war dann immer: "Das wuerde jetzt zu sehr
ins Detail fuehren."
Nur das dann bei expliziter Nachfrage keine Details mehr kamen.

Womoeglich reichen 2 µs Jitter ja,
Und das er fuer ein rein "digitales" Durchreichen auch
1 MHz Takt vertraegt, ist zumindest recht wahrscheinlich.

Seine nahen Artverwandten, die TDA1022 waren auch analog noch recht
gut bei 1 MHz Takt, wenn er sonst der Spezifikation entsprach.

von m.n. (Gast)


Lesenswert?

Falk B. schrieb:
> Die Software sind zwei Dutzend Zeilen in C.

Lieber ein paar mehr Zeilen und einen nackten Mega88 mit internem Takt.

H. H. schrieb:
> Hast mal wieder nichts kapiert.

Wann denn noch?

von Cartman (Gast)


Lesenswert?

m.n. schrieb:
> HildeK schrieb:
>> NOS?
>
> Nicht Ohne Sahne.

Ich glaube er ist einfach angetrunken.

von m.n. (Gast)


Lesenswert?

Cartman schrieb:
> Zaehl die anderen Defizite doch mal auf!

Mangelnde Grenzfrequenz reicht Dir nicht? Das ist Beweis genug.
Das 1024 != 1000 ist Dir bekannt?
Oder können alle Vorgaben des TO ignoriert werden?

von Cartman (Gast)


Lesenswert?

Das digitale Signal hat nach der Delayline einen Jitter von 1 µs.
Mit einem auf 1.024 MHz erhoehtem Takt waeren es 0.976 µs.
Ich kann mich natuerlich taeuschen, wuerde aber denken dass
es schlicht egal ist.
Ich kann natuerlich nicht dafuer garantieren dass ein MN3207
noch bei 1 MHz arbeitet, meine Erfahrungen mit dem TDA1022
stimmen mich da aber optimistisch.

von Cartman (Gast)


Lesenswert?

Der TDA1022 waere natuerlich auch ein brauchbarer Kandidat.

von Jitter (Gast)


Lesenswert?

Cartman schrieb:
> Das digitale Signal hat nach der Delayline einen Jitter von 1 µs

Jitter? rms? Das wäre ja eine Taktperiode bei 1 MHz, also völlig 
unbrauchbar.

von Cartman (Gast)


Lesenswert?

> Das wäre ja eine Taktperiode bei 1 MHz, also völlig
> unbrauchbar.

Naja was erwartest du?
Der Taktgenerator auf dem Ofenblech versorgt nur die Schieberegister.
Ein digitales Eingangssignal hat keine Beziehung zu diesem Takt.
Der Abtastzeitpunkt ist dafuer quasi zufaellig.

von Frickelprinz (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Was hängt denn an den parallelen Ausgängen der Schieberegister?

NICHTS

Außer das Qh mit den A+B Eingängen des nächsten verbunden ist. Das 
Signal wird immer weitergereicht, nach 625 Chips ist der Weg zu Ende, es 
sind bei 1MHz Taktung 5000us vergangen. Diese Platine ist ein absolutes 
Einzelstück, viel zu teuer und aufwendig, für das was es leistet. 
"WAHNSINN"

von Bernd G. (Gast)


Lesenswert?

wenn es kein FIFO sein kann, muss man es diskret machen:
kleiner RAM und getrennte Schreib- und Leseadresszähler, die beim Start 
mit dem genauen Adressoffset von 5000 Takten geladen werden. Passt auch 
locker in einen kleinen FPGA.
Es soll wohl auch FPGA-Cores mit SR und FIFO von definierbarer Länge 
geben...

von Jitter (Gast)


Lesenswert?

Cartman schrieb:
>> Das wäre ja eine Taktperiode bei 1 MHz, also völlig
>> unbrauchbar.
>
> Naja was erwartest du?
> Der Taktgenerator auf dem Ofenblech versorgt nur die Schieberegister.
> Ein digitales Eingangssignal hat keine Beziehung zu diesem Takt.
> Der Abtastzeitpunkt ist dafuer quasi zufaellig.

Achso. Ok. Das kann dann aber nur zuverlässig funktionieren, wenn die 
Datenrate niedriger ist.

von Mario M. (thelonging)


Lesenswert?

HildeK schrieb:
> Fifo wurde genannt. Es reicht ein 1k*8 Typ.
>
> Eingangssignal an D0
> Ausgang Q0 an D1
> Ausgang Q1 an D2 usw.
> Signalausgang ist Q7.
> Write- und Read-Clock verbinden.

Das reicht nicht, man muss nach dem Start den Read-Clock für 5000 Takte 
sperren, sonst kommt das Byte vom Eingang gleich wieder am Ausgang raus.

von Frickelprinz (Gast)


Lesenswert?

Dass der 1MHz Takt nicht synchron zum Digitalsignal am Eingang ist, der 
Abtastzeitpunkt ist damit "quasi" zufällig ist durchaus gewollt. Aber 
wenn man jetzt eine andere Schieberegisterlänge hätte, dann wäre auch 
eine andere Taktfrequenz ok, hauptsache man kommt auf 5000us.
Hätte man z.B. ein 8k Byte RAM und einen 13 Bit Addresszähler so wäre 
die notwendige Taktfrequenz 1,6384MHz. Von dem 8 Bit breiten RAM würde 
man jetzt wohl nur 1 Bit verwenden.
Erstens das Bit lesen und ausgeben, dann zweitens das Digital Signal ins 
Ram schreiben und drittens den Addresszähler um eins erhöhen. Benötigt 
ganz schön viel "Logik".

Kann man das nicht mit einem ATtiny im 8Pin Gehäuse erschlagen?
Wenn der jetzt mit einem externen 16MHz Quarz läuft, wie soll man da das 
Programm auf 1MHz synchronisieren? Kann ein Timer-Interrupt soooooooo 
schnell sein?!?!

von Mario M. (thelonging)


Lesenswert?

Man könnte meinen, dass Du den von Dir gestarteten Thread gar nicht 
mitgelesen hast.

von Bernd G. (Gast)


Lesenswert?

Deshalb nimmt man ja auch einen FPGA. Da kann mann alles ohne viel 
Gehirnschmalz innerhalb von zwei Stunden auf den Punkt passend machen.

von Cartman (Gast)


Lesenswert?

> "Bis 1972 war der 1103 RAM das meistverkaufte Chip auf dem Markt"

Die meissten 1103 landeten im Speicher von Grossrechnern.
Wer sich mal die noetige Aussenbeschaltung angesehen hat,
weiss warum. Das kleine Kerlchen brauchte sogar externe
Leseverstaerker, von den p-MOS Logikpegeln gar nicht zu reden.


Und klar, fuer 1 oder 4 MByte Speicher braucht es eine Menge 1103...

von H. H. (Gast)


Lesenswert?

Cartman schrieb:
>> "Bis 1972 war der 1103 RAM das meistverkaufte Chip auf dem
> Markt"
>
> Die meissten 1103 landeten im Speicher von Grossrechnern.
> Wer sich mal die noetige Aussenbeschaltung angesehen hat,
> weiss warum. Das kleine Kerlchen brauchte sogar externe
> Leseverstaerker, von den p-MOS Logikpegeln gar nicht zu reden.

Es gab ja auch schon diese:

https://de.wikipedia.org/wiki/2102_(Elektronik)

von Jobst M. (jobstens-de)


Lesenswert?

Bernd G. schrieb:
> Deshalb nimmt man ja auch einen FPGA. Da kann mann alles ohne viel
> Gehirnschmalz innerhalb von zwei Stunden auf den Punkt passend machen.

Ach verdammt. Ich habe es nun in 20 Minuten auf dem AVR gelöst.

Gruß
Jobst

von Georg (Gast)


Lesenswert?

Jobst M. schrieb:
> Ach verdammt. Ich habe es nun in 20 Minuten auf dem AVR gelöst.

So würde ich das auch angehen, aber der Geilheitsfaktor einer Lösung mit 
einem Controller ist überhaupt nicht vergleichbar mit dem einer 
Leiterplatte mit 625 ICs.

Georg

von A. S. (Gast)


Lesenswert?

Früher (vor elektrischen speichern, so in den 50ern) hat man mittels 
URohr an einer Seite eingespeist und nach Schallgeschwindigkeit am 
andere rausgenommen und wieder eingespeist.

Bei Quecksilber braucht man so ein 3m URohr

Aber nein, wenn der Takt des uC ausreicht, sind es 10-zeiler, wenn man 
ein Byte per spi senden/empfangen kann und RAM hat
1
int main(void)
2
{
3
static int a[625], i;
4
5
   InitSPI();
6
   spi_snd=a[i];
7
   for(;;)
8
   {
9
      if(++i>623) {i=0;}
10
      spi_snd=a[i];
11
      while(!spi_rx_ready);  
12
      a[I]=spi_rcv;
13
   }
14
}

von Cartman (Gast)


Lesenswert?

> Es gab ja auch schon diese:
> https://de.wikipedia.org/wiki/2102_(Elektronik)

In grossen Mengen konnte der 1103 seinen Hauptvorteil ausspielen:
Seine geringe Leistungsaufnahme wenn nur gelegentlich refresht
werden musste. Also z.B. ein ganzes Kuchenblech voll von den
Dingern.

So ein 2102 als statisches nMOS-RAM ist da ungleich verfressener.
Mit einem Kuchenblech voll haette man auch gleichzeitig eine
gute Heizung gehabt.

Aber fuer die wenigen kByte an den damaligen Controllern war der 2102
sicher die einfachere und bessere Wahl.
Wenn einen der Aufwand nicht stoerte, konnte man den 1103 aber durchaus
auch benutzen.

von Cartman (Gast)


Lesenswert?

> aber der Geilheitsfaktor einer Lösung mit
> einem Controller ist überhaupt nicht vergleichbar mit dem einer
> Leiterplatte mit 625 ICs.

Der Praktikant hat beim Design aber auch klaeglich versagt.
An die SR-Ausgaenge haetten natuerlich noch LEDs gehoert.

Schon allein zu Diagnosezwecken, wo denn das Bit versackt
wenn mal was kaputt ist.

Ausserdem haette man dann die Bits durch die Gegend flitzen sehen...

von Jobst M. (jobstens-de)


Lesenswert?

Cartman schrieb:
> Ausserdem haette man dann die Bits durch die Gegend flitzen sehen...

5ms ...?

Man könnte auch 25x 4062 nehmen ... *Hrrrhrrch**


Gruß
Jobst

von Percy N. (vox_bovi)


Lesenswert?

H. H. schrieb:
> m.n. schrieb:
>
>> HildeK schrieb:
>>> Mit z.B. dem IDT72220 könnte ich mir das vorstellen:
>>
>> Wie kommt man mit Bausteinen, die intern fest auf 1024 (1K) eingestellt
>> sind, genau 5000 Zyklen Verzögerungszeit?
>
> Man nimmt einfach 1,6384 MHz Takt.

Und dadurch ändert sich die Anzahl der Zyklen?

von c-hater (Gast)


Lesenswert?

Percy N. schrieb:

> Und dadurch ändert sich die Anzahl der Zyklen?

Nö, die ist aber für die Aufgabe auch völlig unwichtig. Wichtig ist 
offenbar nur die Verzögerungszeit (check) und ggf. die Samplefrequenz, 
die beim Nachbau mindestens 1MHz sein sollte, aber durchaus auch größer 
sein kann, ohne an der Funktion der Sache was zu ändern (check).

Ich würde trotzdem einen geeigneten µC nehmen. Der liegt im Gegensatz zu 
irgendwelchen historischen Exoten-ICs nämlich immer in der Bastelkiste 
rum. D.h.: die Sache wäre in einer halben Stunde voll funktionsfähig 
fertig.

Beitrag #7132744 wurde vom Autor gelöscht.
von HildeK (Gast)


Lesenswert?

m.n. schrieb:
> Wie kommt man mit Bausteinen, die intern fest auf 1024 (1K) eingestellt
> sind, genau 5000 Zyklen Verzögerungszeit?
Guter Einwand!

H. H. schrieb:
> Man nimmt einfach 1,6384 MHz Takt.
Muss das nicht zur Datenrate des Eingangssignals passen? Oder man muss 
deutlich überabtasten und das erfordert wieder mehr Speichertiefe.

Mario M. schrieb:
> Das reicht nicht, man muss nach dem Start den Read-Clock für 5000 Takte
> sperren, sonst kommt das Byte vom Eingang gleich wieder am Ausgang raus.
Genau so guter Einwand 😀!

Tja, da war ich wohl zu unüberlegt.

Bleibt nur noch Software, SW kombiniert mit HW nach Falk B. oder FPGA. 
Oder eine immer noch hohe Zahl von Einzelbausteinen mit 64Bit-Shift 
Registern (CD4031 oder CD4517). Ja, geht nicht auf ohne Rest auf; man 
braucht noch einen HC164 zusätzlich. Sind dann immerhin statt 625 
Bausteine 'nur' noch 79.

c-hater schrieb:
> Ich würde trotzdem einen geeigneten µC nehmen.
Da würde dein permanenter Wunsch in Assembler zu programmieren gut 
passen, auch für die kleineren µCs: ≥ 256Byte RAM und den Shift- oder 
Rotatebefehlen.

Frickelprinz schrieb:
> Dass der 1MHz Takt nicht synchron zum Digitalsignal am Eingang ist, der
> Abtastzeitpunkt ist damit "quasi" zufällig ist durchaus gewollt.

Wie groß ist denn die Datenrate des Eingangssignals?

von Cartman (Gast)


Lesenswert?

Ich hoffe ja mal, dass der Aufwand gerechtfertigt ist und nicht
ein simples RC-Glied mit einem Schmitt-Trigger/Komparator dahinter
auch die 5 ms Verzoegerung hinkriegen wuerde.

von Stefan F. (Gast)


Lesenswert?

Cartman schrieb:
>> "Bis 1972 war der 1103 RAM das meistverkaufte Chip auf dem Markt"
> Die meissten 1103 landeten im Speicher von Grossrechnern.

Es ging darum, dass M.n. offenbar zweifelte, dass es in den 70er Jahren 
bereits RAM gab. Wenn es 1972 schon welche als Massenware gab, dann 
danach erst Recht. Bis 1979 ist ja noch eine große Zeitspanne für 
weitere Entwicklungen.

von Stefan F. (Gast)


Lesenswert?

HildeK schrieb:
> Muss das nicht zur Datenrate des Eingangssignals passen? Oder man muss
> deutlich überabtasten und das erfordert wieder mehr Speichertiefe.

Leider fehlen uns immer noch die Anforderungen, deswegen kann man den 
Vorschlag mit der höheren Taktfrequenz nicht bewerten.

von Lothar J. (black-bird)


Lesenswert?

Cartman schrieb:
> Ich hoffe ja mal, dass der Aufwand gerechtfertigt ist und nicht
> ein simples RC-Glied mit einem Schmitt-Trigger/Komparator dahinter
> auch die 5 ms Verzoegerung hinkriegen wuerde.

Aber nur für einen einzigen Impuls. In 625x8=5000 passen max. 2500 
Impulse rein.

Bei 1MHz Takt ist die max. Verzögerung der Eingangsimpuls-Vorderflanke 
<1us, die max. Verzögerung der Eingangsimpuls-Hinterflanke ebenfalls 
<1us.

Wenn außer TTL-Pegel keine weiteren Bedingungen gelten, ist die Aufgabe 
u.a., mit einem Mikrocontroller lösbar.

Blackbird

von m.n. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Es ging darum, dass M.n. offenbar zweifelte, dass es in den 70er Jahren
> bereits RAM gab.

Dieses alte Gammelzeug, ick lach mir schräg!
Welche Zugriffszeit hatten die denn? 15 oder 12 ns?
Und welche Hochleistungs-CPUs gab es dazu? 1 MHz Taktfrequenz oder sogar 
2 MHz? Und dazu noch ein 2708?

Stefan ⛄ F. schrieb:
> Leider fehlen uns immer noch die Anforderungen, deswegen kann man den
> Vorschlag mit der höheren Taktfrequenz nicht bewerten.

Was willst Du denn groß bewerten?
Frag den TO doch besser, wie er die 625 HCT164 angesteuert hat? Wurde 
auch der Takt passend verzögert? Welche zusätzliche Verzögerung ergibt 
sich durch nicht berücksichtigte Durchlaufzeiten?

HildeK schrieb:
> Tja, da war ich wohl zu unüberlegt.

Das ist doch überhaupt nicht schlimm. In der Regel hast Du ja 
konstruktive Vorschläge.

von HildeK (Gast)


Lesenswert?

m.n. schrieb:
> HildeK schrieb:
>> Tja, da war ich wohl zu unüberlegt.
>
> Das ist doch überhaupt nicht schlimm. In der Regel hast Du ja
> konstruktive Vorschläge.

Oh, ein Lob 😀.
In der Regel hoffentlich ja. Falls die Aufgabenstellung ausreichend gut 
beschrieben ist, ist die Chance auf eine brauchbare Antwort schon mal 
größer.
Aber es bleibt trotzdem ein Unterschied zwischen einer ersten, schnellen 
Lösungsidee und z.B. dem längeren Nachdenken über das Problem, wenn man 
ein eigenes Projekt angeht.

von H. H. (Gast)


Lesenswert?

m.n. schrieb:
> Stefan ⛄ F. schrieb:
>> Es ging darum, dass M.n. offenbar zweifelte, dass es in den 70er Jahren
>> bereits RAM gab.
>
> Dieses alte Gammelzeug, ick lach mir schräg!
> Welche Zugriffszeit hatten die denn? 15 oder 12 ns?
> Und welche Hochleistungs-CPUs gab es dazu? 1 MHz Taktfrequenz oder sogar
> 2 MHz? Und dazu noch ein 2708?

Schreib doch einfach, dass du keinerlei Ahnung von dieser Zeit hast.

von m.n. (Gast)


Lesenswert?

H. H. schrieb:
> Schreib doch einfach, dass du keinerlei Ahnung von dieser Zeit hast.

Wozu? Um mir Dir und Stefan F. ein Triumvirat zu bilden?
Dem TO nützt das nichts. Vergiss es, Alter!

Frickelprinz schrieb:
> Kann man das nicht mit einem ATtiny im 8Pin Gehäuse erschlagen?

Sag mal: Suchst Du eine praktikable Lösung - dafür hast Du diverse 
Vorschläge bekommen - oder willst Du Dein Ansinnen ad absurdum führen?

von Cartman (Gast)


Lesenswert?

> Es ging darum, dass M.n. offenbar zweifelte

Ach so. Ich hab mich schon gewundert wieso der 1103 ploetzlich
im Fokus stand.
Natuerlich kann man mit dem auch einen FIFO bauen.
Ob man aber 2 Zugriffe in 1 µs hinbekommt?
Da muesste man wohl doch nochmal das Datenblatt konsultieren.

> > Welche Zugriffszeit hatten die denn? 15 oder 12 ns?
> Schreib doch einfach, dass du keinerlei Ahnung von dieser Zeit hast.
++

von c-hater (Gast)


Lesenswert?

HildeK schrieb:

> Da würde dein permanenter Wunsch in Assembler zu programmieren gut
> passen, auch für die kleineren µCs: ≥ 256Byte RAM und den Shift- oder
> Rotatebefehlen.

Wenn du denn Thread richtig gelesen hättest, wäre dir aufgefallen, dass 
ich bereits einen ATtiny85 wegen RAM-Mangel abgelehnt hatte und statt 
dessen einen ATtiny824 vorgeschlagen hatte, eben weil der genug RAM für 
die Aufgabe hat.

Weiterhin wäre dir aufgefallen, dass ich bei dem Programmaufwand schon 
rein zeilenzahlmäßig den Schwerpunkt auf SPI gelegt habe. Womit sich 
deine idiotischen Spekulationen über Shift- oder Rotate-Befehle auch in 
Luft auflösen.

Sprich: Lerne Lesen. Dann erst Schreiben.

von Cartman (Gast)


Lesenswert?

> Wie groß ist denn die Datenrate des Eingangssignals?

Als Erfahrungswert aus der Praxis: Man kann man ein asynchrones
Datensignal mit 9600 Baud "unfallfrei" ueber eine 64k synchrone
Standleitung uebertragen. Mehr als Pegelwandler von RS-232
zu z.B. X.21 braucht es dabei nicht.
Bei 1 MHz wuerde es dann eine 115200 Baud Nachricht schaffen.

Aber keine Ahnung was der TO da durchschiebt :).

von Falk B. (falk)


Lesenswert?

Beitrag "Re: Schieberegister ersetzen"

Hier die Software dazu, sollte funktionieren. Wenn es keinen externen 1 
MHz Takt gibt, kann man an Pin 15 (PB1/OCR1A) einen 1 MHz Takt 
abgreifen.
1
#include <avr/io.h>
2
3
#define F_CPU 8000000
4
#define FIFO_SIZE 622    // FIFO size in bytes, total delay is FIFO_SIZE+3
5
6
uint8_t fifo[FIFO_SIZE];
7
8
int main(void) {
9
  int i;
10
  uint8_t din;
11
12
  DDRB = (1<<PB1);  // OCR1A, aux clock output
13
  DDRD = 0xFF;    // output data
14
  i=0;
15
16
  // init timer 1, mode 14, Fast PWM, ICR1
17
  // prescaler 1
18
  // generate 1 MHz aux clock on OCR1A
19
20
  TCCR1A = (1<<COM1A1) | (1<<WGM11);
21
  TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS10);
22
  ICR1   = 7;
23
  OCR1A  = 3;
24
25
  while(1) {
26
    while(!(PINB & (1<<PB0)) );  // wait for sync
27
    din = (PINC & 0x3F) | (PINB & 0xC0);
28
    fifo[i++] = din;
29
    if (i == FIFO_SIZE) i=0;
30
    PORTD = fifo[i];
31
  }
32
}

von Axel R. (axlr)


Lesenswert?

PB1 ist ORC1A out, wartest aber auf PB0?
Sollte, nach erfolgtem sync die Die schleife nur einmal laufen?
Müsste man While(1) dann nicht auf LOW Pegle am sync-Pin abfragen?
Fällt mir so auf und ich frag einfach mal.

von Axel R. (axlr)


Lesenswert?

1
  while((PINB & (1<<PB1))) {
2
    while(!(PINB & (1<<PB1)) );  // wait for sync
3
    din = (PINC & 0x3F) | (PINB & 0xC0);
4
    fifo[i++] = din;
5
    if (i == FIFO_SIZE) i=0;
6
    PORTD = fifo[i];
7
  }

So, dachte ich.

von Axel R. (axlr)


Lesenswert?

1
  while(1) {
2
 while(PINB & (1<<PB1));  // wait for sync
3
    while(!(PINB & (1<<PB1)) );  // wait for sync
4
    din = (PINC & 0x3F) | (PINB & 0xC0);
5
    fifo[i++] = din;
6
    if (i == FIFO_SIZE) i=0;
7
    PORTD = fifo[i];
8
  }

oder eher so, (sry)

: Bearbeitet durch User
von Axel R. (axlr)


Lesenswert?

Na jedenfalls, das bei fallender Flanke des 1Mhz Taktes die wile 
Schleife genau einmal durchläuft und nicht bei LOW-Pegel die Schleife, 
sooft sie es eben schafft und bei H-Pegel nix macht.
Oder liege ich da falsch, sowas wir Flanken oder LoW-Level-gesteuert. 
Weiss wer, was ich meine? ;)

von Falk B. (falk)


Lesenswert?

Axel R. schrieb:
> PB1 ist ORC1A out, wartest aber auf PB0?

Ja sicher.

> Sollte, nach erfolgtem sync die Die schleife nur einmal laufen?

Ja.

> Müsste man While(1) dann nicht auf LOW Pegle am sync-Pin abfragen?

Nö. Der Sync kommt von IC4, der ist HIGH aktiv (1 aus 10 Dekoder). Die 
Schaltung ist ja eigentlich auf einen externen 1MHz Takt ausgelegt. Daß 
der Datenstrom NICHT synchron zum 1 MHz Takt ist, wurde erst später 
bekannt. Darum der Hilfstakt von 1 MHz an PB1.

von C-Hatter (Gast)


Lesenswert?

Assembler. Assembler!

von R. M. (rmax)


Lesenswert?

Falk B. schrieb:
> Der Sync kommt von IC4, der ist HIGH aktiv

Und es ist ausgeschlossen, dass PB0 immer noch HIGH ist, nachdem die 
Schleife durchlaufen wurde und er das nächste Mal abgefragt wird?

Ich denke, Axel hat schon recht, dass man erst auf LOW und dann auf HIGH 
warten muss, um sicher zu stellen, dass der Body nur einmal bei 
steigender Flanke ausgeführt wird, und nicht wieder und wieder, solange 
der HIGH-Pegel ansteht.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

R. M. schrieb:
> Falk B. schrieb:
>> Der Sync kommt von IC4, der ist HIGH aktiv
>
> Und es ist ausgeschlossen, dass PB0 immer noch HIGH ist, nachdem die
> Schleife durchlaufen wurde und er das nächste Mal abgefragt wird?

Ja, denn das Signal bleibt nur 1us high, wird ja vom 1MHz Eingangstakt 
geschaltet. Die Schleife braucht ca. 30 Takte bei 8 MHz. Der 
Schieberegisterzyklus dauert 8 Takte @1MHz = 8us = 64 Takte @ 8MHz.

> Ich denke, Axel hat schon recht, dass man erst auf LOW und dann auf HIGH
> warten muss, um sicher zu stellen, dass der Body nur einmal bei
> steigender Flanke ausgeführt wird, und nicht wieder und wieder, solange
> der HIGH-Pegel ansteht.

Nö, wenn man die restlichen Zeiten sicher kennt.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hier die Eagledateien incl. Layout. 80x60mm^2 und alles in 
bastlerfreundlichen DIL-Gehäusen, was will man mehr? J1 ist optional.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Hier die Eagledateien incl. Layout. 80x60mm^2 und alles in
> bastlerfreundlichen DIL-Gehäusen, was will man mehr? J1 ist optional.

> (https://www.mikrocontroller.net/attachment/564173/FIFO_1MHz_Layout.pdf)

Falk... hast Du etwa einfach den Autorouter angeworfen ohne 
vor-/nachzuarbeiten (GND/VCC)?

Schäm Dich!

:D

von Falk B. (falk)


Lesenswert?

Magnus M. schrieb:
> Falk... hast Du etwa einfach den Autorouter angeworfen ohne
> vor-/nachzuarbeiten (GND/VCC)?
>
> Schäm Dich!

Geht's noch? Schau mal in die Eagle Datei und markiere GND und +5V. Nur 
weil +5V und GND nicht komplett parallel geführt sind, heißt das nicht, 
daß alles Mist ist. Wichtig ist die kurze Anbindung der 
Abblockkondensatoren, und die ist gegeben. Es gibt auch, oh Schreck, 
keine Massefläche! 8-0 Aber die ist bei der Schaltung überaus 
entbehrlich.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Falk B. schrieb:
> 8-0

Was bedeutet das?

von Falk B. (falk)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?


von m.n. (Gast)


Angehängte Dateien:

Lesenswert?

Dieses Gebastel mit dünnsten Leiterbahnen und Platinenätzerei muß nun 
wirklich nicht sein.
Wie oben angedeutet, kann man ein fertiges Pico-Board mit RP2040 nehmen 
und ein einfaches Arduino-Programm draufspielen.

Der RP2040 ist so schnell, daß dieses simple delayMicroseconds() 
vielleicht schon reicht. Abhängig, ob man externen Takt oder genaues 
internes Timing verwenden möchte, kann man die Flankenerkennung bzw. 
Timerinitialisierung noch ergänzen.

Da ich dieses Arduino-Zeugs schrecklich finde, habe es nicht getestet.
Der TO könnte auch selber noch etwas beitragen.

von MaWin (Gast)


Lesenswert?

Falk B. schrieb:
> Hier die Software dazu,

1MHz per Timer zu erzeugen damit man es als SCK verwenden könnte ist 
schick, aber gab es nicht eine Lösung mit dem AVR als SPI Slave ohne 
weitere Hardware ?
1
int n=0;
2
uint8_t fifo[625];
3
DDRB=(1<<PB1); // OCR1A, aux clock output
4
TCCR1A =(1<<COM1A1)|(1<<WGM11);
5
TCCR1B =(1<<WGM12)|(1<<WGM13) | (1<<CS10);
6
ICR1=7;  // je nach Quartz
7
OCR1A=3;
8
pinMode(MISO,OUTPUT);
9
// CPOL und CPHA nach Wunsch setzen
10
SPCR|=(1<<SPE);
11
data[n]=SPSR;
12
data[n]=SPDR;
13
while(1)
14
{
15
  while(!(SPSR&(1<<SPI))) ;
16
  data[n++]=SPDR;
17
  if(n>624) n=0; 
18
  SPDR=data[n];
19
}
sollte ausreichen und gehen.

von Falk B. (falk)


Lesenswert?

MaWin schrieb:
> sollte ausreichen und gehen.

Vielleicht. Vielleicht auch nicht. Denn das SPI arbeitet nicht 
lückenlos, selbst mit taktgenau optimiertem Assembler. Damit gibt es 
zumindest zusätzlichen Jitter bei der Abtastung. Ob der kritisch ist, 
weiß ich nicht. GGf. könnte man den UART im SPI Mode laufen lassen, der 
ist dann in beide Richtungen doppelt gepuffert und kann damit lückenlos 
arbeiten.

von Peter D. (peda)


Lesenswert?

MaWin schrieb:
> aber gab es nicht eine Lösung mit dem AVR als SPI Slave ohne
> weitere Hardware ?

Das Problem ist, daß die meisten AVRs nur ein Geizhals-SPI haben ohne 
Sendepuffer.
Es könnte vielleicht klappen, wenn man die Sendedaten schon in ein 
Register legt und direkt nach dem Ready-Bit abfragen rauspustet.
Ein AVR mit 20MHz hätte dann dafür 10 Zyklen Zeit.

Falls der AVR die 1MHz selber erzeugen darf, ginge auch die UART als 
gepufferter SPI-Master (ATmega88).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich würde ein kleines MachXO2 nehmen (das kleinste reicht aus) und vorn 
und hinten einen Pegelwandler dran schnallen. Ergebnis: absolut 
taktsynchron... ;-)

Und die VHDL-Beschreibung?
Gade mal 14 Zeilen:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity sr5ms is
5
port( signal clk, inp : in std_logic;
6
      signal outp     : out std_logic);
7
end sr5ms;
8
9
architecture Behave of sr5ms is
10
   signal sr : std_logic_vector (4999 downto 0) := (others=>'0');
11
begin
12
   sr   <= sr(4998 downto 0) & inp when rising_edge(clk);
13
   outp <= sr(4999);
14
end;

von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Ich würde ein kleines MachXO2 nehmen (das kleinste reicht aus) und vorn
> und hinten einen Pegelwandler dran schnallen. Ergebnis: absolut
> taktsynchron... ;-)

Is ja Schmuuuuuu!!! ;-)

von Peter D. (peda)


Lesenswert?

Lothar M. schrieb:
> Ich würde ein kleines MachXO2 nehmen

Was kostet der Programmer dafür?

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Vielleicht auch nicht. Denn das SPI arbeitet nicht
> lückenlos, selbst mit taktgenau optimiertem Assembler.

Genau. Bei denn ollen AVRs kann man das SPI knicken. Es ist nicht in der 
Lage, "lückenlos" mit Vmax zu agieren. Das klappt allenfalls als Master 
und dann auch nur bei Nutzung der USARTs im SPI-Master-Modus, nicht aber 
bei Nutzung der eigentlichen SPI-Hardware.

Aber mein Vorschlag für den ATtiny824 kam natürlich nicht aus der Hüfte, 
sondern nach Durchdenken des Problems. Besagter Tiny hat nämlich (neben 
genug RAM) auch das neuzeitliche SPI (was endlich so ist, wie es 
eigentlich schon immer hätte sein müssen). Sprich: mindestens double 
buffered für Senden und Empfangen.

Und damit ist dann die Aufgabe ein Witz, der sich halt in 40 Zeilen Asm 
(oder meinetwegen auch in 25 Zeilen C) abhandeln läßt.

von Rente mit 76 (Gast)


Lesenswert?

> Lothar M. schrieb:
>>  Ich würde ein kleines MachXO2 nehmen
> Was kostet der Programmer dafür?

Den hat man doch ohnehin.

von H. H. (Gast)


Lesenswert?

Rente mit 76 schrieb:
>> Lothar M. schrieb:
>>>  Ich würde ein kleines MachXO2 nehmen
>> Was kostet der Programmer dafür?
>
> Den hat man doch ohnehin.

So wie andere 625St 74HC164.

von Falk B. (falk)


Lesenswert?

c-hater schrieb:
> Falk B. schrieb:
>
>> Vielleicht auch nicht. Denn das SPI arbeitet nicht
>> lückenlos, selbst mit taktgenau optimiertem Assembler.
>
> Genau. Bei denn ollen AVRs kann man das SPI knicken.

Jaja, das übliche Gelaber. Für 99% aller Anwendungen muss der SPI-Takt 
nicht lückenlos sein. Und selbst für solche Tricks  wie ein VGA-Terminal 
ist es gut genug!

von MaWin (Gast)


Lesenswert?

Falk B. schrieb:
> Jaja, das übliche Gelaber. Für 99% aller Anwendungen muss der SPI-Takt
> nicht lückenlos sein.

Na ja, es geht nicht um den Takt, der kommt eh extern und nur hilfsweise 
als intern erzeugte 1MHz, sondern das Datensignal, es kommt ein Byte 
rein, löst einen Interrupt aus, und bevor der nächste Takt kommt muss 
das Byte ausgelesen werden und das demnächst rauszuschiebende Byte 
reingeschrieben werden.

Aber es sollte in diesem Anwendungsfall auch mit dem alten SPI ohne 
Buffer funktionieren, im Gegenteil, das macht die Latency-Berechnung 
vielleicht einfacher

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Jaja, das übliche Gelaber. Für 99% aller Anwendungen muss der SPI-Takt
> nicht lückenlos sein. Und selbst für solche Tricks  wie ein VGA-Terminal
> ist es gut genug!

Hier haben wir aber nunmal eine Anwendung, wo er es sein müsste...

Selbst bezüglich des VGA-Terminal ist deine Aussage übrigens nicht 
korrekt. Allenfalls wenn man VGA auf einen kleinen Subset reduziert, 
nämlich einige Textmodi...

Hier kann man die SPI-Lücke eben einfach so legen, dass der VGA-Peer an 
der entsprechenden Stelle sowieso kein Bildaten erwartet, weil von 
vornherein feststeht, dass hier eine Leerspalte zu erscheinen hat. Nur 
dadurch wird das möglich.

Sprich: du hast noch sehr viel zu lernen, bevor du mit mir auf meinem 
Niveau diskutieren kannst...

von c-hater (Gast)


Lesenswert?

MaWin schrieb:

> Aber es sollte in diesem Anwendungsfall auch mit dem alten SPI ohne
> Buffer funktionieren

Nein, tut es nicht. Du kannst mit dem SPI der klassischen AVR keinen 
kontinuierlichen seriellen Datenstrom schreiben. Oder gar lesen. No way.

Gibt die Hardware einfach nicht her.

von m.n. (Gast)


Lesenswert?

Lothar M. schrieb:
> Ich würde ein kleines MachXO2 nehmen (das kleinste reicht aus) und vorn
> und hinten einen Pegelwandler dran schnallen.

Na ja, da fehlt jetzt nur noch das Layout. Zeig mal ;-)

Lothar M. schrieb:
> absolut taktsynchron... ;-)

Was immer das heißen mag ...

von Peter D. (peda)


Lesenswert?

m.n. schrieb:
> Na ja, da fehlt jetzt nur noch das Layout. Zeig mal ;-)

Nimm den im 25-ball WLCSP (2.5 x 2.5 mm).

von m.n. (Gast)


Lesenswert?

Peter D. schrieb:
> Nimm den im 25-ball WLCSP (2.5 x 2.5 mm).

Nicht schlecht! Da kann mit mit einem Tropfen Lötzinn alle Pins 
miteinander verbinden. Absolut synchron!

von Falk B. (falk)


Lesenswert?

c-hater schrieb:
> Sprich: du hast noch sehr viel zu lernen, bevor du mit mir auf meinem
> Niveau diskutieren kannst...

Ich bin UNWÜRDIG, Ohhh Meister!!!!

(Leute gibt's)

von MaWin (Gast)


Lesenswert?

c-hater schrieb:
> Nein, tut es nicht. Du kannst mit dem SPI der klassischen AVR keinen
> kontinuierlichen seriellen Datenstrom schreiben. Oder gar lesen. No way.
> Gibt die Hardware einfach nicht her.

Ich hab's noch nicht gemacht, aber see da kein Problem

The system is single buffered in the transmit direction and double 
buffered in the receive direction. This
influences the data handling in the following ways:
1. New bytes to be sent cannot be written to the data register (SPDR) / 
shift register before the entire
shift cycle is completed.
2. Received bytes are written to the Receive Buffer immediately after 
the transmission is completed.
3. The Receive Buffer has to be read before the next transmission is 
completed or data will be lost.
4. Reading the SPDR will return the data of the Receive Buffer.
After a transfer is completed the SPI Interrupt Flag (SPIF) will be set 
in the SPI Status Register (SPSR).
This will cause the corresponding interrupt to be executed if this 
interrupt and the global interrupts are
enabled. Setting the SPI Interrupt Enable (SPIE) bit in the SP

aus

https://ww1.microchip.com/downloads/en/Appnotes/Atmel-2585-Setup-and-Use-of-the-SPI_ApplicationNote_AVR151.pdf

Beitrag #7134790 wurde von einem Moderator gelöscht.
Beitrag #7134792 wurde von einem Moderator gelöscht.
Beitrag #7134852 wurde von einem Moderator gelöscht.
Beitrag #7134867 wurde von einem Moderator gelöscht.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Lothar M. schrieb:
>> Ich würde ein kleines MachXO2 nehmen
> Was kostet der Programmer dafür?
Um die 20€. Und wenn man das FPGA-Zeugs mal kapiert hat, dann findet man 
laufend Anwendungen dafür.

m.n. schrieb:
> Lothar M. schrieb:
>> Ich würde ein kleines MachXO2 nehmen (das kleinste reicht aus) und vorn
>> und hinten einen Pegelwandler dran schnallen.
> Na ja, da fehlt jetzt nur noch das Layout. Zeig mal ;-)
Ja, wenns sein muss, dann fädle ich das dead bug mäßig mit dem kopfüber 
gelegten QFP. Sind ja nur ein paar Pins nötig.
Aber es muss ja nicht sein, denn es gibt ja die geschickten 
Breakout-Platinchen für fast jedes Gehäuse.

> Lothar M. schrieb:
>> absolut taktsynchron... ;-)
> Was immer das heißen mag ...
Da war die Rede von einem 1MHz Takt. Aber wenns nicht aufs ppm ankommt, 
dann kann man auch den internen Oszillator des MAchXO nehmen.


Falls sich jemand fragt, was da gelöscht wurde: es war nur unsachliches 
und unflätiges Zeug. Schade um den Speicherplatz...

von m.n. (Gast)


Lesenswert?

Lothar M. schrieb:
> Um die 20€. Und wenn man das FPGA-Zeugs mal kapiert hat, dann findet man
> laufend Anwendungen dafür.

Sicher nicht schlecht, wenn man es braucht und verstanden hat ;-)

Lothar M. schrieb:
> denn es gibt ja die geschickten Breakout-Platinchen

Darum hatte ich ja den RP2040 vorgeschlagen. Da kostet die fertige 
"Baugruppe" keine fünf Euro, ist gut verfügbar und kann im 1/10" bequem 
verdrahtet/versteckbrettet werden.
Zwar nicht so elegant wie Dein FPGA-Programm, können auch da die IO-Pins 
mit hohem Takt schnell wackeln.
Egal, der TO ist wohl auch damit überfordert.

von c-hater (Gast)


Lesenswert?

Lothar M. schrieb:

> Falls sich jemand fragt, was da gelöscht wurde: es war nur unsachliches
> und unflätiges Zeug. Schade um den Speicherplatz...

Das magst du so sehen. Andere sehen das anders. Bedauernswert ist 
höchstens die Eskalation.

Aber: das, was wirklich an Fakten da war, hast du ja nicht 
"weggemoddet". Also sehe ich hier durchaus den Willen, bei aller 
Löscherei wenigstens die Fakten zu retten.

Und die sprechen für sich selbst. Leider aber eben nur für kompetente 
Leser.

Der Rest kann das nicht unbedingt erkennen, würde aber bei der Lektüre 
der weggelöschten Postings vielleicht zumindest nachdenklich werden...

Auch "Unflat" könnte hier einen Nutzen haben...

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Auch wenn es keine Raketenwissenschaft ist, hier die Software für die 
Einchiplösung mittels AVR, getestet mit Arduino Uno/ATmega 328P. Daten 
in PD0(TXD0) rein und an PD1(TXD0) verzögert raus. Es sind auch fast 
exakt 5ms, naja, 5,004 wenn mein Oszi richtig mißt.
Anbei die Bilder. Kanal 1 ist der Eingang, Kanal 2 der verzögerte 
Ausgang.
Auf dem 3. Bild sieht man den lückenlosen SPI Takt an PD4.
1
#include <avr/io.h>
2
3
#define F_CPU 16000000
4
#define BAUD0 1000000
5
6
// USART in SPI Mode
7
#define UBRR0_VAL  ((F_CPU+BAUD0)/(BAUD0*2)-1)  
8
#define BAUD0_REAL (F_CPU/(2*(UBRR0_VAL+1)))     
9
#define BAUD0_ERROR ((BAUD0_REAL*1000)/BAUD0-1000) 
10
 
11
#if ((BAUD0_ERROR>10) || (BAUD0_ERROR<-10))
12
  #error Systematic baud error above 1% which is too high! 
13
#endif
14
15
#define FIFO_SIZE 625    // FIFO size in bytes, total delay FIFO_SIZE * 8 * 1/BAUD0
16
17
uint8_t fifo[FIFO_SIZE];
18
19
int main(void) {
20
    int i;
21
    uint8_t din;
22
23
    DDRB = (1<<PB1);                // for TEST only, OC1A, 33Hz test signal                
24
    DDRD = (1<<PD4) | (1<<PD1);     // TXD0, XCK0
25
    i=0;
26
27
    // for TEST only
28
    // init timer 1, mode 14, Fast PWM, ICR1
29
    // prescaler 8
30
    // generate test signal on OCR1A
31
32
    TCCR1A = (1<<COM1A1) | (1<<WGM11);
33
    TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS11);
34
    ICR1   = 60000;
35
    OCR1A  = 30000;
36
37
    // init USART#0 in SPI mode
38
39
    UCSR0B = (1<<RXEN0) | (1<<TXEN0);
40
    UCSR0C = (1<<UMSEL01) | (1<<UMSEL00);
41
    UBRR0H = UBRR0_VAL >> 8;
42
    UBRR0L = UBRR0_VAL;
43
44
    while(1) {
45
        while( !(UCSR0A & (1<<UDRE0)) ); // wait for free tx buffer
46
        din = UDR0;
47
        fifo[i++] = din;
48
        if (i == FIFO_SIZE) i=0;
49
        UDR0 = fifo[i];
50
    }
51
}

von Andrea B. (stromteam)


Lesenswert?

Dual-Port-Ram + Zähler + ein paar Inverter könnten auch reichen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Frickelprinz schrieb:
> Da ist eine kuchenblechgroße Platine mit 625 x 74HCT164 SMD. Das sind 8
> Bit Schieberegister,

Eine solche Anforderungen wurde bei einem Kunden mal mit einer Reihe von 
Spartan 3A-FPGAs gelöst. Allerdings auch deshalb, weil es ein 
kompliziertes Protokoll gab und die noch etwas mehr tun mussten, als nur 
schieben. Der Preis der FPGAs lag damals UNTER dem Equivalent derselben 
Zahl von Schieberegister-ELementen.

von MaWin (Gast)


Lesenswert?

Jürgen S. schrieb:
> Der Preis der FPGAs lag damals UNTER dem Equivalent derselben Zahl von
> Schieberegister-ELementen.

Geiz.

Damals.

Heute hingegen "gibt es das FPGA nicht mehr, während er die 164 fast 
gratis kriegt".

So kann man sich mit zu esoterischen Bausteinen in der Zeit der 
Chipknappheit auch ins Knie schiessen.

von Falk B. (falk)


Lesenswert?

MaWin schrieb:
> Jürgen S. schrieb:
>> Der Preis der FPGAs lag damals UNTER dem Equivalent derselben Zahl von
>> Schieberegister-ELementen.
>
> Geiz.
>
> Damals.
>
> Heute hingegen "gibt es das FPGA nicht mehr, während er die 164 fast
> gratis kriegt".
>
> So kann man sich mit zu esoterischen Bausteinen in der Zeit der
> Chipknappheit auch ins Knie schiessen.

Hmmm, ein ECHTER MaWin aus dem Lehrbuch, der schon vor 20 Jahren alle 
moderen Digital-ICs gehaßt hat. Du nutzt doch sicher eine PDP-11, um 
deine Beiträge hier zu verfassen, nicht?

von Falk B. (falk)


Lesenswert?

Andrea B. schrieb:
> Dual-Port-Ram + Zähler + ein paar Inverter könnten auch reichen.

Sind aber deutlich aufwändiger als ein IC . . . .

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> // USART in SPI Mode

Du schummelst. Das ist eben nicht die normale SPI-Einheit.

> Auf dem 3. Bild sieht man den lückenlosen SPI Takt an PD4.

Denn genau das ist mit der nicht möglich.

Dass es mit USART im SPI-Mode geht, hatte ich bereits hier:

Beitrag "Re: Schieberegister ersetzen"

erwähnt.

von Rente mit 76 (Gast)


Lesenswert?

Von allen möglichen Lösungen muss unbedingt die schlechteste gewählt 
werden.
Mit ungeeigneten Bauteilen.

: Wiederhergestellt durch Moderator
von Stefan F. (Gast)


Lesenswert?

Rente mit 76 schrieb:
> Von allen möglichen Lösungen muss unbedingt die schlechteste gewählt
> werden. Mit ungeeigneten Bauteilen.

Derart sinnlose Kommentare kommen immer anonym. Offenbar schämst du dich 
dafür. Gut so.

: Wiederhergestellt durch Moderator
von Rente mit 76 (Gast)


Lesenswert?

Nein, ich schäme mich nicht, warum auch?. Ein Controller muss mit viel 
Trickserei zur gewünschten Funktion gebracht werden. Lothars 12 Zeilen 
weisen doch den richtigen Weg.
Klar, einfach und ohne Handstände. Ich gehe davon aus, dass es hier am 
Verständnis von ein paar VHDL-Zeilen hapert.

von Erfinder (Gast)


Lesenswert?

c-hater schrieb:
> Nein, tut es nicht. Du kannst mit dem SPI der klassischen AVR keinen
> kontinuierlichen seriellen Datenstrom schreiben.

Würde es gehen, wenn der SPI im Slave-Mode läuft und ein Timer vom AVR 
die 1 MHz erzeugt und man dessen Ouput-Pin mit dem SPI-Clock des AVR 
verbindet?

Dann wäre der Takt doch starr, und der AVR müsste nur schnell genug zum 
richtigen Zeitpunkt in das Transfer-Register schreiben. Wenn das nicht 
funktionieren würde, könnte man den AVR ja niemals als SPI-Slave 
verwenden, oder?

von Uwe G. (scd)


Lesenswert?

Stefan ⛄ F. schrieb:
> Rente mit 76 schrieb:
>> Von allen möglichen Lösungen muss unbedingt die schlechteste gewählt
>> werden. Mit ungeeigneten Bauteilen.
>
> Derart sinnlose Kommentare kommen immer anonym. Offenbar schämst du dich
> dafür. Gut so.

Du solltest Dir Deinen missionarischen Eifer für die Elektronik 
aufheben. Dort ist er von viel höherem Nutzen als das hiesige 
Windmühlenflügel-Bekämpfen.

von MaWin (Gast)


Lesenswert?

Falk B. schrieb:
> Hmmm, ein ECHTER MaWin aus dem Lehrbuch, der schon vor 20 Jahren alle
> moderen Digital-ICs gehaßt hat.

So so.

http://www.armory.com/~rstevew/Public/Pgmrs/GAL/_ClikMe1st.htm

von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Ich würde ein kleines MachXO2 nehmen (das kleinste reicht aus)

Hmmm.

https://www.latticesemi.com/Products/FPGAandCPLD/MachXO2

Der kleinste ist der XO2-256, der hat keine EBR RAM Blocks und nur 2kbit 
distributed RAM, das geht schon rein numerisch nicht. In der Doku habe 
ich nichts gefunden, was dessen Nutzung als Schieberegister erlaubt, so 
wie es die Xilinx-FPGAs können mit den SRL16. Der kleinste XC3S50AN 
hätte genügend und hätte auch seinen Config Flash on board.

Ok, im "Memory Usage Guide for MachXO2 Devices" gibt es wohl auch eine 
Möglichkeit, mittels "IPexpress Flow" ein Schieberegister zu erzeugen, 
was dann aber über distributed RAM + Zusatzlogik zusammengebaut wird. 
Geht schon, schafft der VHDL-Compiler aber vermutlich nicht automatisch.

von Falk B. (falk)


Lesenswert?

MaWin schrieb:
>> Hmmm, ein ECHTER MaWin aus dem Lehrbuch, der schon vor 20 Jahren alle
>> moderen Digital-ICs gehaßt hat.
>
> So so.
>
> http://www.armory.com/~rstevew/Public/Pgmrs/GAL/_ClikMe1st.htm

Besser kann man es nicht beweisen ;-)
Auch 1998 waren GALs schon alt wie der Wald und moderne CPLDs und FPGAs 
ziemlich weit verbreitet, wenn gleich nicht unter Bastlern. Aber auch 
das kam SEHR schnell anfang der 2000er Jahre. Aber was soll, diese 
sinnlose Diskussion hatten wir schon VOR 2000 in de.sci.electronics.

von m.n. (Gast)


Lesenswert?

Rente mit 76 schrieb:
> Ein Controller muss mit viel Trickserei zur gewünschten Funktion
> gebracht werden.

Das stimmt doch garnicht!

> Lothars 12 Zeilen weisen doch den richtigen Weg.

Wenn man sich Lieferzeit (derzeit wohl unendlich), Preis + Lieferzeit 
für ein breakout-Board und Zeit für die Einarbeitung ansieht, merkt man 
schnell, daß der "richtige Weg" eine Sackgasse ist.

MaWin schrieb:
> http://www.armory.com/~rstevew/Public/Pgmrs/GAL/_ClikMe1st.htm

Einen Link auf den eigenen Text zu setzen, ist ein ganz schlechtes 
Argument!

Was sagte mal Jürgen Manger sinngemäß: "Dem Erwin habe ich den Hergang 
des Unfalls so genau erzählt - der kann das jetzt bezeugen."

von Rente mit 76 (Gast)


Lesenswert?

> Wenn man sich Lieferzeit (derzeit wohl unendlich), Preis + Lieferzeit
> für ein breakout-Board und Zeit für die Einarbeitung ansieht, merkt man
> schnell, daß der "richtige Weg" eine Sackgasse ist.

Das ist alles eine Frage des Standpunktes: für den Neueinsteiger gilt 
das mit dem Controller genau in gleicher Weise.
Für mich es einfach: bei mir liegen sowohl Lattice- als auch 
Xilinxschaltkreise in ausreichender Menge auf Lager. Irgendeine 
ebenfalls vorhandene Leiterplatte aus der normalen Produktion bekommt 
einen zusätzlichen Ein- und Ausgangsdraht...
Die Vorteile des FPGA: absolute Passgenauigkeit zu den Anforderungen, 
andere Taktfrequenzen können einfach angepasst werden.
Das ist keine Sackgasse, sondern einfach geistige Trägheit bzw. 
Verfettung.
Mit VHDL hättest du dich ja schon längst mal vertraut machen können. Es 
ist aber wie in der Autoindustrie: wir machen lieber das, was wir immer 
schon gemacht haben und wundern uns am Ende, dass wir wieder alles 
verschlafen haben.

Beitrag #7136912 wurde von einem Moderator gelöscht.
Beitrag #7136924 wurde von einem Moderator gelöscht.
Beitrag #7136930 wurde von einem Moderator gelöscht.
Beitrag #7136943 wurde von einem Moderator gelöscht.
Beitrag #7136946 wurde von einem Moderator gelöscht.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Der kleinste ist der XO2-256,
Stimmt, der ist zu klein, ein 640er sollte es schon sein.

> Geht schon, schafft der VHDL-Compiler aber vermutlich nicht automatisch.
Das Design ging für einen 640er ohne Fehlermeldung durch den 
Synthesizer. Der Ressourcenvetbrauch ist plausibel.


m.n. schrieb:
>> Lothars 12 Zeilen weisen doch den richtigen Weg.
> Wenn man sich Lieferzeit (derzeit wohl unendlich), Preis + Lieferzeit
> für ein breakout-Board und Zeit für die Einarbeitung ansieht, merkt man
> schnell, daß der "richtige Weg" eine Sackgasse ist
Nur mal angenommen, das träfe für die uC-Lösung auch zu...

Wenn der TO weder uC noch FPGA kann, dann ist er mit dem FPGA schneller 
am Ziel. Denn ich weiß schon jetzt (ohne ihn je implementiert zu haben) 
absolut sicher, dass dieser Zwölfzeiler garantiert so funktionieren wird 
wie ich es erwarte. Denn es gibt in FPGAs nichts Einfacheres als ein 
Schieberegister.

Und der Witz: der Zwölfzeiler lässt sich nicht nur auf einem 
Lattice-FPGA implementieren, nein das geht auch auf einem Xilinx, 
Efinix, Intel, oder sonst irgendeinem FPGA.

BTW: was da gelöscht wurde, trug nichts zur Sache bei, es war nur 
unnötiger Hickhack.

BTW2: lassen wir doch den TO entscheiden, welcher Weg ihm der liebste 
ist.

: Bearbeitet durch Moderator
von m.n. (Gast)


Lesenswert?

Rente mit 76 schrieb:
> Die Vorteile des FPGA: absolute Passgenauigkeit zu den Anforderungen,
> andere Taktfrequenzen können einfach angepasst werden.
> Das ist keine Sackgasse, sondern einfach geistige Trägheit bzw.
> Verfettung.
> Mit VHDL hättest du dich ja schon längst mal vertraut machen können.

Wenn Du mich persönlich meinst, da kennst Du meine Anforderungen 
garnicht geschweige denn die passgenaue Lösung. Und was ich bislang mit 
PALs, GALs und FPGAs gemacht habe, weist Du auch nicht.

Was Lothar da oben geschrieben hat, kann man auch nachvollziehen, ohne 
explizit mit VHDL etwas zu tun zu haben. Es nützt aber nur demjenigen, 
der, wie Du selber schreibst, die Sachen schon auf dem Tisch zu liegen 
hat.
Den oben erwähnten Programmer für 20 € finde ich bei keinem seriösen 
Händler. Ein breakout-Board zu > 80 € ist nicht lieferbar. Die ICs 
selber sind derzeit nicht verfügbar. Sie arbeiten mit 1,8 V, weshalb sie 
ohne Pegelwandler nicht einsetzbar sind. Bei der Auswahl muß man 
aufpassen, nicht gerade ein BGA-Gehäuse zu erwischen.
Das findest Du jetzt alles gut?

Wie gezeigt gibt es Lösungen mit einem AVR (5 V und DIL-Gehäuse). Mein 
"Programmvorschlag" auf einem RP2040 (ebenfalls steckbar und in 
Stückzahlen erhältlich) läuft sogar mit diesem dämlichen Arduino-Zeugs, 
ohne daß man wissen muß, was dabei passiert und daß das Programm 58 kB 
groß ist (Kopfkratz).

von Shifter (Gast)


Lesenswert?

Wie wäre es wenn der TO ein Foto der Platine machen würde?

von Stefan F. (Gast)


Lesenswert?

Shifter schrieb:
> Wie wäre es wenn der TO ein Foto der Platine machen würde?

Geht nicht, das war doch nur ein Hoax.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

m.n. schrieb:
> Den oben erwähnten Programmer für 20 € finde ich bei keinem seriösen
> Händler. Ein breakout-Board zu > 80 € ist nicht lieferbar. Die ICs
> selber sind derzeit nicht verfügbar. Sie arbeiten mit 1,8 V, weshalb sie
> ohne Pegelwandler nicht einsetzbar sind.
Wer etwas nicht machen will findet Ausreden, wer es tun will einen Weg.

m.n. schrieb:
> Wie gezeigt gibt es Lösungen mit einem AVR (5 V und DIL-Gehäuse).
Schon die ursprüngliche Leiterplatte war in SMD. Warum sollte jetzt 
jemand wieder bedrahtete Bauteile wollen.

Und genausowenig kommen die 5V vom TO. Wenn die Platine in den letzten 
25 Jahren entstanden ist, dann können das auch locker 3,3V sein...

: Bearbeitet durch Moderator
von H. H. (Gast)


Lesenswert?

Lothar M. schrieb:
> Und auch die 5V kommen nicht vom TO.
>
> Wenn die Platine in den letzten 25 Jahren entstanden ist, dann können
> das auch locker 3,3V sein...

Frickelprinz schrieb:
> 74HCT164

Die betreibt man nicht mit 3,3V.

von Percy N. (vox_bovi)


Lesenswert?

Lothar M. schrieb:
> Wer etwas nicht machen will findet Ausreden, wer es tun will einen Weg.

Und wer nur maulen will drischt hohle Phrasen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

H. H. schrieb:
> Frickelprinz schrieb:
>> 74HCT164
> Die betreibt man nicht mit 3,3V.
Stimmt. Also stimme ich der Mehrheit zu: das mit dem FPGA ist keine gute 
Idee. Das sollten nur die machen, die es bereits können und die Bauteile 
zur Hand haben.

Percy N. schrieb:
> Und wer nur maulen will drischt hohle Phrasen.
qed

: Bearbeitet durch Moderator
von HildeK (Gast)


Lesenswert?

Lothar M. schrieb:
> das mit dem FPGA ist keine gute
> Idee. Das sollten nur die machen, die es bereits können und die Bauteile
> zur Hand haben.

Grundsätzlich ist es schon eine gute Idee, denn FPGAs sind die Bauteile, 
bei denen es an Flipflops nicht mangelt, ebenso wie bei den großen 
CPLDs.
Aber bei beiden gilt: man muss sie programmieren können; nicht nur den 
passenden Programmer haben sondern auch die Sprache beherrschen.
Das gilt natürlich auch für die µC mit der Softwarelösung. Wobei: in 
manchen Firmenphilosophien sollen Softwarelösungen vermieden werden 
(Upgrade, ggf. remote) während programmierbare Hardware kein Problem 
darstellte.

von m.n. (Gast)


Lesenswert?

HildeK schrieb:
> Lothar M. schrieb:
>> das mit dem FPGA ist keine gute
>> Idee. Das sollten nur die machen, die es bereits können und die Bauteile
>> zur Hand haben.
>
> Grundsätzlich ist es schon eine gute Idee, denn FPGAs sind die Bauteile,
> bei denen es an Flipflops nicht mangelt, ebenso wie bei den großen
> CPLDs.

Er dreht seine Fahne doch nach dem Wind. Mal ja, mal nein, da kann man 
nicht diskutieren.
Auch, daß derzeit die benötigte Hardware zu angemessenen Preisen nicht 
verfügbar ist, wird gerne ignoriert.

von Rente mit 76 (Gast)


Lesenswert?

> Auch, daß derzeit die benötigte Hardware zu angemessenen Preisen nicht
> verfügbar ist, wird gerne ignoriert.
Ich könnte dir einen LCMXO2-1200HC-4TG100C spenden. Der braucht auch nur 
eine einzige Spannung: 3,3 V. Ist dir aber wahrscheinlich zu neumodisch.
Porto bezahle ich auch, aber höre bitte mit deinem Wehklagen auf.
Vllt findet sich noch jmd, der für lau einen passenden Programmer 
loswerden will.

von MaWin (Gast)


Lesenswert?

HildeK schrieb:
> Grundsätzlich ist es schon eine gute Idee, denn FPGAs sind die Bauteile,
> bei denen es an Flipflops nicht mangelt, ebenso wie bei den großen
> CPLDs.

Das blöde ist halt, dass FPGA Hersteller keinerlei Augenmerk auf klein 
und billig legen. Im Gegenteil, lange war externes EEPROM und externer 
Takt notwendig.

Wir brauchen hier ein IC mit 4 Anschlüssen, VCC, GND, DIN und DOUT, 
eventuell externem CLK.

Als uC gibt es 6-polige und Dinger ab 3ct, na sagen wir unter 50ct.

Als FPGA gibt es Minimum QFN48 und es geht bei 10$ los. Was soll man mit 
43 unbenutzen Anschlüssen ?


FPGA ist halt für völlig andere Anwendungen, z.B. in realtime den DSL 
Datenstrom abertausender Nutzer in Frankfurt nach Inhalt zu untersuchen, 
ZIP oder BASE64 zu decodieren, DES zu entschlüsseln, darin 
Schlüsselworte zu suchen, Inhalte auszutauschen und wieder zu verpacken 
so dass der Anwender nichts merkt, und das ganze muss rekonfigurierbar 
sein wenn ein neues Verschlüsselungsformat aufkommt oder auch nur neue 
Suchworte. Da werden sowieso ganze Schränke voller Chips zum 
koste-es-was-es-wolle Preis aufgestellt.

von Peter D. (peda)


Lesenswert?

Was mich an den FPGAs und CPLDs extrem nervt, daß die so kurzlebig sind. 
Ständig werden Typen abgekündigt und die Ersatztypen sind nicht 
kompatibel, d.h. die Source und die Platinen müssen angepaßt werden. Man 
merkt deutlich, daß die für Nischenmärkte gedacht sind und nicht für 
langfristige Projekte.

Für ein Gerät haben wir einen hoffentlich lebenslangen Vorrat an FPGAs 
eingekauft, weil der Entwickler nicht mehr zugreifbar ist und das 
Projekt auch nicht dokumentiert ist.

Ich hab noch 5 Stück PZ5064 liegen, das waren mal super stromsparende 5V 
CPLDs mit guten Tools. Die Ersatztypen von Xilinx haben haufenweise 
Ärger gemacht. Der Fitter hat sich tagelang ohne Ergebnis abgeqält und 
es mußte ein Typ mit doppelter Anzahl Macrozellen eingesetzt werden, der 
natürlich nicht pinkompatibel war.

Ein Fremdentwickler hatte mal PEELs PA7572 verwendet, die gab es nach 
kurzer Zeit auch nicht mehr zu kaufen. Zum Glück ist das Projekt 
eingestampft worden.

Ich nehme daher lieber Mikrocontroller, die gibt es in der Regel viele 
Jahrzehnte lang gut zu kaufen. Und kosten dann auch keine Mondpreise, 
wie ältere FPGAs oder CPLDs.

von Maddin (Gast)


Lesenswert?

Was für ein Blödsinn.

Leute, der Frickelprinz hat sich das letzte Mal vor 100 Einträgen 
gemeldet, in Summe eh nur 3x und dabei ist er NULL - auf keine einzige 
Antwort eingegangen.

>> Helft doch lieber denen die auch lesen was Ihr schreibt.

Gruß
M.

von m.n. (Gast)


Lesenswert?

Rente mit 76 schrieb:
> Porto bezahle ich auch, aber höre bitte mit deinem Wehklagen auf.

Deine Missioniererei ist ja schon frech.

> Vllt findet sich noch jmd, der für lau einen passenden Programmer
> loswerden will.

Vielleicht, vielleicht auch nicht. Vergiss es!
Ich bekomme mein Probleme auch ohne Lockangebote gelöst.

von Rente mit 76 (Gast)


Lesenswert?

> Ich bekomme mein Probleme auch ohne Lockangebote gelöst.
Das Schieberegister war doch gar nicht dein Problem.
Ich habe mich nur rein rhetorisch geäußert.
Bist du immer so leicht zu triggern?

von Falk B. (falk)


Lesenswert?

Peter D. schrieb:
> Was mich an den FPGAs und CPLDs extrem nervt, daß die so kurzlebig sind.
> Ständig werden Typen abgekündigt und die Ersatztypen sind nicht
> kompatibel, d.h. die Source und die Platinen müssen angepaßt werden.

Die meisten FPGAs/CPLDs sind 20 Jahre verfügbar, teilweise länger.

> Man
> merkt deutlich, daß die für Nischenmärkte gedacht sind und nicht für
> langfristige Projekte.

Was ist denn für euer Gnaden "langfristig"? 100 Jahre? Welche CPU, PC 
etc. ist 20 Jahre aktuell?

> Für ein Gerät haben wir einen hoffentlich lebenslangen Vorrat an FPGAs
> eingekauft, weil der Entwickler nicht mehr zugreifbar ist und das
> Projekt auch nicht dokumentiert ist.

Das ist dann euere Schlampigkeit und kein allgemeines Problem.

> Ich nehme daher lieber Mikrocontroller,

Äpfel und Birnen und so . . .

von Georg (Gast)


Lesenswert?

Peter D. schrieb:
> weil der Entwickler nicht mehr zugreifbar ist und das
> Projekt auch nicht dokumentiert ist.

Wegwerftechnik und ein Wegwerfprogrammierer, was kann man da schon 
erwarten?

Georg

Beitrag #7139182 wurde von einem Moderator gelöscht.
Beitrag #7139191 wurde von einem Moderator gelöscht.
von HildeK (Gast)


Lesenswert?

Man könnte auch sachlich widersprechen. Ich weiß nicht, warum das 
manchen hier so schwer fällt ...
Ich stelle mir immer vor, dass der, mit dem ich diskutiere, dem ich 
widerspreche oder den ich zu widerlegen versuche, dass ich den 
persönlich kenne und er vor mir in z.B. einer Besprechung sitzt.
Dann stimmen automatisch der Ton und die Ausdrücke ...

von Falk B. (falk)


Lesenswert?

HildeK schrieb:
> Man könnte auch sachlich widersprechen. Ich weiß nicht, warum das
> manchen hier so schwer fällt ...

Weil sie eine Persönlichkeitsstörung haben.

> Ich stelle mir immer vor, dass der, mit dem ich diskutiere, dem ich
> widerspreche oder den ich zu widerlegen versuche, dass ich den
> persönlich kenne und er vor mir in z.B. einer Besprechung sitzt.
> Dann stimmen automatisch der Ton und die Ausdrücke ...

Mag sein, aber REAL ist das nicht so, denn für die Meisten ist die 
Distanz und optische Annonymität ein gutes Medium, mal so richtig die 
Sau rauzulassen.

Beitrag #7139233 wurde von einem Moderator gelöscht.
Beitrag #7139247 wurde von einem Moderator gelöscht.
Beitrag #7139273 wurde von einem Moderator gelöscht.
von Peter D. (peda)


Lesenswert?

Falk B. schrieb:
>> Für ein Gerät haben wir einen hoffentlich lebenslangen Vorrat an FPGAs
>> eingekauft, weil der Entwickler nicht mehr zugreifbar ist und das
>> Projekt auch nicht dokumentiert ist.
>
> Das ist dann euere Schlampigkeit und kein allgemeines Problem.

Man kann sich nicht immer nur die Rosinen rauspicken. Man muß auch mal 
Fremdentwicklungen in die Produktion überführen und ist dann schon froh, 
wenigstens das Jedec-File zu bekommen.

von Frickelprinz (Gast)


Lesenswert?

Sorry liebes Forum, dass ich mich nicht mehr gemeldet habe. Habe extreme 
Gesundheitsprobleme. Mit manchen Antworten bin ich extrem überfordert 
und weiß oft nicht, was ist Ernst und was ist Trollerei!!!

Warum kann ein uC mit 3 Portleitungen (Daten rein, Daten raus, 
1MHz_Clock) das nicht bit für Bit rübertakten, warum externe 
Schieberegister ?

von HildeK (Gast)


Lesenswert?

Frickelprinz schrieb:
> Warum kann ein uC mit 3 Portleitungen (Daten rein, Daten raus,
> 1MHz_Clock) das nicht bit für Bit rübertakten, warum externe
> Schieberegister ?
Du willst doch jedes Bit für 5ms verzögern, also muss es für 5ms 
zwischengespeichert werden. Bei 1MHz Takt gehen in der Zeit aber 4999 
weitere Bits ein bis das erste wieder ausgegeben werden darf.
Bisher wurde das durch das Durchtakten durch deine fast endlose 
Schieberegisterkette erledigt.

Jetzt kann man mit dem µC viel leichter Bytes, also 8 Bit auf einmal 
verarbeiten als einzelne Bits. Er müsste dann einen RAM-Speicher für 
mindestens 5000 Bytes haben, wobei nur 1/8 der Bits genutzt werden. Bei 
den größeren µCs gibt es das, bei den kleinen ist es üblicherweise weit 
weniger, oft nur 128  256  512 Bytes. Das reicht auch nicht mit dem 
externen Schieberegister.
Daher der Vorschlag von Falk B., einen Mega88 zu nehmen, der hat 
immerhin 1 kByte RAM. Das ist auch das Mindeste was man haben muss, denn 
der µC braucht auch noch RAM für seinen Stack oder für Variablen; wobei 
für diese Aufgabe wird das (geschätzt) sehr wenig sein.

Mit dem externen Schieberegister muss man dann nur noch 5000/8 
Speicherstellen im RAM haben, dafür muss man eben die Bits in einem Byte 
mit einem Hilfsmittel, hier dem externen Schieberegister, ausgeben und 
muss nur mit 1MHz/8 das Schieberegister neu laden. So hat auch der µC 
achtmal mehr Zeit für seine Verarbeitung.
Das selbe gilt auch fürs Lesen der Eingangsdaten: zuerst mal acht Bits 
in das Schieberegister mit 1MHz eintakten, dann in den Prozessor 
einlesen und speichern. Dann kommen die nächsten acht in die nächste 
RAM-Zelle.
Sind alle 625*8 abgespeichert, also nach 5000 Takten, wird das zuerst 
eingelesene ins Ausgabeschieberegister geladen und von dort seriell 
ausgetaktet.

von MaWin (Gast)


Lesenswert?

Sorry Hilde, du möchtest hier den Hardwareoverkill mit externen 
Schieberegistern verteidigen, dabei liegen längst 2 Lösungen unter 
geschickter Verwendung der microcontrollerinternen Hardwarefunktionen 
vor, die das Problem viel intelligenter lösen, oder eben auch eines 
FPGA.

von Stefan F. (Gast)


Lesenswert?

MaWin schrieb:
> Sorry Hilde, du möchtest hier den Hardwareoverkill mit externen
> Schieberegistern verteidigen

Sehe ich anders, er hat einfach nur die Frage beantwortet, ohne den 
Lösungsansatz zu bewerten.

> warum externe Schieberegister ?

von Falk B. (falk)


Lesenswert?

Frickelprinz schrieb:
> Warum kann ein uC mit 3 Portleitungen (Daten rein, Daten raus,
> 1MHz_Clock) das nicht bit für Bit rübertakten, warum externe
> Schieberegister ?

Mein erster Vorschlag hier

Beitrag "Re: Schieberegister ersetzen"
Beitrag "Re: Schieberegister ersetzen"

Dazu die Software

Beitrag "Re: Schieberegister ersetzen"

Dabei bin ich davon ausgegangen, daß zum 1Mbit/s auch ein SYNCHRONER 
Takt existiert. Damit man das mit einem kleinen Mikrocontroller ala AVR 
verarbeiten kann, braucht er ein wenig Hilfe, denn die 1Mbit/s mit 
EXTERNEM Takt LÜCKENLOS einlesen ist schwierig bis unmöglich.

Später kam von dir die Aussage, daß der Takt ASYNCHRON zum Datenstrom 
ist. Damit wird es einfacher und es reicht der AVR allein, er kann 
mittels UART im SPI Modus LÜCKENLOS einen 1Mbit/s Datenstrom ASYNCHRON 
abtasten, speichern und wieder ausgeben.

Beitrag "Re: Schieberegister ersetzen"

Wenn dir das DIL28 Gehäuse (35x10mm^2) zu "groß" ist, nimm das TQFP32 
(9x9mm^2) oder hard core QFN mit 5x5mm^2 oder super hard core BGA mit 
4x4mm^2. Wenn DAS keine Verkleinerung deines Kuchenblechs ist, weiß ich 
es auch nicht.

von HildeK (Gast)


Lesenswert?

MaWin schrieb:
> Sorry Hilde, du möchtest hier den Hardwareoverkill mit externen
> Schieberegistern verteidigen, dabei liegen längst 2 Lösungen unter
> geschickter Verwendung der microcontrollerinternen Hardwarefunktionen
> vor, die das Problem viel intelligenter lösen, oder eben auch eines
> FPGA.

1. HildeK - nix Hilde.
2. Ich verteidige gar nichts, ich habe ihm nur erklärt, warum ein 
einfaches Einlesen und wieder Ausgeben nicht geht.
3. Ich habe ihm erklärt, warum in dieser einen Lösung außen noch zwei 
Schieberegister sind.
4. Ich habe schon weit oben ein FPGA vorgeschlagen.

von m.n. (Gast)


Lesenswert?

Frickelprinz schrieb:
> Warum kann ein uC mit 3 Portleitungen (Daten rein, Daten raus,
> 1MHz_Clock) das nicht bit für Bit rübertakten, warum externe
> Schieberegister ?

Nochmal ganz einfach, mit externem Takt, ohne Schieberegister, ohne FPGA 
und ungetestet:
1
#define FIFO_LEN    5000  // 5000 * 1 µs
2
#define FIFO_IN     0     // Pin0
3
#define FIFO_OUT    1     // Pin1
4
#define FIFO_CLK    2     // 1 MHz an Pin2
5
6
uint8_t   fifo[FIFO_LEN];
7
uint32_t  fifo_index;
8
9
void setup()
10
{
11
  pinMode(FIFO_IN, INPUT);
12
  pinMode(FIFO_OUT, OUTPUT);
13
  pinMode(FIFO_CLK, INPUT);
14
}
15
16
void loop(void)
17
{
18
  while(digitalRead(FIFO_CLK));                 // auf 0-Pegel warten
19
  while(!digitalRead(FIFO_CLK));                // auf positive Flanke warten
20
  digitalWrite(FIFO_OUT,fifo[fifo_index]);      // verzoegerten Wert schreiben
21
  fifo[fifo_index] = digitalRead(FIFO_IN);      // neuen Wert lesen
22
  if(++fifo_index >= FIFO_LEN) fifo_index = 0;  // und wieder von vorne
23
}

von c-hater (Gast)


Lesenswert?

Frickelprinz schrieb:

> Warum kann ein uC mit 3 Portleitungen (Daten rein, Daten raus,
> 1MHz_Clock) das nicht bit für Bit rübertakten

Kann er doch. Mögliche Lösungen wurden genannt. Er braucht halt nur 
genug RAM, um ca. 625x8Bit zwischenzuspeichern.

> warum externe
> Schieberegister ?

Die hingegen braucht er nicht. Entweder nimmt man SPI-like-Peripherie 
als Schieberegister (sinnvoll!) oder man macht's in Software (nicht 
sinnvoll, da nahezu alles Devices mit genug RAM auch eine geeignete 
SPI-Einheit haben).

Aber selbst, wenn man zwingend auf ein völlig ungeeignetes Teil wie etwa 
ATmega8 @8MHz angewiesen wäre (bei dem das halt nicht der Fall ist), 
könnte man noch eine reine Software-Lösung umsetzen. Es würde 
tatsächlich gerade so reichen. Dich aber wohl maximal überfordern...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

m.n. schrieb:
> ungetestet
Ja, für diese einfache Lösung muss man halt einen µC nehmen, der schnell 
genug getaktet ist und nicht von irgendwas für mehr als 500ns 
unterbrochen wird (und bei diesen 500ns wirds schon arg kritisch mit dem 
Abtasttheorem).

Fazit: das, was es derzeit als Arduino gibt, schafft das nicht. Und auch 
bei einem nackten AVR hätte ich da so meine Bedenken bei der 
Fifo-Verwaltung...

: Bearbeitet durch Moderator
von avr (Gast)


Lesenswert?

Falk B. schrieb:
> denn die 1Mbit/s mit EXTERNEM Takt LÜCKENLOS einlesen ist schwierig bis
> unmöglich.

In C würde ich zustimmen, in Assembler ist es einfach. Es reicht eine 
ISR, die auf den SPI-Interruptvektor gelegt wird. Damit erhält man eine 
Latenz von 4-5 Takten, wenn das Hauptprogramm in einer Endlosschleife 
wartet. Die ganze Programmlogik kann in diese ISR. Schätzungsweise ca. 
20 Zeilen Assemblercode.

von c-hater (Gast)


Lesenswert?

avr schrieb:

> In C würde ich zustimmen, in Assembler ist es einfach.

Nein, ist es nicht. Jedenfalls nicht bei einem AVR8 @8Mhz.

> Es reicht eine
> ISR

Schon geloosed. Allein der Interruptrahmen dauert 8 Takte, d.h.: ALLE 
8 Takte, die überhaupt verfügbar sind, wenn man mit 1MHz samplen muss. 
Die ISR kann also überhaupt keinen Nutzcode ausführen.

Dazu kommt dann noch der "Straftakt" in main(). D.h.: allein schon das 
Konzept, das irgendwie mit Interrupts lösen zu wollen, ist völliger 
Schwachsinn, der schlicht nicht funktionieren kann.

von Falk B. (falk)


Lesenswert?

avr schrieb:
> Falk B. schrieb:
>> denn die 1Mbit/s mit EXTERNEM Takt LÜCKENLOS einlesen ist schwierig bis
>> unmöglich.
>
> In C würde ich zustimmen, in Assembler ist es einfach. Es reicht eine
> ISR, die auf den SPI-Interruptvektor gelegt wird. Damit erhält man eine
> Latenz von 4-5 Takten, wenn das Hauptprogramm in einer Endlosschleife
> wartet. Die ganze Programmlogik kann in diese ISR. Schätzungsweise ca.
> 20 Zeilen Assemblercode.

Na dann mach das mal, bau eine Lösung für das gegebene Problem und 
teste. Dann reden wir weiter.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Fazit: das, was es derzeit als Arduino gibt, schafft das nicht.

Stimmt nicht, denn "Arduino" ist so mehrdeutig heutzutage. Das ist schon 
LANGE nicht mehr nur der "olle" AVR, da sind auch viele andere, DEUTLICH 
potentere CPU, u.a. der PR2040.

> bei einem nackten AVR hätte ich da so meine Bedenken bei der
> Fifo-Verwaltung...

Es gibt eine getestete Lösung.

Beitrag "Re: Schieberegister ersetzen"

von MaWin (Gast)


Lesenswert?

Lothar M. schrieb:
> Fazit: das, was es derzeit als Arduino gibt, schafft das nicht. Und auch
> bei einem nackten AVR hätte ich da so meine Bedenken bei der
> Fifo-Verwaltung...

Falsches Fazit, man muss ja nicht digitalRead/digitalWrite auf dem 
Arduino nutzen, SPI hat der auch, und die Programme wurden gezeigt, da 
muss man nicht FUD einsteuen.

Aber was soll man vom FPGA Fanboy schon anderes als Desinformation 
erwarten.

Immerhin: mit dem fertigen VHDL code weiss Frickelprinz auch da, was ihn 
erwartet, nur scheint er's nicht zu lesen.

von c-hater (Gast)


Lesenswert?

MaWin schrieb:

> Immerhin: mit dem fertigen VHDL code weiss Frickelprinz auch da, was ihn
> erwartet, nur scheint er's nicht zu lesen.

Dürfte eh' nur ein Traffic-Troll sein...

von avr (Gast)


Lesenswert?

c-hater schrieb:
> Schon geloosed. Allein der Interruptrahmen dauert 8 Takte, d.h.: ALLE 8
> Takte, die überhaup

Schade, ich hatte von dir mehr Kompetenz erwartet. Die Interruptlatenz 
beträgt 4 Takte (RTFM) bis zur ersten ausgeführten Instruktion. Deinen 
Straftakt habe ich einkalkuliert. Was auch immer dein Interruptrahmen 
ist - Register sichern muss man nicht, wenn das Programm sonst nichts 
macht. Und wie schon geschrieben steht die Funktion im Interruptvektor.

Falk B. schrieb:
> Na dann mach das mal, bau eine Lösung für das gegebene Problem und
> teste. Dann reden wir weiter.

Brauche ich nicht und kann ich gerade auch nicht. Ich möchte nur 
Möglichkeiten aufzeigen und kann zumindest beweisen, dass die Lösung 
funktioniert.

von Falk B. (falk)


Lesenswert?

avr schrieb:
> Falk B. schrieb:
>> Na dann mach das mal, bau eine Lösung für das gegebene Problem und
>> teste. Dann reden wir weiter.
>
> Brauche ich nicht und kann ich gerade auch nicht. Ich möchte nur
> Möglichkeiten aufzeigen und kann zumindest beweisen, dass die Lösung
> funktioniert.

Nö, kannst du nicht, du plapperst nur. Ein Beweis sieht anders aus. 
Außerdem ist das mit 4 Takten Latenz falsch, da hab ich mich auch mal 
geirrt. Nach 4 Takten ist der PC in den Interrupt Vektor gesprungen. 
Dort steht dann je nach AVR Typ ein RJMP oder JMP, der 2 oder 3 Takte 
braucht. Dann erst beginnt die ISR.
Ist aber egal, eine ISR ist bei dem Problem schlicht Unsinn, da die CPU 
so oder so NICHTS anderes tun kann und muss. Old school polling ist 
einfacvher und besser, weil "taktschonenender".

von c-hater (Gast)


Lesenswert?

avr schrieb:

> Die Interruptlatenz
> beträgt 4 Takte (RTFM) bis zur ersten ausgeführten Instruktion.

Um Latenzen kümmert man sich erst, wenn überhaupt der Durchsatz 
gewährleistet ist. Ist er hier hier aber eben definitiv nicht.

Du musst einfach begreifen, dass eine komplette Interrupbehandlung 
keinesfalls damit abgeschlossen ist, wenn der Nutzcode in der ISR zum 
Zuge kommt. Danach muss der noch ausgeführt werden. Und dann muß die ISR 
auch noch zurückkehren...

Und der komplette Zyklus (ohne jeden Nutzcode!) kostet bei einem AVR8 
halt (mindestens) 8 Takte. Bei AVR8 mit 22Bit-PC und/oder externem RAM 
auch mehr...

Dazu kommt dann halt, quasi als Sahnehäubchen noch der "Straftakt" in 
main().

D.h.: unter 9 Takte für einen kompletten Interruptzyklus geht garnix. 
Und damit ist schon bei einer ersten überschlägigen Betrachtung des 
Problems vollkommen klar, das Interrupts unmöglich dessen Lösung sein 
können...

von Jobst M. (jobstens-de)


Lesenswert?

avr schrieb:
> Schade, ich hatte von dir mehr Kompetenz erwartet.

Hat er.

avr schrieb:
> Was auch immer dein Interruptrahmen ist

RETI gehört z.B. dazu. Nochmal 4 Takte. Schwubbs: sind 8 Takte. Sowas.


Gruß
Jobst

von avr (Gast)


Lesenswert?

Falk B. schrieb:
> Dort steht dann je nach AVR Typ ein RJMP oder JMP, der 2 oder 3 Takte
> braucht.

Nein, an der Stelle steht zum Beispiel
1
out SPIDR, r0
2
rjmp SPI_ISR

Der nächste Interruptvektor wird geopfert, was hier kein Problem 
darstellt. r0 wird für die ISR reserviert.

Bei 1MHz SPI-Takt hat man @8MHz CPU 64 Takte pro ISR. Das reicht dicke 
aus. Das eigentlich FIFO braucht keine 20 Takte.

Polling würde auch gehen, braucht im worst case wahrscheinlich 6 Takte.

Jobst M. schrieb:
> Hat er.

Nein, hat er wohl nicht. Sonst würde er verstehen, von was ich rede.

Beitrag #7140445 wurde von einem Moderator gelöscht.
von avr (Gast)


Lesenswert?

c-hater schrieb im Beitrag #7140445:
> avr schrieb:
>
>> Nein, hat er wohl nicht. Sonst würde er verstehen, von was ich rede.
>
> Du Spasst begreifst nicht, wovon alle Wissenden reden... Dass nämlich
> eine Funktion nicht damit endet, dass ihr Nutzcode ausgeführt wird...

Das ist vollkommen uninteressant, weil die Zeit vollkommen ausreicht. 
Das wurde schon durch das usart Beispiel von Falk bewiesen. Das einzig 
interessante ist, ob die Latenz für lückenlose SPI Übertragung als Slave 
reicht. Und das ist der Fall.

von c-hater (Gast)


Lesenswert?

avr schrieb:

> Polling würde auch gehen, braucht im worst case wahrscheinlich 6 Takte.

Polling ist das einzige was geht. Und ist nicht ganz einfach 
umzusetzen. Die innerste Schleife braucht (vollständig ausgerollt) 
tatsächlich nur 6 Takte. Bietet also genug "Platz", um den Code der 
äußeren Schleifen in den verbleibenden zwei Takten unterzubringen.

Aber man muß schon etwas an Erfahrung haben, um das unfallfrei 
umzusetzen...

von Falk B. (falk)


Lesenswert?

avr schrieb:
> Das ist vollkommen uninteressant, weil die Zeit vollkommen ausreicht.
> Das wurde schon durch das usart Beispiel von Falk bewiesen. Das einzig
> interessante ist, ob die Latenz für lückenlose SPI Übertragung als Slave
> reicht. Und das ist der Fall.

Nö, denn der AVR kann als SPI-Slave nicht so schnell getaktet werden, 
dazu braucht es mindestens einen x4 Takt. Also müßte man aus den 
externen 1MHz per EXTERNER Pll 4MHz machen. Alles machbar, aber ganz 
sicher nicht die Einchip-Lösung.

von MaWin (Gast)


Lesenswert?

Falk B. schrieb:
> Nö, denn der AVR kann als SPI-Slave nicht so schnell getaktet werden,
> dazu braucht es mindestens einen x4 Takt. Also müßte man aus den
> externen 1MHz per EXTERNER Pll 4MHz machen. Alles machbar, aber ganz
> sicher nicht die Einchip-Lösung.

Es gibt keinen externen Takt. Auch auf der Kuchenblechplatine war der 
Takt asynchron zur Aussenwelt.

Daher ist seit der Salamischeibe die Lösung noch einfacher geworden.

von avr (Gast)


Lesenswert?

Falk B. schrieb:
> Also müßte man aus den externen 1MHz per EXTERNER Pll 4MHz machen

Interner RC-Oscillator bei 8MHz? Ich hab das Gefühl wir reden gerade 
aneinander vorbei.

von Falk B. (falk)


Lesenswert?

avr schrieb:
>> Also müßte man aus den externen 1MHz per EXTERNER Pll 4MHz machen
>
> Interner RC-Oscillator bei 8MHz? Ich hab das Gefühl wir reden gerade
> aneinander vorbei.

In der Tat. Wir erinnern uns.

Beitrag "Re: Schieberegister ersetzen"

>>denn die 1Mbit/s mit EXTERNEM Takt LÜCKENLOS einlesen ist schwierig bis
>> unmöglich.

>In C würde ich zustimmen, in Assembler ist es einfach.

Also. Bau eine lösung, welche ein Datensignal, welches mit einem 
dazugehörigen, sychronen Takt in einen AVR eingelesen wird und wieder 
ausgegeben wird. Lückenlos bei 1 Mbit/s.

von Falk B. (falk)


Lesenswert?

MaWin schrieb:
> Es gibt keinen externen Takt. Auch auf der Kuchenblechplatine war der
> Takt asynchron zur Aussenwelt.
>
> Daher ist seit der Salamischeibe die Lösung noch einfacher geworden.

Stimmt, aber Mr. AVR meint, das wäre in ASM einfach. Ich bezweifle, daß 
man es überhaupt hinbekommt, auch mit 16 MHz CPU-Takt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Stimmt nicht, denn "Arduino" ist so mehrdeutig heutzutage. Das ist schon
> LANGE nicht mehr nur der "olle" AVR, da sind auch viele andere, DEUTLICH
> potentere CPU, u.a. der PR2040.
Aber genau denen traue ich noch weniger deterministisches 
Echtzeitverhalten zu. Auf jeden Fall nicht, wenn hintenrum das 
Arduino-System sein Housekeeping macht.

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Stimmt, aber Mr. AVR meint, das wäre in ASM einfach. Ich bezweifle, daß
> man es überhaupt hinbekommt, auch mit 16 MHz CPU-Takt.

Das zeigt allerdings wieder mal erneut, dass du einfach keine Ahnung 
davon hast, was mit ASM möglich ist. Weil du es einfach nicht selber 
aktiv benutzt.

Es geht mit 8MHz (natürlich mit Polling, nicht mit Interrupts), auch 
ohne ein geeignetes SPI-Device auszukommen. Also z.B. mit einem ATmega8 
@ 8MHz, wo dein Code natürgemäß scheitern wird, mangels 
SPI-Master-fähiger USART.

Ich bin bereit, einen entsprechenden Code zu liefern, wenn du im 
Gegenzug bereit bist, öffentlich, ausdrücklich und unwiederuflich 
zuzugeben, dass C zumindest insofern Dreck ist, als dass man damit 
REGULÄR nicht in der Lage ist, ALLES aus einer gegebenen Hardware 
herauszuholen.

Ich meine, das ist natürlich eine Sache, über die man eigentlich sowieso 
nicht diskutieren müsste, da jeder mit hinreichender Kompetenz das 
sowieso weiss, aber ich möchte halt, dass du es EXPLIZIT und 
ÖFFENTLICH selber sagst.

Deal?

von MaWin (Gast)


Lesenswert?

Falk B. schrieb:
> Stimmt, aber Mr. AVR meint, das wäre in ASM einfach.

Ist es auch, SPI Slave mit externem Takt (der ggf. trotzdem von innen 
stammt per PWM Pin) und schon btauchtan keine PLL. So wie ich die AVR 
Doku lese, muss der interne Takt 4 mal schneller sein als extern SCK 
rein kommt, aber 4MHz ist für einen AVR ja kein Problem, der Arduino 
macht 16, 20 ginge auch, und die SPI Einheit kann bis halben CPU Takt 
bekommen.

> Ich bezweifle, daß
> man es überhaupt hinbekommt, auch mit 16 MHz CPU-Takt.

https://ww1.microchip.com/downloads/en/Appnotes/Atmel-2585-Setup-and-Use-of-the-SPI_ApplicationNote_AVR151.pdf

von avr (Gast)


Lesenswert?

MaWin schrieb:
> So wie ich die AVR Doku lese, muss der interne Takt 4 mal schneller sein
> als extern SCK rein kommt, aber 4MHz ist für einen AVR ja kein Problem,
> der Arduino macht 16, 20 ginge auch, und die SPI Einheit kann bis halben
> CPU Takt bekommen

Danke, exakt so war das gemeint. SPI Slave und der AVR läuft mit 
internem Takt auf 8 MHz. Und das Problem des einfach gepufferten 
Sendepuffers kann durch Interrupt mit maximal 5 Takte Latenz in 
Assembler gelöst werden. Wie genau habe ich oben beschrieben.

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.