  | 
	  | 
		 
	 
	
		| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		
			balamagesh Guest
 
 
 
 
  
			
			
			
			
			
			
			
			
			
			
  
		  | 
		
			
				| SPI Interface | 
			 
			
				 Posted: Wed Feb 12, 2003 3:14 am     | 
				     | 
			 
			
				
  | 
			 
			
				I am using 16F73 with digital pot(MCP41050) and trying to control digital pot through SPI interface. The below is code used by me. Can anybody help me with modified sample code to make it work. pin RC3 -> SCK , pin RC4 -> SI , pin RB0 -> CS.
 
 
The code is as follows:
 
 
   setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_16);
 
   output_high(PIN_B0);
 
   spi_write(3);
 
   spi_write(0x00);
 
   output_low(PIN_B0);
 
 
Thanks in Advance
 
Balamgesh
 
___________________________
 
This message was ported from CCS's old forum
 
	Original Post ID: 11585 | 
			 
		  | 
	 
	
		  | 
	 
	
		
			dave.t Guest
 
 
 
 
  
			
			
			
			
			
			
			
			
			
			
  
		  | 
		
			
				| Re: SPI Interface | 
			 
			
				 Posted: Wed Feb 12, 2003 3:29 am     | 
				     | 
			 
			
				
  | 
			 
			
				:=I am using 16F73 with digital pot(MCP41050) and trying to control digital pot through SPI interface. The below is code used by me. Can anybody help me with modified sample code to make it work. pin RC3 -> SCK , pin RC4 -> SI , pin RB0 -> CS.
 
:=
 
:=The code is as follows:
 
:=
 
:=   setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_16);
 
:=   output_high(PIN_B0);
 
:=   spi_write(3);
 
:=   spi_write(0x00);
 
:=   output_low(PIN_B0);
 
:=
 
:=Thanks in Advance
 
:=Balamgesh
 
 
 
Here is some code I have recently used and works fine-
 
 
void digi_pot(char data);
 
 
void digi_pot()
 
 
{
 
 
char count,command,pot_data;
 
 
pot_data=data;
 
command=digi_command;         // 0x11
 
 
#asm
 
      bcf clock               // make sure clock is low
 
      movlw 0x08              // load
 
      movwf count             // first 8 bit count
 
      bcf chip_select         // select chip
 
 
 cmlp:bcf serial_out          // data line low
 
      rlf command,f           // move command out to carry msb first
 
      btfsc carry
 
      bsf serial_out          // data out high
 
      nop                     // allow data
 
      nop                     // to settle
 
      bsf clock               // clock high
 
      nop                     // wait
 
      nop                     // wait
 
      bcf clock               // clock low
 
      nop
 
      decfsz count,f          // all bits clocked out?
 
      goto cmlp
 
                              // yes!
 
      movlw 0x08              // load
 
      movwf count             // second 8 bit count
 
 
 dblp:bcf serial_out
 
      rlf pot_data,f         // pot value
 
      btfsc carry
 
      bsf serial_out          // data output high
 
      nop                     // allow data
 
      nop                     // to settle
 
      bsf clock               // clock high
 
      nop                     // wait
 
      nop                     // wait
 
      bcf clock               // clock low
 
      nop
 
      decfsz count,f          // all bits clocked out?
 
      goto dblp
 
      bsf chip_select         // yes! all sixteen bits clocked out
 
                              // chip select is now taken high to latch data and update pot!
 
#endasm
 
 
}
 
 
Regards
 
Dave T.
 
___________________________
 
This message was ported from CCS's old forum
 
	Original Post ID: 11586 | 
			 
		  | 
	 
	
		  | 
	 
	
		
			R.J.Hamlett Guest
 
 
 
 
  
			
			
			
			
			
			
			
			
			
			
  
		  | 
		
			
				| Re: SPI Interface | 
			 
			
				 Posted: Wed Feb 12, 2003 4:20 am     | 
				     | 
			 
			
				
  | 
			 
			
				:=I am using 16F73 with digital pot(MCP41050) and trying to control digital pot through SPI interface. The below is code used by me. Can anybody help me with modified sample code to make it work. pin RC3 -> SCK , pin RC4 -> SI , pin RB0 -> CS.
 
