|
/*
*********************************************************************************************************
* ad8400
*
* Description: запись в потенциометр
*
* Arguments : d - код сопротивления между выводами W и B (AD8400)
*
* Returns : none
*
* Notes : Rwb = 10kOhm*(d/256)
*
*********************************************************************************************************
*/void ad8400 (INT8U d)
{
INT8U i;
i = 0x80;on(SPI_CS); /* chip select */
off(SPI_SDI); /* 2-bit address (00b) for AD8400 only */
on(SPI_CLK);
off(SPI_CLK);
on(SPI_CLK);
off(SPI_CLK); /* address latched */do {
if (d & i)
on(SPI_SDI); /* MSB first */
else
off(SPI_SDI);
on(SPI_CLK); /* latch it */
off(SPI_CLK); /* latch it */
i >>= 1;
} while (i);off(SPI_CS); /* chip deselect */
}
Дерганье пинами описано в хидере macros.h
#if !defined(MACROS_H)
#define MACROS_H//port bits access macros. Original written by Ascold Volkov. Rewritten by Andy Mozzevilov
/*
//examples#define Pin1 D,2,H
#define Pin2 C,3,L
// ^ ^ ^
// port | |
// bit \active levelvoid main(void)
{
direct(Pin1,O); //as output
direct(Pin2,I); //as input
driver(Pin2,PullUp); //driver(Pin2,HiZ);
on(Pin1);
if (signal(Pin2)) cpl(Pin1);
if (latch(Pin1)) { //if active level presents on Pin1 for drive something
//do something
}
}
*/#define _setL(port,bit) port&=~(1<
#define _setH(port,bit) port|=(1< #define _set(port,bit,val) _set##val(PORT##port,bit)
#define on(x) _set (x)
#define SET _setH#define _clrL(port,bit) port|=(1<
#define _clrH(port,bit) port&=~(1< #define _clr(port,bit,val) _clr##val(PORT##port,bit)
#define off(x) _clr (x)
#define CLR _clrH#define _bitL(port,bit) (!(port&(1<
#define _bitH(port,bit) (port&(1< #define _bit(port,bit,val) _bit##val(PIN##port,bit)
#define _latch(port,bit,val) _bit##val(PORT##port,bit)
#define signal(x) _bit (x)
#define latch(x) _latch (x)
#define BIT _bitH#define _cpl(port,bit,val) port^=(1<
#define __cpl(port,bit,val) PORT##port^=(1< #define cpl(x) __cpl (x)
#define CPL _cpl#define _setO(port,bit) port|=(1<
#define _setI(port,bit) port&=~(1< #define _setPullUp(port,bit) port|=(1< #define _setHiZ(port,bit) port&=~(1< #define _mode(port,bit,val,mode) _set##mode(DDR##port,bit)
#define _dmode(port,bit,val,dmode) _set##dmode(PORT##port,bit)
#define DIR(port,bit,mode) _set##mode(DDR##port,bit)
#define DRIVER(port,bit,mode) _set##mode(PORT##port,bit)
//mode = O or I
#define direct(x,mode) _mode(x,mode)
//dmode = PullUp or HiZ
#define driver(x,dmode) _dmode(x,dmode)/*
//original macros by Ascold Volkov begin here#define _setL(port,bit) port&=~(1<
#define _setH(port,bit) port|=(1< #define _set(port,bit,val) _set##val(port,bit)
#define on(x) _set (x)
#define SET _setH#define _clrL(port,bit) port|=(1<
#define _clrH(port,bit) port&=~(1< #define _clr(port,bit,val) _clr##val(port,bit)
#define off(x) _clr (x)
#define CLR _clrH#define _bitL(port,bit) (!(port&(1<
#define _bitH(port,bit) (port&(1< #define _bit(port,bit,val) _bit##val(port,bit)
#define signal(x) _bit (x)
#define BIT _bitH#define _cpl(port,bit,val) port^=(1<
#define cpl(x) _cpl (x)
#define CPL _cpl
*/#endif
E-mail: info@telesys.ru