rgb konusunda yardım...

Başlatan gokhangokcen, 31 Mayıs 2008, 02:31:44

gokhangokcen

slm arkadaşlar bana bir rgb devresi lazım foruma baktım fakat bulamadım )eger onceden varsa yerini bilen birisi olursa belirtirse sevinirim)
benim istedigim devrede 4 buton olacak (birisi anahtar) bunlardan 1. si rgb nin sabit kalıp veya kendi otomatik olarak degişmesini ayarlayacak. 2. si rgb otomatik degisirken hız + . 3. sü ise hız - olarak kullanılıyor.otomatik renk degistirirken 1. ve 2. butona aynı anda bastigimda renk beyaza dönüşüyor.
4. buton ise sabit renk moduna aldigimda butona bastigim sürece renk değişiyor elimi çektigimde o renk sabit kaliyor ve bu renk elektrikler kesilip gelse bile tekrar ayni renkde kaliyor.yani pic in epromuna yaziyor sanirsam renk bilgisini bana böyle bir devre lazım abiler ama elinde böyle bir devresi veya benzeri bişeyi olan varsa yardımlarınız bekliyorum.kendim ugrasip yazmak isterim fakat rgb nin mantigini tam olarak bilmedigim için yardımcı olursaniz cok sevinirim şimdiden teşekkürler...
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

ilker_32

İsteğe göre devre bulman zor. Aşağıdaki devreyi incele.


unalmustafa_85

verdiğin  rapid linkinde  söyle yazıyor..

An error has occured:
This file has been deleted.
Reason: Deleted by uploader.

ilker_32

Evet silinmiş. Bu kodlar sana biraz yardımcı olabiir.

Device = 18F4550
Clock = 48
Config PLLDIV = 5,
      CPUDIV = OSC1_PLL2,
      USBDIV = 2,
      FOSC = HSPLL_HS

Include "Randgen.bas"

Dim TMR2IE As PIE1.1,        
   TMR2IF As PIR1.1,        
   TMR2ON As T2CON.2,        
   Signal_Pin As PORTB.0    

Dim Red_Pin As PORTC.0,
   Green_Pin As PORTC.1,
   Blue_Pin As PORTC.2,
   Red_Duty As Byte,
   Green_Duty As Byte,
   Blue_Duty As Byte,
   Red_DutyVal As Byte,
   Green_DutyVal As Byte,
   Blue_DutyVal As Byte,
   RandomVal As Byte
   
Dim uS As Word,
   mS As Word            
   
Interrupt TMR2_Interrupt()
   High(Signal_Pin)
   Save(0)                    
   If TMR2IF = 1 Then          
       TMR2IF = 0            
       uS = uS + 50
       If uS >= 1000 Then
           uS = uS - 1000
           Inc(mS)
       EndIf        
       Inc(Red_DutyVal)
       Inc(Green_DutyVal)
       Inc(Blue_DutyVal)
       If Red_DutyVal > Red_Duty or red_Duty = 0 Then
           Red_Pin = 0
       Else
           Red_Pin = 1
       EndIf
       If Green_DutyVal > Green_Duty or Green_Duty = 0 Then
           Green_Pin = 0
       Else
           Green_Pin = 1
       EndIf
       If Blue_DutyVal > Blue_Duty or Blue_Duty = 0 Then
           Blue_Pin = 0
       Else
           Blue_Pin = 1
       EndIf                
   EndIf                    
   Restore                  
   Low(Signal_Pin)
End Interrupt

Private Sub TMR2_Initialize()
   TMR2ON = 0              
   TMR2IE = 0                    

   PR2 = 149                  
   T2CON = %00000001        
                             //        00 = Prescale is 1:1
                             //        01 = Prescale is 1:4
                            //        1x = Prescale is 1:16                                  
                             //      3:6 = Postscale              
                             //     0000 = 1:1 postscale
                             //     0001 = 1:2 postscale
                             //     0010 = 1:3 postscale...
                             //     1111 = 1:16 postscale
                                 
   TMR2 = 0                  // Reset TMR2 Value    
   TMR2IE = 1                // Enable TMR2 interrupts
   TMR2ON = 1                // Enable TMR2 to increment
   Enable(TMR2_Interrupt)
End Sub

// Start Of Program...
Low(Red_Pin)
Low(Green_Pin)
Low(Blue_Pin)
Red_Duty = 0
Green_Duty = 0
Blue_Duty = 0
Red_DutyVal = 0
Green_DutyVal = 0
Blue_DutyVal = 0

uS = 0
mS = 0

RandGen.Initialize(128)       // Initialize the Random Number generator
TMR2_Initialize               // Setup and enable TMR2

While True                    // Create an infinite loop
   RandomVal = RandGen.Rand  // Grab a random number from 0 to 255  
    Select RandomVal         // Find out what colour to increase/decrease
       Case 0 To 42
           While Red_duty < 255
               mS = 0
               Repeat
               Until mS = 19
               inc(Red_Duty)
           Wend
       Case 43 To 84
           While Red_duty > 0
               mS = 0
               Repeat
               Until mS = 19
               dec(Red_Duty)
           Wend
       Case 84 To 127
           While Green_duty < 255
               mS = 0
               Repeat
               Until mS = 19
               inc(Green_Duty)
           Wend
       Case 128 To 170
           While Green_duty > 0
               mS = 0
               Repeat
               Until mS = 19
               dec(Green_Duty)
           Wend
       Case 170 To 212
           While Blue_duty < 255
               mS = 0
               Repeat
               Until mS = 19
               inc(Blue_Duty)
           Wend
       Case 212 To 255
           While Blue_duty > 0
               mS = 0
               Repeat
               Until mS = 19
               dec(Blue_Duty)
           Wend
    End Select            
Wend

gokhangokcen

ilker abi yardımlarından dolayı teşekkür ederim fakat ben bu programdan çok fazla bişi anlamadım  :oops:
bana mantıgını anlatabilirmisiniz acaba şimdiden teşekkürler...
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

ilker_32

Bunları unutmuşum...

Module RandGen

Const MagicA = 7,
     MagicB = 7,
     MagicC = 255

Private Dim Seed As Byte

{
****************************************************************************
* Name    : Rand()                                                         *
* Purpose : Return a new Pseudo Random Number each time called             *
****************************************************************************
}
Public Function Rand() As Byte
   Seed = (MagicA * Seed + MagicB) Mod MagicC
   result = Seed
End Function

{
****************************************************************************
* Name    : Rand()                                                         *
* Purpose : Initialize the Random number generator                         *
*           The initial value could be a Value read from a Floating Analog *
*           PIC Pin.
****************************************************************************
}
Public Sub Initialize(ByVal InitialSeed As Byte)
   Seed = InitialSeed
   Seed = Rand()
End Sub

Ve

Device = 18F4620
Clock = 20

Include "usart.bas"
Include "convert.bas"
Include "RandGen.bas"

Dim RandomNumber As Byte

SetBaudrate(br9600)

// initialize the generator Initial Seed Value to 2
// for Full Random value you can use an ADC read on
// a floating AN PIC Pin
RandGen.Initialize(2)                                                

TRISB = 0 'All output

While true
  // generates a number
  RandomNumber = RandGen.Rand()    

  // write to RS233
  Write(DecToStr(RandomNumber),13,10)      

  // visualise number on PORTB leds (on my EasyPic Board)
  LATB = RandomNumber

  DelayMS(600)
Wend