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

Escrito Por: admin Publicado En: Procesamiento Digital de Señales Fecha de Creación: 2018-05-03 visitas: 281

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

 

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);
  
  
    
}

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

Same In Category

comments powered by Disqus