MikroC - RF Verici

Başlatan PIC16F, 18 Haziran 2016, 16:57:49

PIC16F

Merhaba. Elimde 433mHz RF alıcı ve verici var.
pic16f628a ile transmitter dan '1' verisi göndermek ve arduino  ile bu veriyi almak istedim.

Ancak işe yaramadı.
Micro C kodunda hata yaptığımı düşünüyorum. İncelerseniz sevinirim.

#define spbrg 0x67;

void main() {

    trisb = 0;
    portb = 0;   // Set port b as output

    cmcon = 7; // close comparators

    UART1_Init(9600);
    delay_ms(250);

    TXSTA.TX9 = 0;
    TXSTA.TXEN = 1;
    RCSTA.SPEN = 1;
    TXSTA.SYNC = 0;
    TXSTA.BRGH = 1;
    SPBRG = spbrg; // 9600 kb

    while(1) {
    UART1_Write('1');
    delay_ms(1000);
    }

}



#define spbrg 0x67 --> buradaki değer için ise ; datasheet'a baktım. Dahili 4mHz osilatör kullanıyorum. Datasheet'de 4mhz iiçin spbrg değeri 130 olarak söylenmiş. Ben de hexadecimal'a çevirdim.

Teşekkürler.

Burak

#1
RCSTA = $90 ' Enable serial port & continuous receive
TXSTA = $24 ' Enable transmit, BRGH = 1
SPBRG = 25  ' 9600 Baud @ 4MHz, 0,16%


MikroC bilmiyorum ama Register değerleri 4 MHZ - 9600 Baudrate için kesinlikle yukarıdaki gibi olmalı .. SPBRG değerini decimal olarak vedim hex olarak yazılmamasına dikkat edilmeli .. Ayrıca TX pininin bulunduğu port pini (PORTB.2) için TRISB.2 değeri 1 yapılmalı ..

Burak
Ω Gens Una Sumus Ω

PIC16F

RCSTA = $90
TXSTA = $24

MicroC bunlarda hata veriyor. 'Invalid Expression.'   

Ve Trisb.2 değerini 1 yapmak için hangisi doğru ?
TRISB.F2 = 1;
TRISB.B2 = 1;
PORTB.B2 = 1; ?

Burak

#3
Bu syntax doğru demedim ve hatta MikroC bilmiyorumda demiştim . Senin yapman gereken doğru yazım syntax'ını kullarak bu kayıtçıların değerlerini dile düzgün şekilde anlatmak ... Yani yapman gerekenler ;

RCSTA kayıtçısına ikili olarak = 10010000  yada hexadecimal olarak = $90 değerini girmek veya onluk olarak = 144 girmek
TXSTA kayıtçısına ikili olarak = 100100 yada hexadecimal olarak= $24 değerini girmek veya onluk olarak = 36 girmek
SPBRG değerine onluk olarak 25 değerini girmek .. ikili olarak 11001 değerinide girebilirsin ..

Son olarakta PORTB.2'yi giriş olarak ayarlayacaksın .. Her ne kadar bu pin veri çıkışı sağlamak amacında olsada datasheet'te belirtildiği üzere giriş olarak ayarlanma zorunluluğu var ... Eğer gerekirse Hem PORTB.2 hemde PORTB.1'i giriş olarak ayarlayıp denemenide öneririm ..

Bu durumda derleyicin onluk tabanda bir sembol gerektirmiyosa syntax olarak  ;

RCSTA = 144
TXSTA =36
SPBRG =25
TRISB=6


değerlerini kullanman problem yaratmayacaktır ..

Burak

Ω Gens Una Sumus Ω

PIC16F

Dediğiniz gibi değerleri ayarladım. Ancak işe yaramadı. Binary, hexadecimal, decimal olarak da denedim. portb.b1 ve portb.b2 'yi giriş olarak ayarladım ancak gene olmadı.

Asıl yapmak istediğim, pic16f628a ile veri göndermek, bu veriyi arduino uno'ya bağlı olan alıcı ile almak ve ledi yakmaktı.
Sorun pic ile arduino yu birlikte kullanmaktan mı diye düşünüyorum ancak mantıklı gelmiyor. Sonuçta verici veri göndermekle, alıcı almakla sorumlu.

Burak

RF modülleri devreden çıkartıp PIC'in TX'i ile Arduino'nun RX'ini birbirine direkt olarak bağlayıp her iki tarafında işlevini yerine getirip getirmediğinden emin olmakla başlayabilirsin .. Eğer çalışırsa sonra RF modülleri devreye alırsın ..

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal