2 Buton 2 Led yine kesme

Başlatan ipek, 16 Ekim 2011, 21:54:09

ipek


http://hotfile.com/dl/132496097/d036249/12F675_Two_Button.rar.html
isis dosyası....

2 adet motorum var bunlar 100 ma çekiyorlar 12 ma çeken REED röle ile hallettim sayılır.

a butonu a motorunu açıyor kapatıyor b butonu b motoruru açıyor kapatıyor.

yani motorlar birbirinden bağımsız çalışıyorlar.

istiyorumki motorlar döner iken motorlara ait iki adet yanıp sönsün motorların aktif olduğunu bilelim.

yine bu program counteri ve kesme başımın tatlı belaları buna kafa basmadığı için şöyle yap böyle yap

yorumlarının bana yararı dokunmayacağı açık kod parçacığı öneren arkadaşların önerilerine açığım.

aciliyet söz konusu değil şimdilik kendinden yanıp sönen led bağladım ama bu uygulamanın yakışık

almadığı madem mikro işlemci var niye diye düşündüm ..saygılar...


Device = 12F675
Config WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,MCLRE_OFF,INTRC_OSC_NOCLKOUT

Xtal = 4

define osccal_1k 1               
CMCON = 7          ' SETS DIGITAL MODE
ANSEL = 0          ' GPIO.0 TO GPIO.3 SET AS DIGITAL
TRISIO = %00011000    ' 1 input 0 output left start
VRCON.7 = 0       ' TURN OFF VOLTAGE REFERENCE
WPU = %011000       ' any pin pullup 1 pullup
OPTION_REG.7=0      ' pullup enables
'INTCON = 0       ' No interrupt
Symbol LED = GPIO.2
Symbol LEDA = GPIO.5


GPIO=0    'CLEAR ports
                       
        Dim BUF1 As Byte            ' Working buffer 1 for button command
      Dim BUF2 As Byte         ' Working buffer 2 for button command

      Symbol SW1   = GPIO.3
      Symbol SW2   = GPIO.4

      
      Symbol LED1 = GPIO.0
      Symbol LED2 = GPIO.1

      DelayMS 500      ' Wait for PICmicro to stabilise
        Clear            ' Clear buffers

Chk1:   DelayMS 25
   Button SW1,0,40,5,BUF1,0,Chk2   ' Check Button 1 (Skip to 2 if Not Pressed)
   Toggle LED1         ' Toggle LED if pressed   
'       High LED
'       DelayMS 250
'       Low LED
'       DelayMS 250       
           
Chk2:   Button SW2,0,40,5,BUF2,0,Chk1   ' Check Button 2 (Skip to 3 if Not Pressed)
   Toggle LED2                     ' Toggle LED if pressed      

'       High LEDA
'       DelayMS 250
'       Low LEDA
'       DelayMS 250
                         
        GoTo Chk1                  '

dyonizos

selamlar
PULSOUT LED1 , 1000

seklinde kullanmayı denedinizmi?

ipek

dyonizos
denedim süre  olarak  1 kere yanıyor ve sönüyor bunu döngüye sokarsam program counter buna hizmet ettiğinden

butonlara bassamda nafile yan sönde komaya giriyor.

pwm.c

#3
@ipek
sizin için kodlarda biraz değişiklik yaptım, umarım işinizi görür. eklemek istediğiniz başka fonksiyonlar varsa yardımcı olurum.

buyurun:
https://yadi.sk/d/fTbl7act35bG5W
alternatif:
http://www.mediafire.com/file/0spk953438d67kj/12F675_Two_Button.zip

Device = 12F675
Config WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,MCLRE_OFF,INTRC_OSC_NOCLKOUT

Xtal = 4

define osccal_1k 1               
CMCON = 7 			' SETS DIGITAL MODE
ANSEL = 0 			' GPIO.0 TO GPIO.3 SET AS DIGITAL
TRISIO = %00011000 	' 1 input 0 output left start
VRCON.7 = 0 		' TURN OFF VOLTAGE REFERENCE
WPU = %011000 		' any pin pullup 1 pullup
OPTION_REG.7=0		' pullup enables
'INTCON = 0 		' No interrupt
 Symbol LED = GPIO.2
 Symbol LEDA = GPIO.5


 GPIO=0    'CLEAR ports
                 		
        Dim BUF1 As Byte		
		Dim BUF2 As Byte			
		Dim SAYAC1 As Byte		
		Dim SAYAC2 As Byte			


		Symbol SW1	= GPIO.3
		Symbol SW2	= GPIO.4

		
		Symbol LED1 = GPIO.0
		Symbol LED2 = GPIO.1

		DelayMS 500						' Wait for PICmicro to stabilise
        Clear							' Clear buffers

Chk1:	
        DelayMS 10
        If LED1=1 Then
        SAYAC1=SAYAC1+1
        If SAYAC1=50 Then 
        Toggle LED
        SAYAC1=0
        EndIf
        EndIf
        
		Button SW1,0,40,5,BUF1,0,Chk2	' Check Button 1 (Skip to 2 if Not Pressed)
		Toggle LED1						' Toggle LED if pressed	
        LED = LED1
        	
