Você poderia programar um microcontrolador sem um computador?

16

Digamos que você tivesse um microcontrolador simples e pequeno e não tivesse interface, computador, depurador, compilador ou montador. Você poderia escrever seu código em montagem, convertê-lo (manualmente) em código de máquina e aplicar energia aos pinos apropriados usando uma fonte de tensão?

Entendo que você precisaria de E / S e memória apropriadas para realmente fazer alguma coisa, mas se você estivesse tão inclinado e tivesse tempo, poderia fazer isso? Eu acho que, historicamente, como isso foi feito quando não havia computador / compilador / montador para começar? Sinta-se à vontade para vincular-me a um recurso externo. Obrigado! :)

idle_engineer
fonte
3
Veja o Altair 1. Os interruptores do painel frontal e a programação manual da máquina eram a única maneira de usá-lo.
Pjc50
@ pj50 Ele perguntou sobre um microcontrolador, não um microprocessador. Os microcontroladores executam seu código como flash, que não é acessível sem uma interface de algum tipo.
tcrosley
Quantas unidades programadas você precisa? Muitos fabricantes fornecerão seus micros pré-programados com o seu código; no entanto, isso não é prático se você precisar de menos de um rolo completo.
precisa saber é o seguinte
2
Nos anos 70, você teria construído um painel de interruptores e luzes para poder entrar no programa. Eu nunca trabalhei com um dos primeiros microcontroladores, mas trabalhei com vários microprocessadores diferentes, e foi assim que você fez isso, por padrão. E não havia diferença fundamental entre os primeiros microcontroladores e microprocessadores além dos recursos de E / S e alguns dos detalhes de como a memória do programa foi configurada.
Hot Licks
Vou deixar isso como um comentário, porque não consigo encontrar a fonte desta história. Lembro-me de algum tempo da história de um garoto que projetou e construiu seu próprio computador (apenas a CPU realmente) a partir de transistores para uma feira de ciências puramente baseada em sua compreensão da lógica digital. Ele não podia comprar um computador na época e programou sua criação através de interruptores (acho que me lembro do relógio por ser apenas um botão). Um dos juízes ficou tão impressionado que comprou um computador para o garoto.
Slebetman

Respostas:

37

Você poderia escrever seu código em assembly, convertê-lo (manualmente) em código de máquina,

Sim!
O código pode ser escrito "fora de sua cabeça" em binário, se você desejar.
Há muito (muito tempo) atrás, foi assim que comecei a usar (então) microprocessadores.
Eu e meus amigos escrevíamos código em linguagem assembly, compilá-lo manualmente em código de máquina (algo que você pode fazer "por inspeção" após alguma prática) e depois inseri-lo no processador por vários meios. Em um sistema que construímos, configuraríamos o endereço nos comutadores binários (desligados) ou usaríamos um recurso de incremento automático do processador, inserir 8 bits de dados nos comutadores binários e pressionar um comutador "clock" para inserir os dados na memória.

A funcionalidade equivalente poderia ser alcançada com menos interruptores em um microcontrolador moderno usando a programação serial SPI - veja abaixo.

... e depois aplicar energia aos pinos apropriados usando uma fonte de tensão?

Sim!
Mas seria incrivelmente lento fazer isso!
Muitos microcontroladores modernos permitem o uso de uma interface "SPI" para programação.
Isso normalmente consiste em linhas de dados de entrada e saída e uma linha de "relógio" e, geralmente, uma linha de redefinição.

Muitos processadores permitem que o relógio e os dados SPI sejam "estáticos", o que significa que não há limite de quanto tempo você pode levar para configurar os dados entre os bits. Você pode programar esse processador usando uma linha de dados e uma linha de relógio que são acionadas por switches operados manualmente. A linha do relógio precisa ser "livre de rejeição" - você precisa configurá-la alta ou baixa em uma única transição por operação - portanto, uma interface mínima pode precisar incluir uma porta acionada por Schmitt. Você pode "se safar" apenas de um atraso de RC e de um botão, mas uma entrada acionada por Schmitt é mais segura. A linha de dados não precisa ser livre de saltos, pois seu estado é lido apenas na borda do relógio.

