El modulo AD9851 es un generador de funciones, basado en hardware, que puede generar formas de ondas senoidal y cuadrada. Veremos el armado del circuito, analizaremos el código fuente, y finalmente probaremos este dispositivo en un osciloscopio, para ver las formas de onda a frecuencias saeteadas por la PC
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos
Arduino Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Pines hembra
Zócalo para arduino nano
Display oled sh1106
Se trata de un módulo de pantalla OLED monocromática DE 128×64 puntos con interface I2C .Que presenta varias ventajas en comparación con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un ángulo de visión más amplio, y bajo consumo de energía. ES compatible con Arduino Rasberry Pi y microcontroladores PIC entre otros. Trabaja con niveles lógicos de 3.3V a 5V tiene un angulo de visión mayor a los 160 grados. el Tamaño de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de 3.3V a 5V Se lo puede usar en aplicaciones como relojes inteligentes, MP3, termómetros, instrumentos, y proyectos varios, etc.
Librería
Características
- Interface: I2C(3.3V / 5V logic level)
- Resolution: 128 x 64
- Angle of view: >160 degree
- Display color: Blue
- Display size: 1.3 inch
- Driver IC: SH1106
- Power supply: DC 3.3V~5V
- Operating temperature: -20~70’C
- Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.
AD9851
PCB
Descargar archivo gerber –> PCB_ad9851
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include <AD9851.h> #include "U8glib.h"//Librería para el control del display oled U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);// I2C / TWI Se habilita esta linea según el display a usar en este caso el driver SH1106 // Modo serial pines 10 11 12 y 13 #define _RESET 10 // pin de reinicio dds #define _FQ_UD 11 // pin de actualización de frecuencia dds #define _W_CLK 12 // reloj de carga de palabras dds #define _DATA 13 // pin de datos en serie (solo modo en serie) static AD9851 DDS (_RESET, _FQ_UD, _W_CLK, _DATA); // Modo serial String cadena = "0"; String cadena2 = "0"; int fase; // 0 a 359 uint32_t frecuencia; // Variable para almacenar la frecuencia a la que va trabajar el dds void setup (void) { Serial.begin(9600);//Velocidad del puerto serial del arduino oled();//Esta función es para mostas datos en el display apenas inicia el programa } void loop (void) { //lee las cadenas que ingresan al puerto serie if (Serial.available()) { cadena = String(""); while (Serial.available()) { cadena = cadena + char(Serial.read()); delay(1); } } //Se cumple si la variable cadena es distinta de cadena2 if(cadena != cadena2){ fase = 0; // 0 grados frecuencia = atol(cadena.c_str());//Convertinos una cadena a un valor numérico Serial.print("Freq:"); Serial.println(frecuencia);//Se muestra en el terminal serial el valor de la freciancia seteada DDS.setPhase (fase); // Seteo de fase DDS.setFreq (frecuencia); // Seteo frecuencia oled();//Mostramos en el display oled la frecuencia seteada cadena2 = cadena;//Asignamos el valor de cadena a cadena2 para ver si hubo cambios } } //Funsión para el control del display void oled(){ u8g.firstPage(); do { draw();//Llama a la función draw } while( u8g.nextPage() ); // Reconstruir la imagen después de un tiempo delay(50); } void draw(void) { //Imprimimos en pantalla u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 20); u8g.print("Generador AD9851");//Muestra la frase "Generador AD9851" u8g.setPrintPos(0, 40); u8g.print("Frec: ");//Muestra la palabra Frec en el display u8g.setPrintPos(40, 40); u8g.print(frecuencia);//Muestra la frecuencia seteada en el display u8g.setPrintPos(110, 40); u8g.print("Hz");//Muestra la palabra Hz } |
PROYECTO RECOMENDADO