Arduino 74HC165 Code

OP #2748191
Lesenswert?

Kann mal jemand bitte über den Code schauen ob Fehler vorhanden sind ?
Er soll alle Pins des Ausgangsregisters Einschalten
1
int SER_Pin = A5;   //pin 14 on the 75HC595
2
int RCLK_Pin = A4;  //pin 12 on the 75HC595
3
int SRCLK_Pin = A3; //pin 11 on the 75HC595
4

5
//How many of the shift registers - change this
6
#define number_of_74hc595s 2 
7

8
//do not touch
9
#define numOfRegisterPins number_of_74hc595s * 8
10

11
boolean registers[numOfRegisterPins];
12

13
void setup(){
14
  pinMode(SER_Pin, OUTPUT);
15
  pinMode(RCLK_Pin, OUTPUT);
16
  pinMode(SRCLK_Pin, OUTPUT);
17

18
  //reset all register pins
19
  clearRegisters();
20
  writeRegisters();
21
}               
22

23
//set all register pins to LOW
24
void clearRegisters(){
25
  for(int i = numOfRegisterPins - 1; i >=  0; i--){
26
     registers[i] = LOW;
27
  }
28
} 
29

30
//Set and display registers
31
//Only call AFTER all values are set how you would like (slow otherwise)
32
void writeRegisters(){
33

34
  digitalWrite(RCLK_Pin, LOW);
35

36
  for(int i = numOfRegisterPins - 1; i >=  0; i--){
37
    digitalWrite(SRCLK_Pin, LOW);
38

39
    int val = registers[i];
40

41
    digitalWrite(SER_Pin, val);
42
    digitalWrite(SRCLK_Pin, HIGH);
43

44
  }
45
  digitalWrite(RCLK_Pin, HIGH);
46

47
}
48

49
//set an individual pin HIGH or LOW
50
void setRegisterPin(int index, int value){
51
  registers[index] = value;
52
}
53

54
void loop(){
55

56
  setRegisterPin(0, HIGH);
57
  setRegisterPin(1, HIGH);
58
  setRegisterPin(4, HIGH);
59
  setRegisterPin(5, HIGH);
60
  setRegisterPin(7, HIGH);
61
  setRegisterPin(8, HIGH);
62
  setRegisterPin(9, HIGH);
63
  setRegisterPin(10, HIGH);
64
  setRegisterPin(11, HIGH);  
65
  setRegisterPin(12, HIGH);
66
  setRegisterPin(13, HIGH);
67
  setRegisterPin(14, HIGH);
68
  setRegisterPin(15, HIGH);
69

70

71

72
  writeRegisters();  //MUST BE CALLED TO DISPLAY CHANGES
73
  //Only call once after the values are set how you need.
74
}


Danke, Nico
Gast #2748737
Lesenswert?

Was nicht stimmt:

> "Arduino 74HC165 Code"

Das ist ein PISO.

Code: 75HC595

Das ist ein SIPO.

Außerdem:
1
#define number_of_74hc595s 2

aber im Text:

>...des Ausgangsregisters...

Bei so wenigen Infos über die Beschaltung verdächtigt man halt gleich 
das Offensichtliche. :-)
OP #2748757
Lesenswert?

Das Register funktioniert nicht.
Am 1. Register sind alle Ausgänge immer auf LOW
Am 2. Register sind alle Ausgänge immer auf HIGH
egal was ich Einprogrammiere

@A.H.: Fehler meinerseits, es sind natürlich 2 Register

Geplant ist ein Aquariencomputer und über diese Register soll die 
Nachtbeleuchtung (LEDs) gesteuert werden.
#2748772
Lesenswert?

> int SER_Pin = A5;

Bist du sicher, dass man am Arduino die Pins so addressiert?

Ansonsten: Verlangsame das Ganze halt mal ordentlich, hänge ein paar LED 
zusätzlich an die Ausgänge an und sieh dir damit an, wie, was und in 
welcher Reihenfolge dein Programm die Ausgansgpins schaltet. Sagt ja 
keiner, dass du bei deinen ersten Versuchen gleich volle Pulle auf die 
SR ausgeben musst.
OP #2748777
Lesenswert?

Karl Heinz Buchegger schrieb:
>> int SER_Pin = A5;
>
> Bist du sicher, dass man am Arduino die Pins so addressiert?
>
> Ansonsten: Verlangsame das Ganze halt mal ordentlich, hänge ein paar LED
> zusätzlich an die Ausgänge an und sieh dir damit an, wie, was und in
> welcher Reihenfolge dein Programm die Ausgansgpins schaltet. Sagt ja
> keiner, dass du bei deinen ersten Versuchen gleich volle Pulle auf die
> SR ausgeben musst.

Ja die Register möchte ich ja mit den Analogen Pins ansteuern, da die 
digitalen bereits belegt sind. Beim 74hc164 den ich als Eingangsregister 
verwende funktioiert das ganze auch auf diese weise.
#2748787
Lesenswert?

Nicolas L. schrieb:
> Karl Heinz Buchegger schrieb:
>>> int SER_Pin = A5;
>>
>> Bist du sicher, dass man am Arduino die Pins so addressiert?
>>
>> Ansonsten: Verlangsame das Ganze halt mal ordentlich, hänge ein paar LED
>> zusätzlich an die Ausgänge an und sieh dir damit an, wie, was und in
>> welcher Reihenfolge dein Programm die Ausgansgpins schaltet. Sagt ja
>> keiner, dass du bei deinen ersten Versuchen gleich volle Pulle auf die
>> SR ausgeben musst.
>
> Ja die Register möchte ich ja mit den Analogen Pins ansteuern, da die
> digitalen bereits belegt sind.

Ja, macht ja nix. Deswegen kannst du ja trotzdem ein paar LED anhängen, 
mit denen du visualisierst, was dein Code mit den Pins macht.
#2749046
Lesenswert?

Nicolas L. schrieb:
> Das Register funktioniert nicht.

Naja, wir wissen ja nicht, was Du wann aufrufst.
Ist es zuviel verlangt, eine Mainloop zu posten?

Fehler fallen mir nicht auf. Was sagt denn der Simulator dazu?

Das ganze ist auch ein rechtes SRAM-Grab.
Du verwendest int (signed 16Bit), wo unsigned char ausreichen würde.
Und boolean ist ein char, d.h. nicht 16 Bit (2Byte), sondern 16 Byte.
C kann nämlich nicht indiziert Bits adressieren.

Du definierst daher 22 Byte, wo 2 Byte völlig ausreichend sind (1000% 
Verschwendung).


Peter

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