Forum: Mikrocontroller und Digitale Elektronik Nibbler 4 Bit Computer replica


von chris_ (Gast)


Lesenswert?

Hier gibt es das Projekt des 4-Bit Computers mit dem Namen "Nibbler" aus 
TTL-ICs:
http://www.bigmessowires.com/nibbler/

Ein Bastler hat dazu Platinen gemacht, die ganz gut aussehen:
http://imgur.com/a/Hn5wC#0

Ich finde es äußerst interessant, einen Computer von Grund auf mit 
TTL-ICs zu entwerfen und zu bauen. Allerdings erscheint mir das recht 
zeitaufwändig ( auch habe ich kein EPROM-Programmiergerät mehr ), 
deshalb überlege ich einen Replica mit einem Arduino zu bauen.

: Verschoben durch User
von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal der erste Entwurf wie es aussehen könnte.

von Ion (Gast)


Lesenswert?

chris_ schrieb:
> Ich finde es äußerst interessant, einen Computer von Grund auf mit
> TTL-ICs zu entwerfen und zu bauen. Allerdings erscheint mir das recht
> zeitaufwändig ( auch habe ich kein EPROM-Programmiergerät mehr ),
> deshalb überlege ich einen Replica mit einem Arduino zu bauen.

Dann hast du aber den Sinn verfehlt....

von D.Kruger (Gast)


Lesenswert?

Oder du hast etwas nicht verstanden.

von D.Kruger (Gast)


Lesenswert?

>Dann hast du aber den Sinn verfehlt....

Soweit ich weiß, hat sich die Philosophie seit Jahrhunderten mit der 
Sinnfrage beschäftigt. Bisher ist allerdings noch keine abschließendes 
Ergebnis bekannt.

Bist Du da schon weiter?

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Mühsam ernährt sich das Eichhörnchen ...
Hier das Streifenrasterplatinen kompatible Layout.

von Helmut S. (helmuts)


Lesenswert?

>Ich finde es äußerst interessant, einen Computer von Grund auf mit
TTL-ICs zu entwerfen und zu bauen.

Die komplette Steuerung wird von dem Microcode-EEPROM(Flash)-Speicher IC 
erledigt. Dessen Daten steuern die Befehlsausführung. In TTL ist da nur 
ein kleiner Teil der CPU mit TLL-ICs(ALU, Register, Zähler). Dieser 
moderne EEPROM-Speicher Baustein ersetzt ein Grab von TTL-ICs.
So als richtigen TLL-Computer sehe ich das nicht.

von chris_ (Gast)


Lesenswert?

>Die komplette Steuerung wird von dem Microcode-EEPROM(Flash)-Speicher IC
>erledigt. Dessen Daten steuern die Befehlsausführung. In TTL ist da nur
>ein kleiner Teil der CPU mit TLL-ICs(ALU, Register, Zähler). Dieser
>moderne EEPROM-Speicher Baustein ersetzt ein Grab von TTL-ICs.
>So als richtigen TLL-Computer sehe ich das nicht.

Ja, das sehe ich auch so. Es sind ziemlich viele Transistoren in den 
ROMs versteckt. Ein Vergleich der Anzahl Transistoren mit einem Attiny13 
wäre sicherlich aufschlussreich.
Mich interessiert vor allen Dingen, wie man mit so einem 
minimalistischen Befehlssatz Programme schreibt.
Immerhin gibt es 3 größere Programme: Master Mind, Frogger und ein 
Melody-Player.
Deshalb auch die Version mit dem Arduino: Ich möchte nicht nur am 
Simulator spielen sondern Hardware auf dem Tisch liegen haben.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Die Bauteile liegen bereit.

von Ion (Gast)


Lesenswert?

D.Kruger schrieb:
>>Dann hast du aber den Sinn verfehlt....
>
> Soweit ich weiß, hat sich die Philosophie seit Jahrhunderten mit der
> Sinnfrage beschäftigt. Bisher ist allerdings noch keine abschließendes
> Ergebnis bekannt.
>
> Bist Du da schon weiter?

Die Frage ist halt warum man gerne TTL-Gräber baut und dann keine TTLs 
benutzt ... :D

Verstehe ich leider nicht warum man dann einen Arduino benutzt wenn man 
gerne:

chris_ schrieb:
> Ich finde es äußerst interessant, einen Computer von Grund auf mit
> TTL-ICs zu entwerfen und zu bauen.


Kannst du mich da aufklären chris_ ?

von Lattice User (Gast)


Lesenswert?

Helmut S. schrieb:
>>Ich finde es äußerst interessant, einen Computer von Grund auf mit
> TTL-ICs zu entwerfen und zu bauen.
>
> Die komplette Steuerung wird von dem Microcode-EEPROM(Flash)-Speicher IC
> erledigt. Dessen Daten steuern die Befehlsausführung. In TTL ist da nur
> ein kleiner Teil der CPU mit TLL-ICs(ALU, Register, Zähler). Dieser
> moderne EEPROM-Speicher Baustein ersetzt ein Grab von TTL-ICs.

4 Stück 74S387 ist kein TTL Grab, und mehr Platz als die beiden 28C16 
brauchen die auch nicht.

Ein 28C16 ist übrigen alles andere als modern.

von chris_ (Gast)


Lesenswert?

Hallo Lattice User, kannst Du in etwa abschätzen, wie viel Resourcen in 
einem FPGA oder CPLD für den Nibbler verbraucht würden?
Ich schätze, dass die Microcode-Logic in den ROMS durch die Optimierung 
ziemlich dezimiert wird.
Mich würde interessieren, ob es CPLDs gibt, in denen ein Nibbler rein 
passt.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch der teilweise bestückte Arduino-Nibbler heute fotografiert in 
der Abendsonne.

von Lattice User (Gast)


Lesenswert?

chris_ schrieb:
> Hallo Lattice User, kannst Du in etwa abschätzen, wie viel Resourcen in
> einem FPGA oder CPLD für den Nibbler verbraucht würden?

CPLD fällt aus, es sei denn man flanscht SRAM und Programmspeicher 
extern an.

Im FPGA grob geschätzt so 100-200 LUT4, und dazu noch 48 kBit Blockram.
Das geht schon bei sehr kleinen FPGAs. Siehe z.B. 
Beitrag "kleinster FPGA board"
Das hat allerdings zuwenig IO Pins, der Nibbler braucht 12.

