From 18859ff51a7bd30f819304318f47408bcf7b1b74 Mon Sep 17 00:00:00 2001 From: James Devine Date: Wed, 23 Nov 2016 23:27:47 +0100 Subject: [PATCH] --- CosmicPiPSUProfiler | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 CosmicPiPSUProfiler diff --git a/CosmicPiPSUProfiler b/CosmicPiPSUProfiler new file mode 100644 index 0000000..21e4cb9 --- /dev/null +++ b/CosmicPiPSUProfiler @@ -0,0 +1,92 @@ +//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 +} \ No newline at end of file