#1 18. Oktober 2009 LED´s ansteuern Mahlzeit! Sollen als Hausaufgabe ein Programm in AVR Studio erstellen, welches 8 LED´s anspricht. Hier mal der Code: Code: ;*************************************************************************** ;* E I N F Ü H R U N G R E C H N E R S T R U K T U R E N ;* ;* Versuch : Zähler ;* Datum : 08.07.2009 ;* ;* ;*************************************************************************** .cseg ; Beginn Codesegment für das Programm ; Hardwareadressen .equ DDRF = 0x0061 ; Datenrichtung PortF .equ PortF = 0x0062 ; PortF .org $0000 ; Resetvektor jmp Start .org $0100 ; Programmanfang .def Count=r16 ; Register 16 heißt jetzt Count Start: ldi R17,Bit_muster1 ; Initialisierungteil sts DDRF,R17 clr Count Mainloop: inc Count ; r16=r16+1 sts PortF, Count ; über Port ausgeben jmp Mainloop ; Endlosschleife ; Konstante und Texte .equ Bit_Muster1 = 0b11111111 ; Bitmasken definieren .equ Bit_Muster2 = 0b11001101 .dseg ; Beginn Datensegment .org $0100 ; für Variablendeklaration und Stack Variable_notused: .byte 1 ; reserviert 1 Byte im RAM für eine ; Variable .eseg ; Beginn EEPROM Segment .org $0000 ; wird im Praktikum nicht benötigt Das führte im Labor dazu, dass alle LED´s dauerhaft leuchteten. Nun sollen wir erst nur LED0 ansteuern und dann integrieren, dass statt LED0 die LED´s 0 - 7 mit dem Bitmuster 2 belegt werden. Ich bin ein totaler noob auf dem Gebiet und werd aus meinem Buch hier nicht schlau... deshalb hab ich keine Ahnung wie ich da jetzt rangehen soll. Wie soll ich da jetzt am besten anfangen? + Multi-Zitat Zitieren
#2 18. Oktober 2009 AW: LED´s ansteuern als ob wir aus nem stück code sofort sehen würden wie man deine komischen LEDs anzusprechen hat. Ändern das einfach mal in was anderes um Code: .equ Bit_Muster1 = 0b11111111 z.B Code: .equ Bit_Muster1 = 0b11110110 Wenn du glück hast leuchten jetzt LED4 und LED7 nicht mehr. Heist in deiner Aufgabe bräuchtest du dann Code: .equ Bit_Muster1 = 0b10000000 und müsstest in der mainloop nach paar hundert oder tausend(kA wie schnell dein prozessor da is) auf die bitmaske 2 umstellen drum steht die da ja auch schon drin, weil im moment wird die gar nicht verwendet so wie ich das seh. mfg tobZel + Multi-Zitat Zitieren
#3 18. Oktober 2009 AW: LED´s ansteuern Um deine LEDs mit dem Bitmuster 2 zu belegen die folgende Zeile ändern: Code: ldi R17,Bit_muster1 in ldi R17,Bit_muster2 Klar? Und das man zb. Bit_muster3 ohne weiteres nicht schreiben kann..... Und das andere wie tobZell schon gesagt hat .equ Bit_Muster1 = 0b11111111 einfach mal ändern und schauen was passiert. Mfg Rushh0ur + Multi-Zitat Zitieren
#4 18. Oktober 2009 AW: LED´s ansteuern ok, also nur die bitmuster ändern... sry für diese noobfragen ^^ kanns hier auch nur simulieren weil ich den kram net hier hab... + Multi-Zitat Zitieren
#5 18. Oktober 2009 AW: LED´s ansteuern Eigentlich schon. Hier mal ein "Diagramm" zur Veranschaulichung: Code: Bit_Muster1 <= 0b11111111 Bit_Muster2 <= 0b11001101 R17 <= Bit_muster1 DDRF <= R17 DDRF ist der Ausgabe Prot, in deinem Fall halt die leuchtende LEDs. DDRF ist von R17 abhängig ändert sich der Wert ändert sich auch die Ausgabe. Du hast jetzt die möglichkeit R17 die konstante Werte Bit_Muster1 oder Bit_Muster2 zuzuweisen, du kannst nätürlich auch weitere Konstante Werte dazu definieren (Bit_Muster3 <= X), welche du dann auch halt verwenden kannst und je nach dem was für Werte die Konstantem (Bitmuster) haben ändert sich deine Ausgabe. Wenn das ganze dann noch mit den LEDs "animiert" werden soll kann man halt den Wert von R17 dynamisch verändern. Halt dann in der Hauptschleife. Mfg Rushh0ur + Multi-Zitat Zitieren
#6 18. Oktober 2009 AW: LED´s ansteuern Dass alle LEDs dauerhaft leuchten ist verständlich. Persistence of Vision, du schaltest zu schnell. Du gibst immer den aktuellen Zählerstand an PortF aus, aber bei 1 Mhz ist das schon so schnell, dass der mehrere hundert mal pro Sekunde durchtzählt und du einfach nicht mehr mitbekommst, dass die LEDs eigentlich immer anders leuchten.... Code: Mainloop: inc Count ; r16=r16+1 ldi R17, Bit_Muster2; sts PortF, R17 ; über Port ausgeben jmp Mainloop ; Endlosschleife So sollte er ständig Bitmuster 2 ausgeben... mfg r90 + Multi-Zitat Zitieren