Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

12F683 Mclr pin

Başlatan ChiliPepper, 31 Ocak 2024, 14:15:19

JOKERAS

Proteusta tahmini olarak Şemayı çizdim.(Tabi şema buysa).

Eski versiyon ve yeni versiyon işlemci ile denedim.

Yeni versiyonda hiç bir şey yapmadan PORT,TRIS vs değiştirmeden, okumadan aynen oluyor.
Eski tip,yani 12f683 le denediğimde ise Manuel resette Sorun yok ama 50Hz resette sürekli reset
oluyor. Bunu gerçekte denemek gerekir.

Pdf'i detaylı incelediğimde ise Sayfa 86 MCLR için Not yazmışlar.
12.Mesajımda anlatmaya çalıştığım ama sanırım anlatamadığım "LATCH-UP" probleminden bahsetmiş.

Ayrıca Yine Sayfa 86'da MCLR portunun Small sinyalleri tanımadığından dem vurmuşlar.
Gürültülere karşı bir özellikmiş, Çeviriden öyle anladım.
Acaba 50Hz sinyali Gürültü olarakmı algılıyor?



Yeni versiyon işlemci ile Eski versiyon işlemci arasında gördüğüm fark ise,
Yeni versiyon işlemcide işlemci Reset olduğunda PCON'daki MCLR biti sadece bir kez sıfırlanıyor.

Acaba bunu tasarlayan vatandaş Linker dosyasına girip Defult Registerlerlemi oynadı.
Eski MPLAB ta Linker dosyasını görebiliyorduk ama MPLABX te bunu göremedim.Linker dosyasına
nasıl ulaşılıyor Bilen varsa yazarsa sevinirim. 

-----------------------------

Bunu Porttaki 50Hz sinyali Dedekte ederek yapmak işin kolay tarafı ama handikapı
bu sinyal sürekli var ve her Reset hareketini kaçırmadan yapmak zorunda.
Bu PORT Change İnterruptı ile dedekte edilir fakat bu sefer işlemci Sürekli
50Hz ile İnterrupt Rutinine girip çıkmaktan başka bir iş yapamaz.Ana döngüdeki
RGB mix nasıl edecek?


M.Salim GÜLLÜCE

Alıntı yapılan: mehmet - 03 Şubat 2024, 01:12:53İşin ilginç yanı; bu mcunun mclr
pini asla çıkış olmuyor.
PIC işlemcilerde MCLR nin Çıkış port yapılabilenine henüz rastlamadım ben üstad.
Warmı öyle bir ürünü?

mehmet

Alıntı yapılan: M.Salim GÜLLÜCE - 05 Şubat 2024, 09:36:18PIC işlemcilerde MCLR nin Çıkış port yapılabilenine henüz rastlamadım ben üstad.
Warmı öyle bir ürünü?
Ben de görmedim de; hani, bilmediğim
bir mcu olabilir diye bu şekilde dedim.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

ChiliPepper

Alıntı yapılan: wanted0035 - 01 Şubat 2024, 18:19:36mclr pini input olarak tanımlanmıştır.

sizin tarifinize göre orada 2.5volt görmeniz, ac voltajin doğrultuktan sonra, filtrelemmemesinden kaynaklanıyor.  O pine scopla bakarsanız ip gibi bir dc sinyal görmeyeceksiniz, 50hz lik bir sinyal göreceksiniz. Bu yüzden 5 v yerine 2.5v görüyorsunuz.

işlemci o pinde 50hzyi görmezse enerjinin kesildiğini algılayıp işlem yapıyordur.
zaten 5V görmem gerekmiyor ki pin bc817 ile gndye çekiliyor 0V yerine 2.5v görüyorum

JOKERAS

#19
Alıntı yapılan: M.Salim GÜLLÜCE - 05 Şubat 2024, 09:36:18PIC işlemcilerde MCLR nin Çıkış port yapılabilenine henüz rastlamadım ben üstad.
Warmı öyle bir ürünü?

M.Salim GÜLLÜCE,

Yeni nesil Piclerin MCLR Registerini SW olarak açıp kapatabiliyorsun.
Açıp kapatmak demek Port'u Dış Dünyadan Ayırmak demek oluyor.
Bir tane AND kapısı bu.

Hani Fuse'den MCLR ON diyorsunya, Eski Piclerde bu Run time'da değiştirilemiyor.
Ama Yeni Nesil Piclerde, Run Time'da MCLR ON/OFF yapılabiliyor.
Hatta yeni nesil bazı Piclerde MCLR portunda Filitre var.

