Board Basis für Auftrag

Dependencies:   mbed

Committer:
rogerzuber
Date:
Fri Sep 10 08:19:02 2021 +0000
Revision:
2:78dd1100a67b
Board Beispiel Zuber

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rogerzuber 2:78dd1100a67b 1 /*
rogerzuber 2:78dd1100a67b 2 * Copyright 2015 Benjamin R. Moeklegaard
rogerzuber 2:78dd1100a67b 3 *
rogerzuber 2:78dd1100a67b 4 * Licensed under the Apache License, Version 2.0 (the "License");
rogerzuber 2:78dd1100a67b 5 * you may not use this file except in compliance with the License.
rogerzuber 2:78dd1100a67b 6 * You may obtain a copy of the License at
rogerzuber 2:78dd1100a67b 7 *
rogerzuber 2:78dd1100a67b 8 * http://www.apache.org/licenses/LICENSE-2.0
rogerzuber 2:78dd1100a67b 9 *
rogerzuber 2:78dd1100a67b 10 * Unless required by applicable law or agreed to in writing, software
rogerzuber 2:78dd1100a67b 11 * distributed under the License is distributed on an "AS IS" BASIS,
rogerzuber 2:78dd1100a67b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rogerzuber 2:78dd1100a67b 13 * See the License for the specific language governing permissions and
rogerzuber 2:78dd1100a67b 14 * limitations under the License.
rogerzuber 2:78dd1100a67b 15 */
rogerzuber 2:78dd1100a67b 16
rogerzuber 2:78dd1100a67b 17 #ifndef SHIFT_H
rogerzuber 2:78dd1100a67b 18 #define SHIFT_H
rogerzuber 2:78dd1100a67b 19
rogerzuber 2:78dd1100a67b 20 //Constant for managing n-numbers of registers, Function supported (writeByte, writeBit, writeBitAtPos)
rogerzuber 2:78dd1100a67b 21 #define REGISTER_CNT 2
rogerzuber 2:78dd1100a67b 22 /**
rogerzuber 2:78dd1100a67b 23 * This is a library for easy interfacing with the SN74HC595N 8-bit Shift Register.
rogerzuber 2:78dd1100a67b 24 * The library includes functions for writing bits, bytes and animation array to the register.
rogerzuber 2:78dd1100a67b 25 * The Functions are mainly based for writting 8-bits or one byte and can be moddified to work
rogerzuber 2:78dd1100a67b 26 * with multiple shift registers.
rogerzuber 2:78dd1100a67b 27 *@code
rogerzuber 2:78dd1100a67b 28 * #include "mbed.h"
rogerzuber 2:78dd1100a67b 29 * #include "ShiftOut.h"
rogerzuber 2:78dd1100a67b 30 * ShiftOut reg(PA_8, PA_9, PC_7, PB_6, D1);
rogerzuber 2:78dd1100a67b 31 *
rogerzuber 2:78dd1100a67b 32 * int main(){
rogerzuber 2:78dd1100a67b 33 * while(1){
rogerzuber 2:78dd1100a67b 34 * reg.writeBitAtPos(3, 1);
rogerzuber 2:78dd1100a67b 35 * wait(2);
rogerzuber 2:78dd1100a67b 36 * reg.writeByte(0x30);
rogerzuber 2:78dd1100a67b 37 * wait(2);
rogerzuber 2:78dd1100a67b 38 * }
rogerzuber 2:78dd1100a67b 39 * }@endcode
rogerzuber 2:78dd1100a67b 40 */
rogerzuber 2:78dd1100a67b 41
rogerzuber 2:78dd1100a67b 42 class ShiftOut
rogerzuber 2:78dd1100a67b 43 {
rogerzuber 2:78dd1100a67b 44 public:
rogerzuber 2:78dd1100a67b 45
rogerzuber 2:78dd1100a67b 46 /** Create a ShiftOut interface
rogerzuber 2:78dd1100a67b 47 *
rogerzuber 2:78dd1100a67b 48 * @param ser Serial data line
rogerzuber 2:78dd1100a67b 49 * @param srclk Data register clock
rogerzuber 2:78dd1100a67b 50 * @param rclk Output register clock
rogerzuber 2:78dd1100a67b 51 * @param oe Output enable (Active Low)
rogerzuber 2:78dd1100a67b 52 * @param reset Reset line for data register (Active Low)
rogerzuber 2:78dd1100a67b 53 * Writing Byte Example:
rogerzuber 2:78dd1100a67b 54 * @code
rogerzuber 2:78dd1100a67b 55 * #include "mbed.h"
rogerzuber 2:78dd1100a67b 56 * #include "ShiftOut.h"
rogerzuber 2:78dd1100a67b 57 *
rogerzuber 2:78dd1100a67b 58 * ShiftOut reg(PA_8, PA_9, PC_7, PB_6, D1);
rogerzuber 2:78dd1100a67b 59 * int main()
rogerzuber 2:78dd1100a67b 60 * {
rogerzuber 2:78dd1100a67b 61 * reg.writeByte(0x00); //Writes each bit to the SN74HC595N
rogerzuber 2:78dd1100a67b 62 * while(1) {
rogerzuber 2:78dd1100a67b 63 * wait_ms(300);
rogerzuber 2:78dd1100a67b 64 * }
rogerzuber 2:78dd1100a67b 65 * }
rogerzuber 2:78dd1100a67b 66 * @endcode
rogerzuber 2:78dd1100a67b 67 */
rogerzuber 2:78dd1100a67b 68
rogerzuber 2:78dd1100a67b 69
rogerzuber 2:78dd1100a67b 70 ShiftOut(PinName ser, PinName srclk, PinName rclk,
rogerzuber 2:78dd1100a67b 71 PinName oe, PinName reset);
rogerzuber 2:78dd1100a67b 72
rogerzuber 2:78dd1100a67b 73 /**
rogerzuber 2:78dd1100a67b 74 * Writes a byte to the shift register
rogerzuber 2:78dd1100a67b 75 * @param byte 0xXX or numbers from 0-255
rogerzuber 2:78dd1100a67b 76 */
rogerzuber 2:78dd1100a67b 77 void writeByte(unsigned char);
rogerzuber 2:78dd1100a67b 78
rogerzuber 2:78dd1100a67b 79 void write2Byte(unsigned int);
rogerzuber 2:78dd1100a67b 80
rogerzuber 2:78dd1100a67b 81
rogerzuber 2:78dd1100a67b 82 /**
rogerzuber 2:78dd1100a67b 83 * Writes a bit to the first output on the shift register
rogerzuber 2:78dd1100a67b 84 * @param bit 0 or 1
rogerzuber 2:78dd1100a67b 85 */
rogerzuber 2:78dd1100a67b 86
rogerzuber 2:78dd1100a67b 87 void writeBit(unsigned char);
rogerzuber 2:78dd1100a67b 88
rogerzuber 2:78dd1100a67b 89 /**
rogerzuber 2:78dd1100a67b 90 * Writes bits from an 2D array, with configurable delay
rogerzuber 2:78dd1100a67b 91 * @param int array, int lines, int delay_ms
rogerzuber 2:78dd1100a67b 92 * writes a 2D array with n-lines with a configurable delay in ms
rogerzuber 2:78dd1100a67b 93 * @code
rogerzuber 2:78dd1100a67b 94 * #include "mbed.h"
rogerzuber 2:78dd1100a67b 95 * #include "ShiftOut.h"
rogerzuber 2:78dd1100a67b 96 * ShiftOut reg(PA_8, PA_9, PC_7, PB_6, D1);
rogerzuber 2:78dd1100a67b 97 *
rogerzuber 2:78dd1100a67b 98 * int main(){
rogerzuber 2:78dd1100a67b 99 * int strobe[][8]= {{1,0,0,0,0,0,0,0},
rogerzuber 2:78dd1100a67b 100 * {0,1,0,0,0,0,0,0},
rogerzuber 2:78dd1100a67b 101 * {0,0,1,0,0,0,0,0},
rogerzuber 2:78dd1100a67b 102 * {0,0,0,1,0,0,0,0},
rogerzuber 2:78dd1100a67b 103 * {0,0,0,0,1,0,0,0},
rogerzuber 2:78dd1100a67b 104 * {0,0,0,0,0,1,0,0},
rogerzuber 2:78dd1100a67b 105 * {0,0,0,0,0,0,1,0},
rogerzuber 2:78dd1100a67b 106 * {0,0,0,0,0,0,0,1}};
rogerzuber 2:78dd1100a67b 107 * while(1){
rogerzuber 2:78dd1100a67b 108 * reg.animate(strobe, 8, 200);
rogerzuber 2:78dd1100a67b 109 * }
rogerzuber 2:78dd1100a67b 110 * }
rogerzuber 2:78dd1100a67b 111 * @endcode
rogerzuber 2:78dd1100a67b 112 */
rogerzuber 2:78dd1100a67b 113
rogerzuber 2:78dd1100a67b 114 void animate(int[][8], int, int);
rogerzuber 2:78dd1100a67b 115
rogerzuber 2:78dd1100a67b 116 /**
rogerzuber 2:78dd1100a67b 117 * Demonstrates two animation examples by using the animate function
rogerzuber 2:78dd1100a67b 118 */
rogerzuber 2:78dd1100a67b 119
rogerzuber 2:78dd1100a67b 120 void animationExample(void);
rogerzuber 2:78dd1100a67b 121
rogerzuber 2:78dd1100a67b 122 /**
rogerzuber 2:78dd1100a67b 123 * Writes the desired state to the output on the shift register
rogerzuber 2:78dd1100a67b 124 * @param char output, state
rogerzuber 2:78dd1100a67b 125 */
rogerzuber 2:78dd1100a67b 126
rogerzuber 2:78dd1100a67b 127 void writeBitAtPos(unsigned char, bool);
rogerzuber 2:78dd1100a67b 128
rogerzuber 2:78dd1100a67b 129 /**
rogerzuber 2:78dd1100a67b 130 * Writes the corresponding array item to the output on the shift register
rogerzuber 2:78dd1100a67b 131 * @param char array writes to the output from a state array
rogerzuber 2:78dd1100a67b 132 */
rogerzuber 2:78dd1100a67b 133
rogerzuber 2:78dd1100a67b 134 void writeArray(char[8]);
rogerzuber 2:78dd1100a67b 135
rogerzuber 2:78dd1100a67b 136 protected:
rogerzuber 2:78dd1100a67b 137 void updateRegister(void);
rogerzuber 2:78dd1100a67b 138 void updateOutput(void);
rogerzuber 2:78dd1100a67b 139 void clearStateArray(void);
rogerzuber 2:78dd1100a67b 140 DigitalOut DSERIAL, LATCH, RCLK, SRCLK, RESET;
rogerzuber 2:78dd1100a67b 141
rogerzuber 2:78dd1100a67b 142 };
rogerzuber 2:78dd1100a67b 143
rogerzuber 2:78dd1100a67b 144 #endif