Hallo,
ich habe ein kleines Problem mit meinen Schieberegistern (74H599, also
mit Latch). Das erste Register gibt schon keine Daten weiter...
Vielleicht habe ich nur ein Problem mit der Ansteuerung.
Könntet ihr mal bitte gucken? :)
Funktionen zur Ansteuerung:
1 | void ShiftRegister::reset()
|
2 | {
|
3 | // tie reset low
|
4 | PORT_SHIFT_REGISTER &= ~(1 << _reset);
|
5 | _delay_ms(1);
|
6 | _byte = 0x00;
|
7 | PORT_SHIFT_REGISTER |= (1 << _reset);
|
8 | }
|
9 |
|
10 | void ShiftRegister::shift(uint8_t byte)
|
11 | {
|
12 | setByte(byte);
|
13 | shift();
|
14 | }
|
15 |
|
16 | void ShiftRegister::shift()
|
17 | {
|
18 | for (int i=0; i<8; i++)
|
19 | {
|
20 | if (_byte & (1 << i) )
|
21 | PORT_SHIFT_REGISTER |= (1 << _data);
|
22 | else
|
23 | PORT_SHIFT_REGISTER &= ~(1 << _data);
|
24 |
|
25 | // clock pulse
|
26 | PORT_SHIFT_REGISTER &= ~(1 << _clock);
|
27 | PORT_SHIFT_REGISTER |= (1 << _clock);
|
28 |
|
29 | }
|
30 | }
|
31 |
|
32 | void ShiftRegister::latch(uint8_t value)
|
33 | {
|
34 | if (!value)
|
35 | PORT_SHIFT_REGISTER &= ~(1 << _latch);
|
36 | else
|
37 | PORT_SHIFT_REGISTER |= (1 << _latch);
|
38 | }
|
Und noch die Passage aus dem Programm:
1 | ShiftRegister reg(PC3, PC2, PC0, PC1);
|
2 | reg.reset();
|
3 | reg.latch(false);
|
4 | reg.shift(0xff);
|
5 | reg.shift(0x00);
|
6 | reg.shift(0xff);
|
7 | reg.shift(0x00);
|
8 | reg.shift(0xff);
|
9 | reg.latch(true);
|
Ich habe mal nachgeguckt, die Daten kommen richtig an, Latch, Reset und
Clock zeigen laut LA auch richtiges Verhalten.
Es hängen vier Stück hintereinander - das fünfte ist eigentlich nur so
zur Kontrolle gewesen.
Vielen Dank und Grüße
Nutzer