9 votos

Microcontroladores AVR y cómo empezar la codificación init o bucle principal o temporizadores o interrupciones

He estado modificando AVR y el microcontrolador PIC código para un par de años de trabajo, pero nunca he escrito nada desde cero, yo lo entiendo bastante bien.

Estoy empezando a escribir mi propio código y ahora estoy teniendo problemas para empezar. Me preguntaba cómo otras personas de empezar a escribir código y si hay un libro o tutorial de personas que recomendaría en este.

Empezar con la codificación de su función de inicialización, a continuación, interrupciones, a continuación, temporizadores, a continuación, la principal, mientras que(1) bucle... me estoy preguntando cuál es la mejor manera de empezar es.

Gracias

6voto

Annan Puntos 3491
  1. La primera cosa que uno hace en cualquier microcontrolador proyecto es parpadear un LED; mantener parpadear y darle un nombre ("Blinky"), también. Es el latido del corazón de su widget, y siempre trabajo, siempre y cuando el programa no se atascan.
  2. Comprometerse con el local del repositorio de control de versiones.
  3. Siguiente es volar a través de todo el programa en pseudo/crapcode, basado en su programa de diagramas de flujo o de cualquiera de los métodos de planificación que se ha suscrito. Si algo no funciona o simplemente no te gusta, un comentario, pero mantenerla allí, así que usted sabe solucionarlo más adelante. Si usted no sabe cómo hacer algo, escribir lo que se supone que debe hacer en los comentarios.
  4. Comprometerse con el local del repositorio de control de versiones.
  5. Tiempo para llenar los espacios en blanco! Implementar una función en un tiempo, por ejemplo el temporizador, y la prueba de ello. Su programa siempre debe compilar y funcionar como se esperaba. Me gustaría llevar a cabo cualquier conexiones de interfaz de usuario en este punto, como UART -> RS232 -> PC o enlaces de pantallas LCD. No se olvide de Blinky.
  6. Comprometerse con el local del repositorio de control de versiones.
  7. Tratar de romper su código con rigurosas rutinas de prueba; de depuración. Otros de revisión de su código; de depuración. Ejecutar el widget a través de sus parámetros de diseño con regularidad, como las variaciones de temperatura; de depuración.
  8. Comprometerse con el local del repositorio de control de versiones.
  9. Desconecte Blinky si eres un corazón necio, y de la nave.

AVRFreaks tiene un excelente tutorial escrito por el Decano de la Cámara (aka. abcminuser) llamado Modular de Código C: la Gestión de grandes proyectos. Usted también puede estar interesado en la lectura de Máquinas de Estado para Microprocesadores por James Wagner.

2voto

letronje Puntos 128

Mi favorito AVR-desde-cero-en-C es un tutorial https://www.mainframe.cx/~ckuethe/avr-c-tutorial/

Cada uno tiene su propio estilo para pequeños sistemas embebidos. He aquí la mía:

Me gusta usar un montón de C de archivos, con el nombre de cada uno para hacer un prefijo para las funciones. Por ejemplo, led_init() y led_tick() , ambos están en led.c. Esto mantiene las cosas modular y ayuda con la portabilidad.

Yo uso un common.h archivo de encabezado para definir los tipos, sino que los incluye para cada módulo.

Yo tiendo a usar una sola freerunning temporizador del sistema (en systime.c), a continuación, disponen de módulos llame a un systime_get() función para obtener la hora actual en el sistema de las garrapatas o milisegundos. Cada módulo se pueden programar eventos a través del software de temporizadores de uso de la X_tick() funciones.

común.h:

#ifndef COMMON_H
#define COMMON_H
#include <stdio.h>  // general purpose headers
#include <stdint.h>
#include <stdbool.h>
...
#endif

uart.h:

#ifndef UART_H
#define UART_H
#include <avr/usart.h>  // microcontroller specific headers for uart
...

void uart_init(void);
void uart_putc(uint8_t ch);
...

#endif

uart.c:

#include "common.h"
#include "uart.h"

void uart_isr(void) __interrupt VECTOR
{
  // handle incoming data
}

void uart_init(void)
{
  // setup hardware
}

void uart_putc(uint8_t ch)
{
  UART_TX_FIFO_REGISTER = ch;
  while(!TX_COMPLETE_REGISTER);
}

el led.h:

#ifndef LED_H
#define LED_H
#include <avr/ioports.h>  // microcontroller specific headers for port io
...

#define LED_DDR   PORTAD
#define LED_PIN   5
#define LED_MASK  (1 << LED_PIN)
#define LED_PORT  PORTA

void led_init(void);
void led_set(void);
void led_tick(void);
...

#endif

el led.c:

#include "common.h"
#include "led.h"

void led_init(void)
{
  LED_DDR |= LED_MASK;
}

void led_set(void)
{
  LED_PORT |= LED_MASK;
}

void led_tick(void)
{
  // animate LEDs in an amusing fashion
}

principal.c:

#include "common.h"
#include "led.h"
#include "uart.h"

int main(void)
{
  led_init();
  uart_init();
  ...

  led_set();

  while(1)
  {
    led_tick();
    uart_tick();
  }

  return 0;
}

Aquí hay dos "mundo real" los proyectos que utilizan este estilo para AVR y MSP430.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X