ich finde es nicht, aber es wurde hier auch mal ein Board mit einem 
kleinem MachXO2 auf 24? pol DIL Socket vorgestellt.
Sowas gibt es meines Wissen auch für Xilinx S3.

Zu beachten ist auch, dass das alles 3.3V Logik ist, passt vielleicht 
nicht zu deinem Display.

> Ich schätze, dass die Microcode-Logic in den ROMS durch die Optimierung
> ziemlich dezimiert wird.

Ja.

Portieren des Nibbler auf FPGA hat allerdings ein paar Fallen, z.B. 
wimmelt es da von kombinatorischen Loops, hat auch zu Problemen geführt:
http://www.bigmessowires.com/category/nibbler/

von chris_ (Gast)


Lesenswert?

>Beitrag "kleinster FPGA board"

Das ist ja ein lustiges Board :-) Ich kannte es gar nicht.
Die genauste Beschreibung dazu befindet sich auf Hackaday:
https://hackaday.io/project/6592-dipsy

>Im FPGA grob geschätzt so 100-200 LUT4, und dazu noch 48 kBit Blockram.
>Das geht schon bei sehr kleinen FPGAs. Siehe z.B.

Wenn es richtig lese hat das Dipsy FPGA 1280 LUTs und einen 48MHz 
Oszillator. Wenn man die Obergrenze Deiner Aschätzung von 
200LUTs/Nibbler nimmt, könnte man damit also einen

48MHz Nibbler Hexacore

bauen :-)

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier der aufgebaute Arduino Nibbler.
Ungünstig: Ich habe eine einzeiliges Display erwischt. Da wird es eng 
für den Frogger.

von Ale (Gast)


Lesenswert?

Sehr schön gemacht !
Der Nibbler braucht etwa 90 LUT4 mit hardwired microcode :). Es ist 
übersichtlicher mit ein casex es zu realisieren, denke ich.
1
// hardwired microcode
2
always @(*)
3
  begin
4
    casex ({ FETCH[7:4], ~C, ~Z, phase })
5
      //                          +- inc_pc     
6
      //                          | +- load pc
7
      //                          | | +- load_a
8
      //                          | | | + load_f
9
      //                          | | | | +c_in
10
      //                          | | | | | + cs_ram
11
      //                          | | | | | | + we_ram
12
      //                          | | | | | | | +- oe_alu
13
      //                          | | | | | | | | +- oe_in
14
      //                          | | | | | | | | | +- oe_oprnd
15
      //                          | | | | | | | | | | +- load_o
16
      7'bxxxx_x_x_0: uCDATA = 11'b0_1_1_1_1_1_1_0_1_1_1;//Any
17
      7'b0000_0_x_1: uCDATA = 11'b0_0_0_1_1_1_1_0_1_1_1;//JC
18
      7'b0000_1_x_1: uCDATA = 11'b0_1_1_1_1_1_1_0_1_1_1;//JC
19
      7'b0001_0_x_1: uCDATA = 11'b0_1_1_1_1_1_1_0_1_1_1;//JNC
20
      7'b0001_1_x_1: uCDATA = 11'b0_0_0_1_1_1_1_0_1_1_1;//JNC
21
      7'b0010_x_x_1: uCDATA = 11'b0_0_1_1_0_1_1_1_1_0_1;//CMPI
22
      7'b0011_x_x_1: uCDATA = 11'b0_1_1_1_0_0_1_1_1_1_1;//CMPM
23
      7'b0100_x_x_1: uCDATA = 11'b1_0_1_0_0_1_1_1_1_0_1;//LIT
24
      7'b0101_x_x_1: uCDATA = 11'b1_0_1_0_0_1_1_1_0_1_1;//IN
25
      7'b0110_x_x_1: uCDATA = 11'b1_1_1_0_0_0_1_1_1_1_1;//LD
26
      7'b0111_x_x_1: uCDATA = 11'b0_1_1_1_1_0_0_0_1_1_1;//ST
27
      7'b1000_x_0_1: uCDATA = 11'b0_0_0_1_1_1_1_0_1_1_1;//JZ
28
      7'b1000_x_1_1: uCDATA = 11'b0_1_1_1_1_1_1_0_1_1_1;//JZ
29
      7'b1001_x_0_1: uCDATA = 11'b0_1_1_1_1_1_1_0_1_1_1;//JNZ
30
      7'b1001_x_1_1: uCDATA = 11'b0_0_0_1_1_1_1_0_1_1_1;//JNZ
31
      7'b1010_x_x_1: uCDATA = 11'b0_0_1_0_1_1_1_1_1_0_1;//ADDI
32
      7'b1011_x_x_1: uCDATA = 11'b0_1_1_0_1_0_1_1_1_1_1;//ADDM
33
      7'b1100_x_x_1: uCDATA = 11'b0_0_0_1_1_1_1_0_1_1_1;//JMP
34
      7'b1101_x_x_1: uCDATA = 11'b0_0_1_1_1_1_1_0_1_1_0;//OUT
35
      7'b1110_x_x_1: uCDATA = 11'b1_0_1_0_0_1_1_1_1_0_1;//NORI
36
      7'b1111_x_x_1: uCDATA = 11'b1_1_1_0_0_0_1_1_1_1_1;//NORM
37
      default:       uCDATA = 11'b0_0_0_0_0_0_1_1_1_1_1;//None
38
    endcase
39
  
40
  end

von Ale (Gast)


Lesenswert?

> Kannst du mich da aufklären chris_ ?

Jeder sucht Antworten auf seine Art und Weise. Das du glaubst das dein 
Weg DER WEG ist... ist was anders.

von Holm T. (Gast)


Lesenswert?

Ale schrieb:
>> Kannst du mich da aufklären chris_ ?
>
> Jeder sucht Antworten auf seine Art und Weise. Das du glaubst das dein
> Weg DER WEG ist... ist was anders.

...wobei er nicht der Einzige ist der Zweifel am Sinn dieses Vorgehens 
hat.

Der Nibbler fasziniert mich, leider fehlt mir die Zeit mit einem ähnlich 
gearteten Projekt voran zu kommen. Chris Ansatz den originalen 
Befehlssatz emulieren zu wollen kann ich noch nachvollziehen, aber nicht 
wieso das
auf einem Arduino passieren soll.

