Beispiel #1
0
uint16_t	Readout7705( uint8_t ChannelSelect )
{
	uint8_t  state, ResultH, ResultL;
	BOOL	 isReady;
	uint16_t iRetry;

	for ( iRetry = 20u; iRetry; --iRetry )
	{
		ShiftOut( RS_0 + READ + ChannelSelect );
		state = ShiftIn();
		isReady = ( state & DRDY ) ? FALSE : TRUE;	//	DRDY 低电平有效

		if ( isReady )
		{
			ShiftOut( RS_3 + READ + ChannelSelect );		// do Read
			ResultH = ShiftIn();
			ResultL = ShiftIn();
			return  ( ResultL + ( ResultH * 256u ));
		}

		delay( 10u );
	}

	return 0u;	// failure !!!
}
Beispiel #2
0
BOOL	Initialize7705( )
{
	uint8_t	i;

	bus_SPI1xPortInit();

	for( i = 7u; i != 0u; --i )
	{
		ShiftOut( 0xFFu );
	}

	ShiftOut( RS_4 );				// Test Register, 8 Bits
	ShiftOut( 0x00u );				// Default: 0x00
	ShiftOut( RS_2 );				// Clock Register, 8 Bits
	ShiftOut( CLKDIV + FS_1_0 );	// 50Hz @ 4.9152MHz

	ShiftOut( RS_1 + 0u );			// 启动指定通道的自校准转换
	ShiftOut( MD_1 + BIPOLAR  + G_5 + BUF );
	delay( 300u );

	ShiftOut( RS_1 + 1u );			// 启动指定通道的自校准转换
	ShiftOut( MD_1 + BIPOLAR  + G_4 + BUF );
	delay( 300u);

	return	TRUE;
}
Beispiel #3
0
void	Convert7705( uint8_t ChannelSelect )
{
	ShiftOut( RS_1 + ChannelSelect );		// 启动指定通道的校准转换

	if( 0u == ChannelSelect )
	{
		ShiftOut( MD_0 + BIPOLAR  + G_5 + BUF );
	}
	else
	{
		ShiftOut( MD_0 + BIPOLAR  + G_4 + BUF );
	}

	ShiftOut( RS_3 + READ + ChannelSelect );	// Reset DRDY#
	ShiftIn();
	ShiftIn();
}
Beispiel #4
0
int main(void){

  ADCInitChar();
  DDRB |= (1<<2)|(1<<0)|(1<<1);
  char Temp;
  float Hold;
  float Read;

  while(1){

    Read = ADCReadChar(2);
    Hold = (((Read / 100.) - .75 ) * 100.) + 25;
    Temp = (char)(Hold);
    PORTB &= ~(1<<1);
    ShiftOut(2, 0, Temp);
    PORTB |= (1<<1);
  }

}
Beispiel #5
0
void TD_Poll(void)              // Called repeatedly while the device is idle
{
   if(!Running) return;
   
   if(!(EP1INCS & bmEPBUSY))
   {
      if(Pending > 0)
      {
         BYTE o, n;

         AUTOPTRH2 = MSB( EP1INBUF );
         AUTOPTRL2 = LSB( EP1INBUF );
       
         XAUTODAT2 = 0x31;
         XAUTODAT2 = 0x60;
       
         if(Pending > 0x3E) { n = 0x3E; Pending -= n; } 
                     else { n = Pending; Pending = 0; };
       
         o = n;

#ifdef USE_MOD256_OUTBUFFER
         AUTOPTR1H = MSB( OutBuffer );
         AUTOPTR1L = FirstDataInOutBuffer;
         while(n--)
         {
            XAUTODAT2 = XAUTODAT1;
            AUTOPTR1H = MSB( OutBuffer ); // Stay within 256-Byte-Buffer
         };
         FirstDataInOutBuffer = AUTOPTR1L;
#else
         AUTOPTR1H = MSB( &(OutBuffer[FirstDataInOutBuffer]) );
         AUTOPTR1L = LSB( &(OutBuffer[FirstDataInOutBuffer]) );
         while(n--)
         {
            XAUTODAT2 = XAUTODAT1;

            if(++FirstDataInOutBuffer >= OUTBUFFER_LEN)
            {
               FirstDataInOutBuffer = 0;
               AUTOPTR1H = MSB( OutBuffer );
               AUTOPTR1L = LSB( OutBuffer );
            };
         };
#endif
         SYNCDELAY;
         EP1INBC = 2 + o;
         TF2 = 1; // Make sure there will be a short transfer soon
      }
      else if(TF2)
      {
         EP1INBUF[0] = 0x31;
         EP1INBUF[1] = 0x60;
         SYNCDELAY;
         EP1INBC = 2;
         TF2 = 0;
      };
   };

   if(!(EP2468STAT & bmEP2EMPTY) && (Pending < OUTBUFFER_LEN-0x3F))
   {
      BYTE i, n = EP2BCL;

      AUTOPTR1H = MSB( EP2FIFOBUF );
      AUTOPTR1L = LSB( EP2FIFOBUF );

      for(i=0;i<n;)
      {
         if(ClockBytes > 0)
         {
            BYTE m;

            m = n-i;
            if(ClockBytes < m) m = ClockBytes;
            ClockBytes -= m;
            i += m;
         
            if(WriteOnly) /* Shift out 8 bits from d */
            {
               while(m--) ShiftOut(XAUTODAT1);
            }
            else /* Shift in 8 bits at the other end  */
            {
               while(m--) OutputByte(ShiftInOut(XAUTODAT1));
            }
        }
        else
        {
            BYTE d = XAUTODAT1;
            WriteOnly = (d & bmBIT6) ? FALSE : TRUE;

            if(d & bmBIT7)
            {
               /* Prepare byte transfer, do nothing else yet */

               ClockBytes = d & 0x3F;
            }
            else
            {
               /* Set state of output pins */

               TCK = (d & bmBIT0) ? 1 : 0;
               TMS = (d & bmBIT1) ? 1 : 0;
               TDI = (d & bmBIT4) ? 1 : 0;

               /* Optionally read state of input pins and put it in output buffer */

               if(!WriteOnly) OutputByte(2|TDO);
            };
            i++;
         };
      };

      SYNCDELAY;
      EP2BCL = 0x80; // Re-arm endpoint 2
   };
}