Forum: Mikrocontroller und Digitale Elektronik LED-Cube macht was er will


von James (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

bin ein Anfänger was den Umgang mit programmieren angeht, aber ich habe 
mir einen 8x8x8 Cube gebaut, aber er macht was er will.

Und ich bin langsam am verzweifeln. Ich habe alles kontrolliert 
(Massefehler, Masse verbindungen die nicht sein sollten, alles)

Die Led's leuchten unterschiedlich. Manche schwach, manche hell aber sie 
verändern sich nicht, nur wenn ich an den Kabeln oder am Cube selber 
wackele. Dann ändern sie sich oder er geht ganz aus. Ich kann nichtmal 
eine einzelne LED ansteuern.

wo kann der Fehler leigen ?

von James (Gast)


Lesenswert?

.include "m32def.inc"    ;ATMEGA32-Routinen einbinden

;--------------------Registerdefinitionen--------------------

.def temp0 = r16      ;allgemeines Arbeitsregister
.def temp1 = r17      ;allgemeines Arbeitsregister
.def temp2 = r18      ;Register für Zufallszahl
.def temp3 = r19      ;Register für Zufallszahl
.def random1 = r20      ;Zufallszahl
.def random2 = r21      ;Zufallszahl

;--------------------Ein+Ausgänge--------------------

;PortA:               PortB:
;  Pin0 =(A)= Bit0          Pin0 =(A)= unbenutzt
;  Pin1 =(A)= Bit1          Pin1 =(A)= unbenutzt
;  Pin2 =(A)= Bit2          Pin2 =(A)= unbenutzt
;  Pin3 =(A)= Bit3          Pin3 =(A)= unbenutzt
;  Pin4 =(A)= Bit4          Pin4 =(A)= unbenutzt
;  Pin5 =(A)= Bit5          Pin5 =(A)= unbenutzt
;  Pin6 =(A)= Bit6          Pin6 =(A)= unbenutzt
;  Pin7 =(A)= Bit7          Pin7 =(A)= unbenutzt

;PortC:               PortD:
;  Pin0 =(A)= Spalte1        Pin0 =(A)= Layer1
;  Pin1 =(A)= Spalte2        Pin1 =(A)= Layer2
;  Pin2 =(A)= Spalte3        Pin2 =(A)= Layer3
;  Pin3 =(A)= Spalte4        Pin3 =(A)= Layer4
;  Pin4 =(A)= Spalte5        Pin4 =(A)= Layer5
;  Pin5 =(A)= Spalte6        Pin5 =(A)= Layer6
;  Pin6 =(A)= Spalte7        Pin6 =(A)= Layer7
;  Pin7 =(A)= Spalte8        Pin7 =(A)= Layer8

;--------------------Vorbereitungen--------------------
;Stackpointer initialisieren
      ldi temp0, LOW(RAMEND)  ;LOW-Byte der obersten RAM-Adresse
      out SPL, temp0
      ldi temp0, HIGH(RAMEND)  ;HIGH-Byte der obersten RAM-Adresse
      out SPH, temp0

;Eingangs- /Ausgangsdeklaration
      ldi temp0, 0b11111111
      out DDRA, temp0      ;PortA = Ausgang
      out DDRB, temp0      ;PortB = Ausgang
      out DDRC, temp0      ;PortC = Ausgang
      out DDRD, temp0      ;PortD = Ausgang

;Ursprungszustand des Würfels (alles aus)
      ldi temp0, 0xFF
      out PortC, temp0
      out  PortA, temp0

;--------------------Hauptprogramm--------------------
;Moduswahl

main:
      ;jmp EbenenSchieben
      jmp Zufall

;--------------------Unterprogramme--------------------

Zufall:      ;Zufallsmuster
      rcall random
      rcall timer
      out PortD, random1
      out PortC, random2
      out PortA, random1
      rjmp Zufall        ;Schleife

EbenenSchieben:  ;addiert immer um 1
      ldi temp1, 0xFF
  ES1:
      ldi temp0, 0x00      ;nur einmal am Anfang ausführen
  ES2:
      out PortD, temp0    ;temp0 in Layer ausgeben
      inc temp0        ;temp0 um 1 erhöhen
      rcall timer
      cp temp0 , temp1    ;vergleiche temp0 mit temp1
      breq ES1        ;wenn gleich springe zu "ES1"
      rjmp ES2        ;Schleife

;--------------------Timer--------------------
;Quelle: AVR DELAY LOOP GENERATOR V1.2  (C)2000 by Tjabo Kloppenburg
;bzw.: http://www.home.unix-ag.org/tjabo/avr/dlg_02/dlg02.php

;Eingestellt für 16MHz Takt und 0,025s

timer:
      ldi  R29, $F1
WGLOOP0:  ldi  R30, $0E
WGLOOP1:  ldi  R31, $9D
WGLOOP2:  dec  R31
      brne WGLOOP2
      dec  R30
      brne WGLOOP1
      dec  R29
      brne WGLOOP0
      ret

;--------------------Zufallszahl--------------------
;Quelle: Beitrag "Re: Zufallszahlen mit Atmega8"
;Autor des Beitrags: Knut Ballhause (Firma: TravelRec.)

random:
      mov    temp2, random1  ;exor feedback outputs for SR input
      andi  temp2, 0b00000001
      lsl    temp2
      lsl    temp2
      eor    temp2, random1
      andi  temp2, 0b00000100
      swap  temp2
      lsl    temp2
      mov    temp3, random2
      andi  temp3, 0b00001000
      swap  temp3
      eor    temp3, random2
      andi  temp3, 0b10000000
      eor    temp3, temp2
      rol    temp3
      rol    random1
      rol    random2
      ret

;--------------------Programmende--------------------
;kommt nie hier an
loop:
      rjmp  loop      ;springe zurück zu "loop"

von Kurt (Gast)


Lesenswert?

Was macht den Dein LED Cube?

Ich würde an deinser Stelle nicht mit zufälligen Daten das ganze Testen, 
sondern erst eine LED nach der anderen.
Sorich du wählst einen Latch an, gibst ihm einen Wert und dann 
aktivierst du die Ebene.

aktuell hast du ja "Ebene schieben" auskommentiert, es zufall ist was 
passiert.

Vielleicht eine dumme Frage, aber leuchten die LEDs überhaupt schon?

von James (Gast)


Lesenswert?

Das Programm ist von dem der das mal erstellt hat. Und ja sie leuchten 
aber komisch jedenfals nicht so wie sie sollten und das mit dem nur eine 
LED anteuern geht nicht. Keine Ahnung warum. Die Ebenen alle Ansteuern 
geht 1a nur der Rest nicht

von Dieter F. (Gast)


Lesenswert?

Da das Programm identisch mit dem Original von Simon ist wird wohl die 
Hardware (Fuses schliesse ich mal aus) das Problem darstellen.

Zeig doch mal ein Bild Deines Aufbaus, der Platinen (von beiden Seiten) 
etc.

von Kurt (Gast)


Lesenswert?

Wie können LEDs komisch leuchten.
Was ist der Fehler wenn du nur eine LED ansteuern willst?
Probier mal statisch:
Port A = 0x01 // eine Zeile ausgewählt
Port B = 0xff // alle LEDs der Zeile an
Port D = 0x01 // eine Ebene ausgewählt

So sollten genau 8 LEDs leuchten.

von Frank (Gast)


Lesenswert?

Hallo James

Mich würd ees stutzig machen, wenn sich der Zustand der LEDs ändert, 
wenn Du an den Kabeln/Cube wackelst. Da würde ich mir die 
Lötverbindungen noch einmal sehr genau ansehen...

Gruß
 Frank

von Martin L. (maveric00)


Lesenswert?

Hallo,

Sorry, hatte in der Ursprungsantwort den µC-Abblock-Kondensator 
übersehen - allerdings sicherheitshalber doch die Frage, ob die 
Stromversorgung stabil genug ist, wenn die LEDs umgeschaltet werden?

Schöne Grüße,
Martin

: Bearbeitet durch User
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.