Baustein mit 8-Bit Register gesucht

Gast #1243038
Lesenswert?

Gibt es einen Baustein (5 V, TTL-Pegel) mit den folgenden Eigenschaften:

8 Eingänge
8 Register
8 Ausgänge
1 Takteingang
1 Reseteingang

Nach einem Takt wird der 8-Bit Eingangswert zum Registerinhalt addiert 
und auf dem Ausgang ausgegeben. Der Reseteingang setzt das Register auf 
Null.
Gast #1243064
Lesenswert?

ATMega8 :)

Der hat sogar ein paar Pins mehr kann mehr und hat sogar 32
Register auch wenn nicht alle für alle Dinge benutzt werden können
und besitzt auch viel mehr Funktionen als einfache I/O Dinge.
Wie schnell soll das ganze denn von statten gehen?
Je nach dem Fällt dann ein µC raus.
Gast #1243071
Lesenswert?

Hi

>Nach einem Takt wird der 8-Bit Eingangswert zum Registerinhalt addiert
>und auf dem Ausgang ausgegeben. Der Reseteingang setzt das Register auf
>Null.

Als TTL/CMOS mit Sicherheit nicht.

MfG Spess
Gast #1243115
Lesenswert?

Ein fertiges IC mit diesen Funktionen ist mir nicht bekannt. Ein GAL
würde die funktionellen und zeitlichen Anforderungen aber erfüllen.
Ein 16V8 könnte schon ausreichen.

Mit einem Mega8 geht das natürlich auch. Allerdings braucht er nach
meinen Überlegungen 6 Zyklen pro Schleifendurchlauf, so dass er für
2,5MHz Signalfrequenz mindestens mit 14,4MHz getaktet werden muss, was
wiederum einen externen Quarz oder Oszillator erfordert, der zusätzlich
Platz braucht.
Gast #1243124
Lesenswert?

Ich schrieb:

> Allerdings braucht er nach meinen Überlegungen 6 Zyklen pro
> Schleifendurchlauf,

Hoppla, da hatte ich den Takteingang vergessen (der Reset war
berücksichtigt). Dann werden's wohl ein paar Zyklen mehr. Aber besonders
elegant ist die AVR-Lösung in meinen Augen sowieso nicht ;-)
#1243131
Lesenswert?

yalu wrote:

> Ein fertiges IC mit diesen Funktionen ist mir nicht bekannt. Ein GAL
> würde die funktionellen und zeitlichen Anforderungen aber erfüllen.
> Ein 16V8 könnte schon ausreichen.

Bist du sicher, dass ein 16V8 einen 8-Bit Accumulator hinkriegt? Könnten 
die Terme eng werden.
Gast #1243135
Lesenswert?

lLoop:
 in    reg,        datenport        ; 1T
 sbis  statusport, takt             ; 2T
 add   reg,        reg              ; 1T
 sbis  status,     reset            ; 2T
 clr   reg,        reg              ; 1T
 out   datenport,  reg              ; 2T
 rjump lLoop                        ; 2T

maximale Laufzeit 11 : Takte 20MHz / 11 -> 1,8 MHz

schade !!!

Ein ATmega geht nicht aber ein LPC2000 oder ARM7?
Gast #1243154
Lesenswert?

Z8 schrieb:

> maximale Laufzeit 11 : Takte 20MHz / 11 -> 1,8 MHz

> jetzt sind schon 2MHz mit einem ATmega 88

sbis und der jeweils nachfolgende Befehl brauchen zusammen jeweils 2
Zyklen, unabhängig davon, was das Ergebnis der Prüfung ist), damit wären
wir schon bei 8 Zyklen, d.h. es geht :)

