Finde meinen Fehler einfach nicht

OP #7475859
Lesenswert?

Hallo,

mein Programm soll einfach nur die LEDs von innen nach außen mit einem Schieberegister zum Leuchten bringen. In Visual Studio hat es auch ohne Probleme mit cout << "0"; und cout << "1" funktioniert (siehe Anhang). Also mein Programm in der IDE ist so gut wie identisch, unterschied ist halt nur das setzen der einzelnen Bits an PORTD. Ich versuche halt die Werte mit dem Umrechnen von Dezimal in Binär arbeiten zu lassen. Also irgendwo habe ich dort einen Fehler, den ich nicht sehe, bin für jede Hilfe dankbar.

1
#define F_CPU 8000000UL
2
#include <avr/io.h>
3
#include <util/delay.h>
4

5
//74HC595
6
#define sendValue PIND2  //Output zum Übergeben von High und Low ans Schieberegister, geht an Pin 14 Schieberegister
7
#define saveValue PIND0  // SHCP PIN11 am 74HC595. Zum schieben und eingeben 1 Bits im Shiftregister
8
#define saveData PIND1  // STCP PIN12 am 74HC595. Zum Ausgeben 1 Bytes.
9
const uint8_t delay = 200;
10

11
int main(void)
12
{
13
  uint8_t ausgabe[4] = {24, 36, 66, 129};//{00011000, 00100100, 01000010, 10000001}
14
  uint8_t zahl, rest;
15
  DDRD |= 0x07; //initialiseren des PORTDs als Ausgang an PD0 bis PD2
16
  PORTD |= (1<<sendValue);//PIN auf high
17

18
    while (1); 
19
    {
20
    for(uint8_t i = 0; i < 4; i++)//Erstmal möchte ich nur 4 Werte ausgeben ans SR
21
    {
22
      zahl = ausgabe[i]; //hier speicher ich den iten Wert in zahl
23
      for (uint8_t j = 0; j < 8; j++)
24
      {
25
        rest = zahl%2; //zahl durch 2 geteilt sollte entweder 1 oder 0 als Rest ergeben
26
        if(rest==1) //wenn 1 dann 1 ins Schieberegister schreiben
27
        {
28
          PORTD |= (1<<saveValue);
29
          PORTD &= ~(1<<saveValue);
30
        }
31
        else //ansonsten 0
32
        {
33
          PORTD &= ~(1<<sendValue);
34
          PORTD |= (1<<saveValue); 
35
          PORTD &= ~(1<<saveValue);
36
          PORTD |= (1<<sendValue); 
37
        }      
38
        zahl /= 2;  //Die Zahl wird durch zwei geteilt, bis die For-Schleife 8mal gelaufen ist
39
      }
40
      PORTD |= (1<<saveData); //Daten werden am Schieberegister ausgegeben
41
      _delay_ms(delay);      //mit Delay kann ich es sehen
42
      PORTD &= ~(1<<saveData);
43
    }
44
    }
45
}
Angehängte Dateien:
#7475865
Lesenswert?

Es wäre nicht schlecht, wenn du sagen würdest, was nicht geht.

Das Programm ist zwar ziemlich verkorkst, sollte aber funktionieren. Ein Problem ist der initiale Zustand der 3 Signale - du setzt nur das Datenbit auf 1, die beiden Clk sind undefiniert.

Ich vermute aber eher, dass die restlichen Signale (/OE=low und /SRCLR=high) nicht richtig gesetzt sind.

OP #7476142
Lesenswert?

Oh man. Habe echt lange gucken müssen, bis ich den Fehler gesehen habe. Es sind immer so blöde kleine Fehler.

Auf jedenfall danke für die Hilfe, ich hätte jetzt noch Stundenlang draufschauen können und es vielleicht nicht gefunden, aber nächstes mal mache ich es, wie es rawi geschrieben hat. Also:

Rainer W. schrieb:

Wenn du in deiner IDE den Debugger benutzt und das Programm Schritt für Schritt ablaufen lässt, sollte sofort klar werden, wo der Programmablauf nicht deiner Erwartung entspricht.

Beitrag #7476298 wurde von einem Moderator gelöscht.

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