Service Hotline
6
Programação de microcontroladores
Existe uma grande diferença entre programar um microcontrolador (MCU) e programar um computador (PC). Embora as ferramentas de desenvolvimento de MCU baseadas em C estejam se tornando cada vez mais populares, para os projetistas que buscam código eficiente e preferem usar linguagem assembly, esta ainda é a linguagem de programação mais concisa e eficaz.
Para a programação de microcontroladores (MCUs), a estrutura básica pode ser considerada praticamente a mesma, geralmente dividida em três partes: a inicialização (esta é a maior diferença entre a programação de MCUs e a de PCs), o corpo do loop principal do programa e o manipulador de interrupções, que são explicados a seguir:
1. Inicialização:Para o projeto de todos os programas de microcontroladores, a inicialização é a etapa mais básica e importante, que geralmente inclui o seguinte:
Mascare todas as interrupções e inicialize o ponteiro da pilha:A parte de inicialização geralmente não deseja que ocorram interrupções.
Limpe a área de RAM do sistema e exiba a memória:Although sometimes it may not be completely necessary, from the perspective of reliability and consistency, especially to prevent unexpected errors, it is recommended to develop good programming habits.
Inicialização da porta de E/S:According to the application requirements of the project, set the input and output mode of the relevant IO port. For the input port, you need to set its pull-up or pull-down resistor; for the output port, you must set its initial level output to prevent unnecessary errors.
Interrupt settings:Para todas as fontes de interrupção que precisam ser usadas no projeto, elas devem ser ativadas e as condições de disparo da interrupção devem ser definidas, enquanto as interrupções redundantes que não são usadas devem ser desativadas.
Initialization of other functional modules:For all peripheral function modules of the MCU that need to be used, the corresponding settings must be made according to the requirements of the project application. For example, for UART communication, the Baud Rate, data length, verification method, and Stop Bit length need to be set. For the Programmer Timer, its clock source, frequency division number, and Reload Data must be set.
Inicialização de parâmetros:Após concluir a inicialização do hardware e dos recursos do microcontrolador (MCU), o próximo passo é inicializar algumas variáveis e dados utilizados no programa. A inicialização desta parte precisa ser planejada de acordo com o projeto específico e a estrutura geral do programa. Para algumas aplicações que utilizam a EEPROM para salvar dados predefinidos do projeto, recomenda-se copiar os dados relevantes para a RAM do MCU durante a inicialização para melhorar a velocidade de acesso do programa aos dados e reduzir o consumo de energia do sistema (em princípio, o acesso à EEPROM externa aumentará o consumo de energia da fonte de alimentação).
2. Corpo do loop principal do programa:Most MCUs run continuously for a long time, so their main program bodies are basically designed in a loop. For applications with multiple working modes, there may be multiple loop bodies, which are converted through status flags. For the main program body, the following modules are generally arranged:
Calculation procedure:Calculation programs are generally time-consuming, so we are firmly opposed to processing them in any interrupt, especially multiplication and division operations.
Processamento de programas com requisitos de tempo real baixos ou inexistentes;
Mostrar procedimento de transferência:Destinado principalmente a aplicações com drivers externos de LED e LCD.
3. Interrupt handler:Interrupt programs are mainly used to handle tasks and events with high real-time requirements, such as detection of external sudden signals, detection and processing of buttons, timing counting, LED display scanning, etc.
Em circunstâncias normais, o programa de interrupção deve manter o código o mais conciso e curto possível. Para funções que não precisam ser processadas em tempo real, o sinalizador de disparo pode ser configurado na interrupção, e então o programa principal executará as transações específicas. Isso é muito importante, especialmente para microcontroladores de baixo consumo e baixa velocidade, que devem garantir uma resposta rápida a todas as interrupções.
4. Para a organização de diferentes conjuntos de tarefas, diferentes MCUs possuem diferentes métodos de processamento:
Por exemplo, para aplicações com microcontroladores (MCUs) de baixa velocidade e baixo consumo de energia (Fosc = 32768 Hz), considerando que tais projetos são dispositivos portáteis e utilizam displays LCD comuns, a resposta a pressionamentos de teclas e a resposta do display exigem alto desempenho em tempo real. Portanto, interrupções temporizadas são geralmente utilizadas para processar as ações de pressionamento de teclas e a exibição de dados. Já para MCUs de alta velocidade, como em aplicações com Fosc > 1 MHz, como o MCU tem tempo suficiente para executar o corpo do loop principal do programa, ele pode apenas definir os flags de disparo nas interrupções correspondentes e colocar todas as tarefas no corpo do programa principal para execução.
5. Na programação de microcontroladores, um aspecto que requer atenção especial é:
É necessário impedir que a mesma variável ou dado seja acessado ou definido simultaneamente nos corpos de interrupção e do programa principal. Um método eficaz de prevenção consiste em organizar o processamento desses dados em um módulo e determinar se as operações relacionadas devem ser realizadas com base no sinalizador de disparo; em outros corpos do programa (principalmente interrupções), os sinalizadores de disparo devem ser definidos apenas onde os dados precisam ser processados. Isso garante que a execução dos dados seja previsível e única.
7
Resumo da programação de microcontroladores para engenheiros
1,Develop a good habit of summarizing. Summarizing is not only a summary of your own learning, but also a review and deepening of the learning process. It can also avoid making mistakes the second time.
2,Antes de escrever um programa, você precisa ter um bom entendimento do projeto, estar ciente dele e definir uma estrutura geral. É muito importante considerar cuidadosamente como organizá-lo e qual é o layout mais adequado. É necessário analisar qual módulo desenvolver primeiro, os passos específicos de cada módulo, como nomear cada função, a conexão com outros módulos, etc. Uma boa ideia é pegar um pedaço de papel e anotar os processos importantes.
3,Para programação modular em linguagem C, você deve primeiro dividir cada módulo, programá-lo módulo por módulo, determinar uma sequência, segui-la e, em seguida, escrever o próximo módulo após a conclusão bem-sucedida do módulo anterior. Quanto aos arquivos de cabeçalho, escreva o arquivo de cabeçalho do módulo após a conclusão do módulo.
4,Não ignore os avisos quando eles aparecerem. Isso significa que deve haver algo de errado com o programa. É necessário entender a origem do problema e encontrar uma solução. Seja específico ao procurar a origem do problema. Você pode pesquisar informações na internet ou pedir conselhos a outras pessoas. Por exemplo, a função principal de outro projeto foi adicionada a este projeto. Existem nomes de funções duplicados. Também existem motivos para analisar os fenômenos experimentais e o progresso passo a passo. Pode ter havido uma interface incorreta selecionada ao definir a porta. Às vezes, é bom fazer uma pausa e pensar sobre o problema se você realmente não conseguir resolvê-lo. Não importa quão simples seja, você deve prestar atenção, pois pode haver erros.
No desenvolvimento de aplicações de microcontroladores, problemas como a eficiência no uso do código, o desempenho anti-interferência e a confiabilidade dos microcontroladores ainda são desafiadores. A seguir, resumimos algumas habilidades básicas que devem ser dominadas no desenvolvimento de microcontroladores.
8
Habilidades em desenvolvimento de microcontroladores
1.Como reduzir erros em programas
Para reduzir erros de programação, considere primeiro os seguintes parâmetros de gerenciamento de valores fora do intervalo durante a operação do sistema.
-
Parâmetros físicos: Esses parâmetros são principalmente parâmetros de entrada do sistema, que incluem parâmetros de excitação, parâmetros operacionais durante o processamento de aquisição e parâmetros de resultado ao final do processamento.
-
Parâmetros de recursos: Esses parâmetros referem-se principalmente aos recursos de circuitos, dispositivos e unidades funcionais do sistema, como capacidade de memória, tamanho da unidade de armazenamento e profundidade de empilhamento.
-
Parâmetros de aplicação: Esses parâmetros de aplicação geralmente aparecem como condições de uso de alguns microcontroladores e unidades funcionais. Parâmetros de processo: referem-se aos parâmetros que mudam de forma ordenada durante a operação do sistema.
2.How to improve the efficiency of C language programming code
A utilização da linguagem C para programação de microcontroladores é uma tendência inevitável no desenvolvimento e aplicação desses dispositivos. Para obter a máxima eficiência na programação em C, é fundamental familiarizar-se com o compilador C utilizado. Inicialmente, teste o número de linhas de código em linguagem assembly correspondentes a cada compilação em C, para que você possa avaliar a eficiência. Ao programar em C, priorize o código com a maior eficiência de compilação. Cada compilador C apresenta diferenças específicas, o que impacta diretamente a eficiência de compilação. O comprimento do código e o tempo de execução de uma função em C de alta qualidade para sistemas embarcados são apenas 5 a 20% maiores do que os da mesma função escrita em linguagem assembly.
Para projetos complexos com prazos de desenvolvimento apertados, a linguagem C pode ser usada, mas o pré-requisito é que você esteja muito familiarizado com a linguagem C e com o compilador C do sistema MCU. Preste atenção especial aos tipos de dados e algoritmos suportados pelo sistema de compilação C. Embora a linguagem C seja a linguagem de alto nível mais comum, diferentes fabricantes de MCUs possuem sistemas de compilação C diferentes, especialmente na operação de alguns módulos de função específicos. Portanto, se você não entender esses detalhes, haverá muitos problemas durante a depuração, o que levará a uma eficiência de execução menor do que a obtida com a linguagem assembly.
3.How to solve the anti-interference problem of microcontrollerA maneira mais eficaz de prevenir interferências é remover a fonte de interferência e bloquear o caminho da interferência, mas isso geralmente é difícil, então só podemos verificar se a capacidade anti-interferência do microcontrolador é suficientemente robusta. Enquanto a capacidade anti-interferência de sistemas de hardware é aprimorada, a anti-interferência por software vem recebendo cada vez mais atenção devido à sua flexibilidade de projeto, economia de recursos de hardware e boa confiabilidade.
O fenômeno mais comum de interferência em microcontroladores é o reset. Para evitar que o programa saia do controle, mecanismos de interrupção (como traps) e watchdogs podem ser usados para trazê-lo de volta ao estado de reset. Portanto, o mais importante para que o software do microcontrolador resista a interferências é saber lidar com o estado de reset.
Geralmente, os microcontroladores possuem alguns registradores de flags que podem ser usados para determinar a causa do reset; além disso, você também pode armazenar flags na RAM. Cada vez que o programa é reiniciado, diferentes causas de reset podem ser determinadas pela análise dessas flags; você também pode saltar diretamente para o programa correspondente com base em diferentes flags. Isso permite que o programa seja executado continuamente, e o usuário não perceberá que o programa foi reiniciado durante o uso.
4.How to test the reliability of microcontroller systemQuando o projeto de um sistema de microcontrolador estiver concluído, haverá diferentes itens e métodos de teste para diferentes produtos de sistemas de microcontroladores, mas alguns testes são obrigatórios:
- Teste a integridade das funções do software do microcontrolador.
- Teste de ligar e desligar
- Teste de envelhecimento
- Testes como ESD e EFT
Às vezes, também podemos simular os danos que podem ocorrer durante o uso humano. Por exemplo, esfregando deliberadamente a porta de contato do sistema microcontrolador com o corpo humano ou tecido da roupa para testar a capacidade antiestática. Usando uma furadeira elétrica de alta potência próxima ao sistema microcontrolador para testar a capacidade de resistir à interferência eletromagnética.
In summary, single-chip microcomputer has become an important aspect of computer development and application. The important significance of single-chip microcomputer application is that it fundamentally changes the traditional control system design ideas and design methods.
Most functions that previously had to be implemented by analog circuits or digital circuits can now be implemented through software methods using microcontrollers. This kind of control technology in which software replaces hardware is also called micro-control technology, which is a revolution in traditional control technology.
Além disso, durante o processo de desenvolvimento e aplicação, devemos dominar habilidades e aprimorar a eficiência para que o sistema possa ser utilizado para uma gama mais ampla de finalidades.
9
Resumo da operação do chip
As operações no chip consistem principalmente em operações nos registradores presentes nele. Os registradores possuem endereços únicos mapeados na memória, e a operação é realizada no endereço correspondente. Ao analisar o chip, observe primeiro o diagrama de tempo, depois compreenda os registradores correspondentes, entenda como eles operam, defina as portas necessárias (que podem ser identificadas pelo programa) e escreva os procedimentos de operação de leitura e escrita.
Como gravar dados no chip, como ler dados e qual porta usar para entrada ou leitura (o mais importante).
Ao conectar chips através de um barramento, é fundamental compreender o protocolo desse barramento. O chip conectado ao barramento I2C controla principalmente outros chips através desse barramento.
1,Um dos diodos 74HC595 na rede é usado para seleção de coluna, e os outros dois são usados para seleção de cor. A rede é equivalente a uma coleção de diodos.
O diodo só acende quando uma extremidade recebe um nível alto e a outra um nível baixo. A diferença é que, ao selecionar uma extremidade de forma diferente, cores diferentes serão emitidas.
Seleção do modo de operação do temporizador: Os quatro bits mais significativos definem o temporizador T1 e os quatro bits menos significativos definem T0. Em seguida, os dois últimos dígitos de cada modo definem o modo de operação. Ao configurar dois temporizadores, tenha cuidado ao usar o operador OR (|). Ao usar interrupções, atente-se para limpar os sinais que devem ser limpos após a entrada na interrupção.
2,Serial port transceiver: The baud rate is generally set in mode 2 (automatic reloading to initial value). Because different devices have different data processing capabilities, setting the baud rate is mainly to take care of low-speed devices and to communicate with each other. The interrupt flag bit must be cleared by software. When setting the serial port interrupt, no matter which one is generated by sending or receiving, it can enter the interrupt function, so pay attention to setting the interrupt function. (Self-feeling generally sets a function, as a host computer or a slave computer).
Se você usar uma interrupção para enviar dados, terá que descobrir como entrar na interrupção pela primeira vez. Portanto, você precisa enviar os dados uma vez antes de poder entrar na interrupção. Apenas um byte pode ser enviado por vez, e o próximo bit só pode ser enviado depois que o sinal TI for ativado.
3,O conversor PCF8591AD possui quatro canais de entrada. Ao ler o PCF8591, o canal selecionado lê a tensão de entrada correspondente. Os dados convertidos são armazenados no chip e, em seguida, lidos. Durante a leitura, primeiro se escreve o endereço do chip, depois o subendereço do dispositivo (0x40|número do canal) e, por fim, os dados lidos.
4,A conversão DA consiste em primeiro escrever o endereço do dispositivo no chip, depois o subendereço (0x40) e, por fim, o valor digital a ser convertido. A seguir, são apresentadas informações sobre o chip de endereço do dispositivo.
5,No visor LCD, após os dados serem gravados e exibidos, eles permanecerão visíveis sem atualização contínua. Se desejar alterá-los, será necessário digitá-los novamente.
6,For the ds1302 clock chip, when reading data, the first data is read at the falling edge of the eighth clock when writing data, and then prepares for the next output. Pay attention to the writing method of the program and the location of the return value.
7,In Ds1302, first specify the register and then write data to it. The register on the chip data indicates the address. (I still don’t quite understand the write protection program. Isn’t there always writing? Why is the write protection still turned on?)
(De acordo com o usuário anterior, você pode definir um sinalizador após o tempo de inicialização. Se esse sinalizador estiver definido, não é necessário inicializar novamente. No entanto, se a alimentação for desligada, a RAM do microcontrolador não poderá salvar esse sinalizador. Portanto, você pode usar a RAM do DS1302 para salvar o sinalizador e lê-lo após ligar o microcontrolador. Também sou iniciante e pretendo usar o DS1302 em breve. Não sei se isso está correto e ainda não implementei. Por favor, compartilhe mais informações.)
8,É aconselhável anotar a inicialização para o caso de você se esquecer dela mais tarde. Às vezes, preste atenção se o bit menos significativo ou o bit mais significativo é operado primeiro durante a leitura ou a escrita, o que pode ser determinado consultando o diagrama de tempo.
9,For infrared transceiver, when receiving, it determines whether it is a high level or a low level based on the time between two falling edges. When writing a program, first use a timer to determine the time, save it, and then convert it into binary (read more about how to write this program, it is very good).
10,Motor de passo: Utilizado principalmente para comutação. O torque do motor de passo diminui à medida que a velocidade de rotação aumenta. É usado principalmente para alimentação automática de peças processadas em máquinas-ferramenta. Também pode ser usado em aplicações de controle que exigem maior precisão.
O motor de passo é um dispositivo de controle de malha aberta que converte sinais de pulso elétrico em deslocamento angular ou linear. Em condições sem sobrecarga, a velocidade e a posição de parada do motor dependem apenas da frequência e do número de pulsos do sinal, não sendo afetadas por variações de carga. Quando o driver do motor de passo recebe um sinal de pulso, ele o aciona para girar na direção definida em um ângulo fixo, chamado de "ângulo de passo". Sua rotação ocorre passo a passo em um ângulo fixo. O deslocamento angular pode ser controlado pelo número de pulsos para obter um posicionamento preciso; ao mesmo tempo, a velocidade e a aceleração da rotação do motor podem ser controladas pela frequência dos pulsos para obter a regulação da velocidade.
11,Servo motor: (servo motor) refers to the engine that controls the operation of mechanical components in the servo system. It is an indirect transmission device that assists the motor. Servo motors can control speed and position accuracy very accurately, and can convert voltage signals into torque and rotational speed to drive control objects. The rotor speed of the servo motor is controlled by the input signal and can respond quickly. In the automatic control system, it is used as an actuator and has the characteristics of small electromechanical time constant, high linearity, starting voltage, etc. It can convert the received electrical signal into the angular displacement or angular velocity output on the motor shaft. They are divided into two categories: DC and AC servo motors. Their main feature is that there is no rotation when the signal voltage is zero, and the rotational speed decreases at a constant speed as the torque increases. DC motor: Large range, all on small cars.
Aviso: Este artigo foi reproduzido da "International Electronic Business Information". Este artigo representa apenas a opinião pessoal do autor e não representa a opinião da Sacco Micro ou do setor. Sua reprodução e compartilhamento são permitidos apenas para fins de proteção dos direitos de propriedade intelectual. Ao reproduzir este artigo, favor indicar a fonte original e o autor. Em caso de infração de direitos autorais, entre em contato conosco para que possamos removê-lo.
Número de telefone da empresa: +86-0755-83044319
Fax: +86-0755-83975897
E-mail: 1615456225@qq.com
QQ: 3518641314 Gerente Li
QQ: 332496225 Gerente Qiu
Endereço: Sala 809, Edifício C, Edifício de Tecnologia Zhantao, nº 1079 Avenida Minzhi, Novo Distrito de Longhua, Shenzhen




粤公网安备44030002007346号