Forum: Compiler & IDEs atmega8 und Schieberegister ganz einfach


von Tamme D. (tamme)


Lesenswert?

Also ich habe ein kleines Problem ich habe mir eine kleine Schaltung mit 
einem atmega8 und einem Schieberegister aufgebaut (wie im AVR-Tutorial 
beschrieben) und an alle Ausgänge jeweils eine LED gehängt
nun wollte ich das ganze nur um das System zu verstehen wie folgt 
ansteuern:
1
#include <avr/io.h>
2
3
#define SER 0
4
#define SCK 1
5
#define SCL 2
6
#define RCK 3
7
8
int main(void)
9
{
10
  DDRB = 0xff;
11
  
12
13
  PORTB |= (1 << SER);
14
  PORTB |= (1 << SCK);
15
  PORTB &= ~(1 << SCK);
16
  
17
  PORTB &= ~(1 << SER);
18
  PORTB |= (1 << SCK);
19
  PORTB &= ~(1 << SCK);
20
  
21
  PORTB |= (1 << SER);
22
  PORTB |= (1 << SCK);
23
  PORTB &= ~(1 << SCK);
24
  
25
  PORTB &= ~(1 << SER);
26
  PORTB |= (1 << SCK);
27
  PORTB &= ~(1 << SCK);
28
29
  PORTB |= (1 << SER);
30
  PORTB |= (1 << SCK);
31
  PORTB &= ~(1 << SCK);
32
  
33
  PORTB &= ~(1 << SER);
34
  PORTB |= (1 << SCK);
35
  PORTB &= ~(1 << SCK);
36
37
  PORTB |= (1 << SER);
38
  PORTB |= (1 << SCK);
39
  PORTB &= ~(1 << SCK);
40
  
41
  PORTB &= ~(1 << SER);
42
  PORTB |= (1 << SCK);
43
  PORTB &= ~(1 << SCK);
44
  
45
  PORTB |= (1 << RCK);
46
  PORTB &= ~(1 << RCK);
47
  
48
  while(1)
49
  {
50
    PORTB |= (1 << 5);
51
  }
52
}

das
1
PORTB |= (1 << 5);
 habe ich zu testzwecken eingebaut

die LED geht dort auch an also wird das Programm wohl durchlaufen... 
jedoch tut sich bei den am Schieberegister angeschlossenen LEDs 
garnichts... woran kann das liegen?

Danke im Voraus,
Tamme

von Karl H. (kbuchegg)


Lesenswert?

Ohne jetzt alles kontrolliert zu haben.
Du hast anscheinend den Schieberegister Eingang SCL an den
Port gelegt. SCL ist aber low-aktiv. Da du den entsprechenden
Ausgang am Port nie auf 1 setzt, liegt dort am Ausgang noch
immer eine 0 an. Diese 0 am SCL Eingang ist aber fatal. Denn sie
bedeutet: Das Schieberegister löschen.

von G. L. (sprintersb)


Lesenswert?

SCK und RCK sind positiv flankengetriggert.

Damit
1
 PORTB |=  (1 << RCK);
2
 PORTB &= ~(1 << RCK);

ein Strobe an RCK gibt, müss RCK (zB zu Beginn des Progs) auf LOW sein.

So wie's dasteht, gibts beim ersten Mal anstatt eines HIGH-Strobe (also 
HIGH-Flanke + LOW-Flanke) nur eine LOW-Flanke. Dito für SCK.

http://www.datasheetcatalog.com/datasheets_pdf/7/4/H/C/74HC595N.shtml

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.