besleme tetiklemesi ile program istenmeyen şekilde çalış

Başlatan mech, 08 Kasım 2006, 23:59:42

mech

pic mikroişlemcim voltaj doğrultması ve 7805 ile çalışyor. Vdd ile Vss arasında 47 uF var.  PIC16F628 içten osilatörlü ve butonlar pulup'lı.
Üç buton var. Her butona basıldığında  bir melodi çalıyor.  İk anda hiç bir melodi çalmıyor (hiç bir tuşa basılmadığında).Bu normal.
Ancak, besleme voltajı geldiğinde (genelde tetikleyerek) bazen kendi kendine bir melodi çalmaya başlıyor. Yardımınızı rica ediyorum.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

ulaser84

olayı bende yaşadım.buzzer ihtiva eden bir devrede bazı zamanlar besleme kesilip açıldığında ses verip öyle devam ediyordu.picin sevmediği şeylerden biri anlık voltajlar.senin devrede butona basılmış gibi algılıyor tahminimce.kararlı bir besleme kullanman ve anlık voltaj değerlerini söndürmen gerekiyor.100 n yu bağlamayı unutma.

ete

Bu sorunların çözümüne bir nebze olsun yardımcı olmak için aşağıdakileri deneyin.
- Tris registerlerine değer vermeden önce portu sıfırlayın. Diyelimki PortB de ses çıkışlarınız bağlı. PortB=0 ve ardından TrisB=%000111000 şeklinde kullanın. Tabiiki eğer ses çıkışlarınız high ile aktif oluyorsa bunu yapın. LOW ile aktif oluyor ise tersini yapn yani Önce PortB=255 sonra TrisB=xxxxxx
şeklinde kullanın.
- Sigortalardan PWRT yi enable (ON) yapın.
- Birde MCLR ucunu 2k2 yada 4k7 ile +5V ta bağlayın ve bu ucu aynı zamanda 10 Mf ile GND ye bağlayın. İlk açılışta kondansatör doluncaya kadar
pic'i reset de tutacaktır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

vale9

Aynı sorunları bende yaşadım. Çözmek için interrupt kullandım. Aşağıdaki program yazmak istediğin programın tamamı ve çalışmasında sorun yok. Çıkışta bir kondansatör ile birlikte 8ohm hoparlör var.

@ DEVICE PIC16F628 
@ DEVICE PIC16F628, WDT_OFF
@ DEVICE PIC16F628, PWRT_ON
@ DEVICE PIC16F628, PROTECT_OFF
@ DEVICE PIC16F628, MCLR_ON
@ DEVICE PIC16F628, INTRC_OSC_NOCLKOUT

P   con 0 
P1  con 0 
P2  con 0 
P3  con 0 

C0  con 60  'DO 
CX0 con 61 
D0  con 62  'RE 
DX0 con 63 
E0  con 64  'MI 
F0  con 65  'FA 
FX0 con 66 
G0  con 67  'SOL 
GX0 con 68  'SOL 

C1  con 82  'DO........ 
CX1 con 85 
D1  con 87  'RE 
DX1 con 89 
E1  con 92  'MI 
F1  con 94  'FA 
FX1 con 95 
G1  con 97  'SOL 
GX1 con 99  'SOL 
A1  con 101 'LA 
AX1 con 102 'ladiyezsibemol 
B1  con 104 'si 
BX1 con 105 
h1  con 104 

C2  con 105 
CX2 con 106 
D2  con 108 
DX2 con 109 
E2  con 110 
F2  con 111 
FX2 con 112 
G2  con 113 
GX2 con 114 
A2  con 115 
AX2 con 116 
B2  con 117 
BX2 con 118 
h2  con 117 

SPKR VAR PORTB.3

;-----------------------------PROGRAM------------------------------

ON INTERRUPT GOTO BASLA

BEKLE:
    
    INTCON = %10010000
    @ sleep
    
    GOTO BEKLE

DISABLE

BASLA: 
    
    IF PORTB.4=1 THEN   ;SIMARIK
    
       SOUND SPKR,[d2,(100/8),d2,(100/8),d2,(100/8),d2,(100/8),f2,_
        (100/4),f2,(100/4),e2,(100/8),f2,(100/8),e2,(100/8),f2,(100/8),e2,_
        (100/8),f2,(100/8),e2,(100/8),d2,(100/8),c2,(100/8),c2,(100/8),c2,_
        (100/8),c2,(100/8),e2,(100/4),e2,(100/4),d2,(100/8),e2,(100/8),d2,_
        (100/8),e2,(100/8),d2,(100/8),e2,(100/8),d2,(100/4)] 
        
    ENDIF
      
    IF PORTB.5=1 THEN   ;BESİKTAS
    
        SOUND SPKR,[g1,(100/4),g1,(100/8),g1,(100/4),g1,(100/8),g1,(100/4),g1,_
        (100/8),a1,(100/8),g1,(100/8),a1,(100/8),b1,(100/4),b1,(100/8),b1,_
        (100/4),b1,(100/8),b1,(100/4),P1,(100/10),a1,(100/8),b1,(100/8),a1,_
        (100/8),b1,(100/4),b1,(100/8),b1,(100/4),a1,(100/8),g1,(100/4),P1,_
        (100/10),a1,(100/4),b1,(100/8),b1,(100/4),a1,(100/4),b1,(100/8),b1,_
        (100/4),P1,(100/10),g1,(100/4),g1,(100/8),a1,(100/4),a1,(100/8),a1,_
        (100/4),a1,(100/4)]
        
    ENDIF
    
    IF PORTB.6=1 THEN   ;BURCAK
        
        SOUND SPKR,[b1,(100/8),c2,(100/4),c2,(100/8),c2,(100/4),e2,_
        (100/4),d2,(100/4),c2,(100/4),b1,(100/4),a1,(100/4),a1,_
        (100/8),b1,(100/4),a1,(100/8),g1,(100/4),#f1,(100/8),g1,_
        (100/8),a1,(100/4)]
    
    ENDIF
       
    
RESUME
    
ENABLE

END
    
Hayat 1'ler ve 0'lardan ibarettir.

showtime


ete

@Mech,

Bir sürü öneri aldın. Denemeler de yapmışsındır. Bu konu pek çok kişiyi ilgilendirebilecek bir konu. Tecrübelerini aktarırsan seviniriz.
Sorun devam ediyormu? bir çözüm buldu isen hangisidir. Lütfen bildiriver.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mech

ben hepsini denedim arkadaşlar. Arkadaşın verdiği kod çalışıyor ancak benim 5 butonum var. 4. bit =1 yapılarak port4~7 arasında kesmeler aktif oluyor.
   Devrenin heryerine 100n takmakla arkadaş neyi kastetti acaba. rastgele deneyerek mi.

   bu arada power up timer etkili bir çözüm tetiklemeyi baya azaltıyor.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

Bu konu hakkında forumda /otomasyon/ bölümünde /parazitlenme ve resetleme/ diye bir başlık var. Oldukça değerli deneyimler mevcut. Bilginize...

http://picproje.org/index.php/topic,2588&postdays=0&postorder=asc&start=0
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

showtime

devrenin heryerinden kastim besleme ile şase arasındaki her elemana bir de 100 n at. pic in beslemesine sensörün beslemesine gibi. ben otomobilde bu tür problemle karşılaşmıştım ve bu şekilde çözdüm. ama kesin olarak faydalı birşey var ki picin beslemesine atacağın 100n pic e çok yakın olmalı. ekranlamadan dolayı oluşan parazitleri 100n kesin önlüyor.