bisiklet lambası sorunu

Başlatan onurinci, 10 Aralık 2012, 16:03:56

onurinci

Hocam saygılar picproje'ye bir şey danıştım işin içinde pwm olunca yanıt alamadım sanıyorum bir kesme yapılması gerekiyor ben o kadar anlamıyorum bulduklarımı birleştirmeye çalışıyorum kısacası beceremedim.önerinizi bekliyeceğim .

Bisikletin arkasında bir uyarı lambası var ,birde switch mevcut  buton a basınca ledler flash yapıyor içini açtım bir Elan işlemci logic fet 6 adet led var.
benim gereksinimim ise cihaza enerji verdiğimde ledler full değilde %50 güçle yansın en azından karanlıkta farkedileyim freni sıktığımda reed switch mıknatısla tahrik oluyor ve pwm modundan çıkıp flaşör olsun 10 küsür kere çaksın yada sürekli çaksın freni bıraktığımda yine ledler yine pwm %50 moduna dönsünler istiyorum.
Elanı söktüm attım 12F675 taktım bir şeyler yazmaya çalıştım ya ledler flash etti yada pwm oldu bu ikisini arkadaşça geçindiremedim  takdirlerinize bırakıyorum....
http://s2.dosya.tc/server22/dSXTvl/TryButton.rar.html
7kb uzunluğunda rar dosyası bas,dsn,hex dosyası barındırıyor.





@ Device pic12F675  ,MCLR_OFF , PROTECT_OFF , WDT_OFF , INTRC_OSC_NOCLKOUT , CPD_OFF , BOD_OFF , PWRT_ON
       

TRISIO=24          'sets GPIO.3 and GPIO.4 as inputs and all others as outputs (or %00011000)
CMCON=7            'turns off comparator function [CMCON0=7]
ADCON0=0           'no ADC - doesn't seem necessary but may be a good idea
ANSEL=0            'no ADC input - IMPORTANT if using ports in digital mode
VRCON=0            'turns off voltage reference to minimize sleep current
INTCON=8           'Enables port change interrupt ie GPIE
IOCB=16            'sets GPIO.4 for Interrupt on change [IOC=16]
OPTION_REG.6=0        'INT on falling edge
OPTION_REG.7=0        '00000000 WPU enabled,
WPU=38             '00100110 = 38 set unused ports 1,2 and 5 tied to weak pull-up resistors     
'Define Variables
wakeup VAR GPIO.4   'input, interrupt on change.
LED VAR GPIO.0      'LED output
x VAR BYTE
'Initial settings
LED=0
               
basla:                'Basla Etiket
INTCON.0=0
Pause 100
@ Sleep
 
If GPIO.0=1 Then  'Eger GPIO.0=1 se Aasagidaki Kodu Çalistir değilse "ELSE" in altindakini çalistir
pwm GPIO.0,127,100 ' Send a 50% duty cycle PWM signal out Pin7 for 100 cycles pwm GPI1O.1,127,100 ' Send a 50% duty cycle PWM signal out Pin7 for 100 cycles
Else               'GPIO.0=1 değilse Asagidaki Kodu Çalistir.

For x= 1 TO 10
    LED=1
Pause 300
    LED=0
Pause 300
Next x
EndIf              'If Sonu
GoTo basla         'Baslaya geri git
End

ete

Bu istediğini 12F683 ile kolaylıkla yapabilirsin. Onda HPWM çıkışı mevcut. 12F675 ile yeniden program yazmak gerekir.
Yazdıklarının yapılmak istenen le bir alakasını kuramadım. ledlerin başlangıçta %50 duty ile yanması için Sleep modunu kullanmaman gerekir diye düşünüyorum. Belki 12F683 ile olabilir. Denemek lazım. ama 12F675 ile kesinlikle olmaz.
Sistem uykuya girerse program durur. Böylece yazılmsal PWM ise çalışmaz. Ama donanımsal PWM çalışabilir nede olsa geri planda çalışıyor. Dediğim gibi denemek gerekir.

Ete

onurinci

http://www.dosya.tc/server/INwVaP/Bisiklet.rar.html

Hocam saygılar ,kız mızmız etti baba bi haltı halledemedin vs vs. oturdum tekrar yazmayı denedim,

sonuçta bir şey belirdi sizdem ricam mantık hatası varmı ,çıkan form hakikaten pwm'mi bir bakabilirseniz sevinirim.

iyi çalışmalar dilerim.
@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF,CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
DEFINE OSC 4
DEFINE OSCCAL_1K 1 ' To Save Oscillator Calibration

CMCON = 7
ANSEL =0
ADCON0=0
OPTION_REG.7=0
GPIO=0
TRISIO=%00000001
WPU=7

pwmout  VAR GPIO.5
Led    var GPIO.5     
x var word
y var word

Main:
               
If GPIO.0=1 Then  'GPIO.0=1  ise kodu Çalistir değilse "ELSE" in altindakini

    PWM pwmout,100,1 

Else               'GPIO.0=1 değilse Asagidaki Kodu Çalistir.
    For x=1 To 125
             
        High LED
        Pause 2
        Next x
             
    For y=1 To 125
           
        Low LED
        Pause 2
        Next y

EndIf              'If Sonu

GoTo Main
   
    End
   
       

ete

Kullandığın PWM komutu anlık olarak PWM sinyali çıkartır sonra durur. Sanada bu lazım ise olur diyeceğim ama bana kalırsa olmaz.
İllaki 12F675 kullanacak isen kesme kullanmaktan başka çaren yok sanırım.

16F683 de direk geri planda çalışan HPWM sistemi olduğundan işin çok kolay. Bir iki satırlık komutla işini halledebilirsin.
Yok 675 ile çalışacağım diyorsan  aşağıdaki kodları dene bakalım.
ETE

@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF,CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
DEFINE OSC 4
DEFINE OSCCAL_1K 1 ' To Save Oscillator Calibration

CMCON = 7
ANSEL =0
ADCON0=0
OPTION_REG.7=0
GPIO=0
TRISIO=%00000001
WPU=1

OPTION_REG=%00000001  'BÖLÜCÜ 1/4 AYARLANDI
INTCON=0 'TMR0 kesmesi açıldı

SYMBOL FREN=GPIO.0
SYMBOL OUT=GPIO.5

Led    var GPIO.4     
SAYAC  var word 
FREQ   VAR WORD
ALCAK  var word
YUKSEK VAR WORD
HAM    var WORD

INTCON=%10100000   
SAYAC=50
OUT=1
PAUSE 300
TMR0=54
on interrupt goto kesme 

Main:
     IF FREN=0 then
       INTCON=0
       WHILE FREN=0   'FLASH YAPAN YER
         High OUT
         Pause 50    'FLASH LEDLERİN YANIK KALMA SÜRESİ
         LOW OUT
         PAUSE 50    'LEDLERİN SÖNÜK KALMA SÜRESİ
       WEND
       INTCON=%10100000
       ALCAK=50:YUKSEK=50
     ENDIF                   

GoTo Main
disable
kesme:
       IF SAYAC=0 THEN
          IF OUT=1 THEN
            OUT=0:SAYAC=ALCAK
            GPIO=0
          ELSE
            OUT=1:SAYAC=YUKSEK
            GPIO=255
          ENDIF         
          GOTO CIK
       ENDIF
       sayac=sayac-1       
CIK:   
       TMR0=253
       
       INTCON.2=0
       resume
       enable
       end   
    End


onurinci

hocam saygılar, sizin yazdığınız kod daha stabil bir sinyal üretiyor hafta sonu gerçek dereye adapte edip size

bilgi vereceğim ayrıca kod yol gösterici oldu .12F683 ile 12F675 arasında fiyat farkı uçurum değil. oscon

bu güne kadar hep gözümü korkuttu uzak durdum ileride bir hpwm örneği verebilirseniz cesaret'lenebiliriz.

kalın sağlıcakla..

ete

12F683 ile ilgili örneği aşağıda veriyorum. Gerekirse programına adapte edebilirsin.

Ete
@ DEVICE PIC12F683    
@ DEVICE PIC12F683, FCMEN_OFF 
@ DEVICE PIC12F683, IESO_OFF                                               
@ DEVICE PIC12F683, WDT_ON 
@ DEVICE PIC12F683, BOD_ON           
@ DEVICE PIC12F683, PWRT_ON             
@ DEVICE PIC12F683, PROTECT_OFF         
@ DEVICE PIC12F683, MCLR_OFF           
@ DEVICE PIC12F683, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
OSCCON=%01100001
CMCON0 = 7
'ADCON0=%10000000

'DEFINE ADC_BITS 10   
'DEFINE ADC_CLOCK 1   
'DEFINE ADC_SAMPLEUS 30

' ============= PWM Ayarları =========
CCP1CON = %00001100       ' CCP1, PWM mode
PR2     = 249             'max Duty=1000 olacak %50 için 500 oluyor.           '
T2CON   = %00000101       ' TMR2 on, prescaler 1:4   'bu işlmecide PWM Timer2 ile çalışıyor.
CCPR1L  = 0

GPIO=0
TRISIO= %00000000
ANSEL = 0
WPU=0

HAM VAR WORD
DUTY VAR WORD
X    var word

PAUSE 300
X=0

BASLA:
       DUTY=500 'max duty 1000 olabilir. 1000=%100 duty değeridir. %50 için 500 verilmesi gerekir.
       gosub PWM_VER
       pause 10
       goto basla
       
       
PWM_VER:       
       IF X=DUTY THEN return
          X=DUTY
          CCP1CON.4=X.0
          CCP1CON.5=X.1
          CCPR1L=x>>2           
       return

onurinci

hocam saygılar çok makbule geçti benim devreye uyarlamaya çalışacağım isiste pırıl pırıl bir sinyal göründü biraz boğuşayım,yoksa imdat derim kalın sağlıcakla..

Powered by EzPortal