Brian Kechel / Mbed 2 deprecated eliminator

Dependencies:   mbed

main.cpp

Committer:
kechbs
Date:
2019-05-09
Revision:
1:009c799bb5d1
Parent:
0:1d2b7ae1269a

File content as of revision 1:009c799bb5d1:

#include "main.h"
#include <mbed.h>
#include "charmap.h"
#include "stm32f70rb.h"

#define USE_PLL_HSE_XTAL (1) /* Use external xtal */

#define DIGIT_CONTROLLER_ID 0xA8
#define SLEEP_INTERVAL 0.003f

#define D_ON 0x3F
#define DISPLAYTIMEOUT 5

DigitalInOut shutdown(PB_7,PIN_OUTPUT,PullNone,1);              

DigitalInOut dig_1(PB_4,PIN_OUTPUT,OpenDrain,1);
DigitalInOut dig_2(PB_5,PIN_OUTPUT,OpenDrain,1);
DigitalInOut dig_3(PB_6,PIN_OUTPUT,OpenDrain,1);
I2C digit_driver(PB_9, PB_8);

//SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk
SPISlave device(PA_7, PA_6, PA_5, PA_15);
//DigitalOut cs(PA_15);  //should be cs but seems to be CE_E maybe mislabel
int spiDATA[4];



int main()
{ 
    //RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    //RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    //RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    //RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    
    digit_driver.frequency(400000);
    
    char shutdown_reg[2];
    shutdown_reg[0] = 0x00;    
    shutdown_reg[1] = 0x01; 
    
    //Command to 
    char updateI2C[2];
    updateI2C[0] = 0x16;
    updateI2C[1] = 0xFF;
    
    //*************** CH 1-6 ENABLE BITS ***************************************
    char ledBank1[2];
    ledBank1[0]=0x13;
    ledBank1[1]=0xff;
    //*************** CH 7-12 ENABLE BITS **************************************
    char ledBank2[2];
    ledBank2[0]=0x14;
    ledBank2[1]=0xff;
    //*************** CH 13-18 ENABLE BITS *************************************
    char ledBank3[2];
    ledBank3[0]=0x15;
    ledBank3[1]=0xff;
    
    //Init programmable registers
    shutdown = 1;
    digit_driver.write(DIGIT_CONTROLLER_ID, shutdown_reg, 2);
    wait(0.3); 

    //************** SET BRIGHTNESS FOR ALL SEGMENTS ***************************
    //If changed, must also modify segValDisp
    char pwmData1[2];
    pwmData1[0]=0x01;
    pwmData1[1]=0xFF;
    
    //******************* PWM FOR ALL BITS FOR REFRESH *************************
    for (pwmData1[0]=0x01; pwmData1[0] < 0x13; pwmData1[0]++){
        digit_driver.write(DIGIT_CONTROLLER_ID, pwmData1,2);
    }
    wait(0.1);
    //********* SETUP LCD INPUTS FOR ALL BITS **********************************
    digit_driver.write(DIGIT_CONTROLLER_ID, ledBank1,2);          
    digit_driver.write(DIGIT_CONTROLLER_ID, ledBank2,2);  
    digit_driver.write(DIGIT_CONTROLLER_ID, ledBank3,2);
    digit_driver.write(DIGIT_CONTROLLER_ID, updateI2C,2); 
    digit_driver.write(DIGIT_CONTROLLER_ID, shutdown_reg, 2);       
    wait(0.1);
    
    device.frequency(976000);
    device.reply(0x00);
    
    int blinkRate = 50;
    
    //***********  70 seccond count for PI Modual boot time ********************
    for (int j = 7; j >= 0; j--) {
        for (int i = 9; i >= 0; i--) {
            for (int x = 0; x <= 250; x++){
                segValDisplay(j, 3);
                segValDisplay(i, 2);
                wait(0.001);
            }
        } 
    }
    //**************************************************************************    
    
    while(1) {
        //Check if data exists on SPI BUSS 
        if(device.receive()) {
            //Save both bytes of data
            for (int i = 0; i < 2; i++) {
                spiDATA[i] = device.read();
            }
            
        }
        //spiDATA[1] = 1;
        //Check if LCD should blink data and set time accordingly
        if (spiDATA[1] == 0){
            blinkRate--;    
        }else{
            blinkRate = 50;
        }
        
        //Loop display for 5 cycles to minimize flicker before checking
        //SPI BUSS
        for(int i = 0; i < 4; i++) {
            if (spiDATA[0] == 0) { // || blinkRate > 150)
                dig_1 = 1; dig_2 = 1; dig_3 = 1;
            }else{
                segValDisplay(spiDATA[0] ,1);
                segValDisplay(18, 2);
                segValDisplay(13, 3);
            }
            if (blinkRate <= 25) {
                dig_1 = 1; dig_2 = 1; dig_3 = 1;
                segValDisplay(-1 ,1);
                segValDisplay(-1, 2);
                segValDisplay(-1, 3);   
            }        
        } 
        
        if (blinkRate < 0){blinkRate = 50;}          
    }
}

void segValDisplay (int val, int dispNum) {
    //Turn off all illumination for refresh
    if (dispNum == 1 || dispNum == 2 || dispNum == 3){dig_1 = 1;dig_2 = 1;dig_3 = 1;}
    
    uint8_t GraphicSeg[4];
    char updateI2C[2];
    updateI2C[0] = 0x16;
    updateI2C[1] = 0xFF;
    //get charmap for chosen val 
    GraphicSeg[0] = 0x13;
    GraphicSeg[1] = SegTable[1 + val][2];
    GraphicSeg[2] = SegTable[1 + val][1];
    GraphicSeg[3] = SegTable[1 + val][0]; 
    digit_driver.write(DIGIT_CONTROLLER_ID, (char *)GraphicSeg, 4);
    digit_driver.write(DIGIT_CONTROLLER_ID, updateI2C, 2);
    //turn on current digit leaving un-refreshed digits off
    if (dispNum == 1){dig_1 = 0;dig_2 = 1;dig_3 = 1;}
    if (dispNum == 2){dig_1 = 1;dig_2 = 0;dig_3 = 1;}
    if (dispNum == 3){dig_1 = 1;dig_2 = 1;dig_3 = 0;}
    
    wait(0.001);
        
}