|
|
View previous topic :: View next topic |
Author |
Message |
David Briscoe Guest
|
AD8403 digital pot routine |
Posted: Tue May 06, 2003 1:55 am |
|
|
Hello all,
I am trying to put together the software to control an AD8403 digital pot for a filter project.I'm using a 16f628 or 16f877 PIC.
How would I modify the example included with the PCM compiler
(AD8400 included below) so that I can increment the Values of each of the 4 pots one at a time ( eg increment rdac1 to full resistance, then rdac2, then rdac3 annd so on).
Any help would be appreciated, thank you.
///////////////////////////////////////////////////////////////////////////
//// Library for a AD8400 ////
//// ////
//// init_pots (); Sets all of the pots to 0 ////
//// ////
//// set_pot (pot_num, new_value); Sets pot pot_num to new_value ////
//// ////
///////////////////////////////////////////////////////////////////////////
//// (C) Copyright 1996,1997 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. ////
////////////////////////////////////////////////////////////////////////////
#define RST1 PIN_B0
#define CLK PIN_B1
#define DI PIN_B2
#define NUM_POTS 1
byte pots;
set_pot (int pot_num, int new_value)
{
byte i;
byte cmd[2];
pots = new_value;
cmd[0] = pots;
cmd[1] = 0;
for(i=1;i<=6;i++)
shift_left(cmd,2,0);
output_low(CLK);
output_low(RST1);
delay_us(2);
for(i=1;i<=10;++i)
{
output_bit(DI, shift_left(cmd,2,0));
delay_us(2);
output_high(CLK);
delay_us(2);
output_low(CLK);
delay_us(2);
}
output_high(RST1);
}
void init_pots ()
{
pots = 0;
}
Regards,
David Briscoe
London,England
___________________________
This message was ported from CCS's old forum
Original Post ID: 14204 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
Re: AD8403 digital pot routine |
Posted: Tue May 06, 2003 1:33 pm |
|
|
:=How would I modify the example included with the PCM compiler
:=(AD8400 included below) so that I can increment the Values of each of the 4 pots one at a time ( eg increment rdac1 to full resistance, then rdac2, then rdac3 annd so on).
:=Any help would be appreciated, thank you.
:=
:=#define RST1 PIN_B0
:=#define CLK PIN_B1
:=#define DI PIN_B2
:=#define NUM_POTS 1
:=
:=byte pots;
:=
:=set_pot (int pot_num, int new_value)
:= {
:= byte i;
:= byte cmd[2];
:=
:= pots = new_value;
:= cmd[0] = pots;
I think you can make it work with the AD8403 by
doing the following changes:
<PRE>
// cmd[1] = 0; // Comment this line out.
cmd[1] = pot_num; // Add this line
</PRE>
:=
:= for(i=1;i<=6;i++)
:= shift_left(cmd,2,0);
:=
:= output_low(CLK);
:= output_low(RST1);
:=
:= delay_us(2);
:= for(i=1;i<=10;++i)
:= {
:= output_bit(DI, shift_left(cmd,2,0));
:= delay_us(2);
:= output_high(CLK);
:= delay_us(2);
:= output_low(CLK);
:= delay_us(2);
:= }
:= output_high(RST1);
:= }
:=
:=void init_pots ()
:={
:= pots = 0;
:=}
___________________________
This message was ported from CCS's old forum
Original Post ID: 14217 |
|
|
David Briscoe Guest
|
Re: AD8403 digital pot routine |
Posted: Thu May 08, 2003 1:49 am |
|
|
:=:=How would I modify the example included with the PCM compiler
:=:=(AD8400 included below) so that I can increment the Values of each of the 4 pots one at a time ( eg increment rdac1 to full resistance, then rdac2, then rdac3 annd so on).
:=:=Any help would be appreciated, thank you.
:=:=
:=:=#define RST1 PIN_B0
:=:=#define CLK PIN_B1
:=:=#define DI PIN_B2
:=:=#define NUM_POTS 1
:=:=
:=:=byte pots;
:=:=
:=:=set_pot (int pot_num, int new_value)
:=:= {
:=:= byte i;
:=:= byte cmd[2];
:=:=
:=:= pots = new_value;
:=:= cmd[0] = pots;
:=
:=
:=I think you can make it work with the AD8403 by
:=doing the following changes:
:=<PRE>
:=// cmd[1] = 0; // Comment this line out.
:=cmd[1] = pot_num; // Add this line
:=</PRE>
:=
:=:=
:=:= for(i=1;i<=6;i++)
:=:= shift_left(cmd,2,0);
:=:=
:=:= output_low(CLK);
:=:= output_low(RST1);
:=:=
:=:= delay_us(2);
:=:= for(i=1;i<=10;++i)
:=:= {
:=:= output_bit(DI, shift_left(cmd,2,0));
:=:= delay_us(2);
:=:= output_high(CLK);
:=:= delay_us(2);
:=:= output_low(CLK);
:=:= delay_us(2);
:=:= }
:=:= output_high(RST1);
:=:= }
:=:=
:=:=void init_pots ()
:=:={
:=:= pots = 0;
:=:=}
Thank you PCM programmer, I will try your suggestion.
Dave Briscoe.
___________________________
This message was ported from CCS's old forum
Original Post ID: 14251 |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|