Algumas interfaces são interativas - os dados são emitidos pelo processador durante a programação (por exemplo, saída de dados = MISO = saída serial principal nos processadores AVR). Para ler isso, você precisará adicionar, por exemplo, um LED e um resistor (e talvez um buffer ou transistor, se a capacidade do inversor for REALMENTE baixa).


MC6800:

De memória semi-desbotada (quase 40 anos!)

LDI A, $ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, US $ 2734 .. CE 27 34 ... 1100 1110 0010 0111 0011 0100
...

Russell McMahon
fonte
11
+1 por mencionar o design estático, permitindo que o relógio vá até DC.
precisa saber é o seguinte
2
Isso traz de volta memórias. Na verdade, eu aprendi a digitar o código Z80 usando os botões na escola. Isso foi por volta de 1990. Meu professor insistiu que aprender a programar da maneira mais difícil é valioso. 25 anos depois eu tenho que concordar.
Nils Pipenbrinck
@NilsPipenbrinck No momento, estou escrevendo código C e aplicando lições que aprendi com o Fortran :-) !!! - e que foram aprimorados com sistemas embarcados e linguagem assembly. Essas lições reduzem a chance de erros aplicando a digitação mental em acessos a variáveis ​​e portas que, de outra forma, poderiam fazer coisas permitidas, mas não desejadas ou úteis. Assembler é a melhor arma afiada - uma espada de duas pontas sem guardas de mão. Depois disso, os idiomas de "nível superior" parecem menos nítidos :-). A entrada do botão Z80 atua de maneira semelhante em suas experiências de aprendizado ;-).
22615 Russell McMahon #
@ Erbureth Obrigado :-). Sim ffff para 1111 foi óbvio desbotamento do cérebro. ... foi apenas "você entendeu a idéia", mas completar a linha não dói.
22615 Russell McMahon
Sim, eu tive a ideia, mas quando eu estava nisso ... :)
Erbureth diz Reinstate Monica
10

Originalmente, em máquinas programáveis, os programas eram perfurados manualmente em fita de papel ou cartões. Mais tarde, eles usaram uma espécie de máquina de escrever para fazer a perfuração, e ainda mais tarde os computadores (como já eram conhecidos na época) podiam perfurar sua própria fita de papel.

Estava, literalmente, sentado ali com um cartão e manualmente fazendo buracos nele.

insira a descrição da imagem aqui

Cada coluna é uma instrução ou bit de dados que é interpretado pela máquina de estado da CPU para executar tarefas.

Agora, se é claro, é tudo memória flash e, sim, obter os dados lá em primeiro lugar normalmente precisa de um computador para isso. Mas isso não é estritamente 100% verdade.

Afinal, o que um programador de computador e hardware faz além de definir o estado dos pinos de E / S nos momentos certos? Portanto, se você é realmente bastante masoquista, pode criar um sistema que permita enviar as instruções corretas aos pinos de programação do microcontrolador da maneira correta para instalar algumas instruções na memória flash para execução.

Talvez algo que envolva muitos interruptores, alguns registros de turnos, um gerador de relógio etc.

Lembro que na faculdade tínhamos um novo sistema de programação baseado em Z80 - uma unidade do tamanho de uma mala com um Z80, uma pequena quantidade de RAM, um monte de displays LED de 7 segmentos e uma grande fila de switches. Programe-o carregando manualmente as instruções na RAM usando os comutadores.