Aber: Martin hätte wahrscheinlich gerne Flankentriggerung für den
Takteingang, da sonst bei länger anliegendem aktiven Taktpegel der Wert
unkontrolliert hochgezählt wird. Dann klappt es mit den 8 Zyklen doch
nicht :(
Gast #1243175
Lesenswert?

Helmut Lenzen schrieb:

>> Bist du sicher, dass ein 16V8 einen 8-Bit Accumulator hinkriegt?
>> Könnten die Terme eng werden.
>
> Das geht in einem 16V8 nicht rein. Habe ich vor Jahren schon mal
> versucht.

Schade. Ja, dann wird's wohl doch eher ein CPLD ala XC9536 werden, das
aber eigentlich schon wieder etwas oversized ist.
#1243177
Lesenswert?

Martin H. wrote:

> Es würde mit zwei 4-Bit Addierern 74HCT83 und einem 8-Bit Latch 74HCT573
> gehen. Aber ab drei Bausteinen beginnt ja schon ein "TTL-Grab".

Den 74HC83 wirst du schlecht kriegen, eher schon den 74HC283. Und den 
74HC273 als Register. Der '573 hat erstens kein Reset und ist zweitens 
ein transparentes Latch was hier nicht sehr hilfreich ist.

Und ein CPLD tut das zwar auch, aber in diesem Fall ist das "CMOS Grab" 
wohl doch einfacher.
Persönliche Seite #1243262
Lesenswert?

1
.include "m32def.inc"
2
.def akku = r17
3
.def reg  = r16
4
#define data PORTD
5
#define output PORTC
6

7
.org 0x0 
8
  rjmp init
9
.org INT0addr
10
  rjmp reset
11
.org INT1addr     ; 4 - 5 Takte Interupt
12
 in reg, data     ; 1
13
 add reg, akku    ; 1
14
 out output, akku ; 1
15
;--------------------------
16
          ; max     8 Takte
17

18
loop:
19
sei
20
rjmp loop
21

22

23
init:
24
// Init Interupts
25
// Enable Interupts
26

27
reset:      ;4-5 Takte Interrupt + 2 rjmp
28
clr akku    ;1 Takt
29
;----------------------
30
       ; max 8 Takte
31
out output, akku ; 1
32
sei
33
nop         
34
rjmp loop
Braucht nen AVR mit 2 vollständigen 8 bit Ports und die Bereitschaft so 
ein wirres Programmkonstrukt einzusetzen... Takt liegt dabei auf INT1 
und reset auf INT0, der Mega32 sollte 20MHz noch schaffen ;)

Martin H. wrote:
> 20 MHz / 2,4 MHz = 8 1/3 Takte
Bleiben noch 1/3 Takte über :)

Wen man ICP oder PCINT nuzt kann man das clear noch da mit reinquetschen 
falls einem die verzögerung der ausgabe um maximal einen Takt zu lange 
ist beim Reset...
#1243265
Lesenswert?

@  Martin H. (Gast)

>Nach einem Takt wird der 8-Bit Eingangswert zum Registerinhalt addiert
>und auf dem Ausgang ausgegeben. Der Reseteingang setzt das Register auf
>Null.

Sag mal lieber was du im Grossen und Ganzen machen willst. Dann kann man 
nämlich auch viel bessere Tips geben.

MfG
Falk
#1243266
Lesenswert?

@Läubi: Bischen ungünstig daran ist, dass der Stack munter im ganzen 
Datenadressraum reihum reinschreibt. Alles wird ohne Rücksicht auf 
Verluste platt gebügelt, egal ob RAM, Register oder I/O. Einen weiterer 
Befehl für die Re-Inititialisierung von SP sollte schon sein.
Gast #1243292
Lesenswert?

@Läubi:

Die Idee mit dem nicht zurückkehrenden Interrupthandler finde ich
etwas hackish, aber cool :)

Der Einwand von A. K. ist aber nicht ganz unbegründet, da im
Adressraum des RAMs eben auch die I/O- und Datenregister liegen.

Von der Zeitdauer bin ich mir auch nicht ganz sicher, ob das klappt:
Der Interrupthandler braucht für IN, ADD, OUT und SEI 4 Zyklen. Im
Datenblatt steht:

  "The instruction following SEI will be executed before any pending
  interrupts."

Also wird auch der RJMP (2 Zyklen) noch vor dem nächsten Interrupt
ausgeführt. Erst jetzt kommt der eigentliche Interrupthandler-Aufruf,
der noch einmal 4 Zyklen dauert.

Das macht zusammen 10 Zyklen, oder habe ich mich vertan?
Gast #1243315
Lesenswert?

Edit 2: Bei 8 Zyklen für die vollständige Ausführung eines Interrupts
hat man ja noch 0,33 Zyklen übrig. Diese könnte man dazu nutzen, in
einem periodischen Timerinterrupt mit relativ großer Periodendauer den
Stackpointer (zumindest dessen H-Byte) zurückzusetzen. Dann ist zwar die
Verzögerungszeit nicht mehr konstant, aber im Mittel können die 8,33
Zyklen eingehalten werden.

Ich gebe aber keine Garantieo darauf, dass das wirklich funktioniert ;-)
Gast #1243325
Lesenswert?

