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

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.