Atmega328: Pierde el cristal y gana dos pines: 4 pasos

Atmega328: Pierde el cristal y gana dos pines: 4 pasos

Tabla de contenido:

Anonim

Este instructivo explica cómo ejecutar el chip Atmega328 como el chip en un Arduino sin que el cristal facilite el enrutamiento y le ofrezca dos pines adicionales para trabajar. Este programa no funcionará en un Arduino Uno. Hace uso de las características del chip Atmega328 que no están disponibles en el Arduino. Los pines del 328 y todos los microcontroladores de Atmel están dispuestos en bancos de ocho. El banco "D" está disponible pero solo tiene acceso completo al banco único. Solo hay seis pines disponibles en el banco "C", los pines de entrada analógica, porque uno de ellos no está roto y el otro es el reinicio. Dos de los pines en el banco "B" están ocupados por el cristal.

Es posible ejecutar el chip sin el cristal y tener acceso completo a los ocho pines en el banco "B". Existe una red interna de R / C que se puede usar para sincronizar el chip. El chip se ejecutará a ocho MHz en lugar de dieciséis. Esto generalmente no es un problema porque la mayoría de los programas Arduino no necesitan la velocidad de todos modos. Además, el reloj interno no es tan preciso. La tolerancia especificada en la hoja de datos para el ATtiny85 es de +/- diez por ciento, mientras que la mayoría de los cristales tienen una tolerancia de 30 PPM. Supongo que el 328 es el mismo pero no lo pude encontrar en la hoja de datos del 328. (La hoja de datos contiene cientos de páginas de lecturas muy secas). Existe una gran posibilidad de que su chip no esté apagado cerca del diez por ciento. Esta colección de instructables incluye una prueba del reloj interno en el chip ATtiny85. y explica cómo se prueban las piezas para asegurar que estén dentro de la tolerancia.

He oído hablar de casos en los que el hardware de comunicaciones en serie en el Arduino puede interferir con el funcionamiento de los pines cero y uno. Con el chip fuera de la placa, esto no será un problema, pero si los está utilizando para comunicaciones en serie, deberá preservarlos.

Cada banco de ocho pines está controlado por tres registros de ocho bits:

  • El registro DDR es la dirección de los datos, 0 = entrada, 1 = salida.
  • El registro PIN se utiliza para leer el valor digital del pin.
  • El registro PORT tiene dos funciones:
    • Si el registro DDR se configura en la salida, 0 establece el pin bajo y 1 lo establece en alto.
    • Si el registro DDR se configura en la entrada 1, se enciende la resistencia de pull-up interna.

El IDE de Arduino no tiene forma de controlar los pines donde estaba el cristal, no tienen números de pines digitales. Afortunadamente, proporciona soporte directo para manipular los registros de control. Este instructivo muestra cómo usar los registros de pines para hacer que los programas sean más rápidos, más pequeños y, en muchos casos, más fáciles de codificar.

Suministros:

Paso 1: Agregar la nueva definición de chip al IDE de Arduino

La instalación estándar de Arduino IDE te da el cargador de arranque para ejecutar el chip a ocho MHz utilizando el reloj interno sin el cristal, pero no la definición de chip que necesitas para hacerlo. El archivo del gestor de arranque que necesita está en el directorio. / usr / share / arduino / hardware / arduino / bootloaders / atmega /, y el nombre del archivo es ATmegaBOOT_168_atmega328_pro_8MHz.hex. Necesitas tener la definición de chip en un archivo llamado boards.txt dentro de un directorio en tu hardware directorio que esta en tu bloc de dibujo directorio.

Si no tiene un directorio de hardware en el directorio de su cuaderno de bocetos, cree uno ahora.

Si ya tiene un archivo boards.txt en su directorio de hardware, puede agregar este código en él, de lo contrario, copie este código en un archivo y asígnele el nombre boards.txt.

Crea un directorio, dale el nombre que elijas. Llamé al mío 328.

Mueva su nuevo archivo boards.txt a este directorio, luego mueva ese directorio a su directorio de hardware.

################################################## ############ # ATmega328 en una placa de pruebas (reloj interno de 8 MHz) ########################### ################################### atmega328bb.name = ATmega328 en una placa de pruebas (reloj interno de 8 MHz) atmega328bb.upload.protocol = STK500 atmega328bb.upload.maximum_size = 30720 atmega328bb.upload.speed = 57600 atmega328bb.bootloader.low_fuses = 0xE2 atmega328bb.bootloader.high_fuses = 0xDA atmega328bb.bootloader.extended_fuses = 0x05 atmega328bb.bootloader.path = Arduino: ATmega atmega328bb.boot_completo_completo_completo_completo_completo_completo_completo_completo_completo_completo_completo_completo a. variante = arduino: standard

