Utilizando un Arduino (Mega ADK), ¿cómo puedo hacer parpadear un LED en un IC separado (ATMega328) utilizando SPI?

1

Estoy intentando aprender a controlar un ATMega328 IC desde mi ATMega2560 Arduino utilizando SPI. He encontrado varios tutoriales que usan potenciómetros digitales, pero no tengo potenciómetros digitales y todo lo que quiero aprender es hacer parpadear un LED en el ATMega328 del código que se ejecuta en ATMega2560 a través de SPI.

¿Puede alguien proporcionar algunas líneas de código para mostrarme cómo se hace esto?

Aquí está mi configuración de pines (usando los nombres de pines de Arduino para ambos IC):

  • ATMega2560 pin 50 (MISO) = > ATMega328 pin 12 (MISO)
  • ATMega2560 pin 51 (MOSI) = > ATMega328 pin 11 (MOSI)
  • ATMega2560 pin 52 (SCK) = > ATMega328 pin 13 (SCK)
  • ATMega2560 pin 2 = > ATMega328 pin 10 (SS)
  • ATMega2560 5V pin = > ATMega328 Vcc pin
  • pin de ATMega2560 GND = > ATMega328 GND pin
  • ATMega328 pin 3 = > LED que me gustaría parpadear

Aquí está mi código actual:

#include "SPI.h" // necessary library

int SLAVESELECT = 2;
int DATAOUT = 51;
int DATAIN = 50;
int SPICLOCK = 52;

void setup()
{
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK, OUTPUT);
  pinMode(SLAVESELECT, OUTPUT);

  SPI.begin(); // wake up the SPI bus.
  SPI.setBitOrder(MSBFIRST);
}

void setValue(int pin, int value)
{
  digitalWrite(SLAVESELECT, LOW);
  SPI.transfer(pin); // send command byte
  SPI.transfer(value); // send value (0~255)
  digitalWrite(SLAVESELECT, HIGH);
}


void loop()
{
  setValue(0x11,255);
  delay(1000);
  setValue(0x11,0);
  delay(1000);   
}
    
pregunta Matt Cashatt

1 respuesta

1

Aunque no estoy muy familiarizado con el Arduino, tu boceto me parece bien. Pero, hay algo que te falta. ATMega328 es un microcontrolador, al igual que su ATMega2560 en el Arduino. No es un IC destinado a ser controlado a través de SPI.

Sin embargo, esto no significa que no pueda controlar este IC a través de SPI. Al igual que hiciste con tu ATMega2560, debes escribir el código para ATMega328 para que actúe como un "Esclavo SPI". Luego, podrá hacer que dos microcontroladores hablen SPI y se comunicarán.

Ya has configurado ATMega2560 como SPI Master, por lo que tu misión está a mitad de camino. Ahora, tienes que escribir el código para ATMega328 y hacer que actúe como un esclavo SPI. Luego, en el lado esclavo, comprobarás si el maestro envía algo. Y cuando el maestro envíe algo al esclavo, el esclavo verificará los bytes que está enviando, en este caso 0x11 y 0x00 (y 0xFF para LED encendido).

Aprenda cómo escribir un boceto que configura ATMega328 como un esclavo SPI, y aprenda cómo recibir datos cuando se configura como un esclavo SPI. Luego, verificará los datos y actuará en consecuencia; por ejemplo, encenderás el LED cuando se reciban los códigos 0x11 y 0xFF.

    
respondido por el abdullah kahraman

Lea otras preguntas en las etiquetas