Bunu yeni ve eski nesil 2 Picte similasyonda denedim,yeni nesilde oluyor.
Eski nesil Pic12F683 olmuyor.YEni nesilde oluyor Fakat kararlı değil.
Yada Similasyon yanıltıyor.

Aşağıda yeni ve eski nesil piclerin regsiteri var.
Pic12F683 ün MCLR pini resette ne durumda olacağı belirsiz.
Ama yeni nesil Pic'te Resette 0 olur diyor.

Bu ne demek?



@ChiliPepper cevap yazsa konusunu takip etse bir sonuç çıkar.
Ama o da unuttu.



05 Şubat 2024, 14:06:19
Alıntı yapılan: ChiliPepper - 05 Şubat 2024, 13:58:26zaten 5V görmem gerekmiyor ki pin bc817 ile gndye çekiliyor 0V yerine 2.5v görüyorum

ChiliPepper ,niye yazmıyor diye mesaj yazarken cevap yazmış.
Çizdiğim Şemada Transistör tersmi?


 

JOKERAS


ChiliPepper

#21

Yollar pek görünmüyor sanırım ama devre basit zaten



05 Şubat 2024, 14:44:10
Alıntı yapılan: JOKERAS - 05 Şubat 2024, 14:35:34@ChiliPepper  Şema böylemi?




evet bu şekilde

JOKERAS

Sadece Ledleri Sabit yakıyor Rgb mix falan yok sanırım.
Ve işlemci başka iş te yapmıyor herhalde.

Bir de sadece Ledleri yakacak işlemciye neden harici krsıtal takılmış?
Çok ilginç!

ChiliPepper

Alıntı yapılan: JOKERAS - 05 Şubat 2024, 14:56:57Sadece Ledleri Sabit yakıyor Rgb mix falan yok sanırım.
Ve işlemci başka iş te yapmıyor herhalde.

Bir de sadece Ledleri yakacak işlemciye neden harici krsıtal takılmış?
Çok ilginç!

hayır sabit yakmıyor. Mix var, soft renk dönüşü var, sabit yanan renkler pwm ile başlıyor

JOKERAS

Şebeke kesilince Mod değiştiriyor değilmi?

Pic12f683 Port Change İnterrutpt'ı ile çözdüm.
Tabii Similasyonda deneyebiliyorum zira elimde işlemci yok.

Çin malımı bu ?
Bu benim Eskiden Aldığım Faydalı Model Patentimin kopyasına benziyor.
Rgb mix, Soft açılış,tek tek renk değiştirme,Disko mod vs benim patentime
benziyor.

Şebeke anahtarını aç kapat mod değiştirsin.Patentin özü buydu.





ChiliPepper

Alıntı yapılan: JOKERAS - 05 Şubat 2024, 16:03:53Şebeke kesilince Mod değiştiriyor değilmi?

Pic12f683 Port Change İnterrutpt'ı ile çözdüm.
Tabii Similasyonda deneyebiliyorum zira elimde işlemci yok.

Çin malımı bu ?
Bu benim Eskiden Aldığım Faydalı Model Patentimin kopyasına benziyor.
Rgb mix, Soft açılış,tek tek renk değiştirme,Disko mod vs benim patentime
benziyor.

Şebeke anahtarını aç kapat mod değiştirsin.Patentin özü buydu.


Evet çin malı, disko mod vs yok sadece 2 mod + 7 renk var şebeke anahtarı aç kapat şeklinde evet. Ben amatörce bir şekilde çözdüm, devrenin bu şekliyle mclr pini float kaldığı için her high olduğunda sayaç saydırıp low olduğunda sıfırladım. Enerji çekilince mclr highda kaldığı için bir süre sayac belirli sayıyı geçince modu arttır 0 olana kadar bekle şeklinde şuan sorun çıkarmadı daha deniyorum. Ama asıl mantığı merak ediyorum tabiki interrupt denedim ama float kaldığı için çözemedim tam nasıl yaptınız

JOKERAS

Siz baştan şema eklemediniz, sonra Port 2.5V tun altına düşmüyor,PortChange ile olmuyor,
vs deyince benim aklıma direkt İşlemci portunun kilitlenmesi geldi.
Çünkü Portta sistem çalışırken sürekli bir bir değer var.Sizin gördüğünüz 2.5Volt
Yarım dalga 50Hz.MCLR portunun Float durumunda bunu yapmak sorun çıkartabilir, çıkartmayabilirde.
Kararsız davranmasına sebep olabilir.Test etmek gerek.

