16f876a Hc-06 kullanımı

Başlatan pic_acemisi, 08 Kasım 2019, 12:20:05

pic_acemisi

Merhaba arkadaşlar,

16f876a ile hc 06 bluetooth modülü ile denemeler yapıyorum. bilgisayardan terminal ile bilgi gönderiyorum gelen bilgiyi lcd de görmek istiyorum ama bilgi gelişi olmuyor. Karttan terminale bilgi gönderdiğimde ise çalışıyor gönderim yapıyor. Acaba nerede hata yapıyorum karta bilgi alamıyorum. (Hc-06 da rx te gerilim bölücü mevcut 3.3 ile çalıştığından)

( kesmeye girip girmediğinin kontrolü için x koyup saydırma yapayım dedim x de artmıyor yani kesmede bir yeri beceremedim)

Kullandığım kod şu şekilde :


DEFINE OSC 4

DEFINE LCD_DREG		PORTB
DEFINE LCD_DBIT		0
DEFINE LCD_EREG		PORTB
DEFINE LCD_EBIT		4
DEFINE LCD_RSREG	PORTB
DEFINE LCD_RSBIT	5
DEFINE LCD_BITS		4
DEFINE LCD_LINES	4

BILGI VAR WORD:x VAR BYTE

TRISA=%00000000:TRISB=%00010000:TRISC=%10000000
INTCON=%00000000:PIE1=%00000000:PIE2=%00000000

CMCON=7
ADCON1=7
OPTION_REG=%00000000

PORTA=0:PORTB=0:PORTC=0

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


Symbol GIE  =INTCON.7   'genel interruptları açıyor
Symbol PEIE =INTCON.6   'peripheralinterruptları açıyor
Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit

PIE1=0:GIE=1:PEIE=1:RCIE=1

On Interrupt GoTo KESME
 
HSEROUT[dec 50]   ; Bu komut çalışıyor bilgisayarda bu bilgiyi görüyorum

Basla:

lcdout $FE,$94," BILGI: ",dec4 bilgi
lcdout $FE,$D4," X: ",dec4 x

goto Basla

Disable
KESME:
     x=x+1
     HSERIN[BILGI]
     TEMP=RCREG
Resume
Enable  
  
end


Sigorta ayarlarım ise :
        __config _XT_OSC  & _WDT_OFF &_PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_ON & _WRT_OFF & _DEBUG_OFF & _CP_ALL

Hattuşa

benim önerim şu;
isisde 2 pic i usart haberleşmesini yaptır isisde doğru çalışırsa o kodu bleutooth ile dene

ete

Ana mantıkta bir hata yok. Programda da bir hata yok eksikler var.
Eksik-1: Her program mutlaka bir açılış gecikmesi ister. Bu gecikme en az 150 ms olmalıdır. 300 ms ideal olur ve programa başlamadan evvel bu gecikmeninverilmesi gerekir. Bunu yararı şöyle açıklanabilir. İŞlemcinin kendi iç registerleri vardır ve ilk açılışta bunlar değer alırlar veya ilgili adreslere yerleştirilirler. Bu zaman alan bir işlemdir ve an az 150 ms gerekir. Bunu yapmadan geçersen registerlerde rastgele yerleşir bazen program kilitlenebilirde.

Eksik-2: LCD kullanılacağı zaman bir ön açılışı (initalize) yapılması gerekir. Bu LCDOUT $FE,1 komutu ile yapılır. Bu komutun ardından hemen 150 ms lik bir gecikme daha verilmelidir. Aksi halde özellikle LCD regiterleri rastgele değerler alır ve açılışta ya LCD hiç çalışmaz yada olumsuz görüntüler ortaya koyabilir.

PIE1=0 komutunu da vermeye gerek yok. Sana lazım olan PIE1.5=1 yani usart kesmesinin set edilmesi ki bunu zaten yapıyorsun. Registerin diğer bitlerine dokunmaman daha uygun olur.

Başkada bir şey göremedim.
Ete

Powered by EzPortal