Exercises the DAC on the STM32F303K8 NUCLEO32 BOARD

Dependencies:   mbed

Fork of Nucleo_FrequencyCounter_Timed by Sam Walsh

Committer:
EmbeddedSam
Date:
Wed Feb 24 12:33:26 2016 +0000
Revision:
1:85b1605ed4e0
working before trying to speed it up

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EmbeddedSam 1:85b1605ed4e0 1 #include "OneWire_Methods.h"
EmbeddedSam 1:85b1605ed4e0 2 #include "mbed.h"
EmbeddedSam 1:85b1605ed4e0 3
EmbeddedSam 1:85b1605ed4e0 4 //Peripherals and typedefs
EmbeddedSam 1:85b1605ed4e0 5 extern DigitalInOut one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 6
EmbeddedSam 1:85b1605ed4e0 7 unsigned char OneWire_ReadByte(void)
EmbeddedSam 1:85b1605ed4e0 8 {
EmbeddedSam 1:85b1605ed4e0 9 unsigned char result=0;
EmbeddedSam 1:85b1605ed4e0 10
EmbeddedSam 1:85b1605ed4e0 11 for (int i = 0; i < 8; i++){
EmbeddedSam 1:85b1605ed4e0 12 result >>= 1; // shift the result to get it ready for the next bit
EmbeddedSam 1:85b1605ed4e0 13 // if result is one, then set MS bit
EmbeddedSam 1:85b1605ed4e0 14 if (OneWire_ReadBit()){result |= 0x80;}
EmbeddedSam 1:85b1605ed4e0 15 }
EmbeddedSam 1:85b1605ed4e0 16 return result;
EmbeddedSam 1:85b1605ed4e0 17 }
EmbeddedSam 1:85b1605ed4e0 18
EmbeddedSam 1:85b1605ed4e0 19 void OneWire_WriteByte(unsigned char byte_to_write)
EmbeddedSam 1:85b1605ed4e0 20 {
EmbeddedSam 1:85b1605ed4e0 21 for (int i = 0; i<8; i++) // Loop to write each bit in the byte, LS-bit first
EmbeddedSam 1:85b1605ed4e0 22 {
EmbeddedSam 1:85b1605ed4e0 23 OneWire_WriteBit(byte_to_write & 0x01);
EmbeddedSam 1:85b1605ed4e0 24 byte_to_write >>= 1; // shift the data byte for the next bit
EmbeddedSam 1:85b1605ed4e0 25 }
EmbeddedSam 1:85b1605ed4e0 26 }
EmbeddedSam 1:85b1605ed4e0 27
EmbeddedSam 1:85b1605ed4e0 28 bool OneWire_ReadBit(void)
EmbeddedSam 1:85b1605ed4e0 29 {
EmbeddedSam 1:85b1605ed4e0 30 bool result;
EmbeddedSam 1:85b1605ed4e0 31 one_wire_pin.output();
EmbeddedSam 1:85b1605ed4e0 32 one_wire_pin = 0;
EmbeddedSam 1:85b1605ed4e0 33 OneWire_Delay('A');
EmbeddedSam 1:85b1605ed4e0 34 one_wire_pin.input();
EmbeddedSam 1:85b1605ed4e0 35 one_wire_pin.mode(PullUp);
EmbeddedSam 1:85b1605ed4e0 36 OneWire_Delay('E');
EmbeddedSam 1:85b1605ed4e0 37 result = one_wire_pin.read();
EmbeddedSam 1:85b1605ed4e0 38 OneWire_Delay('F');
EmbeddedSam 1:85b1605ed4e0 39 return result;
EmbeddedSam 1:85b1605ed4e0 40 }
EmbeddedSam 1:85b1605ed4e0 41
EmbeddedSam 1:85b1605ed4e0 42 void OneWire_WriteBit (bool bit_to_write){
EmbeddedSam 1:85b1605ed4e0 43
EmbeddedSam 1:85b1605ed4e0 44 if (bit_to_write == 1)
EmbeddedSam 1:85b1605ed4e0 45 {
EmbeddedSam 1:85b1605ed4e0 46 // Write '1' bit
EmbeddedSam 1:85b1605ed4e0 47 one_wire_pin.output();
EmbeddedSam 1:85b1605ed4e0 48 one_wire_pin = 0;
EmbeddedSam 1:85b1605ed4e0 49 OneWire_Delay('A');
EmbeddedSam 1:85b1605ed4e0 50 one_wire_pin.input();
EmbeddedSam 1:85b1605ed4e0 51 one_wire_pin.mode(PullUp);
EmbeddedSam 1:85b1605ed4e0 52 OneWire_Delay('B');
EmbeddedSam 1:85b1605ed4e0 53 }
EmbeddedSam 1:85b1605ed4e0 54 else
EmbeddedSam 1:85b1605ed4e0 55 {
EmbeddedSam 1:85b1605ed4e0 56 one_wire_pin.output();
EmbeddedSam 1:85b1605ed4e0 57 one_wire_pin = 0;
EmbeddedSam 1:85b1605ed4e0 58 OneWire_Delay('C');
EmbeddedSam 1:85b1605ed4e0 59 one_wire_pin.input();
EmbeddedSam 1:85b1605ed4e0 60 OneWire_Delay('D');
EmbeddedSam 1:85b1605ed4e0 61 }
EmbeddedSam 1:85b1605ed4e0 62 }
EmbeddedSam 1:85b1605ed4e0 63 bool OneWire_Reset (void)
EmbeddedSam 1:85b1605ed4e0 64 {
EmbeddedSam 1:85b1605ed4e0 65 //Checks whether there is a device connected, returns true or false
EmbeddedSam 1:85b1605ed4e0 66 //Debugging console output can be used if it is defined
EmbeddedSam 1:85b1605ed4e0 67 bool result = false;
EmbeddedSam 1:85b1605ed4e0 68 one_wire_pin.output();
EmbeddedSam 1:85b1605ed4e0 69 one_wire_pin.write(0); //Pull the line high
EmbeddedSam 1:85b1605ed4e0 70 OneWire_Delay('H');
EmbeddedSam 1:85b1605ed4e0 71 one_wire_pin.input();
EmbeddedSam 1:85b1605ed4e0 72 one_wire_pin.mode(PullUp);
EmbeddedSam 1:85b1605ed4e0 73 OneWire_Delay('I');
EmbeddedSam 1:85b1605ed4e0 74 if(one_wire_pin.read() == 0){ result = true;}
EmbeddedSam 1:85b1605ed4e0 75 OneWire_Delay('J');
EmbeddedSam 1:85b1605ed4e0 76 #ifdef Debugging
EmbeddedSam 1:85b1605ed4e0 77 pc.printf("\n\rResult from reset: %d",result);
EmbeddedSam 1:85b1605ed4e0 78 #endif
EmbeddedSam 1:85b1605ed4e0 79 return result;
EmbeddedSam 1:85b1605ed4e0 80 }
EmbeddedSam 1:85b1605ed4e0 81
EmbeddedSam 1:85b1605ed4e0 82 void OneWire_TestDelays(void)
EmbeddedSam 1:85b1605ed4e0 83 {
EmbeddedSam 1:85b1605ed4e0 84 //Cycles the output pin through all the delays so you
EmbeddedSam 1:85b1605ed4e0 85 //can see whether they are all the right timings.
EmbeddedSam 1:85b1605ed4e0 86 one_wire_pin.output();
EmbeddedSam 1:85b1605ed4e0 87 for(int i=0;i<6;i++){
EmbeddedSam 1:85b1605ed4e0 88 one_wire_pin = !one_wire_pin; //toggle the pin 6 times to signal start of test at 100us
EmbeddedSam 1:85b1605ed4e0 89 wait_us(100);
EmbeddedSam 1:85b1605ed4e0 90 }
EmbeddedSam 1:85b1605ed4e0 91 OneWire_Delay('A');
EmbeddedSam 1:85b1605ed4e0 92 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 93 OneWire_Delay('A');
EmbeddedSam 1:85b1605ed4e0 94 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 95
EmbeddedSam 1:85b1605ed4e0 96 OneWire_Delay('B');
EmbeddedSam 1:85b1605ed4e0 97 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 98 OneWire_Delay('B');
EmbeddedSam 1:85b1605ed4e0 99 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 100
EmbeddedSam 1:85b1605ed4e0 101 OneWire_Delay('C');
EmbeddedSam 1:85b1605ed4e0 102 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 103 OneWire_Delay('C');
EmbeddedSam 1:85b1605ed4e0 104 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 105
EmbeddedSam 1:85b1605ed4e0 106 OneWire_Delay('D');
EmbeddedSam 1:85b1605ed4e0 107 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 108 OneWire_Delay('D');
EmbeddedSam 1:85b1605ed4e0 109 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 110
EmbeddedSam 1:85b1605ed4e0 111 OneWire_Delay('E');
EmbeddedSam 1:85b1605ed4e0 112 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 113 OneWire_Delay('E');
EmbeddedSam 1:85b1605ed4e0 114 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 115
EmbeddedSam 1:85b1605ed4e0 116 OneWire_Delay('F');
EmbeddedSam 1:85b1605ed4e0 117 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 118 OneWire_Delay('F');
EmbeddedSam 1:85b1605ed4e0 119 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 120
EmbeddedSam 1:85b1605ed4e0 121 OneWire_Delay('G');
EmbeddedSam 1:85b1605ed4e0 122 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 123 OneWire_Delay('G');
EmbeddedSam 1:85b1605ed4e0 124 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 125
EmbeddedSam 1:85b1605ed4e0 126 OneWire_Delay('H');
EmbeddedSam 1:85b1605ed4e0 127 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 128 OneWire_Delay('H');
EmbeddedSam 1:85b1605ed4e0 129 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 130
EmbeddedSam 1:85b1605ed4e0 131
EmbeddedSam 1:85b1605ed4e0 132 OneWire_Delay('I');
EmbeddedSam 1:85b1605ed4e0 133 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 134 OneWire_Delay('I');
EmbeddedSam 1:85b1605ed4e0 135 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 136
EmbeddedSam 1:85b1605ed4e0 137 OneWire_Delay('J');
EmbeddedSam 1:85b1605ed4e0 138 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 139 OneWire_Delay('J');
EmbeddedSam 1:85b1605ed4e0 140 one_wire_pin = !one_wire_pin;
EmbeddedSam 1:85b1605ed4e0 141
EmbeddedSam 1:85b1605ed4e0 142 }
EmbeddedSam 1:85b1605ed4e0 143
EmbeddedSam 1:85b1605ed4e0 144 //Functions
EmbeddedSam 1:85b1605ed4e0 145 void OneWire_Delay(char letter)
EmbeddedSam 1:85b1605ed4e0 146 {
EmbeddedSam 1:85b1605ed4e0 147 //Recommended delays from Maxim (standard speed not overdrive)
EmbeddedSam 1:85b1605ed4e0 148 //https://www.maximintegrated.com/en/app-notes/index.mvp/id/126
EmbeddedSam 1:85b1605ed4e0 149
EmbeddedSam 1:85b1605ed4e0 150 //Letter Speed Recommended (µs)
EmbeddedSam 1:85b1605ed4e0 151 //A Standard 6
EmbeddedSam 1:85b1605ed4e0 152 //B Standard 64
EmbeddedSam 1:85b1605ed4e0 153 //C Standard 60
EmbeddedSam 1:85b1605ed4e0 154 //D Standard 10
EmbeddedSam 1:85b1605ed4e0 155 //E Standard 9
EmbeddedSam 1:85b1605ed4e0 156 //F Standard 55
EmbeddedSam 1:85b1605ed4e0 157 //G Standard 0
EmbeddedSam 1:85b1605ed4e0 158 //H Standard 480
EmbeddedSam 1:85b1605ed4e0 159 //I Standard 70
EmbeddedSam 1:85b1605ed4e0 160 //J Standard 410
EmbeddedSam 1:85b1605ed4e0 161 switch(letter)
EmbeddedSam 1:85b1605ed4e0 162 {
EmbeddedSam 1:85b1605ed4e0 163 case 'A': wait_us(1); break;
EmbeddedSam 1:85b1605ed4e0 164 case 'B': wait_us(64); break;
EmbeddedSam 1:85b1605ed4e0 165 case 'C': wait_us(60); break;
EmbeddedSam 1:85b1605ed4e0 166 case 'D': wait_us(10); break;
EmbeddedSam 1:85b1605ed4e0 167 case 'E': wait_us(5); break;
EmbeddedSam 1:85b1605ed4e0 168 case 'F': wait_us(55); break;
EmbeddedSam 1:85b1605ed4e0 169 case 'G': wait_us(0); break;
EmbeddedSam 1:85b1605ed4e0 170 case 'H': wait_us(480); break;
EmbeddedSam 1:85b1605ed4e0 171 case 'I': wait_us(70); break;
EmbeddedSam 1:85b1605ed4e0 172 case 'J': wait_us(410); break;
EmbeddedSam 1:85b1605ed4e0 173 default: break;
EmbeddedSam 1:85b1605ed4e0 174 }
EmbeddedSam 1:85b1605ed4e0 175 }