Benim yaptığım yol daha basit. Kodları inceleyin olayı anlayacaksınız.
Bence PortChange yöntemi daha sağlıklı olur.

Koddaki "RelaseTimeCoun"t ve "GongTimeCount" ile Şebeke Anahtarının Açma kapa hızınıda ayarlayabilirsiniz.Kodlar duruma göre dahada optimize edilebilinir.
Bunu deneyin tam sizin istediğiniz gibi oldu diye düşünüyorum.

unsigned int GongTimeCount = 0, RelaseTimeCount = 0;

void interrupt isr(void) {

    /* TODO Add interrupt routine code here. */

    /* Determine which flag generated the interrupt */



    if (INTCONbits.GPIE && INTCONbits.GPIF) {

        INTCONbits.GPIE = 0;
        GPIObits.GP3; //Dummy;
        GongTimeCount = 5000;
        INTCONbits.GPIF = 0; /* Clear Interrupt Flag 1 */
        GPIObits.GP5 = !GPIObits.GP5; //Scop Test.

    }

}

void main(void) {


    unsigned char Mod = 0;

    ConfigureOscillator();

    IOCbits.IOC3 = 1;
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;
    INTCONbits.GPIF = 0;
    INTCONbits.GPIE = 1;

    TRISIObits.TRISIO0 = 0;
    TRISIObits.TRISIO1 = 0;
    TRISIObits.TRISIO2 = 0;
    TRISIObits.TRISIO5 = 0;



    while (1) {

        if (++RelaseTimeCount == 10000) {
            
            INTCONbits.GPIE = 1;
            RelaseTimeCount = 0;
        }

        if (GongTimeCount > 0 && INTCONbits.GPIE) {

            if (--GongTimeCount == 0) {

                if (++Mod > 2) {
                    Mod = 0;
                }
            }
        }
      GPIO = 1 << Mod;
    }
}



ChiliPepper

Alıntı yapılan: JOKERAS - 05 Şubat 2024, 16:38:50Siz baştan şema eklemediniz, sonra Port 2.5V tun altına düşmüyor,PortChange ile olmuyor,
vs deyince benim aklıma direkt İşlemci portunun kilitlenmesi geldi.
Çünkü Portta sistem çalışırken sürekli bir bir değer var.Sizin gördüğünüz 2.5Volt
Yarım dalga 50Hz.MCLR portunun Float durumunda bunu yapmak sorun çıkartabilir, çıkartmayabilirde.
Kararsız davranmasına sebep olabilir.Test etmek gerek.

Benim yaptığım yol daha basit. Kodları inceleyin olayı anlayacaksınız.
Bence PortChange yöntemi daha sağlıklı olur.

Koddaki "RelaseTimeCoun"t ve "GongTimeCount" ile Şebeke Anahtarının Açma kapa hızınıda ayarlayabilirsiniz.Kodlar duruma göre dahada optimize edilebilinir.
Bunu deneyin tam sizin istediğiniz gibi oldu diye düşünüyorum.

unsigned int GongTimeCount = 0, RelaseTimeCount = 0;

void interrupt isr(void) {

    /* TODO Add interrupt routine code here. */

    /* Determine which flag generated the interrupt */



    if (INTCONbits.GPIE && INTCONbits.GPIF) {

        INTCONbits.GPIE = 0;
        GPIObits.GP3; //Dummy;
        GongTimeCount = 5000;
        INTCONbits.GPIF = 0; /* Clear Interrupt Flag 1 */
        GPIObits.GP5 = !GPIObits.GP5; //Scop Test.

    }

}

void main(void) {


    unsigned char Mod = 0;

    ConfigureOscillator();

    IOCbits.IOC3 = 1;
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;
    INTCONbits.GPIF = 0;
    INTCONbits.GPIE = 1;

    TRISIObits.TRISIO0 = 0;
    TRISIObits.TRISIO1 = 0;
    TRISIObits.TRISIO2 = 0;
    TRISIObits.TRISIO5 = 0;



    while (1) {

        if (++RelaseTimeCount == 10000) {
            
            INTCONbits.GPIE = 1;
            RelaseTimeCount = 0;
        }

        if (GongTimeCount > 0 && INTCONbits.GPIE) {

            if (--GongTimeCount == 0) {

                if (++Mod > 2) {
                    Mod = 0;
                }
            }
        }
      GPIO = 1 << Mod;
    }
}