Das läuft bei mir nicht mehr unter Emulation sonder unter "wie kastriere 
ich einen Attiny/Mega so, das er sich kaum noch programmieren läßt".

Als Emulationswerkzeug tut es auch ein PC.

Gruß,

Holm

von Ale (Gast)


Lesenswert?

Aber die anderen zu kritisieren.... dafür gibt es immer Zeit, oder ?

von Ale (Gast)


Lesenswert?

Wenn man guckt was der chris_ mit ATMegas schon gemacht hat (16 bit CPU 
und 32 bit CPU (Propeller)) es ist evident daß es in die richtung 4 bit 
gehen konnte :)

von chris_ (Gast)


Lesenswert?

Ale (Gast) schrieb:
>Der Nibbler braucht etwa 90 LUT4 mit hardwired microcode :).

Hey, sehr schön. Da könnte man ja einen Octo-Core  Nibbler mit etwas 
Peripherie Logic auf dem dipsy realiseren. Vielleicht so was wie einen 
4-Bit Propeller ;-)


dipsy
https://hackaday.io/project/6592-dipsy
Propeller
http://demin.ws/blog/english/2012/11/22/personal-mini-computer-on-parallax-propeller/propeller-block-large.jpg

von chris_ (Gast)


Lesenswert?

Hier mal mein Testcode für die Geschwindigkeit des 
Arduino-Nibbler-Simulators:
1
/*
2
 * testprogramm.c
3
 *
4
 *  Created on: 30.10.2015
5
 *      Author: chris_
6
 */
7
8
/*
9
 * This programm toggles the led pin at maximum speed
10
 */
11
#include "setup.h"
12
13
#ifdef LEDSPEEDTEST
14
15
  #include "nibbler.h"
16
17
  uint8_t Rom[]=
18
  {
19
    LIT,LEDPIN,
20
    OUT,0,
21
22
    LIT,0,
23
    OUT,0,
24
25
    JMP,0,0,0
26
  };
27
28
#endif

von Rolf M. (rmagnus)


Lesenswert?

Ale schrieb:
>> Kannst du mich da aufklären chris_ ?
>
> Jeder sucht Antworten auf seine Art und Weise. Das du glaubst das dein
> Weg DER WEG ist... ist was anders.

Wobei es doch schon irgendwie merkwürdig klingt, wenn einer sagt, daß er 
Lust drauf hat, TTL-Gräber zu bauen und sich daher dazu entschließt, 
stattdessen einen µC zu verwenden.

von ch (Gast)


Lesenswert?

Hallo Holm,

>Der Nibbler fasziniert mich, leider fehlt mir die Zeit mit einem ähnlich
>gearteten Projekt voran zu kommen.

Du könntest Dein geplantes Projekt hier beschreiben, dann können wir die 
Eigenschaften mit dem TTL-Nibbler vergleichen und vielleicht ein paar 
Erkenntnisse zum Nibbler gewinnen.

von Holm T. (Gast)


Lesenswert?

Ach nix weiter, ich ich bastele seit langem etwas lustlos (wegen 
Zeitmangel) an einer Am2901/Am2910 Geschichte herum-.....

Gruß,

Holm

von chris_ (Gast)


Lesenswert?

>Am2901/Am2910 Geschichte

Genial, die AM29xx Serie ging bis jetzt völlig an mir vorbei.Ich habe 
gerade mal in ebay nachgesehen und werde mich mal ein wenig damit 
auseinandersetzten.
Der Am2901 und der AM2910 liegen so zwischen 10- und 20€.

Ob die nach 40 Jahren noch zuverlässig funktionieren?

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

BTW. Ich finde die Google-Bring-Up-Seite passt heute super zum Thema.

von MaWin (Gast)


Lesenswert?

chris_ schrieb:
> kannst Du in etwa abschätzen, wie viel Resourcen in einem FPGA oder CPLD
> für den Nibbler verbraucht würden?

Das macht keinen Sinn, da kannst du gleich einen fertigen uC nehmen.

Die TTL CPUs sind vor allen deshalb interessant, weil man an alle 
Leitungen Leuchtdioden dran machen kann und den Takt per (entprelltem, 
2-phasigen) Taster vorgibt.

So SIEHT man wie der uC arbeitet. Dafür reichen genau die Anschlüsse an 
Registrrn und ALU, die in der Schaltung auch zugänglich sind, die 
(EEP)ROMs muss man intern nicht sehen.

Ersetzt man die Rs durch Dekoder, sollte man deren Inhalt durch 
Kurzschlusssteckbrücken definieren können, wie auch den 
Ptogrammspeucher, und eine LED pro RAM Bit. Das geht dann besser als 
Emulation auf dem Bildschirm eines PC.

von NoGooglePlease (Gast)


Lesenswert?

> BTW. Ich finde die Google-Bring-Up-Seite passt heute super zum Thema.

Warum lässt du dich von der Datenkrake vollspammen?

von Holm T. (Gast)


Lesenswert?

chris_ schrieb:
>>Am2901/Am2910 Geschichte
>
> Genial, die AM29xx Serie ging bis jetzt völlig an mir vorbei.Ich habe
> gerade mal in ebay nachgesehen und werde mich mal ein wenig damit
> auseinandersetzten.
> Der Am2901 und der AM2910 liegen so zwischen 10- und 20€.

....bei Ebay, ja.

Gehe zu demotronic.de und benutze die Suche, Mindestbestellwert ist 50 
Euro IMHO (Netto). Suche Dir zusammen was Du haben möchtest. Mehr als 2 
Euro würde ich für so ein Ding nicht hinlegen wollen. Es gibt auch 
"kompatible" 16 Bit Slices in PLCC. Die verkaufen da bei Demotronic
entlötete und gezogene ICs, für Bastelei mehr als ausreichend und bei 
defekt gelieferten Teilen (1x passiert) gabs Ersatz.
Fast alle "besseren" Halbeiterproduzenten damals (TM) hatten Bitslice 
Familien am Start. Traurigerweise interessiert sich keine für die 
Dinger, entweder Alle rennen der 74181 hinterher oder nehmen FPGAs....

>
> Ob die nach 40 Jahren noch zuverlässig funktionieren?

