Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Committer:
sNICKer1103
Date:
Sun May 04 20:41:10 2014 +0000
Revision:
4:a091b8f8216d
Parent:
3:da30c350c339
Child:
5:e4ed6c5baf89
Refactoring part 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sNICKer1103 2:f2700008c9d9 1 #include "SPIDriver.h"
sNICKer1103 2:f2700008c9d9 2 #include "mbed.h"
sNICKer1103 4:a091b8f8216d 3 #include "rtos.h"
sNICKer1103 2:f2700008c9d9 4
sNICKer1103 2:f2700008c9d9 5 SPIDriver::SPIDriver(PinName pin1, PinName pin2, PinName pin3, PinName latchpin, PinName cspin, const int freq) : spi(pin1, pin2, pin3){
sNICKer1103 2:f2700008c9d9 6 spi.format(8, 3);
sNICKer1103 2:f2700008c9d9 7 spi.frequency(freq);
sNICKer1103 2:f2700008c9d9 8
sNICKer1103 2:f2700008c9d9 9 latch = new DigitalOut(latchpin);
sNICKer1103 2:f2700008c9d9 10 cs = new DigitalOut(cspin);
sNICKer1103 2:f2700008c9d9 11
sNICKer1103 2:f2700008c9d9 12 *latch = 0;
sNICKer1103 2:f2700008c9d9 13 *cs = 1;
sNICKer1103 2:f2700008c9d9 14 }
sNICKer1103 2:f2700008c9d9 15
sNICKer1103 3:da30c350c339 16 SPIDriver::~SPIDriver(){
sNICKer1103 3:da30c350c339 17 }
sNICKer1103 3:da30c350c339 18
sNICKer1103 2:f2700008c9d9 19 void SPIDriver::write(uint8_t ledcolor){
sNICKer1103 2:f2700008c9d9 20 *cs = 0;
sNICKer1103 2:f2700008c9d9 21 spi.write(ledcolor);
sNICKer1103 2:f2700008c9d9 22 *cs = 1;
sNICKer1103 2:f2700008c9d9 23 }
sNICKer1103 2:f2700008c9d9 24
sNICKer1103 3:da30c350c339 25 void SPIDriver::reversedwrite(uint8_t ledcolor){
sNICKer1103 3:da30c350c339 26 *cs = 0;
sNICKer1103 3:da30c350c339 27 spi.write(reverse_byte(ledcolor));
sNICKer1103 3:da30c350c339 28 *cs = 1;
sNICKer1103 3:da30c350c339 29 }
sNICKer1103 3:da30c350c339 30
sNICKer1103 2:f2700008c9d9 31 void SPIDriver::pulseLatch(){
sNICKer1103 2:f2700008c9d9 32 *latch = 1;
sNICKer1103 2:f2700008c9d9 33 *latch = 0;
sNICKer1103 3:da30c350c339 34 }
sNICKer1103 3:da30c350c339 35
sNICKer1103 4:a091b8f8216d 36 void SPIDriver::sendLayer(LedCube* ledc){
sNICKer1103 4:a091b8f8216d 37 write(ledc->getNextValue()); //eerst laag selecteren, SPI zendt normaalgezien MSB first
sNICKer1103 4:a091b8f8216d 38 for(int j = 0; j < 24; j++) {
sNICKer1103 4:a091b8f8216d 39 write(ledc->getNextValue()); //ledwaarden zelf nog altijd apart, omdat ze mogelijk gespiegeld moeten doorgestuurd worden
sNICKer1103 4:a091b8f8216d 40 } //(LSB first)
sNICKer1103 4:a091b8f8216d 41 }
sNICKer1103 4:a091b8f8216d 42
sNICKer1103 3:da30c350c339 43 void SPIDriver::sendFrame(LedCube* ledc){
sNICKer1103 4:a091b8f8216d 44 for(int i = 0; i < 8; i++) {
sNICKer1103 3:da30c350c339 45 wait(0.00125); //voor 100 Hz
sNICKer1103 3:da30c350c339 46 pulseLatch();
sNICKer1103 3:da30c350c339 47 }//end outer for loop
sNICKer1103 4:a091b8f8216d 48 // printf("Frame gezonden!!\n\r");
sNICKer1103 3:da30c350c339 49 }
sNICKer1103 3:da30c350c339 50
sNICKer1103 3:da30c350c339 51 void SPIDriver::sendTest(LedCube* ledc, int frames){
sNICKer1103 3:da30c350c339 52 printf("Testing...\n\r");
sNICKer1103 3:da30c350c339 53 for(int i = 0; i < frames; i++) {
sNICKer1103 3:da30c350c339 54 sendFrame(ledc);
sNICKer1103 3:da30c350c339 55 }
sNICKer1103 3:da30c350c339 56 }
sNICKer1103 3:da30c350c339 57
sNICKer1103 3:da30c350c339 58 void SPIDriver::testPhase(int xframes){
sNICKer1103 3:da30c350c339 59 printf("Initiating Test phase\n\r");
sNICKer1103 3:da30c350c339 60
sNICKer1103 3:da30c350c339 61 LedCube* testledcube1 = new LedCube();
sNICKer1103 4:a091b8f8216d 62 testledcube1->testMode(LedCube::firsthalfwhite);
sNICKer1103 4:a091b8f8216d 63 sendTest(testledcube1, xframes);
sNICKer1103 3:da30c350c339 64
sNICKer1103 4:a091b8f8216d 65 LedCube* testledcube2 = new LedCube();
sNICKer1103 3:da30c350c339 66 testledcube2->testMode(LedCube::secondhalfwhite);
sNICKer1103 3:da30c350c339 67 sendTest(testledcube2, xframes);
sNICKer1103 3:da30c350c339 68
sNICKer1103 3:da30c350c339 69 printf("Test phase terminated!\n\r");
sNICKer1103 3:da30c350c339 70 }
sNICKer1103 3:da30c350c339 71
sNICKer1103 3:da30c350c339 72 uint8_t SPIDriver::reverse_byte(uint8_t byte)
sNICKer1103 3:da30c350c339 73 {
sNICKer1103 3:da30c350c339 74 return (__rbit(byte) >> 24) & 0xFF; // reverse a byte in a 32-bit value, and extract the byte
sNICKer1103 2:f2700008c9d9 75 }