Majenko
fonte
O Z80 não é um exemplo válido. Ele perguntou sobre um microcontrolador, não um microprocessador. Os microcontroladores executam seu código como flash, que não é acessível sem uma interface de algum tipo. Pelo menos você mencionou o flash e uma interface de programação em outro lugar na sua resposta.
tcrosley
@tcrosley O Z80 era mais para fins anedóticos - ilustrando como os computadores costumavam ser programados antes que o Visual Studio eliminasse todas as habilidades.
Majenko 9/04/2015
Embora eu não conheça nenhuma máquina criada para isso, não seria difícil adicionar alguns circuitos a um leitor de cartão para programar um microcontrolador com o código armazenado em uma sequência de cartões. A fita de papel pode ser mais prática, no entanto.
supercat
2
Eu costumava fazer furos manualmente naqueles. Isso só é viável em circunstâncias extremas (22h, documentos a prazo de amanhã, uma unidade de mainframe restante, senhora da sala de punção deixada para o dia). Programar o mesmo mainframe no painel frontal (alguns anos depois) foi realmente mais rápido.
precisa saber é o seguinte
11
@Majenko - Eu vi a reconstrução da máquina de Babbage, e ela definitivamente não foi feita a partir de equipamentos telefônicos. Definitivamente barulhento, no entanto.
Hot Licks
7

Você disse "microcontrolador pequeno e não tinha interface, computador, depurador, compilador ou montador". Bem, você pode sobreviver sem o computador, depurador, compilador ou montador, mas você precisa ter algum tipo de interface para conectar-se ao microcontrolador para carregar o programa.

Antes de tudo, esqueça as linguagens de alto nível como C. Em seguida, a maneira mais fácil é escrever seu programa em linguagem assembly, mas não use o assembler para traduzi-lo para o código da máquina. Em vez disso, procure cada uma das instruções de montagem no manual de programação, encontre a codificação hexadecimal equivalente e anote-a.

Você terá que alocar suas próprias variáveis, para poder preencher os endereços apropriados na parte do operando das instruções. Também esqueça de usar a pilha e pilha, muito trabalho. Quando terminar, você terá um programa de máquina que pode ser carregado diretamente na memória flash do microcontrolador - também não é necessário vinculador.

Devido à falta de barramentos de endereço e dados externos em quase todos os microcontroladores (já que ocupariam muitos pinos necessários para portas e periféricos de E / S), praticamente todos os microcontroladores são programados por meio de uma interface especial como esta:

insira a descrição da imagem aqui

Normalmente, o "programador" à esquerda seria conectado a um PC, que faria o download de um arquivo de máquina gerado por um compilador / vinculador.

No entanto, se o programador tiver um teclado, como o abaixo:

insira a descrição da imagem aqui

então, é possível inserir os códigos hexadecimais de um programa gerado manualmente diretamente no programador e programar o dispositivo sem a necessidade de um compilador, vinculador ou PC que era o que você estava perguntando. (O teclado também é usado para editar arquivos hexadecimais e gerar somas de verificação.)

Concedidos muito poucos programadores têm teclados como este. Este não seria adequado para um hobby, pois provavelmente custa alguns milhares de dólares.

Esse programador em particular programa as peças antes de serem colocadas em uma placa; interfaces e soquetes estão disponíveis para vários PICs e também para Atmel AVRs, entre outros.

tcrosley
fonte
5
Você comentou várias outras respostas quanto à sua invalidade, mas essa resposta é provavelmente menos válida do que a maioria das quais você comentou. Ele disse "... sem interface, sem computador, ...". No mínimo, sua solução é "um computador". O que "sem interface" significa é discutível. Mas, use algumas opções com defeito na interface SPI e você provavelmente terá uma solução.
Russell McMahon
11
@RussellMcMahon Quem disse que há um computador no programador? Muitos deles usam apenas FPGAs (que podem ser substituídos por uma lógica discreta). Como você programa um microcontrolador por meio de uma interface SPI, a menos que ele tenha um gerenciador de inicialização? Se sim, como você programa o gerenciador de inicialização?
tcrosley
3
A interface de programação serial padrão de baixa tensão, essencialmente livre de carregador de inicialização, em muitos (possivelmente na maioria) microcontroladores usa algumas linhas em uma interface essencialmente serial. MOSI MCLK (Vdd Gnd Reset) sendo MISO mínimo absoluto se houver interação. 3 interruptores (apenas um dos quais) precisam ser livres de saltos) e um LED para MISO e "você está desligado". Muito, muito, muito devagar. Se um FPGA não puder contar como um "computador", não haveria problema em implementar muitos sistemas baseados em processador. Eu suspeito que "nenhuma lógica combinatória" atenderia ao espírito de seu pedido.
Russell McMahon
Eu tenho que dizer, fogos de artifício é o fundo errado usar quando se trabalha com equipamentos eletrônicos :)
Pinguim Anonymous
6

