Hanna
Sourcecode Batteriemanagementsystem
com74HC595.c
gehe zur Dokumentation dieser Datei
1 
15 #include <avr/io.h>
16 #include <stdio.h>
17 #include <util/delay.h>
18 #include <stdbool.h>
19 #include "com74HC595.h"
20 #include "bms_mosfet.h"
21 
22 unsigned char com74hc595[COM74HC595_SIZE];
23 
24 
34 void com74hc595_setBit ( unsigned char BitNumber )
35 {
36  unsigned char Port = BitNumber >> 3;
37  unsigned char Bit = BitNumber & 7;
38  com74hc595[Port] |= (1 << (Bit));
39 }
40 
50 void com74hc595_unsetBit ( unsigned char BitNumber )
51 {
52  unsigned char Port = BitNumber >> 3;
53  unsigned char Bit = BitNumber & 7;
54  com74hc595[Port] &= ~(1 << (Bit));
55 }
56 
65 void com74hc595_Bit ( unsigned char BitNumber, bool set )
66 {
67  if ( set )
68  {
69  unsigned char Port = BitNumber >> 3;
70  unsigned char Bit = BitNumber & 7;
71  com74hc595[Port] |= (1 << (Bit));
72  }
73  else
74  {
75  unsigned char Port = BitNumber >> 3;
76  unsigned char Bit = BitNumber & 7;
77  com74hc595[Port] &= ~(1 << (Bit));
78  }
79 }
80 
84 void Com74hc595_setall ( void )
85 {
86  for ( int i = 0; i < COM74HC595_BITS; i++ )
87  {
88  com74hc595_setBit ( i );
89  }
90 }
91 
95 void com74hc595_unsetall ( void )
96 {
97  for ( int i = 0; i < COM74HC595_BITS; i++ )
98  {
99  com74hc595_unsetBit ( i );
100  }
101 }
102 
111 void com74hc595_setPort ( unsigned char Port, unsigned char bitmask )
112 {
113  com74hc595[Port] = bitmask;
114 }
115 
123 void com74hc595_unsetPort ( unsigned char Port )
124 {
125  com74hc595[Port] = 0x00;
126 }
127 
133 void com74hc595_init ( void )
134 {
136 
137  PORT_74HC595.OUT &= ~PIN_74HC595_SER_bm; // SER auf definierten Level LOW
138  PORT_74HC595.OUT &= ~PIN_74HC595_SCK_bm; // SCK auf definierten Level LOW
139  PORT_74HC595.OUT &= ~PIN_74HC595_RCK_bm; // RCK auf definierten Level LOW
140  PORT_74HC595.OUT |= PIN_74HC595_SCLR_bm; // SCLR auf definierten Level HIGH
141 
143 }
144 
154 {
155  unsigned char anz = COM74HC595_SIZE;
156  unsigned char* serp = com74hc595 + COM74HC595_SIZE; // Adresse des letzten Bytes im Array + 1
157 
158  do
159  {
160  unsigned char bits;
161  unsigned char data = *--serp; // Adresszeiger wird im ersten Durchlauf auf letztes Element im Array gesetzt, und dann absteigend durchlaufen.
162 
163  for ( bits = 8; bits > 0; bits-- )
164  {
166 
167  if ( data & 0x80 ) // Wenn MSB 1, dann Ausgang auf High, sonst unverändert Low.
168  {
170  };
171 
172  data <<= 1; // Bits werden vom LSB der ganzen Kette nach vorne abgearbeitet.
173 
174  PORT_74HC595.OUT |= PIN_74HC595_SCK_bm; // Strobe an SCK schiebt Daten bei jedem Takt um 1 Position weiter durch alle Schieberegister.
176  }
177  }
178  while ( --anz > 0 );
179 
180  PORT_74HC595.OUT |= PIN_74HC595_RCK_bm; // Strobe an RCK bringt die Daten von den Schieberegistern in die Latches.
182 }
183 
void com74hc595_unsetPort(unsigned char Port)
Alle bits je Baustein (Port) werden auf 0 gesetzt.
Definition: com74HC595.c:123
#define PIN_74HC595_SCLR_bm
SCLR ist am 74HC595 PIN 10.
Definition: com74HC595.h:32
void com74hc595_init(void)
Initialisierung 74HC595.
Definition: com74HC595.c:133
void com74hc595_unsetall(void)
Setzt alle bits auf 0.
Definition: com74HC595.c:95
#define PORT_74HC595
PORT am Mikrocontroller, über den die 74HC595 Bausteine per Software SPI angesteuert werden...
Definition: com74HC595.h:29
#define PIN_74HC595_SER_bm
SER ist am 74HC595 PIN 14.
Definition: com74HC595.h:30
void com74hc595_unsetBit(unsigned char BitNumber)
Erzeugt ein Bitmuster für jeden Baustein in der Serie, setzt das ausgewählte Bit auf 0...
Definition: com74HC595.c:50
void com74hc595_setPort(unsigned char Port, unsigned char bitmask)
Das Bitmuster für einen Baustein (Port) wird direkt gesetzt.
Definition: com74HC595.c:111
Standardheader.
void com74hc595_Bit(unsigned char BitNumber, bool set)
Setzt die ausgewählte Bitnummer auf set, 0 oder 1.
Definition: com74HC595.c:65
#define COM74HC595_BITS
Anzahl der Bits über alle Bausteine.
Definition: com74HC595.h:22
Definition der Schalterstellungen für die einzelnen MOSFETs.
void mosfet_safeschaltung(void)
Sicherheitsschaltung der BMS-Platine, alle Funktionen sind aus.
Definition: bms_mosfet.c:37
#define PIN_74HC595_SCK_bm
SCK ist am 74HC595 PIN 11.
Definition: com74HC595.h:31
#define PIN_74HC595_RCK_bm
RCK ist am 74HC595 PIN 12.
Definition: com74HC595.h:33
#define COM74HC595_SIZE
Anzahl der über diesen Port anzusteuernden 74HC595 Bausteine.
Definition: com74HC595.h:21
void com74hc595_out()
Übertragung des Bitmuster in die Schieberegister und anschließende Aktivierung.
Definition: com74HC595.c:153
void Com74hc595_setall(void)
Setzt alle bits auf 1.
Definition: com74HC595.c:84
void com74hc595_setBit(unsigned char BitNumber)
Erzeugt ein Bitmuster für jeden Baustein in der Serie, setzt das ausgewählte Bit auf 1...
Definition: com74HC595.c:34