Obviamente, o PWM requer recursos de computação (e, portanto, não pode ser feito simultaneamente com outros processos), mas se eu definir um pino como saída 5V ou 0V, esses estados permanecem constantes ou são repetidamente "atualizados" à medida que o microcontrolador trabalha em outros processos ?
Isso é difícil de explicar no texto, então pensei em uma analogia à minha pergunta. Imagine que tenho um copo na mão e sou instruído a colocá-lo sobre a mesa. Então sou instruído a sentar em uma cadeira.
O copo na mesa é um estado. Deixo o copo em cima da mesa ou o pego de volta e me sento e repito muito rapidamente para que você não perceba que o copo foi removido da mesa?
Ou talvez mais simplesmente, o microcontrolador "esquece", se desejar, sobre os estados de seus pinos, a menos que você programa explicitamente uma alteração de estado?
Espero que tenha feito isso o mais confuso possível.
fonte
Respostas:
A maneira como interpreto a questão não tem nada a ver com o PWM, desculpe se estou muito fora da base, mas parece que você a usou como apenas um exemplo.
Praticamente todos os tipos de microcontroladores e dispositivos com E / S usam uma trava / FF para acionar seus circuitos de saída. O que isso significa é que, quando você define um estado, ele permanece nesse estado. Não é como o DRAM, onde as estatísticas de saída precisam ser constantemente "atualizadas" para permanecerem no seu estado.
Com o seu exemplo de vidro, nunca vi nenhum hardware que pudesse pegar e pousar o copo sobre a mesa repetidamente. Ele apenas colocava o copo sobre a mesa e o deixava lá até que uma mudança de estado fosse solicitada.
Voltando ao PWM (no caso de você realmente estar perguntando sobre o PWM). Independentemente de você escolher o bit ou o seu microcontrolador ter dedicado hardware como outras postagens descritas, o bloco de E / S será acessado e modificado apenas se uma alteração de estado for solicitada executando o código ou o periférico PWM.
fonte
O microcontrolador não precisa atualizar as saídas. Uma vez definidos, eles mantêm seu estado indefinidamente (até que a energia seja removida). Enquanto nos processadores antigos o relógio era necessário para manter o estado do processador, os processadores de hoje são o que é chamado de totalmente estático. Isso significa que o relógio pode realmente ser parado e tudo permanecerá em seu estado atual. Isso ocorre porque todos os registros (incluindo E / S) são feitos usando flip-flops.
fonte
A maioria dos microcontroladores modernos possui um periférico PWM de hardware dedicado que cuida do PWM, uma analogia muito grosseira pode ser:
O núcleo do processador diz ao periférico: "alterne este pino em 10kHz e 50% do ciclo de trabalho até que eu diga o contrário". Então o núcleo fica livre para fazer outras coisas. Pode definir uma interrupção, ou seja, pedir ao periférico que informe quando algo de interesse acontecer.
Você pode pensar no núcleo como o "chefe" e nos periféricos como trabalhadores especializados. O núcleo gerencia todo o programa (lê cada instrução e age sobre ele) e "solicita" que os periféricos executem várias tarefas e notifiquem-na quando as concluírem.
Na sua analogia, seria como se outra pessoa estivesse segurando o copo, você as instrui a colocá-lo sobre a mesa enquanto está livre para sentar na cadeira.
Se o micro não tivesse um periférico dedicado, teria que fazê-lo "manualmente" (isto é, ele próprio) e acompanhar o estado dos pinos e o tempo entre as alternâncias. Isso significaria muitos ciclos dedicados a coisas bastante domésticas, que são facilmente manipuladas por um periférico simples.
Aqui está um diagrama do layout de um microcontrolador de 8 bits popular, o PIC16F690 . Observe os periféricos dispostos na parte inferior:
fonte
Você está fazendo algumas suposições que não são exatamente válidas. Além disso, sim, você fez a pergunta o mais confusa possível. Seriamente.
O PWM pode ser feito simultaneamente com outros processos. Se feito em software, você usa interrupções no timer para gerar o sinal PWM em um pino GPIO. Outras interrupções podem ser executadas, e o processo principal está fazendo coisas não relacionadas. Além disso, muitos MCUs podem executar o PWM diretamente no periférico do timer, liberando o MCU para fazer outras coisas.
Quanto aos pinos de E / S, eles são multiplexados. Mas você está no controle de como eles são multiplexados, então isso não é realmente um problema.
fonte
A maioria dos pinos de E / S nos microcontroladores é multifuncional, mas eu não os chamaria de multiplexados.
Por exemplo, vários pinos em um AVR podem ser usados como entrada digital, saída digital ou entrada analógica. Normalmente, você selecionaria a função desejada como parte da inicialização do programa e não a alteraria mais tarde (embora eu possa ver algum motivo para alterar uma entrada analógica para uma entrada digital para visualizar o mesmo sinal).
Para saídas digitais, uma vez que os pinos são definidos como saídas, eles manterão o último valor que o processador escreveu para eles - não é necessário "atualizá-los" periodicamente.
fonte
Em um exemplo simples de um periférico PWM de hardware de microcontrolador, um contador de 8 bits pode ser conectado a um comparador digital de 8 bits. O microcontrolador carregaria um número no comparador e aumentaria o contador com o relógio do sistema ou com uma versão dividida em pré-escala. o contador funcionaria livremente, contando de 0 a 255 e retornando a zero repetidamente. O comparador teria uma saída indicando se o valor do contador é maior ou menor que o valor do comparador. Isso se tornaria a saída PWM. O período do PWM seria quanto tempo leva para o contador concluir um ciclo de contagem e o ciclo de serviço seria qual fração da contagem total é representada pelo valor do comparador. O código do microcontrolador não teria nada a fazer, exceto configurar o hardware inicialmente e alterar os dados do comparador quando uma alteração de pwm for desejada. O PWM produziria um fluxo contínuo de pulsos PWM sem a atenção do processador.
fonte