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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.