[Assembler] LED´s ansteuern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Calyx, 18. Oktober 2009 .

  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?
     
  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
     
  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
     
  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...
     
  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
     
  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
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.