Generación de señal analógica senoidal con Arduino y DAC MCP4921

Generación de señal analógica senoidal con Arduino y DAC MCP4921

Objetivos:

Generar una señal analógica senoidal con Arduino y DAC MCP4921

Diagrama en Proteus:

Código en Arduino

#include <LiquidCrystal.h>

#include <TimerOne.h>
#include <SPI.h> // Remember this line!
#include <DAC_MCP49xx.h>

#define SS_PIN 10

DAC_MCP49xx dac(DAC_MCP49xx::MCP4921,SS_PIN);

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int y; // salida
int muestra=0; // numero de muestra

int frecuencia_ld;

float frecuencia=1; // frecuencia de senal a generar
float frecuenciadigital; // frecuencia digital
float frecuenciamuestreo=10000;// 10 K Hz

int amplitud_dig;

float amplitud;

float amplitudr;

void muestreo(){

y=floor((amplitud*sin(2*3.1416*muestra*frecuenciadigital)) + 2048); // calculo seno digital de 12 bits // calculo sino digital de 12 bits; // calculo sino digital de 12 bits

muestra++; // aumenta la muestra

dac.output(y); // manda la salida al DAC

}

void setup(){
lcd.begin(16, 2);
Serial.begin(9600); // incializa comunicacions serial
Timer1.initialize(100); // Periodo de muestreo 1/10 K = 100 us
Timer1.attachInterrupt(muestreo);// Activa la interrupcion y la asocia a ISR_timer

dac.setSPIDivider(SPI_CLOCK_DIV16);

// Use "port writes", see the manual page. In short, if you use pin 10 for
// SS (and pin 7 for LDAC, if used), this is much faster.
// Also not strictly required (no setup() code is needed at all).
dac.setPortWrite(true);

}

void loop(){

frecuenciadigital=frecuencia/frecuenciamuestreo;

amplitud_dig=analogRead(A1); /// conversión analogica digital

amplitud=map(amplitud_dig,0,1024,0,2048);

frecuencia_ld=analogRead(A2);

frecuencia=map(frecuencia_ld,0,1024,1,1000);

lcd.setCursor(0,0);

lcd.print("Amp:");

lcd.setCursor(5,0);

lcd.print(amplitud);

lcd.setCursor(0,1);

lcd.print("Frec:");

lcd.setCursor(6,1);

lcd.print(frecuencia);

}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *