PİC16F877 Hakkında ufak bir sorun

immortall

Üye
Katılım
10 Eki 2018
Mesajlar
56
Puanları
3
Yaş
24
Arkadaşlar merhaba,
Ufak bir problem var. 7 segment display e 0-9 arası rakamları yazdırmak istiyorum. Fakat 2 ye kadar sayıyor. Başa dönüyor. Nedeni nedir acaba? Aynı şekilde kara şimşek uygulaması yaptığımda ledlerin 2 si yanıp başa dönüyordu. Anahtarın durumuna göre (0-1) 4 ledin yanıp 4 ledin söndürüldüğü uygulamada sürekli aynı ledler yanıyordu. Anahtarın konumu değişse de aynı ledler yanıyordu.

7 Segment uygulaması kodları ve devre; (Program MPLAB-X)
Kod:
#include <xc.h>



// CONFIG

#pragma config FOSC = XT     // Oscillator Selection bits (RC oscillator)

#pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)

#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)

#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)

#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)

#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)

#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)

#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 4000000

// #pragma config statements should precede project file includes.

// Use project enums instead of #define for ON and OFF.

int dizi[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67};

void main(void) {



    TRISB=0x00;



    while(1)

    {

        for(int i=0; i<10; i++)

        {

            PORTB=dizi;

            __delay_ms(1000);

        }

    }

    

    

}
Nerede hatam var acaba? Teşekkür ederim.
 

Ekli dosyalar

Moderatör tarafında düzenlendi:

kaptan_

Katılımcı Üye
Katılım
1 Şub 2014
Mesajlar
534
Puanları
58
Kod:
PORTB=dizi[i];
 
Konu Sah
I

immortall

Üye
Katılım
10 Eki 2018
Mesajlar
56
Puanları
3
Yaş
24
Kod:
PORTB=dizi[i];
PORTB=dizi; bu şekilde yazdım forum kabul etmedi nedense o kısım doğru yani
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,771
Puanları
384
Yaş
32
Kod eklerken code tag kullanın.
Yıldız * işaretleri olmadan şu şekilde yazılacak:
[code*]
Kodlar buraya
[/code*]

Programdaki şu satırı
Kod:
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
Şununla değiştir:
Kod:
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT DISabled)
Watch dog timer Bekçi köpeği diye araştırabilirsin.
 
Konu Sah
I

immortall

Üye
Katılım
10 Eki 2018
Mesajlar
56
Puanları
3
Yaş
24
Kod eklerken code tag kullanın.
Yıldız * işaretleri olmadan şu şekilde yazılacak:
[code*]
Kodlar buraya
[/code*]

Programdaki şu satırı
Kod:
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
Şununla değiştir:
Kod:
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT DISabled)
Watch dog timer Bekçi köpeği diye araştırabilirsin.
Öncelikle cevabınız için teşekkür ederim. 7 Segment display uygulamasında sorunum çözüldü. Fakat led uygulamasında aynı sorun devam ediyor. Butona basılınca aynı ledler yanıyor.
Kod:
#include <xc.h>
// CONFIG
#pragma config FOSC = XT     // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF        // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
#define _XTAL_FREQ 4000000
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
void main(void) {
   
    TRISB=0x00;
    TRISA=0xFF;
    while(1)
    {
        if (RA0==1){
            PORTB=0x0F;
        }
        if (RA0==0){
            PORTB=0xF0;
        }
    }   
}
 

Ekli dosyalar

  • 61.9 KB Görüntüleme: 4
  • 64.4 KB Görüntüleme: 4

Erdem⁣

Katılımcı Üye
Katılım
14 Ocak 2013
Mesajlar
577
Puanları
58
Denemeden yazıyorum ama şu kodun çalışması lazım.
C:
#include <pic.h>

#ifndef _XTAL_FREQ
// Saat frekansı 16 Mhz
#define _XTAL_FREQ 16000000
#endif

__CONFIG (FOSC_HS & WDTE_OFF & LVP_OFF & CPD_OFF & CP_OFF);