ccs c kullandığım için tam çözemedim yazdığınızı o kadar bilgili değilim malesef. Ama şu şekilde yapmıştım ben
#INT_RA
void pins_changed(void) {
   //You get here when the enabled pins change
   int8 changes;
   changes=input_change_a();

   if (bit_test(changes,3)) 
   {

      if(input(PIN_A3)==0)
      {
         sayac=0;
      }
   }
}

if(++sayac>20000)
         {
            mod++;
            sayac=0;
            if(mod>2)
            {
               mod=0;
               
            }
            delay_ms(1000);
            
         }   

M.Salim GÜLLÜCE

Alıntı yapılan: JOKERAS - 05 Şubat 2024, 14:03:53M.Salim GÜLLÜCE,

Yeni nesil Piclerin MCLR Registerini SW olarak açıp kapatabiliyorsun.
Açıp kapatmak demek Port'u Dış Dünyadan Ayırmak demek oluyor.
Bir tane AND kapısı bu.

Hani Fuse'den MCLR ON diyorsunya, Eski Piclerde bu Run time'da değiştirilemiyor.
Ama Yeni Nesil Piclerde, Run Time'da MCLR ON/OFF yapılabiliyor.
Hatta yeni nesil bazı Piclerde MCLR portunda Filitre var.

Bunu yeni ve eski nesil 2 Picte similasyonda denedim,yeni nesilde oluyor.
Eski nesil Pic12F683 olmuyor.YEni nesilde oluyor Fakat kararlı değil.
Yada Similasyon yanıltıyor.

Aşağıda yeni ve eski nesil piclerin regsiteri var.
Pic12F683 ün MCLR pini resette ne durumda olacağı belirsiz.
Ama yeni nesil Pic'te Resette 0 olur diyor.

Bu ne demek?



@ChiliPepper cevap yazsa konusunu takip etse bir sonuç çıkar.
Ama o da unuttu.



Şubat 05, 2024, 11:06:19
ChiliPepper ,niye yazmıyor diye mesaj yazarken cevap yazmış.
Çizdiğim Şemada Transistör tersmi?


 
Yaw babacıım Çıkış potu yapılanı dedim ama sen input  yda uyku modundaki girdileri derleyip toparlamışsın.
Çok eskilerde MCLR  hep MCLR oluyoru.
Sonraları birde input olabilme veya fonksiyonsuz olabilme olarak eklendi.
Ama hiç Output olamadı.

Anlatmak istediğimiz oydu  ;)
Ellerine sağlık emek çekmişsin sağolasın.
Belki birilerinin işine yara genede. :-*

JOKERAS

Bende CCS bilmiyorum.Ama mantık aynı gibi.

Ben Mantığı şu şekilde kurdum.

Devre çalışırken PortChange İnterrupt'ı Sürekli Kesme oluşturur.
Bunu istemiyoruz.Çünkü ana döngüde yapılacak iş her ne ise bunu sürekli
kesecekti.Gerçi 50Hz'de kesilmesi ne kadar sorun yaratır o ana döngüde çalışan
Kodun ne yaptığına göre değişir.

Bunun için "RelaseTimeCount" her 1000 değerine ulaştığında PortChange İnterruptını Enable eder
bakar ve ana döngüde aşağı doğru sayan "GongTimeCount" 'un değerini maks değer ile günceller ve Port Change'i Enable kapatır.

Sinyal kesilince ise Artık PortChange oluşmaz ve "GongTimeCount" Maks değer ile sürekli
güncellenmediği için aşağı doğru sayarak Sıfırlanır ve olayı gerçekleştirir.
"GongTimeCount"'un değeri artık sıfır olduğu için if sorgu Bloğuna artık giremez.
Burada INTCONbits.GPIE Sorgulaması ise olayı Kesme ile Senkron yapması için.
Eğer bir önceki kesme olayından bu noktaya gelmişse Pas geçer.

Bu olaylar VDD Kondansatörü boşalıncaya kadar olabilir.
VDD Kondnastörü boşlamadan işlem gerçekleşmeli.
Onun için "GongTimeCount" Değer güncellemesi ile bu süreyi Kondansatörün
Boşalma hızına göre ayaralayabilirisiniz.Büyük kondansatöre de gerek kalmaya bilir.
Açma kapama hızı da bu sayede ayarlanabilir.