E

PWM RGB Led Chaser( Kara Simsek) basic kodlu

Başlatan Erata, 17 Kasım 2012, 09:33:25

acemdiyarı

Hocam bu karmaşık gözüken  işlemi bir kod ile pekiştirmeniz mümkünmü.? yazdıklarınızı kodu takip ederek okuyarak anlamak  daha iyi olabilir , müsait olabilirseniz tabiki. Teşekkürler.

Mucit23

Benim yaptığım örneği vereyim. Açıklamalar mevcut. Kodu ana program döngüsünde çalıştırmıştım. STM32F103 kullanılıyor. 74HC595 üzerinden çıkış alınıyor.

int main(void)
{
    Hardware_Configuration();    //Sistem ve Donanim Ayarlarini yap..

    Duty[0]=1;
    Duty[1]=5;
    Duty[2]=10;
    Duty[3]=50;
    Duty[4]=100;
    Duty[5]=150;
    Duty[6]=200;
    Duty[7]=255;

    while(1)
    {
        for(Duty_Count=0;Duty_Count<8;Duty_Count++)
        {
            for(Bit_Count=0;Bit_Count<8;Bit_Count++)
            {
              if(Duty[Bit_Count] & (1<<Duty_Count))
                {
                  temp|= (1<<Bit_Count);
                }
                else
                {
                  temp&= ~(1 << Bit_Count);
                }
            }
           
           
          for(Bit_Count=0;Bit_Count<8;Bit_Count++)
          {
            GPIOB->BRR=GPIO_Pin_9;//CLK=0;
            if(temp&(128>>Bit_Count)){GPIOB->BSRR=GPIO_Pin_8;}else{GPIOB->BRR=GPIO_Pin_8;}
            GPIOB->BSRR=GPIO_Pin_9;//CLK=1;
          }
             GPIOB->BSRR=GPIO_Pin_10;//Latch=1;
             __nop();__nop();__nop();__nop();__nop();__nop();
       GPIOB->BRR=GPIO_Pin_10;//Latch=0;
          delay_us(1<<Duty_Count);
      }
  }
}
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Çok basit bir örnek yazdım. Sİmulasyonda çalışıyor. Gerçekte  de denemek lazım.

Ete

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [ETE]                                             *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 08.11.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE Pic16F628A, BOD_OFF
@ DEVICE Pic16F628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_ON
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
CMCON=7
PORTA=0:TRISA=0
PORTB=0:TRISB=0

SURE  VAR BYTE[8]
DUTY  VAR BYTE[8]
REGA  VAR BYTE
INDEX VAR BYTE 
I     VAR BYTE

TEMP VAR BYTE

W     VAR WORD

SYMBOL CLK=PORTA.0
SYMBOL DTA=PORTA.1
SYMBOL KIL=PORTA.2

OPTION_REG=%00000000  '1/2 bölme oranı
INTCON=%10100000
ON INTERRUPT GOTO KESME
TMR0=254
INDEX=7
BASLA:
     
      FOR DUTY[0]=0 TO 250
         GOSUB DELAY
      NEXT
     
      FOR DUTY[1]=0 TO 80
        GOSUB DELAY
      NEXT
      FOR DUTY[2]=0 TO 100
        GOSUB DELAY
      NEXT     
      FOR DUTY[3]=0 TO 120
        GOSUB DELAY
      NEXT     
      DUTY[4]=140       
      DUTY[5]=240
      DUTY[6]=200
      duty[7]=190
     
      GOTO BASLA
     
DELAY:
      FOR W=0 TO 300
        PAUSEUS 2
      NEXT
      RETURN       
           
DISABLE
KESME:
      INDEX=INDEX+1
      IF INDEX=8 THEN INDEX=0
      FOR I=0 TO 7
        TEMP=DUTY[I]
        REGA.0[I]=TEMP.0[INDEX]
      NEXT
      SHIFTOUT DTA,CLK,1,[REGA]
      KIL=1:KIL=0     
      SELECT CASE INDEX
      CASE 0
        TMR0=254:OPTION_REG=0
      CASE 1
        TMR0=248
      CASE 2
        TMR0=237
      CASE 3
        TMR0=215
      CASE 4
        TMR0=171
      CASE 5
        TMR0=83
      CASE 6
        TMR0=81:OPTION_REG.0=1
      CASE 7
         TMR0=80:OPTION_REG.1=1
      END SELECT
      INTCON.2=0
      RESUME
      ENABLE

tilkisinan

ETE hocam siz bi harikasınız çok teşekkür ederiz Yaptıklarınız bir harika.

Powered by EzPortal