Edit 3: Das Rücksetzen des Stackpointers muss nicht in einem
Timerinterrupt, sondern kann auch einfach zwischen dem OUT und der
Endlosschleife im INT1-Handler geschehen. Dort vergrößert das Rücksetzen
die Verzögerungszeit überhaupt nicht.
Gast #1243346
Lesenswert?

prx schrieb:

>Gegeben hat das mal, 4bittig allerdings. '482 und '681 beispielsweise.
>Sind aber heute allenfalls noch in irgendeinem Museum zu finden. Der
>SN74S482 dürfte in manchen Minicomputern der 70er gesteckt haben.

74LS181 gibt es bei Angelika (0,87 EUR)

MfG    Rainer
Persönliche Seite #1243386
Lesenswert?

ja okay das mit dem SP stimmt... aber man kann halt im Main oder so da 
noch was reinbauen könne, war mehr ein proof of concept ;)
nach dem sei könnte auch noch ein oder mehrer nops stehen ich frag mich 
eher wozu man so ein akku register nutzen will...
reti könnte man auch nutzen kostet anstelle des sei...

Alternativ könnte man auch den reset an reset vom AVR anschließen und 
den AVR mit dem X-fachen Takt takten wenn man eh taktsyncron zu einem 
System arbeiten will macht eine Flankenerkennung ja nicht unbedingt sinn
Gast #1243435
Lesenswert?

Hi Läubi ..,
hab ich nicht verstanden. !

Ich kommentiere mal alle Befehle, die normal
nicht ausgefüht werden aus.

lLoop:
 in    reg,          datenINport      ; 1T
 sbis  statusport,   takt             ; 2T
 add   reg,          reg              ; 1T
 sbis  status,       reset            ; 2T
; clr   reg,          reg              ; 1T
 out   datenOUTport, reg              ; 1T
 rjmp lLoop                           ; 2T

20 MHz / 9 Takte -> 2,23 MHz

Das normale Aufsummieren geht mit 2,2MHz.

Schade, reicht immer noch nicht ! :(
Persönliche Seite #1243450
Lesenswert?

1
lLoop:
2
 in    reg,          datenINport      ; 1T
3
 sbis  statusport,   takt             ; 2T
4
 add   reg,          reg              ; 0T (bereits in sbis "drin")
5
 out   datenOUTport, reg              ; 1T
6
rjmp lLoop                            ; 2T
7
;-----------------------------------------
8
;                                       6 Takte
sbis braucht 2(resp 3 bei 2 Word Befehlen) Takte wenn die Bedingung gilt 
(skip wird ausgeführt) sonst einen Takt. d.h. ein Takt ist doppelt 
gezählt!

Ohne das rjmp sind es zudem nur 8 Words, wenn du also einen Proz nimmst 
der ein vielfaches von 8 Words hast, kannst du einfach den ganzen Flasch 
vollschreiben, am ende gehts automatisch wieder vorne los. macht dann 
nurnoch 4 Takte (Register sind nach dem Reset Defaultmäßig 0, einziges 
problem: Konfiguration in/out)
Persönliche Seite #1243464
Lesenswert?

Achso und wegen dem X-fachen Takt...
1
loop:
2
in    reg,          datenINport      ; 1T
3
add   reg,          reg              ; 1T
4
out   datenOUTport, reg              ; 1T
5
rjmp loop                            ; 2T
Wenn du jezt den AVR an eine Taktquelle anschließt die den 5 fachen Takt 
deines Systems hat, dann läuft der AVR Syncron zu deinem Systemtakt und 
du kannst in jedem Takt eine akkumulation machen, dann natürlich auch 
keine Pause machen (außer du spendierst noch nen Clockenable in 
irgeneiner weise ;) )
#1243468
Lesenswert?

Eine Frage blieb noch unbeantwortet: Ob die Reaktion auf Reset sich in 
den 2,4MHz Takt synchron einfügen muss, oder ob das eher eine 
Initialisierung mit reduzierter Zeitbedingung ist. In letzterem Fall 
kann man das aus der Schleife rausnehmen und direkt den Reset-Anschluss 
des Controllers verwenden.
#1244588
Lesenswert?

Martin H. wrote:
> Gibt es einen Baustein (5 V, TTL-Pegel) mit den folgenden Eigenschaften:
>
> 8 Eingänge
> 8 Register
> 8 Ausgänge
> 1 Takteingang
> 1 Reseteingang
>
> Nach einem Takt wird der 8-Bit Eingangswert zum Registerinhalt
> addiert und auf dem Ausgang ausgegeben. Der Reseteingang
> setzt das Register auf Null.


