|
/******************************************************************************
|
* Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD.
|
*
|
*-----------------------------------------------------------------------------
|
* File: AD421.c
|
* Description: 3.5-20mA current output code
|
* Author: Lishoujian (867693272@qq.com)
|
* Date: Jan 8, 2015
|
*****************************************************************************/
|
|
/* ----------------------- Platform includes --------------------------------*/
|
#include "AD421.h"
|
#include "delay.h"
|
#include "mem_pro.h"
|
|
u16 delay_times=1;
|
|
void AD421_init(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
//´ò¿ª¿ØÖƶ˿ÚʱÖÓ
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
|
//¿ØÖÆÒý½Å£¨Êä³ö£©³õʼ»¯
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //B11 DATA ready
|
GPIO_Init(GPIOD,&GPIO_InitStructure);
|
|
// AD421_EN = 1;
|
|
}
|
|
|
|
//¿ØÖÆAD421ʱÖÓÆµÂÊ
|
void AD421_delay(void)
|
{
|
u8 count_j;
|
|
for(count_j = 0;count_j < 4;count_j ++)
|
{
|
delay_us(1);
|
}
|
}
|
|
/******************************************
|
* func: AD421_output
|
* desc: output current: from 3.5mA to 24mA by step of 0.000244mA
|
* input:
|
* ma - the data of current output
|
* output: output current data equal to the given data "ma"
|
* return: none
|
*****************************************/
|
|
void AD421_output(float ma)
|
{
|
|
uint32 i,k;//
|
uint32 AD421_in;//AD421_in used to store 16bit transformed binary data from "float ma"
|
|
if(ma < 3.5) ma = 3.5;
|
if(ma > 24) ma = 24;
|
|
ma = ma * 1.0015 + 0.01932; //µçÁ÷Æ«²îÐÞÕý¡£
|
if(ma > 24) ma = 24; //ÐÞÕýÖ»ÓÐÒ²²»Äܳ¬¹ý24ma
|
|
k = (ma - 3.5) / 0.00024414;
|
AD421_in = 0x00003800 + k;
|
|
// AD421_latch = 1;//send 1 pulse for start
|
// AD421_delay();//delay_us(1);
|
// AD421_latch = 0;
|
// AD421_delay();//delay_us(1);
|
|
for(i = 0;i < 17;i ++)
|
{
|
AD421_clk = 0;
|
AD421_data = (AD421_in >> (16 - i));
|
|
AD421_delay();//delay_us(1);
|
|
AD421_clk = 1;
|
|
AD421_delay();//delay_us(1);
|
|
}
|
|
AD421_clk = 0;
|
AD421_data = 0;
|
|
AD421_delay();//delay_us(1);//send 1 pulse for end
|
AD421_latch = 1;
|
AD421_delay();//delay_us(1);
|
AD421_latch = 0;
|
|
}
|