Por uma questão prática, algo como alternar manualmente os pinos JTAG seria muito propenso a erros. Inserir um programa de qualquer tamanho decente levaria milhares de alternâncias. Mas, teoricamente, é possível.

Se você puder preparar o microcontrolador com antecedência (ou escrever uma ROM de inicialização para ele), poderá implementar facilmente algo como as chaves de alternância externas usadas nos mainframes anteriores. Se você permitir lógica externa, poderá usar um teclado hexadecimal para acelerar as coisas.

Finalmente, embora não seja tão comum hoje em dia, você pode comprar um microcontrolador baseado em ROM com código personalizado. Você teria que oferecer algum dinheiro antecipadamente e garantir um certo volume, mas vi clientes fazer isso para economizar dinheiro em produção de alto volume. Nesse caso, não haveria sinais externos necessários para programar o microcontrolador. O código seria incorporado ao layout físico do chip.

Obviamente, você também pode usar um microcontrolador que executa código a partir de uma interface de memória externa, mas isso é trapaça. :-)

Adam Haun
fonte
2
De fato, eu construí um "clone" Imsai 8800 em 1976/77 e programava-o rotineiramente em binário usando os comutadores. Eu tinha uma sequência de carregamento de inicialização com cerca de 40 ou 60 bytes (isso era uma vida atrás!) Que lia uma fita de papel do meu teletipo ASR-33 e me colocava em um monitor de teclado. Antes do teletipo funcionar, eu programava o 8085 (uma das diferenças entre o meu "clone" e o Imsai) estritamente em binário. Mas isso foi paralelo, com uma fileira de interruptores. Eu usei uma chave de telégrafo para fazer a codificação serial e é MUITO propensa a erros, como Adam afirmou.
user6297
3

Absolutamente. De fato, o primeiro curso de microprocessador que fiz (por volta de 87) utilizou uma placa Motorola 68000. Nós elaboramos o código em assembly, procuramos o hexadecimal para o assembly e digitamos o hexadecimal em um terminal para programar a placa. Se você editou, tinha que garantir que o código inserido fosse mais curto que o código que estava substituindo e, em seguida, armazene o restante nos NOPs. Se o código fosse maior, você teria que redigitar tudo! Aprendemos a adicionar muitos NOPs.

Scott Seidman
fonte
O 68000 não era um microcontrolador. Ele perguntou sobre um microcontrolador, não um microprocessador. Os microcontroladores executam seu código como flash, que não é acessível sem uma interface de algum tipo.
tcrosley
5
@ Crosley Isso não é estritamente verdade. Existem microcontroladores que requerem ROM externa, pois não possuem ROM ou Flash próprio. O que os torna um microcontrolador não é construído em RAM ou ROM, mas em periféricos (portas IO, UART, etc.).
Majenko
Muito poucos - por causa dos periféricos de E / S que você mencionou, muito poucos possuem barramentos de endereço e dados externos porque requerem dois pinos.
tcrosley
2

Absolutamente. Depois de ter um formato binário das instruções reais (fácil de fazer para conjuntos de instruções bem especificados), tudo o que você precisa é implementar o protocolo de programação.

