Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
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:
Afbeeldingslocatie: http://i48.tinypic.com/2vcyx6a_th.jpg

Shematic:
Afbeeldingslocatie: http://i46.tinypic.com/wspvsz_th.jpg
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.

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 23:12

SA007

Moderator Tweaking
Paar dingen om te proberen:
Hang de SER van de 74HC165 eens aan ground of 5V en kijk of dat verschil maakt.
Het is een input die floating hangt, dat kan rare dingen doen.

Controlleer ook je SPI settings of de clock en strobe signalen doen wat je ervan zou verwachten. Misschien ben je er 1 van inverted aan het aansturen, misschien controleren met een scope of logic analyser.

Verder staan er geen 100nF getekend tussen de vcc en ground van elke chip, bij 74xxx chips is dat geen slecht idee om dat bij elke chip te doen zo dicht mogelijk bij de chip zelf.

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 09:53

memphis

48k was toen meer dan genoeg.

Je zat toch al met dat probleem?
Sd kaart valt weg bij aansluiten 74hc165n

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Een combinatie van capacitors en het uitschakelen van alle leds op het eayspic board heeft het verholpen.

@memphis
Dat was iets anders, daar ging het niet om de 165, met die communicatie was niets mis. Het ging daar mis met de sd kaart.

[ Voor 11% gewijzigd door huub8 op 04-11-2012 01:26 ]