www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RGB Fader Anfänger-Problem


Autor: Luis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Mikrocontrollerneuling wollte ich zum Einstig einen einfachen RGB 
Fader Programmieren. Das Programm sollte eigentlich Deppen sicher 
aufgebaut sein nur es macht nicht so wie es soll.

Habe an meinen Atmega8 Entwicklungsboard von myAVR über Vorwiederstände 
eine RGB-LED angehängt. Die Led sollte einen fließenden Farbverlauf 
durchlaufen. Beginnend mit Blau über Violett, Rot usw.
Aus unerklärlichen Gründen leuchtet Grün schon von Beginn und geht 
später sprunghaft aus. Auch andere Farbwechsel passieren Sprunghaft.

Ich kann einfach keinen Fehler im Code finden, aber vielleicht kann 
einer von Euch meinen Denkfehler aufdecken. Würde mich über jede Hilfe 
Freuen!!!!


 ;+-----------------------------------------------------------------------------
;| Title                            : 
;+-----------------------------------------------------------------------------
;| Funktion                         : RGB-Fader
;| Schaltung                        : RGB LED Anode auf PORTC.0
;|                    Kathoden über Vorwiederstände (alle 150Ohm)
;|                    Auf PORTB 0-2
;+-----------------------------------------------------------------------------
;| Prozessor                        : ATmega8
;| Takt                             : 3,6864 MHz
;| Sprache                          : Assembler
;| Datum                            : ...
;| Version                          : ...
;| Autor                            : ...
;+-----------------------------------------------------------------------------
.include        "AVR.H"
;------------------------------------------------------------------------------
begin:    rjmp  main      ;  RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
      reti          ;  INT0 External Interrupt Request 0
      reti          ;  INT1 External Interrupt Request 1
      reti          ;  TIMER2 COMP Timer/Counter2 Compare Match
      reti          ;  TIMER2 OVF Timer/Counter2 Overflow
      reti          ;  TIMER1 CAPT Timer/Counter1 Capture Event
      reti          ;  TIMER1 COMPA Timer/Counter1 Compare Match A
      reti          ;  TIMER1 COMPB Timer/Counter1 Compare Match B
      reti          ;  TIMER1 OVF Timer/Counter1 Overflow
      reti          ;  TIMER0 OVF Timer/Counter0 Overflow
      reti          ;  SPI, STC Serial Transfer Complete
      reti          ;  USART, RXC USART, Rx Complete
      reti          ;  USART, UDRE USART Data Register Empty
      reti          ;  USART, TXC USART, Tx Complete
      reti          ;  ADC ADC Conversion Complete
      reti          ;  EE_RDY EEPROM Ready
      reti          ;  ANA_COMP Analog Comparator
      reti          ;  TWI 2-wire Serial Interface
      reti          ;  SPM_RDY Store Program Memory Ready
;------------------------------------------------------------------------------
main:    ldi    r16,hi8(RAMEND)  ; Main program start
      out    SPH,r16      ; Set Stack Pointer to top of RAM
      ldi    r16,lo8(RAMEND)
      out    SPL,r16
      ldi    r16,0b00000111  
      out    DDRB,r16    
      out    DDRC,r16    ; PortB und C auf Ausgang
      out    PORTB,r16
      ldi    r16,0b0000001   ; Anode der LEDs
      out    PORTC,r16
      
      ldi    r16,0      ; ROT  Startwerte Laden
      ldi    r19,0      ; GRÜN
      ldi    r18,255      ; BLAU

;------------------------------------------------------------------------------
mainloop:  wdr
      
rot_up:    inc    r16        ; Rot bis 255 zählen
      rcall  light      ; nach jeden durchlauf in die "light" Outputroutine
      cpi    r16,255      ; Wenn Rot = 255 weiter zur nächsten
      brne  rot_up
      
blau_dn:  dec    r18        ; Blau herunterzählen
      rcall  light      ; Licht ausgeben
      cpi    r18,0      ; Wenn Blau = 0 weiter zur nächsten
      brne  blau_dn
      
grün_up:  inc    r17        ; Grün hinauf zählen
      rcall  light
      cpi    r17,255
      brne  grün_up
      
rot_dn:    dec    r16        ; Rot hinunter zählen
      rcall  light
      cpi    r16,0
      brne  rot_dn
      
blau_up:  inc    r18        ; Blau hinauf zählen
      rcall  light
      cpi    r18,255
      brne  blau_up
      
grün_dn:  dec    r17        ; Grün hinunter zählen
      rcall  light
      cpi    r17,0
      brne  grün_dn
      
      rjmp  mainloop
;------------------------------------------------------------------------------

light:                ; Leucht Routine
       
       ldi    r21,20      ; Lade Wert für Schleife Daurchlaufdauer
loopL:       
      mov    r20,r16      ; Setze Rot für für die Schleife ein
       cbi    PORTB,0      ; Rote LED auf LOW, damit sie Leuchtet
loopR:    dec    r20        ; Schleife für Leuchtdauer ROT
          brne   loopR
          sbi    PORTB,0      ; Ausgang Rot wieder auf High
          
          mov    r20,r17
          cbi    PORTB,1
loopG:    dec    r20
          brne   loopG
          sbi    PORTB,1

      mov    r20,r18          
          cbi    PORTB,2
loopB:    dec    r20
          brne   loopB
          sbi    PORTB,2
      
      dec    r21        ; Schleife für Wiederholungen um die 
      brne  loopL      ; Duchalaufdauer einzustellen
  
      ret 

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.