Por exemplo, considere algo pequeno como um AVR Tiny 4 . A Seção 14 detalha a interface de programação, incluindo o protocolo e a camada física. É relativamente simples e você só precisa de alguns botões e resistores pull / down para enviar / receber 1 ou 0. Se você estiver se sentindo ambicioso, adicione alguns LEDs para ler a saída.

O último problema restante é se você pode fazê-lo com rapidez suficiente, que felizmente * para o AVR Tiny 4 (seção 16), ele não tem frequência mínima quando se trata de programá-lo.

* nota: na medida em que a folha de dados especificar. Isso pode diferir na realidade ... Duvido que alguém tenha tentado programá-lo em velocidades de clock de mHz.

Sinta-se livre para automatizá-lo tanto / pouco do processo quanto desejado. Isto é o que a maioria dos dispositivos de programação faz de qualquer maneira: automatize o processo.

helloworld922
fonte
2

Por qualquer meio que você insira o programa no uC, você está "interagindo" com ele, porque é isso que significa interface. Mesmo um monte de opções que você aciona manualmente são uma "interface".

Então, tratarei essa pergunta como "como faço para fazer interface com um uC com hardware de interface amplamente mecânico (e não eletrônico) e da maneira mais legal possível"?

Para a minha resposta, insira o programa como um rolo de piano. A "barra rastreadora" do rolo de piano de um piano de jogador basicamente fornece pelo menos 65 bits (dependendo do formato) que você pode ativar e desativar de forma independente, com base nas perfurações do papel. O resto é um trabalho exigente com uma faca exacto. Mas pelo menos o seu programa, uma vez executado, é (um pouco) permanentemente armazenado (diferente da abordagem de acionar manualmente os interruptores).

Atsby
fonte
2

Não é apenas possível programar um microcontrolador sem um computador, mas você pode realmente comprar um computador hoje projetado especificamente para ser programado com chaves de alternância de hardware. O kit é chamado de Cartão de Membro e é uma recriação do computador COSMAC Elf a partir da década de 1970. O kit foi descrito em um artigo recente na revista IEEE Spectrum . Também é possível programar versões mais recentes do Cartão de Membro a partir de um PC.

Craig Finch
fonte
2

OK. Que tal isso: você escreve o programa no assembler e consulta os opcodes, como sugerido anteriormente. Como colocá-lo no computador: pegue um toca-fitas antigo, remova a cabeça de reprodução, mas deixe o cabrestante e o rolo de aperto. Este será o seu transporte. Se você possui um reprodutor de bobina para bobina, pode deixar a cabeça de reprodução no lugar.

Depois, pegue uma tira longa e estreita de papel ou, melhor ainda, fita transparente. É aqui que você codifica seu programa. Você usa quantas faixas tiver pinos para programar. Em uma faixa, você coloca pontos pretos em intervalos regulares; este é o seu relógio. Nas outras faixas, você coloca pontos ou tiras pretas e deixa espaços em branco de acordo com os dados e sinais. Você ilumina a coisa toda e a detecta com pequenos fototransistores (ou acende um LED na fita e detecta a luz com outros similares) e aciona o relógio e as linhas de sinal com transistores. Isso ocupa um pouco de espaço no toca-fitas, e é por isso que você pode precisar remover a cabeça de reprodução.

Claro que você também pode codificar os sinais como áudio, mas é um pouco mais complicado de decodificar. Ou você pode detectar a luz refletida em vez da transmitida. Ou você pode fazer furos em fita escura ou fita de papel, em vez de fazer marcas pretas em fita transparente. Tanto faz. O toca-fitas conduz a fita a uma velocidade constante, para que você possa inserir um sinal de relógio sem um computador.

Angus McG
fonte
1

Sim. O principal problema pode estar interagindo com a interface de programação. Se você possui um endereço simples e um barramento de dados, as coisas ficam um pouco mais fáceis. Você já viu alguns dos computadores realmente antigos? Os programas são inseridos uma instrução de cada vez na RAM com interruptores na frente.

