//////////////// Driver for MCP4921 D/A Converter ///////////////////////
//// ////
//// init_dac() Call this before using a MCP4921 DAC ////
//// ////
//// write_dac( long int ) Writes command and 12 bit resolution ////
//// to the MCP4921 which converts it to a ////
//// voltage ////
//// 0-4095 input represents 0-vref V out. ////
//// ////
/////////////////////////////////////////////////////////////////////////
//// (C) Copyright 1996,2003 Custom Computer Services ////
//// This source code may only be used by licensed users of the CCS ////
//// C compiler. This source code may only be distributed to other ////
//// licensed users of the CCS C compiler. No other use, ////
//// reproduction or distribution is permitted without written ////
//// permission. Derivative programs created using this software ////
//// in object code form are not restricted in any way. ////
/////////////////////////////////////////////////////////////////////////
#ifndef EEPROM_SELECT
#define DAC_CS PIN_B0
#define DAC_CLK PIN_B1
#define DAC_DI PIN_B2
#define DAC_LDAC PIN_B4
#endif
void init_dac()
{
output_high(DAC_CS);
output_high(DAC_LDAC);
output_high(DAC_CLK);
output_high(DAC_DI);
}
void write_dac(int16 data) {
BYTE cmd[3];
BYTE i;
cmd[0]=data;
cmd[1]=(data>>8);
cmd[2]=0x03;
output_high(DAC_LDAC);
output_low(DAC_CLK);
output_low(DAC_CS);
for(i=0; i<=23; ++i)
{
if(i<4 || (i>7 && i<12))
shift_left(cmd,3,0);
else
{
output_bit(DAC_DI, shift_left(cmd,3,0));
output_high(DAC_CLK);
output_low(DAC_CLK);
}
}
output_high(DAC_CS);
output_low(DAC_LDAC);
delay_us(10);
output_HIGH(DAC_LDAC);
}Pero sin más? Pongo write_dac(4095) y ya me convierte ese número a cinco voltios en la salida?
Pero sin más? Pongo write_dac(4095) y ya me convierte ese número a cinco voltios en la salida?
Sip.... Seguro debes controlar el PIN CS. Para más detalles lee el datasheet de MCP4921
Saludos!
#include <18F4550.h>
#fuses INTHS
#use delay(internal=8Mhz)
#include <LCD_flexible2.c>
#include <mcp4921_PERSONAL.c>
long int value=001111;
//long int a;
//void display_data(long int data) ;
void main()
{
init_dac();
lcd_init();//Inicializamos el LCD
//output_LOW(DAC_CS);
write_dac(value);
delay_ms(500);
//for(value<000001;value>010000;value++);
write_dac(value);
//lcd_putc('\f');
//lcd_gotoxy(1,1);
printf(lcd_putc,"dac=%Lu\n",value); //entero sin signo
//printf(lcd_putc,"analog=%Lu ",a);
while(1);
}
En la imagen se ve poco y nada :tongue: Pero prueba haciendo correctamente el control sobre CS, o sea:
CS=0;
write...
CS=1;
Muchos dispositivos después del CS=1 realizan la conversión.
Saludos!
querido mglsoft quería saber donde se encuentra el módulo SPI en las bibliotecas proteus también quería saber si usted podría también archivos de origen pubblicarmi lcd.ce mcp4921.c
Estoy tratando de imitar a su propio proyecto, pero soy muy ignorante
¡muchas gracias
querido mglsoft quería saber donde se encuentra el módulo SPI en las bibliotecas proteus también quería saber si usted podría también archivos de origen pubblicarmi lcd.ce mcp4921.c
Estoy tratando de imitar a su propio proyecto, pero soy muy ignorante
¡muchas gracias
imagino que con modulo SPI te refieres al MCP si es ese en la barra de busqueda del proteus cuando vas a colocar un objeto ahi lo encuentras colocando MCR4921 y te va a aprecer, si con modulo SPI te refieres al debugger SPI lo encuentras en la columna izquerda en el icono que este encima de la linea y se llama Virtual instruments Mode
respecto a las librerias, las encuentras en la carpeta drivers de la instalacion del CCS.
Espero te ayude y Saluti!
#include <p18F4550.h>
#fuses INTHS
#use delay(internal=8Mhz)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D2
#define LCD_RW_PIN PIN_D1
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
//#include <LCD.c>
#include <mcp4921.c>
int16 value=20;
//long int a;
//void display_data(long int data) ;
void main()
{
init_dac();
lcd_init();
//output_LOW(DAC_CS);
write_dac(value);
delay_ms(500);
for(value=1;value<=4095;value++)
{
write_dac(value);
delay_ms(5);
}
//lcd_putc('\f');
//lcd_gotoxy(1,1);
printf(lcd_putc,"dac=%Lu\n",value);
//printf(lcd_putc,"analog=%Lu ",a);
while(1);
}
en el mplab estas usando el compilador C18, debes cambiarlo por CCS, ahora no recuerdo donde se hace, pero cuando creas un nuevo proyecto te da la opcion de elegir que compilador vas a usar, ahi debes seleccionar CCS o PICC o PCW no recuerdo que nombre sale, al seleccionar el CCS no vas a tener errores.
Saludos!