-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: LED-DIMM

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153

    LED-DIMM

    Anzeige

    Hallo

    Kann mir wer sagen warum die LED nicht zu 100% leutchtet?
    wenn ich OCR0, auf 1 stelle dann leuchtet es fast gar nicht.

    wenn ich aber ORC0 auf 255 stelle, dann leuchtet die led schon etwas stärker aber dass sind keine 100%!

    Kann mir wer helfen!

    Hier der Code:

    .include <m8535def.inc>

    .org 0x0000
    rjmp init

    .org OC0addr
    rjmp ocr

    init:

    sbi DDRA, 1

    ldi R16, HIGH(RAMEND)
    out SPH, R16

    ldi R16, LOW(RAMEND)
    out SPL, R16

    ldi R16, 0b000000100
    out TCCR0, R16

    ldi R16, 0b00000011
    out TIMSK, R16

    ldi R17, 1
    out OCR0, R17

    ldi R18, 0b00000000

    sei

    ein:
    sbi DDRA, 0
    out TCNT0, R18

    aus:
    sei
    cbi DDRA, 0
    rjmp aus

    OCR:
    rcall ein


    MFG
    Michael

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Also du machst dir das Dimmen viel schwer als es ist, nimm doch die PWM Funktion des Timers, das machts viel einfacher, und verwende bitte für deinen Einstellungen die Assemblerdirecktiven wie zB:
    ldi r16, (1<<xxx) | (1<<yyy)...

    das macht den Code viel schneller Verständlich, so musste ich erst im Datenblatt gucken was welches Bit bedeutet.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    wie meinst du assemblerdirektive??

    MFG
    Michael

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Das er die einzelnen Bits mit Namen nennt ...

    also z.B. ldi r16, (1<<OCIE0)
    out TIMSK, r16

    Vorteil: auch in 2 Wochen ist der Code noch lesbar ....

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    So jetzt is besser!
    jetzt isses so, wenn ich OCR0 auf 255 stelle leuchtet die led nicht
    wenn ich aber OCR0 auf 1 stelle leuchtet die led aber nicht 100% warum!
    Habs jetzt mit PWM funktion gemacht vom TIMER0

    CODE:

    .include <m8535def.inc>

    .org 0x0000
    rjmp init

    .org OC0addr
    rjmp compare

    init:

    ldi R16, HIGH(RAMEND)
    out SPH, R16

    ldi R16, LOW(RAMEND)
    out SPL, R16

    ldi R16, (1<<CS02) | (1<<WGM01)
    out TCCR0, R16

    ldi R16, 10
    out OCR0, R16

    ldi R16, (1<<OCIE0)
    out TIMSK, R16

    sei

    ein:

    sbi DDRA, 0

    aus:
    sei
    cbi DDRA, 0
    rjmp aus

    compare:
    rcall ein

    BITTE UM Rückantowr

    MFG
    Michael

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    jetzt kann man den Code sogar lesen

    Also der Code ist eher schlecht als recht, du hast einen Halb Software halb Hardware PWM geschrieben, der Mix ist eher sch*** weil du leicht nen fehler im Code bekommst, siehste ja selber geht nix wirklich. Deshalb nehme entweder einen Reinen Hardware oder eien software.
    Hardware ist aber eher zu empfehlen:

    Code:
    .include "m8535def.inc" 
    
    .org 0x0000 
    rjmp init 
    
    
    
    init: 
    
    ldi R16, HIGH(RAMEND) 
    out SPH, R16 
    
    ldi R16, LOW(RAMEND) 
    out SPL, R16 
    
    ldi R16, (1<<CS00) | (1<<WGM00) | ( 1<<COM01 ) 
    out TCCR0, R16 
    
    ldi r16, (1<<Pinb3)
    out ddrb, r16
    
    ldi r16, 128
    out OCR0, r16
    
    
    loop:
    ldi r16, 128
    out OCR0, r16
    rjmp loop
    Probiers mal damit, ich habs nur Simuliert, aber sollte gehen, hoffe hab nix vergessen.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    Ich versteh den code nicht ganz! Kannst du ihn mir ein bisschen erklären bitte! Warum schaltet PINB dauert ein und aus obwohl keine rücksprungadresse da ist!? Geht dass von Timer aus?

    MFG
    Michael

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Also Wenn du den OCR benutzt musst du dich weder ums High, noch ums Low setzten Bemühen, das wird Hardwareseitig gemacht --> Vorteil weil µC ja nicht weiters mit PWM-Erzeugen beschäftigt.

    Und Die Register Anweisungen sind fast wie bei dir, aus dem Datasheet, PWM-Modus im Phasekorrekt-mode und fPwm = CLK Sonst nix weiter, hald der OCR-Pin als Ausgang

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    Was meinst mit HArdware! Es muss doch irgendetwas geschehen, damit er am PINB ein High ausgibt oder?

    MFG
    Michael

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Nein muss nicht, das ist alles IM AVR, du musst nix machen, glaub mir, sonst wäre es ja kein Hardware-PWM ( Hardware = Im AVR eingebaut und per Software Kontrollierbar )

    Den Code muss man nicht verstehen, weils ja in dem sin keinen gibt, die Befehle dienen nur dazu deine Hardware richtig zu konfigurieren, damit die macht was du willst.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •