All pastes #2113162 Raw Edit

Unnamed

public text v1 · immutable
#2113162 ·published 2012-02-08 18:18 UTC
rendered paste body
#define F_CPU 25000000L
//includes
#include "Arduino.h"
extern "C" {
#include <math.h>
}


//

//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 20;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 15;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 17;

#define SCLK            BIT5
//#define CS              BIT5
#define MOSI            BIT7
#define MISO            BIT6

//#define CLKPORT P1OUT
#define LATPORT P2OUT
//#define DATPORT P1OUT
//#define CLKBIT  BIT1
#define LATBIT  BIT0
//#define DATBIT  BIT0

#define NumMatrixCols 4
//uint16_t LEDChannels[NumMatrixCols*8][3] = {0};

float offset = 0;

/*void SPI_write(uint8_t addr, uint8_t value)
{
    //P1OUT &= ~CS;

    UCA0TXBUF = addr;
    __bis_status_register(LPM4_bits|GIE);

    UCA0TXBUF = value;
    __bis_status_register(LPM4_bits|GIE);

    //P1OUT |= CS;
}*/

#define SPI_write(value) {\
    UCB0TXBUF = value;\
    __bis_status_register(LPM4_bits|GIE);\
}

void SPI_init() {
    P1SEL |= SCLK|MOSI|MISO;
    P1SEL2 |= SCLK|MOSI|MISO;
    
    UCB0CTL1 = UCSWRST;                                     /* Hold USCI */
    UCB0CTL0 = UCMST;                                       /* Master mode */
    UCB0CTL0 |= UCSYNC;                                     /* SPI mode? */
    UCB0CTL0 |= UCMSB;                                      /* MSB first */
    UCB0CTL0 |= UCCKPH;                                     /* Bit shiftout on rising edge, */

    UCB0CTL1 |= UCSSEL_2;                                   /* SMCLK */
    
    UCB0BR1 = 0;
    UCB0BR0 = 0;

    UCB0CTL1 &= ~UCSWRST;

    IE2 |= UCB0RXIE | UCB0TXIE;

    __eint();
}   

void setup() {
    SPI_init();

    //SPI_write(0x04, 0x00);                                  /* Shutdown */
    
    //set pins to output because they are addressed in the main loop
    pinMode(latchPin, OUTPUT);
    //pinMode(dataPin, OUTPUT);  
    //pinMode(clockPin, OUTPUT);
}




void display() {
    /*for (int numberToDisplay = 0; numberToDisplay < 8; numberToDisplay++) {
        for (int mat = 0; mat < NumMatrixCols; mat++) {
            LATPORT &= ~LATBIT;
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, MSBFIRST, 255);
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, MSBFIRST,  0);
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, MSBFIRST,  255);
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, LSBFIRST,  BITS[numberToDisplay]);
            LATPORT |= LATBIT;
            delayMicroseconds(10);
            LATPORT &= ~LATBIT;
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, MSBFIRST, 0);
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, MSBFIRST,  255);
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, MSBFIRST,  0);
            fastShiftOut(DATPORT, dataPin-10, clockPin-10, LSBFIRST,  BITS[numberToDisplay]);
            LATPORT |= LATBIT;
            delayMicroseconds(5);
        }
        //delay(1);
    }*/
    uint8_t mat = 0;
    for (int numberToDisplay = 0; numberToDisplay < 8; numberToDisplay++) {
        
        // R
        LATPORT &= ~LATBIT;
        for (mat = 0; mat < NumMatrixCols; mat++) {
            SPI_write(255);
            SPI_write(0);
            SPI_write(255);
            SPI_write(BITS[numberToDisplay]);
        }
        LATPORT |= LATBIT;
        delayMicroseconds(12);
        
        // B
        LATPORT &= ~LATBIT;
        for (mat = 0; mat < NumMatrixCols; mat++) {
            SPI_write(0);
            SPI_write(255);
            SPI_write(255);
            SPI_write(BITS[numberToDisplay]);
        }
        LATPORT |= LATBIT;
        delayMicroseconds(8);
        
        // G        
        LATPORT &= ~LATBIT;
        for (mat = 0; mat < NumMatrixCols; mat++) {
            SPI_write(255);
            SPI_write(255);
            SPI_write(0);
            SPI_write(BITS[numberToDisplay]);
        }
        LATPORT |= LATBIT;
        delayMicroseconds(7);
        //delay(1);
    }
}

interrupt(USCIAB0RX_VECTOR) ucarx_isr(void)
{
        IFG2 &= ~UCB0RXIFG;
        __bic_status_register_on_exit(LPM4_bits);
}
 
interrupt(USCIAB0TX_VECTOR) ucatx_isr(void)
{
        IFG2 &= ~UCB0TXIFG;
        __bic_status_register_on_exit(LPM4_bits);
}

void loop() {
  // count from 0 to 255 and display the number 
  // on the LEDs
  display();
}