int main()
{
    TRISAbits.TRISA0 = 1; //RA0 giriş
    TRISB = 0;    // PORTB çıkış

    PORTB = 0;    // PORTB üzerindeki tüm LED'ler kapalı

    while(1)
    {
        if (PORTAbits.RA0 == 1)
        {
            __delay_ms(250);
            PORTB = 0x0F; // b 0000 1111
        }
        else if (PORTAbits.RA0 == 0)
        {
            __delay_ms(250);
            PORTB = 0xF0; // b 1111 0000
        }
    }
}
 
Son düzenleme:
Konu Sah
I

immortall

Üye
Katılım
10 Eki 2018
Mesajlar
56
Puanları
3
Yaş
24
Denemeden yazıyorum ama şu kodun çalışması lazım.
C:
int main()
{
    TRISAbits.TRISA0 = 1; //RA0 giriş  
    TRISB = 0;    // PORTB çıkış

    PORTB = 0;    // PORTB üzerindeki tüm LED'ler kapalı

    while(1)
    {
        if (PORTAbits.RA0 == 1)
        {
            __delay_ms(250);
            PORTB = 0x0F; // b 0000 1111
        }
        else
        {
            __delay_ms(250);
            PORTB = 0xF0; // b 1111 0000
        }
    }
}
void main(void) kısmını silip mi yazacağım? Silip denedim derlemede sıkıntı çıkmadı ama ledler yine değişmedi hep aynı ledler yanıyor.
 

Erdem⁣

Katılımcı Üye
Katılım
14 Ocak 2013
Mesajlar
577
Puanları
58
Benzetim programı üzerinde mi deneme yapıyorsunuz. Eğer öyleyse gerçek devre üzerinde denemenizi tavsiye ederim.

Üstteki kodu denemedim çünkü 8 tane LED takmam gerekecek. Ama kodun tamamını gösterecek şekilde düzenledim.

Aklıma gelen fikir RA0 yerine RD0'u giriş ucu olarak tanımlayıp tekrar deneyebilirsiniz.

Daha önce paylaştığım kara şimşek uygulamasını deneme kartı üzerinde denemiştim. PORTB'de 8 tane LED takılı.

LED'lerin B0'dan B7'e kadar sırayla aynı anda ikisi yanacak şekilde yanıp sönmesi gerekiyor.

Bu uygulamayı deneyebilirsiniz.

16F877A kılavuzunda 4Mhz için seçilecek sığacı 15pF olarak gösteriyor.
 

mhmt_olgun

Üye
Katılım
27 Eki 2020
Mesajlar
2
Puanları
1
Yaş
21
Arkadaşlar birşy sormak istiyorun
Ben asansör işi yapıyorum ve asansör kumanda kartlarını microdenetleyicilerke programlayacağız sorum şu mikrodenetleyicilere can bus seri haberleşme programaı yazmak zormudur daha önce hiç yazmadım
 

Erdem⁣

Katılımcı Üye
Katılım
14 Ocak 2013
Mesajlar
577
Puanları
58
Daha önce hiç denemedim.

Ama burada anlatılanlara göre aslında CAN haberleşme protokolü için tüm PIC'ler kullanılabiliyor. Bazı PIC'lerin (örneğin PIC18F258) CAN iletişimi kolaylaştıran bazı bileşenlere sahip olduğunu öğreniyoruz.

Dahili CAN desteği olmayan bir mikro denetleyici kullandığınızda (örneğin PIC16F877A) mikro denetleyicinin yanı sıra MCP2515 CAN denetçi yongası ve MCP2551 veya TJA1040CAN alıcı yongasına ihtiyaç duyuluyor.

Yukarıdaki örnekte iki tane PIC16F877 kullanılmış. Bir tanesi LM35'ten gelen sıcaklık bilgilerini okuyor, diğeri ise CAN BUS iletişim protokolü ile gelen verileri gösteriyor.
 

Sponsor Bağlantı

Forum istatistikleri

Konular
113,041
Mesajlar
795,537
Kullanıcılar
414,973
Son üye
cans55

Yeni konular

Üst