:=
 
:=The code is as follows:
 
:=
 
:=   setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_16);
 
:=   output_high(PIN_B0);
 
:=   spi_write(3);
 
The command format for the chip, is that the first byte contains the command data, in the form:
 
xxccxxpp (in binary)
 
You are sending a command (cc bits) of '00', which is a 'no action' command. To address both potentiometers, needs a first byte of:
 
xx01xx11
 
So try:
 
spi_write(0x13);
 
 
:=   spi_write(0x00);
 
Presumably you are trying to set the pots to zero?. If so this is OK.
 
 
:=   output_low(PIN_B0);
 
:=
 
:=Thanks in Advance
 
:=Balamgesh
 
 
Best Wishes
 
___________________________
 
This message was ported from CCS's old forum
 
	Original Post ID: 11587 | 
			 
		  | 
	 
	
		  | 
	 
	
		
			Bruce R. Knox Guest
 
 
 
 
  
			
			
			
			
			
			
			
			
			
			
  
		  | 
		
			
				| Re: SPI Interface | 
			 
			
				 Posted: Wed Feb 12, 2003 9:43 am     | 
				     | 
			 
			
				
  | 
			 
			
				:=I am using 16F73 with digital pot(MCP41050) and trying to control digital pot through SPI interface. The below is code used by me. Can anybody help me with modified sample code to make it work. pin RC3 -> SCK , pin RC4 -> SI , pin RB0 -> CS.
 
:=
 
:=The code is as follows:
 
:=
 
:=   setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_16);
 
:=   output_high(PIN_B0);
 
:=   spi_write(3);
 
:=   spi_write(0x00);
 
:=   output_low(PIN_B0);
 
:=
 
:=Thanks in Advance
 
:=Balamgesh
 
 
The chip select is active LOW - so use output_low(PIN_B0) to select it and output_high(PIN_B0) to de-select it.  Also,
 
make sure you set B0 high when you initialize the i/o port at the beginning of your program.
 
 
As someone else said - the first byte you send should be 0x13 to set both pots (0x11 for Pot 0 || 0x12 for Pot 1).
 
 
Then it should work.
 
 
Bruce
 
___________________________
 
This message was ported from CCS's old forum
 
	Original Post ID: 11599 | 
			 
		  | 
	 
	
		  | 
	 
	
		
			Balamagesh Guest
 
 
 
 
  
			
			
			
			
			
			
			
			
			
			
  
		  | 
		
			
				| Re: SPI Interface | 
			 
			
				 Posted: Tue Feb 25, 2003 4:33 am     | 
				     | 
			 
			
				
  | 
			 
			
				:=:=I am using 16F73 with digital pot(MCP41050) and trying to control digital pot through SPI interface. The below is code used by me. Can anybody help me with modified sample code to make it work. pin RC3 -> SCK , pin RC4 -> SI , pin RB0 -> CS.
 
:=:=
 
:=:=The code is as follows:
 
:=:=
 
:=:=   setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_16);
 
:=:=   output_high(PIN_B0);
 
:=:=   spi_write(3);
 
:=The command format for the chip, is that the first byte contains the command data, in the form:
 
:=xxccxxpp (in binary)
 
:=You are sending a command (cc bits) of '00', which is a 'no action' command. To address both potentiometers, needs a first byte of:
 
:=xx01xx11
 
:=So try:
 
:=spi_write(0x13);
 
:=
 
:=:=   spi_write(0x00);
 
:=Presumably you are trying to set the pots to zero?. If so this is OK.
 
:=
 
:=:=   output_low(PIN_B0);
 
:=:=
 
:=:=Thanks in Advance
 
:=:=Balamgesh
 
:=
 
:=Best Wishes
 
 
Thanks .The below code didnt work for me. should there be any delay in between (or) the data should be spi_write(0x13ff).
 
Pls help me in this
 
 
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
 
output_low(PIN_B0);
 
spi_write(0x13);
 
spi_write(0xff);     //setting pot to high  
 
output_high(PIN_B0);
 
 
Thanks 
 
Bala
 
___________________________
 
This message was ported from CCS's old forum
 
	Original Post ID: 12076 | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
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
  
		 |