Doch tun sie. Ich habe ein paar PDP11 Platinen mit solchen Zeug drauf,
tut nach wie vor primstens.

Mit den AM2910 kann man auch programmierbare Steuerungen bauen ohne 
überhaupt eine ALU zu benutzen wenn die logische Funktion und die 
Abfrage von Zuständen ausreicht.

Gruß,

Holm

von chris_ (Gast)


Lesenswert?

>Mit den AM2910 kann man auch programmierbare Steuerungen bauen ohne
>überhaupt eine ALU zu benutzen wenn die logische Funktion und die
>Abfrage von Zuständen ausreicht.

Das klingt auch ziemlich gut. Hast Du dazu ein Schaltungsbeispiel?

von Holm T. (Gast)


Lesenswert?

Da guckst Du am besten bei Donnamaie:

http://www.donnamaie.com/AMD_Vintage/AMD_2900_ED2900A.html

Ein Sequencer einer CCU arbeitet ein Mikroprogramm am, das von 
Bedingungsflags abhängig ist. Diese Flags sind dann die Eingänge
für die Statusinformationen, die Ausgänge werden durch Bits des Control 
Stores gebildet...fertig.

Auch zu empfehlen:
http://www.amazon.com/gp/product/0070417814/ref=cm_cmu_up_thanks_hdr


Gruß,

Holm

von chris_ (Gast)


Lesenswert?

Holm schrieb:
>Fast alle "besseren" Halbeiterproduzenten damals (TM) hatten Bitslice
>Familien am Start. Traurigerweise interessiert sich keine für die
>Dinger, entweder Alle rennen der 74181 hinterher oder nehmen FPGAs....

Ich habe mir die Alu AM2901 jetzt etwas genauer angesehen. Die ist ja 
schon mehr als eine 74181 weil sie auch gleich ein 16x4 bit RAM 
beinhaltet und die Rückführungsdatenpfade. Die 74181 ist ja eine rein 
statische Logik ohne Flip-Flops. Ich würde sagen die AM2901 ersetzt 
mindestens 20 TTL ICs und ist damit schon auf dem Weg zum halben 
Prozessor.
Interessant ist das Entstehungsdatum im Vergleich zu einigen 8-Bit 
Prozessoren:

1974: 8080
1975: AM2901
1976: Z80

Das heisst die Alu kam als es schon die ersten vollständigen 8Bit 
Prozessoren gab.

von Ale (Gast)


Lesenswert?

Ich habe ein bisschen an den Nibbler gearbeitet, und es zu funktionieren 
:), simuliert funktioniert.

78 LUTs ? wie klingt es ? :)
1
Design Information
2
3
Command line:   map -a MachXO2 -p LCMXO2-256HC -t TQFP100 -s 4 -oc Commercial
4
     Nibbler_ALU_Nibbler_ALU.ngd -o Nibbler_ALU_Nibbler_ALU_map.ncd -pr
5
     Nibbler_ALU_Nibbler_ALU.prf -mp Nibbler_ALU_Nibbler_ALU.mrp -lpf C:/02_Elek
6
     tronik/027_Nibbler/04_Implementations/01_ALU/Nibbler_ALU/Nibbler_ALU_Nibble
7
     r_ALU_synplify.lpf -lpf
8
     C:/02_Elektronik/027_Nibbler/04_Implementations/01_ALU/Nibbler_ALU.lpf -c 0
9
     -gui 
10
Target Vendor:  LATTICE
11
Target Device:  LCMXO2-256HCTQFP100
12
Target Performance:   4
13
Mapper:  xo2c00,  version:  Diamond (64-bit) 3.5.1.302
14
Mapped on:  11/05/15  07:58:09
15
16
17
Design Summary
18
   Number of registers:     35 out of   424 (8%)
19
      PFU registers:           19 out of   256 (7%)
20
      PIO registers:           16 out of   168 (10%)
21
   Number of SLICEs:        39 out of   128 (30%)
22
      SLICEs as Logic/ROM:     39 out of   128 (30%)
23
      SLICEs as RAM:            0 out of    96 (0%)
24
      SLICEs as Carry:          7 out of   128 (5%)
25
   Number of LUT4s:         78 out of   256 (30%)
26
      Number of logic LUTs:       64
27
      Number of distributed RAM:   0 (0 LUT4s)
28
      Number of ripple logic:      7 (14 LUT4s)
29
      Number of shift registers:   0
30
   Number of PIO sites used: 52 + 4(JTAG) out of 56 (100%)
31
   Number of block RAMs:  0 out of 0
32
   Number of GSRs:  0 out of 1 (0%)
33
   EFB used :       No
34
   JTAG used :      No
35
   Readback used :  No
36
   Oscillator used :  No
37
   Startup used :   No
38
   POR :            On
39
   Bandgap :        On
40
   Number of Power Controller:  0 out of 1 (0%)
41
   Number of Dynamic Bank Controller (BCINRD):  0 out of 4 (0%)
42
   Number of DCCA:  0 out of 8 (0%)
43
   Number of DCMA:  0 out of 2 (0%)

von Holm T. (Gast)


Lesenswert?

chris_ schrieb:
> Holm schrieb:
>>Fast alle "besseren" Halbeiterproduzenten damals (TM) hatten Bitslice
>>Familien am Start. Traurigerweise interessiert sich keine für die
>>Dinger, entweder Alle rennen der 74181 hinterher oder nehmen FPGAs....
>
> Ich habe mir die Alu AM2901 jetzt etwas genauer angesehen. Die ist ja
> schon mehr als eine 74181 weil sie auch gleich ein 16x4 bit RAM
> beinhaltet und die Rückführungsdatenpfade. Die 74181 ist ja eine rein
> statische Logik ohne Flip-Flops. Ich würde sagen die AM2901 ersetzt
> mindestens 20 TTL ICs und ist damit schon auf dem Weg zum halben
> Prozessor.
> Interessant ist das Entstehungsdatum im Vergleich zu einigen 8-Bit
> Prozessoren:
>
> 1974: 8080
> 1975: AM2901
> 1976: Z80
>
> Das heisst die Alu kam als es schon die ersten vollständigen 8Bit
> Prozessoren gab.

