Libs for using Nucleo STM32F411 periphery
Introduction
Descruption: This lib uses the hardware peripherie from STM32F411 under serveral conditions. So you can use an quadraturencoder with different timers.
Requirement: Only tested with the nucleo F411. Include the mbed lib! Interfacing details are explained in the documentary of each class.
Overview
- timer modules
- Quadratur Encoder (Version 1.2 - C. Hoyer 12.8.2015)
- SPI modules
- AD5664 (Version 1.1 - C. Hoyer 23.7.2015)
- software modules
- Ringbuffer (Version 0.9 - C. Hoyer 18.8.2015)
- PID-Regler (Version 1.0 - C. Hoyer 17.9.2015)
SPI/AD5664.cpp@0:1acdcc576936, 2016-11-28 (annotated)
- Committer:
- ChrisselH
- Date:
- Mon Nov 28 17:27:43 2016 +0000
- Revision:
- 0:1acdcc576936
port from priv lib
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ChrisselH | 0:1acdcc576936 | 1 | #include "mbed.h" |
ChrisselH | 0:1acdcc576936 | 2 | #include "AD5664.h" |
ChrisselH | 0:1acdcc576936 | 3 | |
ChrisselH | 0:1acdcc576936 | 4 | //==================================================================================================================================== |
ChrisselH | 0:1acdcc576936 | 5 | // Grundlagen, DAC Schreiben und Initialisieren |
ChrisselH | 0:1acdcc576936 | 6 | //==================================================================================================================================== |
ChrisselH | 0:1acdcc576936 | 7 | |
ChrisselH | 0:1acdcc576936 | 8 | AD5664::AD5664(SPI _spi, PinName _daccs): spi(_spi), daccs(_daccs) |
ChrisselH | 0:1acdcc576936 | 9 | { |
ChrisselH | 0:1acdcc576936 | 10 | sendDAC(0x2F, 0x00, 0x00); //Software Reset, alle Ausgänge auf 0 |
ChrisselH | 0:1acdcc576936 | 11 | } |
ChrisselH | 0:1acdcc576936 | 12 | |
ChrisselH | 0:1acdcc576936 | 13 | |
ChrisselH | 0:1acdcc576936 | 14 | void AD5664::sendDAC(int instruction = 0x00, int data1 = 0x00, int data2 = 0x00) |
ChrisselH | 0:1acdcc576936 | 15 | { |
ChrisselH | 0:1acdcc576936 | 16 | daccs = 0; // Select Device |
ChrisselH | 0:1acdcc576936 | 17 | |
ChrisselH | 0:1acdcc576936 | 18 | spi.write(instruction); // Schreibt entsprechend die Anweisung und die Adresse |
ChrisselH | 0:1acdcc576936 | 19 | spi.write(data1); // Schreibt den ersten Byte an Daten |
ChrisselH | 0:1acdcc576936 | 20 | spi.write(data2); // Schreibt den zweiten Byte an Daten |
ChrisselH | 0:1acdcc576936 | 21 | |
ChrisselH | 0:1acdcc576936 | 22 | daccs = 1; // Deselect |
ChrisselH | 0:1acdcc576936 | 23 | } |
ChrisselH | 0:1acdcc576936 | 24 | |
ChrisselH | 0:1acdcc576936 | 25 | //==================================================================================================================================== |
ChrisselH | 0:1acdcc576936 | 26 | // Setter-Funktionen |
ChrisselH | 0:1acdcc576936 | 27 | //==================================================================================================================================== |
ChrisselH | 0:1acdcc576936 | 28 | |
ChrisselH | 0:1acdcc576936 | 29 | void AD5664::SelectCS() |
ChrisselH | 0:1acdcc576936 | 30 | { daccs = 0; // Select Device |
ChrisselH | 0:1acdcc576936 | 31 | } |
ChrisselH | 0:1acdcc576936 | 32 | |
ChrisselH | 0:1acdcc576936 | 33 | void AD5664::DeselectCS() |
ChrisselH | 0:1acdcc576936 | 34 | { daccs = 1; // Deselect |
ChrisselH | 0:1acdcc576936 | 35 | } |
ChrisselH | 0:1acdcc576936 | 36 | |
ChrisselH | 0:1acdcc576936 | 37 | void AD5664::writeDAC(char channel, int value) |
ChrisselH | 0:1acdcc576936 | 38 | { |
ChrisselH | 0:1acdcc576936 | 39 | int choch = 0x00; //Temporäre Variable um die Instructions zu übernehmen |
ChrisselH | 0:1acdcc576936 | 40 | |
ChrisselH | 0:1acdcc576936 | 41 | switch(channel){ |
ChrisselH | 0:1acdcc576936 | 42 | case 'A': // DAC A |
ChrisselH | 0:1acdcc576936 | 43 | choch = 0x18; |
ChrisselH | 0:1acdcc576936 | 44 | break; |
ChrisselH | 0:1acdcc576936 | 45 | |
ChrisselH | 0:1acdcc576936 | 46 | case 'B': // DAC B |
ChrisselH | 0:1acdcc576936 | 47 | choch = 0x19; |
ChrisselH | 0:1acdcc576936 | 48 | break; |
ChrisselH | 0:1acdcc576936 | 49 | |
ChrisselH | 0:1acdcc576936 | 50 | case 'C': // DAC C |
ChrisselH | 0:1acdcc576936 | 51 | choch = 0x1A; |
ChrisselH | 0:1acdcc576936 | 52 | break; |
ChrisselH | 0:1acdcc576936 | 53 | |
ChrisselH | 0:1acdcc576936 | 54 | case 'D': // DAC D |
ChrisselH | 0:1acdcc576936 | 55 | choch = 0x1B; |
ChrisselH | 0:1acdcc576936 | 56 | break; |
ChrisselH | 0:1acdcc576936 | 57 | |
ChrisselH | 0:1acdcc576936 | 58 | case 'F': // Alle Dacs |
ChrisselH | 0:1acdcc576936 | 59 | choch = 0x1F; |
ChrisselH | 0:1acdcc576936 | 60 | break; |
ChrisselH | 0:1acdcc576936 | 61 | |
ChrisselH | 0:1acdcc576936 | 62 | default: |
ChrisselH | 0:1acdcc576936 | 63 | choch = 0x1F; // Alle Dacs |
ChrisselH | 0:1acdcc576936 | 64 | } |
ChrisselH | 0:1acdcc576936 | 65 | |
ChrisselH | 0:1acdcc576936 | 66 | sendDAC(choch, *((uint8_t*)&(value)+1), *((uint8_t*)&(value)+0)); //Schreibe via SPI: Anweisung mit Adresse, oberes Byte, unteres Byte) |
ChrisselH | 0:1acdcc576936 | 67 | |
ChrisselH | 0:1acdcc576936 | 68 | } |
ChrisselH | 0:1acdcc576936 | 69 | |
ChrisselH | 0:1acdcc576936 | 70 | |
ChrisselH | 0:1acdcc576936 | 71 | |
ChrisselH | 0:1acdcc576936 | 72 | void AD5664::loadDAC(char channel, int value) |
ChrisselH | 0:1acdcc576936 | 73 | { |
ChrisselH | 0:1acdcc576936 | 74 | int choch = 0x00; //Temporäre Variable um die Instructions zu übernehmen |
ChrisselH | 0:1acdcc576936 | 75 | |
ChrisselH | 0:1acdcc576936 | 76 | switch(channel){ |
ChrisselH | 0:1acdcc576936 | 77 | case 'A': // DAC A |
ChrisselH | 0:1acdcc576936 | 78 | choch = 0x00; |
ChrisselH | 0:1acdcc576936 | 79 | break; |
ChrisselH | 0:1acdcc576936 | 80 | |
ChrisselH | 0:1acdcc576936 | 81 | case 'B': // DAC B |
ChrisselH | 0:1acdcc576936 | 82 | choch = 0x01; |
ChrisselH | 0:1acdcc576936 | 83 | break; |
ChrisselH | 0:1acdcc576936 | 84 | |
ChrisselH | 0:1acdcc576936 | 85 | case 'C': // DAC C |
ChrisselH | 0:1acdcc576936 | 86 | choch = 0x02; |
ChrisselH | 0:1acdcc576936 | 87 | break; |
ChrisselH | 0:1acdcc576936 | 88 | |
ChrisselH | 0:1acdcc576936 | 89 | case 'D': // DAC D |
ChrisselH | 0:1acdcc576936 | 90 | choch = 0x03; |
ChrisselH | 0:1acdcc576936 | 91 | break; |
ChrisselH | 0:1acdcc576936 | 92 | |
ChrisselH | 0:1acdcc576936 | 93 | case 'F': // Alle Dacs |
ChrisselH | 0:1acdcc576936 | 94 | choch = 0x07; |
ChrisselH | 0:1acdcc576936 | 95 | break; |
ChrisselH | 0:1acdcc576936 | 96 | |
ChrisselH | 0:1acdcc576936 | 97 | default: |
ChrisselH | 0:1acdcc576936 | 98 | choch = 0x07; // Alle Dacs |
ChrisselH | 0:1acdcc576936 | 99 | } |
ChrisselH | 0:1acdcc576936 | 100 | |
ChrisselH | 0:1acdcc576936 | 101 | sendDAC(choch, *((uint8_t*)&(value)+1), *((uint8_t*)&(value)+0)); //Schreibe via SPI: Anweisung mit Adresse, oberes Byte, unteres Byte) |
ChrisselH | 0:1acdcc576936 | 102 | |
ChrisselH | 0:1acdcc576936 | 103 | } |
ChrisselH | 0:1acdcc576936 | 104 | |
ChrisselH | 0:1acdcc576936 | 105 | |
ChrisselH | 0:1acdcc576936 | 106 | void AD5664::updateDAC(char channel) |
ChrisselH | 0:1acdcc576936 | 107 | { |
ChrisselH | 0:1acdcc576936 | 108 | int choch = 0x00; //Temporäre Variable um die Instructions zu übernehmen |
ChrisselH | 0:1acdcc576936 | 109 | |
ChrisselH | 0:1acdcc576936 | 110 | switch(channel){ |
ChrisselH | 0:1acdcc576936 | 111 | case 'A': // DAC A |
ChrisselH | 0:1acdcc576936 | 112 | choch = 0x08; |
ChrisselH | 0:1acdcc576936 | 113 | break; |
ChrisselH | 0:1acdcc576936 | 114 | |
ChrisselH | 0:1acdcc576936 | 115 | case 'B': // DAC B |
ChrisselH | 0:1acdcc576936 | 116 | choch = 0x09; |
ChrisselH | 0:1acdcc576936 | 117 | break; |
ChrisselH | 0:1acdcc576936 | 118 | |
ChrisselH | 0:1acdcc576936 | 119 | case 'C': // DAC C |
ChrisselH | 0:1acdcc576936 | 120 | choch = 0x0A; |
ChrisselH | 0:1acdcc576936 | 121 | break; |
ChrisselH | 0:1acdcc576936 | 122 | |
ChrisselH | 0:1acdcc576936 | 123 | case 'D': // DAC D |
ChrisselH | 0:1acdcc576936 | 124 | choch = 0x0B; |
ChrisselH | 0:1acdcc576936 | 125 | break; |
ChrisselH | 0:1acdcc576936 | 126 | |
ChrisselH | 0:1acdcc576936 | 127 | case 'F': // Alle Dacs |
ChrisselH | 0:1acdcc576936 | 128 | choch = 0x0F; |
ChrisselH | 0:1acdcc576936 | 129 | break; |
ChrisselH | 0:1acdcc576936 | 130 | |
ChrisselH | 0:1acdcc576936 | 131 | default: |
ChrisselH | 0:1acdcc576936 | 132 | choch = 0x0F; // Alle Dacs |
ChrisselH | 0:1acdcc576936 | 133 | } |
ChrisselH | 0:1acdcc576936 | 134 | |
ChrisselH | 0:1acdcc576936 | 135 | sendDAC(choch, 0x00 , 0x00); //Schreibe via SPI: Anweisung mit Adresse, oberes Byte, unteres Byte) |
ChrisselH | 0:1acdcc576936 | 136 | |
ChrisselH | 0:1acdcc576936 | 137 | } |