Ik heb een zelf gemaakt bordje aangesloten op een eayspic v7 development board, daarop zit een 18f4550 die m.b.v. spi communiceerd met de 3 165's die daarop zitten. Deze zijn gedaisychained maar voor de test doeleinden zit er nu maar 1 op (uiteraard de "eerste"), de mcp4251 chips zitten er ook niet op. Waardoor het bordje eigenlijk gewoon 1 165 is.
Board:

Shematic:
De code (mikroC):
Voorbeeld van wat ik terug krijg:
Dit alles werkt op 1 ding na, af en toe klopt wat ik terug krijg niet. Ik heb alle pinnen van de hc165 aan de 5V gehangen, en dan ontvang ik meestal een 255, wat dus klopt, maar soms (1 op de 10 ofzo) 1 of een paar 000's, of 001's. Als ik alle pinnen aan de 0v hang krijgt ik alleen 000. De hardware lijkt dus wel gewoon te kloppen, maar ik krijg af en toe corrupte data door. Ik heb er nog wat extra capacitors in gezet en geprobeerd om niet direct maar via 10k alle pinnen aan de 5v te hangen, maar dit hielp niet.
Ik heb zelf geen ideeën meer.
Board:

Shematic:

De code (mikroC):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| sbit HC165N_cs at latE2_bit; sbit HC165N_cs_direction at TRISE2_bit; char HC165N_values[3]; char HC165N_Count = 3; void Read_74HC165N() { unsigned int i; HC165N_cs = 0; delay_us(100); HC165N_cs = 1; delay_us(100); for(i = 0; i < HC165N_Count; i++) { HC165N_values[i] = spi1_read(0); } } void Main_Init() { INTCON=0; cmcon |= 7; RCON.IPEN = 0; // Disable Priority Levels on interrupts PIE1 = 0; PIE2 = 0; PIR1 = 0; PIR2 = 0; TrisE = 0; HC165N_cs = 1; HC165N_cs_direction = 0; ADCON1 |= 0x0F; // Configure all ports with analog function as digital CMCON |= 7; // Disable comparators } char uart_rd; void main(void){ Main_Init(); Soft_UART_Init(&PORTB, 4, 5, 9600, 0); // Initialize Soft UART at 14400 bps // Initialize SPI1 module SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH); delay_ms(100); while(1) { Read_74HC165N(); Soft_UART_Write(HC165N_values[0]); delay_ms(500); } } |
Voorbeeld van wat ik terug krijg:
code:
1
| 255 000 255 003 001 001 255 255 255 255 255 255 255 001 255 003 001 255 255 255 255 255 255 255 255 255 255 001 001 |
Dit alles werkt op 1 ding na, af en toe klopt wat ik terug krijg niet. Ik heb alle pinnen van de hc165 aan de 5V gehangen, en dan ontvang ik meestal een 255, wat dus klopt, maar soms (1 op de 10 ofzo) 1 of een paar 000's, of 001's. Als ik alle pinnen aan de 0v hang krijgt ik alleen 000. De hardware lijkt dus wel gewoon te kloppen, maar ik krijg af en toe corrupte data door. Ik heb er nog wat extra capacitors in gezet en geprobeerd om niet direct maar via 10k alle pinnen aan de 5v te hangen, maar dit hielp niet.
Ik heb zelf geen ideeën meer.