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