Verifique que el IDE de Arduino encuentre las definiciones de chip abriendo el IDE de Arduino, haciendo clic en Herramientas y luego en la placa. Debe verse como la imagen, debería ver una entrada para ATmega328 en una placa de pruebas (reloj interno de 8 MHz)

Paso 2: quemar el gestor de arranque

Ahora que tiene la definición de chip en su lugar, es hora de quemar el gestor de arranque, necesitará:

  • Arduino Uno (u otro modelo Arduino con un chip extraíble).
  • Tablero de circuitos
  • Cables de puente
  • Atmega328P

Este chip no tiene un gestor de arranque en él.

Si tiene un chip de repuesto para su Arduino, o un chip con el cargador de arranque preinstalado, necesitará un oscilador de 16 MHz para quemar el cargador de arranque o el chip no funcionará. Puede usar un resonador cerámico de 16 MHz o un cristal de 16 MHz y dos capacitores de 22 pF.

Conecte el circuito como se muestra en la imagen y los diagramas.

El punto rojo en el chip indica pin uno.

Si tiene un chip nuevo, sin un cargador de arranque instalado, no se moleste con el resonador o el cristal.

Abra el IDE de Arduino y haga clic en Archivo => Ejemplos =>ArduinoISP.

Haga clic en Herramientas => Tablero y seleccione su tablero Arduino. (típicamente Arduino Uno)

Haga clic en Herramientas => Programador y seleccione AVRISP mk II.

Haga clic en el botón de carga para cargar el programa en su Arduino.

Haga clic en Herramientas => Tablero nuevamente, esta vez seleccione ATmega328 en una placa de pruebas (reloj interno de 8 MHz).

Haga clic en Herramientas => Programador y seleccione Arduino como ISP.

Haga clic en Herramientas y seleccione Burn Bootloader.

Verás un mensaje que dice Grabación del cargador de arranque en la placa de E / S (esto puede tardar un minuto).

Si recibe un mensaje de error, inténtelo de nuevo, a veces simplemente no funciona y la próxima vez lo hará.

Cuando termine recibirás el mensaje. Hecho quemando bootloader.

Paso 3: Subir el programa

La forma más sencilla de cargar un programa en el 8 MHz 328 es extraer el chip de 16 MHz de su Arduino y reemplazarlo por el chip de 8 MHz.

Inicie el IDE de Arduino, haga clic en Herramientas => Tablero y seleccione ATmega328 en una placa de pruebas (reloj interno de 8 MHz).

Haga clic en Herramientas => Programador y seleccione AVRISP mkII.

Copie / pegue el siguiente código en el IDE de Arduino y presione el botón de carga.

/ ************************************************** **************** * Nombre de archivo: Count22.ino * * Este programa se ejecuta en un Atmega328P usando el reloj interno. *************************************************** *************** / int j = 0; // Primer índice anidado. int k = 0; // Configuración anulada del segundo índice anidado () {DDRB = B11111111; // Establezca los bancos de pines en OUTPUT DDRC = B11111111; DDRD = B11111111; } void loop () {for (int i = 0; i <256; i ++) // El índice primario {PORTB = i; // Establecer / Borrar bits 0 - 7 retardo (5); } j ++; si (j <256) PORTD = j; // Establecer / Borrar bits 8 - 15 de lo contrario {PORTD = B00000000; // Borrar bits 8 - 15 j = 0; k ++; si (k <64) PORTC = k; // Establecer / Borrar bits 16 - 21 de lo contrario {PORTB = B00000000; // Cero todo para comenzar de nuevo PORTC = B00000000; PORTD = B00000000; j = 0; k = 0; }}}

Paso 4: construir el circuito

Para construir el circuito necesitarás:

  • El chip Atmega328P que programaste en los pasos anteriores
  • 2 tablas de pan
  • 8 LEDs verdes
  • 8 LEDs rojos
  • 6 LEDs amarillos
  • 22 resistencias (470-560 Ohm)
  • Cable de conexión de calibre 22 (me gusta usar colores surtidos para mayor claridad)
  • Una fuente de alimentación de 5 voltios.

La primera imagen muestra una resistencia soldada a un LED. Esto es opcional, pero descubrí que tener un montón de estos inventados hace mucho más fácil el empacar. Suelde una resistencia al cable de cátodo de algunos LED. El cable del cátodo es el cable negativo (tierra) más corto.

Deberá hacer estos con ocho LED rojos, ocho verdes y seis amarillos para este proyecto.

El punto rojo en el chip es el pin uno.

Alambre las tablas de cortar como en los diagramas.

El primer diagrama muestra el cableado de los primeros ocho LED porque se cubre con un cableado adicional.

Para alimentar el circuito necesitará una fuente de alimentación de 5 voltios. Si no tienes uno puedes usar el 5V y GND Pasadores en tu Arduino.