Created
November 23, 2016 22:27
-
-
Save pingud98/39db1cb81ef7769f16c9ea696ab09818 to your computer and use it in GitHub Desktop.
Use to profile the voltage range from the CosmicPi BIAS psu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Cosmic Pi Power supply open loop controller | |
//sets a value to the PSU and then increments it every n seconds. | |
//MAX1923 chip, with the following resistor values for feedback: | |
//R6 = 25k | |
//R5 = 200k | |
//R8 = 10k | |
//the old routine has been amended to fix the endian type (now correct) | |
//Default power up value is FF | |
//readback isn't supported and there's no external or integral temp feedback | |
//Pin 42 needs to be manually modified for the connection on V2 Alpha main boards | |
//Set the initial value | |
//reduce the value by 1 every 10 seconds | |
//voltage ramps slowly up to maximum (about 36V) and then rolls over | |
//note that 00 = DC/DC step up power off - i.e. no value output, input rail. | |
//The MAX1932 is powered from the 5V rail and accepts commands at 3.3V without problems. | |
//set up the pins to remap SPI by hand | |
const int SS_pin = 42; //tbc | |
const int SCK_pin = 44; | |
const int MISO_pin = 22; | |
const int MOSI_pin = 43; | |
//Define the sending variable | |
byte sendValue = 0xFF; // Value we are going to send | |
byte returnValue = 0; // Where we will store the value sent by the slave | |
String intextbuf; | |
String extextbuf; | |
void setup() | |
{ | |
Serial.setTimeout(6000); | |
digitalWrite(SS, HIGH); // Start with SS high | |
pinMode(SS_pin, OUTPUT); | |
pinMode(SCK_pin, OUTPUT); | |
pinMode(MISO_pin, INPUT); //this is the avalanche pin, not implemented yet | |
pinMode(MOSI_pin, OUTPUT); | |
Serial.begin(9600); | |
Serial.println("Max1932 calibration curve programme"); | |
Serial.print("Cosmic Pi Serial Number:"); | |
intextbuf = Serial.readString(); | |
Serial.println(intextbuf); | |
Serial.println("Starting Voltage calibration"); | |
sendValue = 0xFF; | |
returnValue = bitBang(sendValue); // Transmit data | |
} | |
void loop() | |
{ | |
//write the value to console | |
//send the value | |
//decrement the variable and wait 10s before looping | |
Serial.print("Hex value:"); | |
Serial.print(sendValue, HEX); | |
returnValue = bitBang(sendValue); // Transmit data | |
extextbuf = Serial.readString(); | |
Serial.print(", Measured Voltage: "); | |
Serial.print(extextbuf); | |
Serial.println(';'); | |
sendValue = sendValue-16; | |
//delay(10000); | |
} | |
byte bitBang(byte _send) // This function is what bitbangs the data | |
{ | |
//reception isn't implemented in this version. | |
byte _receive = 0; | |
digitalWrite(SS_pin, LOW); // SS low | |
for(int i=0; i<8; i++) // There are 8 bits in a byte | |
{ | |
digitalWrite(MOSI_pin, bitRead(_send, 7-i)); // Set MOSI | |
//delay(1); | |
digitalWrite(SCK_pin, HIGH); // SCK high | |
//bitWrite(_receive, i, digitalRead(MISO_pin)); // Capture MISO | |
digitalWrite(SCK_pin, LOW); // SCK low | |
//digitalWrite(MOSI_pin, LOW); // Set MOSI | |
} | |
digitalWrite(SS_pin, HIGH); // SS high again | |
//return _receive; // Return the received data | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment