Ich versuche einen 74HC165 über USI einzulesen.
Dies habe ich folgendermassen probiert:
1 | // Liest versetzt
|
2 | char SPIShiftIn165() {
|
3 | USISR = 1 << USIOIF;
|
4 |
|
5 | while ((USISR & (1 << USIOIF)) == 0) {
|
6 | USICR = (1 << USIWM0) | (1 << USICS1) | (1 << USICLK) | (1 << USITC);
|
7 | }
|
8 | return USIDR;
|
9 | }
|
Dabei wird ein Bit versetzt eingelesen, so wie es die shiftIn() Function
von Arduino macht. Die habe ich fogendermassen abgespeckt:
1 | // Liest versetzt
|
2 | char shiftInArduino() {
|
3 | uint8_t value = 0;
|
4 | uint8_t i;
|
5 |
|
6 | for (i = 0; i < 8; ++i) {
|
7 | digitalWrite(Clock, true); // <--- beachten
|
8 | value |= digitalRead(DataIn) << (7 - i);
|
9 | digitalWrite(Clock, false);
|
10 | }
|
11 | return value;
|
12 | }
|
Folgende Funktion arbeitet perfekt. Man beachte dabei das Schreiben von
Clock.
1 | // arbeitet korrekt
|
2 | char shiftIn() {
|
3 | uint8_t value = 0;
|
4 | uint8_t i;
|
5 |
|
6 | for (i = 0; i < 8; ++i) {
|
7 | value |= digitalRead(DataIn) << (7 - i);
|
8 | digitalWrite(Clock, true); // <--- beachten
|
9 | digitalWrite(Clock, false);
|
10 | }
|
11 | return value;
|
12 | }
|
Geht dies mit USI auch ?
Im Anhang noch die ganze Source.