alex.forencich
fonte
Ele perguntou sobre um microcontrolador, não um microprocessador. Os microcontroladores executam seu código como flash, que não é acessível sem uma interface de algum tipo.
tcrosley
4
@tcrosley - Os primeiros UCs ​​não tinham flash. Eles tinham RAM ou ROM para armazenar o programa.
Hot Licks
@HotLicks Correct. E com apenas algumas exceções, esses eram todos microprocessadores, não microcontroladores. Esse era o meu ponto, não se o armazenamento de programas fosse flash, ou ROM, ou PROM, ou EPROM, ou EEPROM. A questão era se o armazenamento do programa estava no chip (microcontrolador) ou não (microprocessador). Até o 8048, o primeiro microcontrolador da Intel lançado em 1977, possuía ROM interna.
tcrosley
3
@Tcrosley Quem é você? E o que você fez com a tcrosley geralmente útil e objetiva? :-) Sua primeira observação foi que você poderia interagir com a interface de programação - que frequentemente, mas nem sempre, é válida. O "IF" re endereço e barramento de dados é um IF. Isso se aplica a alguns microcontroladores híbridos grandes e limítrofes, mas o IF original era bom o suficiente (embora difícil e lento).
Russell McMahon
3
Tentar manter uma distinção rígida entre microprocessador e microcontrolador é mais pedante do que útil, especialmente quando se trata de um comentário para cada resposta.
Pjc50
1

Os mincomputadores PDP-8 da Digital Equipment de mais de 40 anos atrás não tinham capacidade de inicialização automática. Os programas eram geralmente carregados a partir de fitas de papel perfuradas, mas o carregador para carregar as fitas de papel precisava ser inserido manualmente nos interruptores do painel frontal.

insira a descrição da imagem aqui

Nos sites dos clientes da Digital e PDP-8, como OEMs, que os usavam como controladores incorporados da época, não era incomum os usuários memorizarem os carregadores de inicialização e competirem entre si pelo tempo mais rápido necessário para entrar na inicialização. carregador na máquina. As máquinas usavam memórias de núcleo magnético (enfiadas à mão em partes longínquas do mundo, por mulheres com dedos minúsculos, usando agulhas e fios finos).

insira a descrição da imagem aqui

Como o conteúdo da memória magnética não é volátil, os carregadores de inicialização sobreviveram a um desligamento e a entrada manual foi necessária apenas após a montagem inicial, o carregador foi eliminado por um bug do programa ou por um programa necessário para usar o espaço do carregador.

JRobert
fonte
Muitos anos atrás, quando tínhamos que andar descalços para a escola na neve, nos dois sentidos, o PDP-8 em nossa escola tinha que ser inicializado alternando o carregador de inicialização no painel frontal, como você descreve. Nenhum dos professores sabia muito sobre o computador, incluindo o responsável por ele. Ele pensou que o número era 0 e o número 1 havia caído, portanto, nunca era possível alternar no gerenciador de inicialização. Eu providenciaria para que o computador travasse quando estivesse na aula de inglês, então seria chamado para reiniciar o computador. Eu nunca contei a ele sobre seu equívoco de cima para baixo - era muito útil para mim.
Olin Lathrop
Adorei o PDP-8. Eu tive acesso exclusivo a um por cerca de três anos - então era como ter um computador pessoal muito antes de o termo PC ser inventado. Incrível o que poderia caber em 4K de memória. Certamente, porém, passei por muitas fitas de papel (não tinha DECtape) e teletipo.
precisa saber é o seguinte
0

A resposta é sim , você pode programar um microcontrolador sem um computador, depurador, etc. O que você precisaria seria fornecer as várias tensões, dados, relógio e seqüências de programação especificadas pelo fabricante da uC (tarefa não fácil).

Guill
fonte