Wuerfel - Anweisung wird ignoriert

Gast #1508951
Lesenswert?
• ▲
▼
Hallo,

ich bin grade dabei, einen "elektrischen Würfel" zu programmieren. Dafür 
habe ich neun LEDs als Matrix und folgenden Code.
Allerdings wird die Anweisung "PORTB = get_wuerfel(0, x);" ignoriert - 
wenn ich nun aber x im Code durch 0, 1 oder 2 ersetze, funktioniert 
soweit alles.

Ich suche nun schon seid etwa einer Stunde, finde aber partout keinen 
Fehler.
Kann mir jemand weiterhelfen?
1
#define F_CPU 4000000
2
#include <avr/io.h>
3
#include <avr/interrupt.h> 
4
#include <util/delay.h>
5

6
const int zeilen[3] = { 
7
    1 << PB0,
8
    1 << PB1,
9
    1 << PB2
10
};
11

12
const int spalten[3] = { 
13
    1 << PB3,
14
    1 << PB4,
15
    1 << PB5
16
};
17

18
int wuerfel[7][3][3] = {
19
  {
20
    { 1, 1, 1 },
21
    { 1, 0, 1 },
22
    { 1, 1, 1 }
23
  }
24
};
25

26
void delay_ms(int ms) {
27
  for(; ms > 0; ms--) {
28
    _delay_ms(1);
29
  }
30
}
31

32
void delay_us(int us) {
33
  for(; us > 0; us--) {
34
    _delay_us(1);
35
  }
36
}
37

38
int get_wuerfel(int ziffer, int linie) {
39
  int r = zeilen[linie];
40
  int i;
41

42
  for(i = 0; i < 3; i++) {
43
    if(wuerfel[ziffer][linie][i]) {
44
      r = r | spalten[i];
45
    }
46
  }
47

48
  r ^= 0b000111;
49
  return r;
50
}
51

52
int main (void) {
53
  DDRB = 0xFF;
54
  PORTB = 0xFF;
55

56
  while(1) {
57
    int x = 0;
58
    for(; x < 3; x++) {
59
      PORTB = get_wuerfel(0, x);
60
      delay_ms(1000);
61
    }
62
  }
63
  
64
  return 0;
65
}
Gast
Lesenswert?
• ▲
▼
Selbst mit folgendem Code geht das ganze.
Aber das ist irgendwie nicht schön und auch nicht der Sinn von Variablen 
:o
1
    if(x == 2) {
2
        PORTB = get_wuerfel(0, 2);
3
      } else if(x == 1) {
4
        PORTB = get_wuerfel(0, 1);
5
      } else if(x == 0) {
6
        PORTB = get_wuerfel(0, 0);
7
      }
Gast
Lesenswert?
• ▲
▼
>Ich suche nun schon seid etwa einer Stunde, finde aber partout keinen
>Fehler.

Für solche Problemstellungen gibt es Debugger. Hast du damit schon mal 
nachgesehen, was genau passiert, und was wo schief geht?

Oliver
Gast
Lesenswert?
• ▲
▼
Bisher rufe ich es nur mit "0" als Paramter auf. Auch wenn ich 
wuerfel[7][3][3] zu wuerfel[1][3][3] ändere, besteht das Problem 
weiterhin.

Einen Debugger oder entsprechende Hardware habe ich leider nicht..
Gast
Lesenswert?
• ▲
▼
Ja, sieben LEDs hätten auch  gereicht. Allerdings fand' ich die 
LED-Anordnung in H-Form optisch recht unansehlich und weil es 
matrixmäßig keinen Unterschied macht, ob da nun sieben oder neun LEDs 
sind, weil LEDs nicht soo viel kosten und weil der AtTiny2313 die Pins 
ja hat, habe ich mich für neun LEDs entschieden.

Habe das Problem übrigens gelöst. Wie? Mit einem neuen AtTiny2313 
grübel.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.