Ja, aber die AM2901 ist kein "Universalprozessor" wie die Anderen, sie 
ist ein Baustein um 16 und 32 Bit Maschinen bauen zu können (..und 
breiter, siehe PDP11 FPU). Die war also eher in Minicomputern zu finden 
oder auch in Controllern mit eigener, auf die Aufgabe angepaßter CPU.
4 Stück 8080 ergeben halt keine 32 Bit CPU.
Es gab noch Weiterentwicklungen AM2903 (Multiplikation, Interface für 
externe Register), AM29C101 16 Bit kaskadierbar, AM29116 16 Bit nicht 
kaskadierbar.

Ein Beispiel ist auch eine 8Bit CPU die ich im russischen Nachbau eines
DEC RX01/RX02 Diskettenlaufwerks gefunden habe (DEC hat das wohl genauso 
gemacht). Das LW ist über eine parallele Schnittstelle mit dem Rechner 
verbunden und versteht Kommandos+Parameter, die Serialisierung und 
Laufwerksteuerung wird von diesem Mikrocode programmierten 8 Bit Rechner 
erledigt. http://www.tiffe.de/Robotron/PDP-VAX/E60/disk-proz.jpg
Das Braune sind die Mikrocode ROMs, das weiße die Slices und der 
Sequenzer
(2901/2909).
Der Aufwand das mit einem 8080 und peripherie ICs zu machen wäre nicht 
geringer gewesen und der schafft es nicht die Bits einzeln zu begrüßen..

Hier noch ein Magnetbandcontroller: 
http://www.tiffe.de/Robotron/PDP-VAX/E60/I17.jpg

Gruß,

Holm

von Ale (Gast)


Lesenswert?

Ich habe vor einige Zeit ein altes DSO von Firma Nicolett. Es hatte ein 
68000 als microprozessor und ein AM2901, aber k.a. was er da gemacht 
hat.

Hier den Nibbler:

Nibbler.v
1
/**
2
 * A Verilog implementation of Nibbler
3
 *
4
 */
