16F1827 HC-05 Bluetooth ve EUSART problemi

Başlatan gogoce, 08 Nisan 2020, 20:12:58

gogoce

Merhaba ,
Malum covid-19 salgını nedeniyle bende evde kalıp işe gidemeyenlerdenim. Uzun süredir HC-05 modülünü pic ile çalıştırmak istiyordum. Basit bir devre yaptım. 74HC595 ile 16 çıkış elde ettim. HC-05 den O1-O2-O3-O4 gibi verileri terminal program ile telefonumdan gönderebiliyorum. Sanırım EUSART olayına takıldım. Amacım pic ile hc-05 den gelen veriler doğrultusunda istediğim ledi yakmak . Bu konuda yardımcı olabilir misiniz acaba
(NOT:HC-05 38400 baudda bilgi gönderiyor. Bu yüzden EUSART haberleşmesinin doğruluk yüzdesini arttırmak için frekansı 8mhz yaptım)

Saygılarımla

DEFINE OSC 8
ASM
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_ON & _CPD_ON & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _LVP_OFF & _STVREN_OFF
ENDASM
OSCCON = %01110000          '8 mhz internal clock, PLL off
DEFINE ADC_BITS 10     ' 10 bit A/D Conversion
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 5 ' 5 uS A/D sample time
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 12  ' 38400 Baud @ SPBRGH = 0
BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
TRISA = %00000000     'RA2 input, all others output
TRISB = %00000010
ANSELA = %00000100      ' AN on PortA.2 analog
ANSELB = %00000000      ' Digital inputs
ADCON1 = %10010000       'right justified, clock = fosc/8, neg ref = Vss, pos ref = vdd
INTCON = %11000000
FVRCON = 0
DACCON0 = 0
DACCON1 = 0
INTCON.7 = 1 ;global kesme aktif
INTCON.6 = 1 ;peripheral kesme aktif
PIE1.5 = 1
CM1CON1 = 0
CCP1CON=0
CCP2CON=0
ON INTERRUPT GOTO KESME
VERI VAR BYTE
TEMP VAR BYTE
analog var word
DTA VAR PORTB.3
CLK VAR PORTB.5
OE VAR PORTB.4
M1 VAR BYTE
M2 VAR BYTE
X VAR BYTE
CLEAR
SHIFTOUT DTA,CLK,1,[M1,M2]
PULSOUT OE,1
PAUSE 150

BASLA:
IF VERI=5 THEN
M1=255
GOSUB GONDER
ENDIF
goto basla




GONDER:
SHIFTOUT DTA,CLK,1,[M1,M2]
PULSOUT OE,1
PAUSE 100
VERI=0
RETURN




KESME:
DISABLE
HSERIN [WAIT("O"),VERI]  
    
    TEMP=RCREG 
    Resume
    enable
END


Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

Ufak tefek bir iki şey var kusur olarak gördüğüm.
Birincisi;
Kesme kullanılan programda pause kullanmayın diye binlerce kez söyledim ama hala yapılıyor,
GONDER:
SHIFTOUT DTA,CLK,1,[M1,M2]
PULSOUT OE,1
PAUSE 100
Buradaki pauseyi kaldır sana bir faydasıda yok zaten ama zararı çok.

Disable komutu kesme etiketinden önce yer alır sonra değil onuda düzeltiver.

Başka bir kusur göremedim. Tabiiki terminal programda ne yollanıyor da pic onu alamıyor yada eksik alıyor onu bilemiyoruz hiç bahsetmemişsin.
Verdiğin programa bakılırsa 16 ledin olmasına rağmen terminalde 8 ledlik bilgi alıyorsun. Veri işaretçisi ise "O" harfi seçilmiş yada zorunlu olarak öyle.
Şayet 16 le diçin 2 veri yollanıyor ise ikisinide alacak değişkeni Hserin komutuna eklemelisin.

Ete

gogoce

Hocam tekrar merhaba,
"O" harfini işaretçi olarak belirledim
çıkışlar 16 adet ve 1 byte veri yolluyorum
O1 O2 O3 Şeklinde veri gidiyor.
o dan sonraki rakama göre ilgili çıkışı aktif etmek istiyorum
hyper terminal görüntüsü böyle



fotoğraf yapma sitesi
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

hocam olayı çözdüm. App inventor ile veri gönderiyordum. Gönderdiğim veriler ascii karakter olduğundan 1 yerine if veri=49 diyerek yaptım çalıştırdım.
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

hocam peki tmr0 sayacı ile 100ms gecikme belirleyip çıkışları kapatmak için tmr0 konfigürasyonu nasıl olmalı?

OPTION_REG = %00000111 ; BÖLME ORANI 1/256
INTCON.7 = 1 ;global kesme aktif
INTCON.6 = 1 ;peripheral kesme aktif
INTCON.5 = 1 ;TMR0 AKTİF

programın başına bunları ilave ettim

DISABLE
KESME:
IF INTCON.2=1 THEN
    M1=0:M2=0
    SHIFTOUT DTA,CLK,1,[M1,M2]
    PULSOUT OE,1
    GOTO CIK
    ENDIF
HSERIN [WAIT("O"),VERI] 
   
        TEMP=RCREG
CIK:    INTCON.2=0
        Resume
        enable
END
kesme etiketim bu şekilde.
tmr0 ı çalıştıramadım sanırım
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal