Schieberegister TPIC6B595N geht nicht

OP #3864540
Lesenswert?
• ▲
▼
Hallo
Ich suche schon seit Tagen den Fehler an meinem Schieberegister 
TPIC6B595N. Bei der Pinbelegung bin ich mir ziemlich sicher, dass sie 
richtig ist(habe bis jetzt nur am Drain4 eine LED angehängt). Beim Code 
bin ich mir nicht sicher, ob er richtig ist:

main:

1
 
2
         DDRB=0xFF;
3
          PORTB=0x00;
4
  
5
  
6
  int CLEAR = 4;
7
  int SCK = 2;
8
  int RCK = 1;
9
  int OE = 3;
10
  int SER = 5;
11
  
12
  
13
  PORTB |= (1 << CLEAR);
14
  
15
  
16
  
17
  PORTB |= (0 << SER);
18
  
19
  PORTB |= (1 << SCK);
20
  
21
  PORTB &= ~(1 << SCK);
22
  
23
  
24
  
25
  PORTB |= (0 << SER);
26
  
27
  PORTB |= (1 << SCK);
28
  
29
  PORTB &= ~(1 << SCK);
30
  
31
  
32
  
33
  PORTB |= (0 << SER);
34
  
35
  PORTB |= (1 << SCK);
36
  
37
  PORTB &= ~(1 << SCK);
38
  
39
  
40
  
41
  PORTB |= (1 << SER);
42
  
43
  PORTB |= (1 << SCK);
44
  
45
  PORTB &= ~(1 << SCK);
46
  
47
  
48
  
49
  PORTB |= (0 << SER);
50
  
51
  PORTB |= (1 << SCK);
52
  
53
  PORTB &= ~(1 << SCK);
54
  
55
  
56
  
57
  
58
  PORTB |= (0 << SER);
59
  
60
  PORTB |= (1 << SCK);
61
  
62
  PORTB &= ~(1 << SCK);
63
  
64
  
65
  
66
  PORTB |= (0 << SER);
67
  
68
  PORTB |= (1 << SCK);
69
  
70
  PORTB &= ~(1 << SCK);
71
  
72
  
73
  PORTB |= (0 << SER);
74
  
75
  PORTB |= (1 << SCK);
76
  
77
  PORTB &= ~(1 << SCK);
78
  
79
  
80
  PORTB |= (1 << RCK);
81
  PORTB &= ~(1 << RCK);
82
  
83
  
84
  
85
  while(1);




Bitte um Hilfe!!
#3864575
Lesenswert?
• ▲
▼
Schreib das ganze doch mal als vernünftige Funktion und nicht so als 
Copy&Paste Orgie. Da muss man sonst jede einzelne Zeile kontrollieren, 
ob du irgendwo einen Tippfehler versteckt hast
1
#include <avr/io.h>
2

3
#define CLEAR   4
4
#define SCK     2
5
#define RCK     1
6
#define OE      3
7
#define SER     5
8

9
void output( uint8_t byte )
10
{
11
  uint8_t i;
12

13
  for( i = 0; i < 8; i++ )
14
  {
15
    if( byte & 0x80 )
16
      PORTB |= (1<<SER);
17
    else
18
      PORTB &= ~(1<<SER);
19

20
    byte <<= 1;
21

22
    PORTB |= (1<<SCK);
23
    PORTB &= ~(1<<SCK);
24
  }
25

26
  PORTB |= (1<<RCK);
27
  PORTB &= ~(1<<RCK);
28
}
29

30
int main()
31
{
32
  DDRB = 0xFF;
33

34
  PORTB = 0x00;
35
  PORTB |= (1<<CLEAR);
36

37
  output( 0xAA );  // abwechselnd ein 0 und ein 1 Bit
38

39
  while( 1 )
40
    ;
41
}

Wenns dann immer noch nicht klappt, dann hängst du ein paar LED an die 
Steuerpins vom 595, fügst ein paar ordentliche delay in die 
Ausgabefunktion nach jeder Port-Manipulation ein und siehst den LED zu, 
um rauszufinden, in welcher Reihenfolge welche Leitung auf High oder Low 
geht und wo du dich bei der Verdrahtung vertan hast.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren