Posted on Leave a comment

Motorola MC14500B processor

mc14500

Deze pagina gaat over de Motorola MC14500B, een eenvoudige 1-bit microprocessor ook wel een Industrial Control Unit (ICU) genoemd. De MC14500B is een CMOS één-bits microprocessor die in 1977 ontworpen is door Motorola voor eenvoudige besturingstoepassingen. Ik leerde deze microprocessor kennen door enkele opensource projecten en aangezien het IC nog steeds leverbaar is was het een leuk experiment om eens te onderzoeken. Na korte tijd raakte ik zo enthousiast over deze kleine krachtpatser met zijn zo eenvoudige maar krachtige (eigenzinnige) ontwerp dat ik besloot om er een schakeling en een complete IDE voor te schrijven. Het idee is om er een soort hogere meta taal voor te ontwikkelen, just for fun.

MC14500 internal diagram

De MC14500B is heel geschikt voor de implementatie van ladderlogica en kan dus worden gebruikt ter vervanging van (of als) programmeerbare logische controller. De processor ondersteunt 16 commando’s die allemaal 1 cycle duren en de chip werkt op een frequentie van maximaal 1 MHz. De chip heeft een interne RC clock waarbij een externe weerstand de frequentie bepaalt, maar het kan ook aangestuurd worden door een externe clock. De MC14500B-eenheid bevat geen interne  programmateller maar verwacht dat op de opgaande flank van de clock een externe teller opgehoogd zal worden die de nieuwe instructie uit de rom op de 4 bits opcode bus zet. De grootte van het programma en de grootte van de rom kan dus zo groot zijn als de ontwerper zelf wil.

MC14500 pin assignment

De chip heeft een 1 bit ALU en één 1 bit intern register om logische bewerkingen uit te kunnen voeren. Daarnaast heeft de chip een aantal output lijnen die door instructies een hoog puls kunnen krijgen en waarbij externe logica aangestuurd kan worden. Ook is het enige interne RR register via een pin als output beschikbaar. De lijnen zijn: RR – de logische staat van het internet RR register, JMP – deze pin zal tijdens het uitvoeren van een JMP instructie even hoog zijn, RTN – deze pin zal tijdens het uitvoeren van een RTN instructie even hoog zijn, FLAG 0 – deze pin zal tijdens het uitvoeren van een NOP0 (0x00) instructie even hoog zijn en FLAG F – deze pin zal tijdens het uitvoeren van een NOPF (0xff)  instructie even hoog zijn.

MC14500 instructionset
MC14500 instructionset

Er is op de chip zelf geen ondersteuning voor JMP en RTN, dit kan door de ontwerper van de schakeling in hardware zelf geïmplementeerd worden. In de meest eenvoudige vorm stuurt de JMP pin de reset van de program counter aan waardoor een JMP instructie altijd JMP 0000 tot gevolg zal hebben en zo een eenvoudige programma loop gemaakt kan worden. Ook de andere signaal pinnen kunnen gebruikt worden voor eigen invulling en zo kan men een geheel eigen invulling in hardware aan de werking van het RTN signaal geven (wat niets met een RTN instructie te maken heeft) om bijvoorbeeld iets aan te sturen of een latch aan te sturen. Hetzelfde gaat op voor zowel de NOPO en de NOPF instructie. De ontwerper van de schakeling krijgt alle vrijheid om dit zelf in te vullen, wat het een schitteren universeel te gebruiken ontwerp maakt.

MC14500 minimal system

 Het is een 5V statische processor die extern zelfs met de hand geklokt kan worden, wat debuggen ook erg gemakkelijk maakt. In de meest elementaire uitvoering heb ik op een breadboard een 8 bits dipswitch en een 8 bits led array aangesloten op de chip en kon zo via de dipswicht (die ook aan de clock lijn hing) instructies laten uitvoeren die zichtbaar werden op de ouput leds. Hiermee kon ik de volgorde en de timing van signalen helemaal uitzoeken en documenteren.

MC14500 minimal breadboard design

Een mooi opensource project voor de MC1400 is de PLC14500 van  Nicola Cimmino  (https://github.com/nicolacimmino/PLC-14500) dit is een complete PLC oplossing door middel van een MC14500 processor met 7 inputs, 7 outputs, een 8 bits sram en een instelbare timer die onder software controle gebruik kan worden. De programmeer interface is erg skim gedaan door middel van een Arduino Nano die de adres- en databus van het programmageheugen kan overnemen om zo nieuwe code te uploaden. Ik heb contact met Nicola en heb zijn board ook besteld en gebouwd.

Het kunnen werken met een microprocessor en een board heeft ook een programmeer omgeving nodig. Er waren wat losse programma’s, ik heb mijn programmeer IDE omgebouwd voor de MC14500 processor met een two pass assembler, een disassember, een emulator voor diverse boards inclusief visuele weergave en clickbare buttons, een single step debugger, breakpoint en trace mogelijkheid. Ook kan deze IDE code rechtsreeks uploaden in de diverse boards.

Deze IDE kan hier gedownload worden: https://www.heinpragt-software.com/software_development/mc14500_processor_ide.html

Deze download is een zip bestand met daarin een portable x64 (en x32 versie) van de Windows exe programma’s, een custom bootloader en een examples directory.

Links en download

Leave a Reply