Chk2:	

        If LED2=1 Then
        SAYAC2=SAYAC2+1
        If SAYAC2=50 Then 
        Toggle LEDA
        SAYAC2=0
        EndIf
        EndIf
        
        Button SW2,0,40,5,BUF2,0,Chk1	' Check Button 2 (Skip to 3 if Not Pressed)
		Toggle LED2                     ' Toggle LED if pressed		
        LEDA = LED2
       						
        GoTo Chk1						' Do it forever
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

OG

#4
http://hotfile.com/dl/132526173/aceeff3/12F675_Two_Button.rar.html

Device = 12F675
Config WDT_OFF, PWRTE_ON, CP_OFF, BODEN_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT

Xtal = 4
Set_OSCCAL

'define osccal_1k 1               
CMCON = 7 			' SETS DIGITAL MODE
ANSEL = 0 			' GPIO.0 TO GPIO.3 SET AS DIGITAL
TRISIO = %00011000 	' 1 input 0 output left start
VRCON.7 = 0 		' TURN OFF VOLTAGE REFERENCE
WPU = %011000 		' any pin pullup 1 pullup
OPTION_REG.7=0		' pullup enables
'INTCON = 0 		' No interrupt
Symbol LED_1 = GPIO.2
Symbol LED_2 = GPIO.5
 

Dim led_sayac As Word
Dim x As Byte

Dim konum As Byte

Symbol SW1	= GPIO.3
Symbol SW2	= GPIO.4


Symbol Role_1 = GPIO.0
Symbol Role_2 = GPIO.1


GPIO = 0    'CLEAR ports
DelayMS 500						' Wait for PICmicro to stabilise

                 		

hepsi_kapali:
    konum = 0
    led_sayac = 0
    Role_1 = 0
    Role_2 = 0
    LED_1 = 0
    LED_2 = 0

''''''''''''''''''    
b_bekle_1:
    If SW1 = 0 And SW2 = 0 Then hepsi_yanik
    If SW1 = 0 Then bir_yanik 
    If SW2 = 0 Then iki_yanik
    DelayMS 10
    
GoTo b_bekle_1

''''''''''''''''''''''
hepsi_yanik:
    konum = 3
    
    Role_1 = 1
    Role_2 = 1
    LED_1 = 1
    LED_2 = 1
    
hepsi_yanik_2:

    '' Kontak sıcraması önleyicisi ve led süre sayıcısı
    For x = 1 To 200
        DelayMS 1                       '' 1ms lik gecikme
        led_sayac = led_sayac + 1       '' süreye 1ms ekle
        If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
            led_sayac = 0
            Toggle LED_1
            Toggle LED_2
            If SW1 = 0 Or SW2 = 0 Then hepsi_yanik_2    '' Buton bırakmayı bekle, kontak sıcraması önleyerek
        EndIf
    Next
    
''' her iki buton da bırakılmış, şimdi buton basılmasını bekle, bu arada ledleri flasha devam
hepsi_yanik_3:
    DelayMS 1                           '' 1ms lik gecikme
    led_sayac = led_sayac + 1       '' süreye 1ms ekle
    If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
        led_sayac = 0
        Toggle LED_1
        Toggle LED_2
    EndIf
    
    ''' 1 nolu buton basılmış,
    If SW1 = 0 Then
        LED_1 = 0                   '' yanık idi sönsün
        Role_1 = 0                  '' çekili idi bıraksın
        konum = 2
    
        '' 1 basıldı ama Peki hemen 2 de basilacakmi (ikisi birden basılması için 200ms bekle)
        For x = 1 To 200            
            DelayMS 1
            led_sayac = led_sayac + 1       '' süreye 1ms ekle
            If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
                led_sayac = 0
                Toggle LED_2
            EndIf        
        
            If SW2 = 0 Then                 '' 200ms içinde 2. de basılırsa
                LED_2 = 0                   '' yanık idi sönsün
                Role_2 = 0                  '' çekili idi bıraksın
                konum = 0
                GoSub iki_buton_birak
                GoTo hepsi_kapali
            EndIf
        Next
    
    '' 1 basıldıktan sonra kısa sürede diğer buton basılmadı    
    GoTo iki_yanik      '' yalnızca 2 yanık
        
    EndIf
    
    
    ''' 2 nolu buton basılmış,
    If SW2 = 0 Then
        LED_2 = 0                   '' yanık idi sönsün
        Role_2 = 0                  '' çekili idi bıraksın
        konum = 1
    
        '' 2 basıldı ama Peki hemen 1 de basilacakmi (ikisi birden basılması için 200ms bekle)
        For x = 1 To 200            
            DelayMS 1
            led_sayac = led_sayac + 1       '' süreye 1ms ekle
            If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
                led_sayac = 0
                Toggle LED_1
            EndIf        
        
            If SW1 = 0 Then                 '' 200ms içinde 2. de basılırsa
                LED_1 = 0                   '' yanık idi sönsün
                Role_1 = 0                  '' çekili idi bıraksın
                konum = 0
                GoSub iki_buton_birak
                GoTo hepsi_kapali
            EndIf
        Next
    
    '' 2 basıldıktan sonra kısa sürede diğer buton basılmadı    
    GoTo bir_yanik      '' yalnızca 1 yanık
        
    EndIf
    
    '' basılı buton yok