möglicherweise tun es ja auch 2 Stück LS385 (mit der richtigen 
Verdrahtung):

8 Eingänge: Input A
8 Register: SUM FlipFlop
8 Ausgänge: naja, die Ausgänge der SUM FFs eben
1 Takteingang: CLK
1 Reseteingang: CLR
S/_A auf Low
Eingang B0 auf Low
Eingänge B1..B7 mit jeweiligem Ausgang A des niederwertigeren Bits 
verbinden (A0..A6)
#1244617
Lesenswert?

Viel Spass mit dem '385. Das gibt ein sehr interessantes Resultat. 
Ähnelt etwas einem Schieberegister. Da passiert nämlich auch dann etwas, 
wenn a=0 aber q!=0.

Das ist sind 4 einzelne serielle Addierer mit internem Übertrag aus 
dem Vortakt, keine Volladdierer plus Register.
Gast #1244624
Lesenswert?

Hi

Es gibt noch eine andere Möglichkeit: 64k- EPROM und Register. Acht 
Adressleitungen werden mit den Registerausgängen und die anderen acht 
mit den EPROM-Ausgängen verbunden. Die entsprechenden Speicherstellen 
enthalten die zugehörigen Summen. Ein Reset liesse sich über das 
Register und OE und Pull-Down-Widerstände realisieren. Vielleicht noch 
nicht
100%-ig ausgegoren. Aber so in der Richtung.

MfG Spess
Gast #1244646
Lesenswert?

Hi

>Nur ist ein EPROM auch nicht kleiner als 2 Adder.

Welche Adder? Soll er jetzt nun doch ein Museum ausrauben? Zumindest 
lässt sich mein Vorschlag mit BEs realisieren, die in jeder besseren 
Bastlerkiste rumliegen. Und Schnell genug ist es auch.

MfG Spess
#1244974
Lesenswert?

Ralph wrote:

> Das hier mit einm µC zu lösen ist vergleichbar emit die 200m bis zum
> Bäcker mit dem Auto zu fahren.

Ist ähnlich wie Kreuzworträtsel lösen. Meistens ziemlich sinnfrei, kann 
aber Spass machen. Manchen macht es auch Spass, 12 Leute in einen 
Kleinwagen zu quetschen. So darfst du das betrachten.
Gast #1245044
Lesenswert?

> Schade. Ja, dann wird's wohl doch eher ein CPLD ala XC9536 werden, das
> aber eigentlich schon wieder etwas oversized ist.

Ich fasse es nicht!
Das Ding kostet mich bei Abnahme von 160 Stück (1 Tray) 70 ct, was schon 
teuer sein dürfte. Im Einzelhandel wird er vielleicht das dreifache 
kosten.
Dafür spart er Leiterplattenfläche, Verdrahtung und die Beschaffung von 
Uralt-Logikgattern. Das Ding addiert in Windeseile und nicht so 
lahmarschig wie ein Prozessor. Außerdem macht die Implementierung des 
Entwurfs in den Stein wesentlich mehr Freude als das Leiterplattenmalen.
Fehler werden durch Überprogrammieren behoben.



 Oh GOTT!
Gast #1245105
Lesenswert?

Bernd G. schrieb:

>> Schade. Ja, dann wird's wohl doch eher ein CPLD ala XC9536 werden, das
>> aber eigentlich schon wieder etwas oversized ist.
>
> Ich fasse es nicht!
> ...
> Oh GOTT!

Jetzt aber :)
Warum denn so fassungslos?

Lies noch einmal meinen Beitrag von oben durch. Ich hatte den XC9536
weder mit Uralt-Logikgattern noch mit lahmarschigen Prozessoren
verglichen. Das "schade" bezog sich vielmehr darauf, dass man die
Aufgabe nicht mit einem 16V8-GAL lösen kann, das von der Anzahl der Ein-
und Ausgänge exakt passen würde und bzgl. Kosten, Leiterplattenfläche
und -layout eindeutig Vorteile gegenüber dem XC9536 hätte.

Von den Fähigkeiten des XC9536 wird hier nur ein Bruchteil genutzt,
deswegen schrieb ich "etwas oversized", womit ich aber nicht ausdrücken
wollte, dass es keine sinnvolle Lösung ist. Ob letztendlich das CPLD
oder die drei Logik-ICs das Optimum darstellen, hängt davon ab, ob man
dem Platzbedarf oder den Kosten den Vorrang gibt (beim XC9536 sind auch
die Kosten für die Programmierung zu berücksichtigen).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren