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.
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.
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
Der ATMega8 ist ein guter Vorschlag. Leider aber zu langsam.
@Z8
Der Eingangswert soll mehrfach addiert werden.
---
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".
@all
Da haben sich ein paar Beiträge gekreuzt.
Vielen Dank für eure Antworten und Informationen.
Wäre ja auch zu schön gewesen, dies in einem Baustein zusammengefaßt zu
bekommen.
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.
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 ;-)
Die Frage ist noch wann der Eregniss am Ausgang vorhanden sein soll. Es
würde ja auf jeden Fall mit einem µC verzögert erscheinen. Gibt es auch
einen Ausgangstakt?
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.
Schnelle I/O ist nicht die starke Seite der ARMs. Die PIC24H/dsPIC33
sind da besser aufgestellt. 40MHz Takt, und das müsste eigentlich mit in
einem einzigen Befehl plus Schleife funktionieren. Wenn das Reset Signal
nicht genause schnell sein muss => Hardware-Reset, spart Code und damit
Zeit.
>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.
Gruss helmi
PS: Beim PIC hatte ich den Takt vergessen. Also doch ein paar Befehle
mehr. Beim Takt entsteht das Problem, auch im oben gezeigten AVR Code,
dass man besser auf die Flanke und nicht auf den Zustand gehen sollte,
sonst addiert er gern auch mehrfach. 2,4MHz schafft der aber in jedem
Fall.
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 :(
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.
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.
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...
@ 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
@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.
spess53 wrote:
> Als TTL/CMOS mit Sicherheit nicht.
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.
@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?
> Das macht zusammen 10 Zyklen, oder habe ich mich vertan?
Edit: Du kannst natürlich den SEI vor den OUT schreiben, dann sollte
zumindest dieses Problem behoben sein :)
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 ;-)
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.
> .org INT1addr ; 4 - 5 Takte Interupt
Es Dauert zwar 4-5 Takte bis man dort ist, aber wenn man in der ISR kann
ja schon der nächste Takt kommen, damit sollte auch noch seit für ein
RETI sein.
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
>Autor: Martin H. (Gast)>Datum: 27.04.2009 16:50>@Z8>Im Programm ist der Wurm drin. Ein 8-Bit Port des ATMega8 soll als>Eingangsport dienen, ein zweiter 8-Bit Port als Ausgangsport.
kleingeist. :)
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
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 ! :(
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)
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 ;) )
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.
Z8 wrote:
> Hi Läubi .. (laeubi),>> dann haben wir es doch :) -> M48/88> Herzlichen Dank Z8
Der M88 hat aber nicht zwei "volle" 8-bit Ports! Ohne die Anwendung für
das ganze zu kennen ist es aber eh etwas müßig ;)
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)
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.
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
Klar. Nur ist ein EPROM auch nicht kleiner als 2 Adder.
Für Reset nimmst du das Clear vom 273 Register (asynchron) oder ein
128KB EPROM (synchron). Das Ergebnis gibt's in beiden Fällen am
Register, nicht am EPROM.
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
Den 74HC283 gibt es auch ohne Raubzug, ganz banal bei Reichelt. Und ein
paralleles (E)EPROM hat man heute eigentlich nur dann rumliegen, wenn
man schon länger dabei ist, oder alten Kram ausschlachtet. Aber klar,
wenn man das hat, und den nötigen Programmer, warum nicht.
Hi
>Den 74HC283 gibt es auch ohne Raubzug, ganz banal bei Reichelt.
Ok. Aber für die Aufgabenstellung langt das nicht ganz. Das ist dann
auch noch etwas Logik notwendwendig.
MfG Spess
> Das ist sind 4 einzelne serielle Addierer mit internem Übertrag aus> dem Vortakt, keine Volladdierer plus Register.
@A.K.
Du hast recht. Auch mein Beschaltungsvorschlag ist unsinnig - habe
nochmal darüber nachgedacht. Also vergesst meinen Beitrag ganz schnell.
8 Bit getaktetes Register : 74364
2 * 4 Bit Volladierer: 74283
Das hier mit einm µC zu lösen ist vergleichbar emit die 200m bis zum
Bäcker mit dem Auto zu fahren.
Es geht aber ........
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.
> 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!
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).