void TM1637::stop()
{
  pinMode(m_pinDIO, OUTPUT);
  bitDelay();
  pinMode(m_pinClk, INPUT);
  bitDelay();
  pinMode(m_pinDIO, INPUT);
  bitDelay();
}
void SegmentDisplayProtocol::waitForAck(void)
{
    _pinClock->setLow();
    _pinData->setHigh();    bitDelay();
    _pinClock->setHigh();

    for (int cnt = 0; !_pinClock->get() && cnt < 20; cnt++)
        bitDelay();

    _pinClock->setLow();
    _pinData->setLow();
}
void SegmentDisplayProtocol::writeByte(uint8_t data)
{
    for (int bit = 0; bit < 8; bit++)
    {
        _pinClock->setLow();
        _pinData->set(data & 0x01);
        _pinClock->setHigh();
        bitDelay();

        for (int cnt = 0; !_pinClock->get() && cnt < 20; cnt++)
            bitDelay();

        data >>= 1;
    }

    waitForAck();
}
Example #4
0
int MyTM1637::writeByte(int8_t wr_data)
{
  uint8_t i,count1;   
  for(i=0;i<8;i++)        //sent 8bit data
  {
    digitalWrite(Clkpin,LOW);      
    if(wr_data & 0x01)digitalWrite(Datapin,HIGH);//LSB first
    else digitalWrite(Datapin,LOW);
    wr_data >>= 1;      
    digitalWrite(Clkpin,HIGH);
      
  }  
  digitalWrite(Clkpin,LOW); //wait for the ACK
  digitalWrite(Datapin,HIGH);
  digitalWrite(Clkpin,HIGH);     
  pinMode(Datapin,INPUT);
  
#if 0  
  while(digitalRead(Datapin))    
  { 
    count1 +=1;
    if(count1 == 200)//
    {
     pinMode(Datapin,OUTPUT);
     digitalWrite(Datapin,LOW);
     count1 =0;
    }
    pinMode(Datapin,INPUT);
  }
  pinMode(Datapin,OUTPUT);
#endif

  bitDelay();
  uint8_t ack = digitalRead(Datapin);
  if (ack == 0) 
  {
     pinMode(Datapin,OUTPUT);
     digitalWrite(Datapin,LOW);
  }
  bitDelay();
  pinMode(Datapin,OUTPUT);
  bitDelay();
  
  return ack;
}
Example #5
0
bool TM1637Display::writeByte(uint8_t b)
{
  uint8_t data = b;

  // 8 Data Bits
  for(uint8_t i = 0; i < 8; i++) {
    // CLK low
    pinMode(m_pinClk, OUTPUT);
    bitDelay();
    
	// Set data bit
    if (data & 0x01)
      pinMode(m_pinDIO, INPUT);
    else
      pinMode(m_pinDIO, OUTPUT);
    
    bitDelay();
	
	// CLK high
    pinMode(m_pinClk, INPUT);
    bitDelay();
    data = data >> 1;
  }
  
  // Wait for acknowledge
  // CLK to zero
  pinMode(m_pinClk, OUTPUT);
  pinMode(m_pinDIO, INPUT);
  bitDelay();
  
  // CLK to high
  pinMode(m_pinClk, INPUT);
  bitDelay();
  uint8_t ack = digitalRead(m_pinDIO);
  if (ack == 0)
    pinMode(m_pinDIO, OUTPUT);
	
	
  bitDelay();
  pinMode(m_pinClk, OUTPUT);
  bitDelay();
  
  return ack;
}
/*
 * @fn          writeByte
 * @brief       write a byte to the GPIO pin used as DIO
 * @param[in]   byte Data to write on the DIO pin
 */
bool writeByte(uint8_t byte){
    uint8_t data = byte;
    uint8_t i;

    // 8 Data bits
    for(i = 0; i < 8; i++){
        // CLK low
        palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_OUTPUT_PUSHPULL);
        bitDelay ();

        // Set data bit
        if(data & 0x01)
            palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_INPUT_PULLUP);
        else
            palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_OUTPUT_PUSHPULL);

        bitDelay ();

        // CLK high
        palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_INPUT_PULLUP);
        bitDelay ();
        data = data >> 1;
    }

    // Wait for Acknowlege
    // CLK to Zero
    palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_OUTPUT_PUSHPULL);
    palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_INPUT_PULLUP);
    bitDelay ();

    // CLK high
    palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_INPUT_PULLUP);
    bitDelay ();
    uint8_t ack = palReadPad(GPIOC, DIO_PIN);
    if(ack == 0)
        palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_OUTPUT_PUSHPULL);

    bitDelay ();
    palSetPadMode(GPIOC, CLK_PIN, PAL_MODE_OUTPUT_PUSHPULL);
    bitDelay();

    return ack;
}
Example #7
0
void TM1637Display::start()
{
  pinMode(m_pinDIO, OUTPUT);
  bitDelay();
}
void SegmentDisplayProtocol::stop(void)
{
    _pinData->setLow();     bitDelay();
    _pinClock->setHigh();   bitDelay();
    _pinData->setHigh();
}
/*
 * @fn      start
 * @brief   Generation of the start condition on the DIO bus.
 */
void start (void){
    palSetPadMode(GPIOC, DIO_PIN, PAL_MODE_OUTPUT_PUSHPULL);
    bitDelay();
}