GoTo hepsi_yanik_3
        
'''''''''''''''''''''''''''''''''        
iki_yanik:      '' yalnızca 2 yanık
    konum = 2
            
    Role_2 = 1
    LED_2 = 1
    
    LED_1 = 0              
    Role_1 = 0 
    
    GoSub iki_buton_birak                  
   
iki_yanik_2:
    DelayMS 1
    led_sayac = led_sayac + 1       '' süreye 1ms ekle 
    If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
        led_sayac = 0
        Toggle LED_2
    EndIf
    
    ''' 2 nolu buton basılmış sönecek,
    If SW2 = 0 Then
        LED_2 = 0                   '' yanık idi sönsün
        Role_2 = 0                  '' çekili idi bıraksın
        konum = 0
        GoSub iki_buton_birak
        GoTo hepsi_kapali
    EndIf 
    
    ''' 1 nolu buton basılmış, 1 sönük idi oda yanacak (hepsi yanacak)
    If SW1 = 0 Then
        If LED_2 = 1 Then LED_1 = 1     '' ledler senkron yansın (beraber yanıp sönsün)
        Role_1 = 1
        konum = 3
        GoTo hepsi_yanik_2                  
    EndIf       
     
             
GoTo iki_yanik_2

'''''''''''''''''''''''''''''''''        
bir_yanik:      '' yalnızca 1 yanık 
    konum = 1
           
    Role_1 = 1
    LED_1 = 1
    
    LED_2 = 0              
    Role_2 = 0  
    
    GoSub iki_buton_birak                 
   
bir_yanik_2:
    DelayMS 1
    led_sayac = led_sayac + 1       '' süreye 1ms ekle 
    If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
        led_sayac = 0
        Toggle LED_1
    EndIf
    
    ''' 1 nolu buton basılmış sönecek,
    If SW1 = 0 Then
        LED_1 = 0                   '' yanık idi sönsün
        Role_1 = 0                  '' çekili idi bıraksın
        konum = 0
        GoSub iki_buton_birak
        GoTo hepsi_kapali
    EndIf 
    
    ''' 2 nolu buton basılmış, 2 sönük idi oda yanacak (hepsi yanacak)
    If SW2 = 0 Then
        If LED_1 = 1 Then LED_2 = 1     '' ledler senkron yansın (beraber yanıp sönsün)
        Role_2 = 1
        konum = 3
        GoTo hepsi_yanik_2                  
    EndIf       
     
             
GoTo bir_yanik_2






''''''''''''
iki_buton_birak:
    If konum = 0 Then
        LED_1 = 0
        LED_2 = 0
    EndIf

    For x = 1 To 100
        DelayMS 1
        led_sayac = led_sayac + 1
        If led_sayac > 700 Then         '' 700ms olmuşsa led durumunu değiştir
            led_sayac = 0
            
            If konum = 1 Then
                Toggle LED_1
            EndIf
            
            If konum = 2 Then
                Toggle LED_2
            EndIf 
            
            If konum = 3 Then
                Toggle LED_1
                Toggle LED_2
            EndIf                  
            
        EndIf
        
        If SW1 = 0 Or SW2 = 0 Then iki_buton_birak
    Next
Return
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ipek

iki ayrı yiğidin iki ayrı yoğrt yiyişi varmış diye gep duymuşumdur hakikaten doğruymuş.. ;D

klavyenize sağlık eksik olmayın bana düşen görevde nasıl olmuşu bulmak kalın sağlıcakla saygılar..

OG

Kod çok daha kısaltılabilir ama pic'de boş yer olduğu için uğraşmak zor geldi.

Röleyi direk pic ile sürüyorsanız ki tavsiye edilmez, küçük de olsa 1-2 ohm direni porta seri girmekte fayda var. Ayrıca röle bobinine paralel 10nF fena olmaz. Pic bazen bobin yükü ile sapıtabilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ipek

OG sağolasın aslında orada solid state DC röle var Reed diyot'ta koysam bazen çipi resete zorladı çıkş noktasını

skopla izledim küçükte olsa pik yaratıyor komikte olsa bazı orijinal kartlar gördüm 16C54 direkt REED röleyi sürmüş

fakat sink değilde source çalışmşlar bir müddet sonra benim piyasadan temin ettiklerim 600 yada 800 ohm üşenmedim bacağını

ayırdım nerede ise 2 kohm geliyor ve içine diyodu tıkalamış..... :) yine buna benzer bir devre ile uğraşıyorum şevkim kırılmasın diye

sonuna kadar uğraşayım sonra cansimidi isterim kalın sağlıcakla......