Trying to shift out from ATtiny85 to a shift register using the USI in SPI mode. I have Timer 0 running as slowly as possible (checked it was running by temporarily changing it to toggle a pin with an LED attached.) I have LEDs hooked up to USCK and DO so by rights I should be able to see them blinking as it sends.

What else do I need to do in order to get it shifting out in sync with Timer 0? All the examples I've looked at so far strobe the USI clock manually.

#include <avr/io.h>

int main(void){
    DDRB = (1 << DDB2) | (1 << DDB1); // USCK & DO Output
    DDRB &= ~(1 << DDB0); // DI Input
    PORTB |= (1 << DDB0); // Pullup Resistor for DI

    TCCR0A = (1 << WGM01); // Timer 0 in CTC Mode
    OCR0A = 0xFF; // Timer 0 Compare A
    TCCR0B = (1 << CS02) | (1 << CS00); // Prescaler / 1024

    USICR = (1 << USIWM0); // USI 3 Wire Mode
    USICR |= (1 << USICS0); // Timer 0 for USI 4-bit Clock Source

    USIDR = 0x7F; // Why you no go? :c

    USISR |= 0x08; // Set Counter to 8
    USISR = (1 << USIOIF); // Clear Counter Overflow

    return 0;
  • I think it should be: USISR = _BV(USIOIF); – Mikael Patel Dec 3 '15 at 14:30
  • This is a good question, but not related to Arduino. I think you could re-ask it on Electric Engineering stack exchange. – bigjosh Dec 3 '15 at 14:36
  • "This flag is set (one) when the 4-bit counter overflows (i.e., at the transition from 15 to 0). If the USIOIE bit in USICR and the Global Interrupt Enable Flag are set an interrupt will also be generated when the flag is set. The flag will only be cleared if a one is written to the USIOIF bit. Clearing this bit will release the counter overflow hold of SCL in two-wire mode." So it's set when it overflows and you clear it by setting it? What the f- Atmel. :I – Ashlyn Black Dec 3 '15 at 19:42
  • Yepp, you have to think as the hardware guys do :) – Mikael Patel Dec 3 '15 at 20:09
  • Still doesn't work. :c I've resorted to strobing it manually for now. – Ashlyn Black Dec 4 '15 at 10:59

Did you forget to load the counter and clear flags in USISR?

  • It still isn't doing anything (updated code snippet.) – Ashlyn Black Dec 3 '15 at 14:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.