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 ?
.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"
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?
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
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.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