5
`default_nettype none
6
module Nibbler(
7
  input wire     clk_in,
8
  
9
  
10
  output wire [11:0]    pgm_addr_o,
11
  input wire [7:0]    pgm_data_in,
12
  
13
  output wire [11:0]    data_addr_o,
14
  inout wire [3:0]    data_io,
15
  output wire        data_we_o,
16
  output wire        data_oe_o,
17
  output wire        data_ce_o,
18
  
19
  output wire [3:0]    port_0_o,
20
  output wire [3:0]    port_1_o,
21
  input wire [3:0]    port_0_in
22
  
23
  );
24
  
25
  
26
reg [11:0] PC;
27
reg [7:0] FETCH;
28
reg [3:0] ACC, port0, port1;
29
reg NC, NZ;
30
reg phase, reset;
31
reg [10:0] uCDATA;
32
wire inc_pc, load_pc, load_a, load_f, carry_in, cs_ram, we_ram, oe_alu, oe_in, oe_oprnd, load_o;
33
wire [3:0] databus, operand, alu_out;
34
wire alu_n_zero, alu_cn4;
35
36
// hardwired microcode
37
always @(*)
38
  begin
39
    casex ({ FETCH[7:4], NC, NZ, phase })
40
      //                          +- inc_pc     
41
      //                          | +- load pc
42
      //                          | | +- load_a
43
      //                          | | | + load_f
44
      //                          | | | | +c_in
45
      //                          | | | | | + cs_ram
46
      //                          | | | | | | + we_ram
47
      //                          | | | | | | | +- oe_alu
48
      //                          | | | | | | | | +- oe_in
49
      //                          | | | | | | | | | +- oe_oprnd
50
      //                          | | | | | | | | | | +- load_o
51
      7'bxxxx_x_x_0: uCDATA = 11'b1_1_1_1_1_1_1_0_1_1_1;//Any
52
      7'b0000_0_x_1: uCDATA = 11'b0_0_1_1_1_1_1_0_1_1_1;//JC
53
      7'b0000_1_x_1: uCDATA = 11'b1_1_1_1_1_1_1_0_1_1_1;//JC
54
      7'b0001_0_x_1: uCDATA = 11'b1_1_1_1_1_1_1_0_1_1_1;//JNC
55
      7'b0001_1_x_1: uCDATA = 11'b0_0_1_1_1_1_1_0_1_1_1;//JNC
56
      7'b0010_x_x_1: uCDATA = 11'b0_1_1_0_0_1_1_1_1_0_1;//CMPI
57
      7'b0011_x_x_1: uCDATA = 11'b1_1_1_0_0_0_1_1_1_1_1;//CMPM
58
      7'b0100_x_x_1: uCDATA = 11'b0_1_0_0_0_1_1_1_1_0_1;//LIT
59
      7'b0101_x_x_1: uCDATA = 11'b0_1_0_0_0_1_1_1_0_1_1;//IN
60
      7'b0110_x_x_1: uCDATA = 11'b1_1_0_0_0_0_1_1_1_1_1;//LD
61
      7'b0111_x_x_1: uCDATA = 11'b1_1_1_1_1_0_0_0_1_1_1;//ST
62
      7'b1000_x_0_1: uCDATA = 11'b0_0_1_1_1_1_1_0_1_1_1;//JZ
63
      7'b1000_x_1_1: uCDATA = 11'b1_1_1_1_1_1_1_0_1_1_1;//JZ
64
      7'b1001_x_0_1: uCDATA = 11'b1_1_1_1_1_1_1_0_1_1_1;//JNZ
65
      7'b1001_x_1_1: uCDATA = 11'b0_0_1_1_1_1_1_0_1_1_1;//JNZ
66
      7'b1010_x_x_1: uCDATA = 11'b0_1_0_0_1_1_1_1_1_0_1;//ADDI
67
      7'b1011_x_x_1: uCDATA = 11'b1_1_0_0_1_0_1_1_1_1_1;//ADDM
68
      7'b1100_x_x_1: uCDATA = 11'b0_0_1_1_1_1_1_0_1_1_1;//JMP
69
      7'b1101_x_x_1: uCDATA = 11'b0_1_1_1_1_1_1_0_1_1_0;//OUT
70
      7'b1110_x_x_1: uCDATA = 11'b0_1_0_0_0_1_1_1_1_0_1;//NORI
71
      7'b1111_x_x_1: uCDATA = 11'b1_1_0_0_0_0_1_1_1_1_1;//NORM
72
      default:       uCDATA = 11'b0_1_1_1_0_0_1_1_1_1_1;//None
73
    endcase
74
  
75
  end
76
assign { inc_pc, load_pc, load_a, load_f, carry_in, cs_ram, we_ram, oe_alu, oe_in, oe_oprnd, load_o } = uCDATA;
77
78
assign databus = (oe_oprnd == 1'b0) ? FETCH[3:0]:
79
                 ((cs_ram == 1'b0) && (we_ram == 1'b1)) ? data_io:
80
         //(oe_alu == 1'b0) ? alu_out:
81
         (oe_in == 1'b0) ? port_0_in:4'h0;
82
assign operand = FETCH[3:0];
83
84
assign pgm_addr_o = PC;
85
assign data_addr_o = { operand, pgm_data_in };
86
assign data_io = ((we_ram == 1'b0) && (cs_ram == 1'b0)) ? alu_out:4'hz;
87
assign data_we_o = we_ram;
88
assign data_oe_o = !we_ram;
89
assign data_ce_o = cs_ram;
90
assign port_0_o = port0;
91
assign port_1_o = port1;
92
93
Nibbler_ALU alu(
94
  .I(FETCH[7:4]),
95
  .NCARRYIN(NC),
96
  .NZEROIN(NZ),
97
  .PHASE(phase),
98
  .ACCUMULATOR(ACC),
99
  .DATABUS(databus),
100
  .ALUO(alu_out),
101
  .NZERO(alu_n_zero),
102
  .CN4(alu_cn4)
103
  );
104
  
105
always @(posedge clk_in)
106
  begin
107
    phase <= ~phase;
108
    if (phase)
109
      reset <= 1'b1;
110
    if (inc_pc)
111
      PC <= PC + 12'h1;
112
    if (~load_pc & reset)
113
      PC <= { operand, pgm_data_in };
114
    if (phase == 1'b0)
115
      FETCH <= pgm_data_in;
116
    if (~load_a)
117
      ACC <= alu_out;
118
    if (~load_f)
119
      NC <= alu_cn4;
120
    if (~load_f)
121
      NZ <= alu_n_zero;
122
    if (~load_o)
123
      begin
124
      if (operand[0] == 1'b0)
125
        port0 <= alu_out;
126
      if (operand[1] == 1'b0)
127
        port1 <= alu_out;
128
      end
129
  end
130
  
131
initial
132
  begin
133
    reset = 0;
134
    PC = 0;
135
    phase = 0;
136
    FETCH = 0;
137
    NC = 0;
138
    NZ = 0;
139
    ACC = 0;
140
  end
141
endmodule
Nibbler_ALU.v
1
/**
2
 * A 4 bit ALU for Nibbler, based on a 74181
3
 *
4
 */
5
 
6
module Nibbler_ALU(
7
  input wire [3:0] I,
8
  input wire NCARRYIN,
9
  input wire NZEROIN,
10
  input wire PHASE,
11
  input wire [3:0] ACCUMULATOR,
12
  input wire [3:0] DATABUS,
13
  output wire [3:0] ALUO,
14
  output wire NZERO,
15
  output wire CN4
16
  );
17
  
18
// ALU
19
20
reg S3, S2, S1, S0, M;
21
22
always @(*)
23
  begin
24
    casex ({I, NCARRYIN, NZEROIN, PHASE})
25
      7'bxxxx_x_x_0: { M, S3, S2, S1, S0 } = 5'b0_0000;//Any
26
      7'b0000_0_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JC
27
      7'b0000_1_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JC
28
      7'b0001_0_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JNC
29
      7'b0001_1_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JNC
30
      7'b0010_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_0110;//CMPI
31
      7'b0011_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_0110;//CMPM
32
      7'b0100_x_x_1: { M, S3, S2, S1, S0 } = 5'b1_1010;//LIT
33
      7'b0101_x_x_1: { M, S3, S2, S1, S0 } = 5'b1_1010;//IN
34
      7'b0110_x_x_1: { M, S3, S2, S1, S0 } = 5'b1_1010;//LD
35
      7'b0111_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//ST
36
      7'b1000_x_0_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JZ
37
      7'b1000_x_1_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JZ
38
      7'b1001_x_0_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JNZ
39
      7'b1001_x_1_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JNZ
40
      7'b1010_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_1001;//ADDI
41
      7'b1011_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_1001;//ADDM
42
      7'b1100_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//JMP
43
      7'b1101_x_x_1: { M, S3, S2, S1, S0 } = 5'b0_0000;//OUT
44
      7'b1110_x_x_1: { M, S3, S2, S1, S0 } = 5'b1_0001;//NORI
45
      7'b1111_x_x_1: { M, S3, S2, S1, S0 } = 5'b1_0001;//NORM
46
      default: { M, S3, S2, S1, S0 } = 5'h0;
47
    endcase
48
  
49
  end
50
51
ttl_181 alu0(
52
    .cn_in(NCARRYIN),
53
    .m_in(M),
54
    .a_in(ACCUMULATOR), 
55
    .b_in(DATABUS), 
56
    .s_in({S3, S2, S1, S0}),
57
    .cn4_o(CN4),
58
  .f_o(ALUO),
59
    .x_o(),
60
    .y_o(),
61
    .aeqb_o()
62
    );
63
  
64
assign NZERO = ALUO == 4'h0;
65
66
endmodule
67
68
// A Model 4-Bit ALU '181
69
module ttl_181(
70
    input wire              cn_in,
71
    input wire              m_in,
72
    input wire [3:0]        a_in,
73
    input wire [3:0]        b_in,
74
    input wire [3:0]        s_in,
75
    output wire [3:0]       f_o,
76
    output wire             x_o,
77
    output wire             y_o,
78
    output wire             aeqb_o,
79
    output wire             cn4_o
80
    );
81
    
82
83
wire b0, b1, b2, b3, a0, a1, a2, a3, s0, s1, s2, s3;
84
wire f0, f1, f2, f3, cn4, y, x, aeqb;
85
wire cn, nm;
86
87
//wire [3:0] BH, AL;
88
89
assign cn = cn_in;
90
assign nm = ~m_in;
91
assign b0 = b_in[0];
92
assign b1 = b_in[1];
93
assign b2 = b_in[2];
94
assign b3 = b_in[3];
95
assign a0 = a_in[0];
96
assign a1 = a_in[1];
97
assign a2 = a_in[2];
98
assign a3 = a_in[3];
99
assign s0 = s_in[0];
100
assign s1 = s_in[1];
101
assign s2 = s_in[2];
102
assign s3 = s_in[3];
103
104
wire b3h, a3l, b2h, a2l, b1h, a1l, b0h, a0l;
105
106
assign b3h = ~((b3 & s3 & a3) | (a3 & s2 & (~b3)));
107
assign a3l = ~(((~b3) & s1) | (s0 & b3) | a3);
108
109
assign b2h = ~((b2 & s3 & a2) | (a2 & s2 & (~b2)));
110
assign a2l = ~(((~b2) & s1) | (s0 & b2) | a2);
111
112
assign b1h = ~((b1 & s3 & a1) | (a1 & s2 & (~b1)));
113
assign a1l = ~(((~b1) & s1) | (s0 & b1) | a1);
114
115
assign b0h = ~((b0 & s3 & a0) | (a0 & s2 & (~b0)));
116
assign a0l = ~(((~b0) & s1) | (s0 & b0) | a0);
117
118
//assign BH = { b3h, b2h, b1h, b0h };
119
//assign AL = { a3l, a2l, a1l, a0l };
120
121
assign y = ~( a3l | (b3h & a2l) | (b3h & b2h & a1l) | (b3h & b2h & b1h & a0l));
122
123
assign cn4 = ~y | (b3h & b2h & b1h & b0h & cn);
124
125
assign x = ~(b3h & b2h & b1h & b0h);
126
127
assign f3 = (b3h ^ a3l) ^ ( ~( (cn & b0h & b1h & b2h & nm) | (b1h & b2h & a0l & nm) | (b2h & a1l & nm) | (a2l & nm)) );
128
assign f2 = (b2h ^ a2l) ^ ( ~( (cn & b0h & b1h & nm) | (b1h & a0l & nm) | (a1l & nm)) );
129
assign f1 = (b1h ^ a1l) ^ ( ~( (cn & b0h & nm) | (a0l & nm) ) );
130
assign f0 = (b0h ^ a0l) ^ ( ~(nm & cn) );
131
132
assign aeqb = f3 & f2 & f1 & f0;
133
134
assign f_o = { f3, f2, f1, f0 };
135
assign y_o = y;
136
assign x_o = x;
137
assign aeqb_o = aeqb;
138
assign cn4_o = cn4;
139
140
endmodule

Hier den Report von ISE:
1
cpldfit:  version K.31                              Xilinx Inc.
2
                                  Fitter Report
3
Design Name: Nibbler                             Date: 11- 5-2015,  4:01PM
4
Device Used: XC95144-7-PQ100
5
Fitting Status: Successful
6
7
*************************  Mapped Resource Summary  **************************
8
9
Macrocells     Product Terms    Function Block   Registers      Pins           
10
Used/Tot       Used/Tot         Inps Used/Tot    Used/Tot       Used/Tot       
11
67 /144 ( 47%) 565 /720  ( 78%) 195/288 ( 68%)   36 /144 ( 25%) 52 /81  ( 64%)
12
13
** Function Block Resources **
14
15
Function    Mcells      FB Inps     Signals     Pterms      IO          
16
Block       Used/Tot    Used/Tot    Used        Used/Tot    Used/Tot    
17
FB1           5/18       25/36       25          79/90       5/11
18
FB2           6/18       24/36       24          77/90       4/10
19
FB3           8/18       29/36       31          89/90       4/10
20
FB4           6/18       23/36       23          79/90       4/10
21
FB5           7/18       21/36       21          58/90       5/10
22
FB6          10/18       29/36       29          76/90       4/10
23
FB7          10/18       24/36       24          41/90       6/10
24
FB8          15/18       20/36       20          66/90       7/10
25
             -----       -----                   -----       -----     
26
             67/144     195/288                 565/720     39/81 
27
28
* - Resource is exhausted
29
30
** Global Control Resources **
31
32
Signal 'clk_in' mapped onto global clock net GCK1.
33
Global output enable net(s) unused.
34
Global set/reset net(s) unused.
35
36
** Pin Resources **
37
38
Signal Type    Required     Mapped  |  Pin Type            Used    Total 
39
------------------------------------|------------------------------------
40
Input         :   12          12    |  I/O              :    51      73
41
Output        :   23          23    |  GCK/IO           :     1       3
42
Bidirectional :   16          16    |  GTS/IO           :     0       4
43
GCK           :    1           1    |  GSR/IO           :     0       1
44
GTS           :    0           0    |
45
GSR           :    0           0    |
46
                 ----        ----
47
        Total     52          52

von chris_ (Gast)


Lesenswert?

>Device Used: XC95144-7-PQ100
>Macrocells     67 /144 ( 47%)

Super, das passt ins Pollin CPLD-Board:
 http://www.pollin.de/shop/dt/MTM5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_CPLD_Evaluation_Board.html

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier das gemessene Timing des "Arduino Nibblers" mit dem Testprogramm 
für's schnelle LED tooglen:
1
    LIT,LEDPIN,
2
    OUT,0,
3
4
    LIT,0,
5
    OUT,0,
6
7
    JMP,0,0,0

von chris_ (Gast)


Lesenswert?

Hier eine schöner Herausforderung für angehende Assemblerprogrammierer:

Gesucht ist ein Assemblerprogramm für den original Nibbler, welches alle 
Speicherzellen seines RAM-Speichers ( 4096 Nibbles bestehend aus je 4 
Bit ) mit der Zahl 5 voll schreibt.

Der Erste der es schafft, bekommt von mir 10 Euro.

( original Nibbler: http://www.bigmessowires.com/nibbler/ )

von Röbbi (Gast)


Lesenswert?

Kein Index Register getrente Programm und Dataspeicher... nur 4 kBytes 
Programmspeicher.... harig... würde ich sagen...

von chris_ (Gast)


Lesenswert?

Ja, Du hast recht, aber für mich erstaunlich: trotz der "Haarigkeit" hat 
der Konstrukteur des Nibblers es geschafft, Spiele darauf zu 
programmieren.

von Ale (Gast)


Lesenswert?

Ein Index Register + 1 Level Stack und dann passt es nicht mehr in einem 
95144...

Man könnte ein paar '283 als Adder nutzen, '157s für als MUX und ein 
'382 als ALU... leider wo gibt es '382 ? Darisus hat es auch net :(

von chris_ (Gast)


Lesenswert?

>Ein Index Register + 1 Level Stack und dann passt es nicht mehr in einem
>95144...

Erstaunlich, dass mit einer so geringfügigen Erweiterung das CPLD schon 
voll ist, wo es doch vorher nur zur Hälfte gefüllt war.

von chris_ (Gast)


Lesenswert?

Besonders interessant finde ich, dass durch das fehlende Indexregister 
es eine theoretische Grenze für den Nibbler gibt, sein RAM nicht 
vollständig benutzen zu können. Würde man ein Indexregister und eine 
indirekte Adressierung einführen, könnte man das gesamte RAM benutzen. 
Ein Srungbefehl mit dem Indexregister wäre auch nicht schlecht, dann 
könnte man virtuelle "return from subroutine" bauen.

von Ale (Gast)


Lesenswert?

Ich glaube daß ich es mit CALL/RET voll gemacht habe :)...

ich habe 3 Änderungen gemacht:

- Index Register
- CALL/RET (nur 1 Stufe)
- Relative conditional jumps

Man könnte ein paar 74S482 für den Index Register und für den PC... 
alles da, Adder, Stack, Muxes...

von chris_ (Gast)


Lesenswert?

Hier nocn eine Anregung für ein CPU Design:
http://www.circuitstoday.com/microcontroller-invention-history
TMS1802NC von Texas Instruments

von chris_ (Gast)


Lesenswert?


von Ale (Gast)


Lesenswert?

Ich werde mein Vorbild vorschlagen... www.hpmuseum.org, meine meinung 
nach: ein Schritt vor TI :)

von Michael K. (Gast)


Lesenswert?

chris_ schrieb:
> Ich finde es äußerst interessant, einen Computer von Grund auf mit
> TTL-ICs zu entwerfen und zu bauen.

Dann empfehle ich:
Beitrag "8bit-Computing mit FPGA"
Joseph hat da bemerkenswert viel Energie reingesteckt und wird sich über 
Mitstreiter sicher freuen.

von Latte (Gast)


Lesenswert?

Der Displaycontroller hat mehr Power als die Gesamte 4Bit CPU.

von D.Kruger (Gast)


Lesenswert?

>Der Displaycontroller hat mehr Power als die Gesamte 4Bit CPU.
Tatsaechlich? Erklaer das mal genauer.

von Michael K. (Gast)


Lesenswert?

Latte schrieb:
> Der Displaycontroller hat mehr Power als die Gesamte 4Bit CPU.

Das passt je nach Betrachtungsweise auch für so manchen modernen PC.
Schon im C64 hatte der Floppy Controller (6502) eine dem Hauptprozessor 
ebenbürtige (?) Leistung.

Inwiefern ist das relevant für den Zweck der mit dem Aufbau dieses 
Systems verfolgt wird ?

von Ale (Gast)


Lesenswert?

Es geht hier um Verstehen und selbe bauen.
Ein ATTiny is besser/schneller/kleiner/sparsamer und alles was du 
willst... ja und ?, Selbe machen ist was anderes... Mach doch ein 
TTL-Replikat vom ATTiny....

von D.Kruger (Gast)


Lesenswert?

Latte (Gast) schrieb:
>Der Displaycontroller hat mehr Power als die Gesamte 4Bit CPU.

Für einen Anfänger in Sachen Mikroelektronik ist diese Annahme 
vermutlich gerechtfertigt.

Die üblicherweise in den zweizeiligen LCD Displays verwendeten 
Controller sind fest verdrahtete Logikbausteine
http://www.adafruit.com/datasheets/HD44780.pdf
und können nicht wie Prozessoren programmiert werden.

Insofern ist Deine Aussage so nutzbringend wie die Aussage "Ein 
Elektrofahrrad hat mehr Power als ein Toaster".
Den Merke: Nicht jeder schwarze Halbleiterbausten mit Beinchen ist ein 
Mikrocontroller.

von Peter K. (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag!

Ich hatte schon 1980 mit damaligen 8 Bit CPU experimentiert und später 
zu meinen Beruf gemacht. Vor einem Jahr hatte ich Sehnsucht nach der 
alten Zeit und habe die Nibble CPU aufgebaut.

Die original Platine habe ich vor 1 Jahr in Kanada erworben und mit 
neuen Bauteilen bestückt, die EEPROMS selber programmiert. Die Platine 
funktioniert Einwand frei. Anbei ein Foto vom Eigenbau. Leider habe ich 
jetzt keine Zeit mehr, um mich um die Einplatinen CPU zu kümmern:-(

Deshalb möchte ich die "Nibbler 4 Bit CPU" gerne an interessierte gegen 
etwas Geld (meine Kosten - X) abgeben.

Wer möchte kann mich gerne kontaktieren: peter.klingbeil@arcor.de

von Peter K. (Gast)


Angehängte Dateien:

Lesenswert?

Nachtrag:
Ein Kurzvideo von meinem Nachbau der Nibbler CPU,
habe ich auf YouTube gestellt: https://youtu.be/yR3zx28ksJI

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das passt eher nach "Markt".

Mach da mal 'nen neuen Thread auf.

von --- (Gast)


Lesenswert?

Ich sehe da 74HCxyz. Das ist ja voellig stillos.
Das muss schon ein echter 74181 sein.
Und auch der Rest!

Der muss mit mindestens 1 Ampere an den 5 V nuckeln.
Nur dann ist er echt!

von Peter K (Gast)


Lesenswert?

Hallo rufus!

Ich habe ein Thread im Marktplatz eröffnet (film-werk56).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?


von Michael Uhlmann (Gast)


Lesenswert?

Hallo,
ich habe noch ein Arduino Uno mit D1Robot LCD-/Keypad-Shield rumliegen. 
Das würde sich doch für den Nibbler von Chris gut eignen. Wo bekomme ich 
den Arduino-Sketch?
Gruß Micha

von Bescheid (Gast)


Lesenswert?

Michael Uhlmann schrieb:
> Wo bekomme ich
> den Arduino-Sketch?

Internet

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.