Arduino ile haberleşir mi

Başlatan said, 28 Haziran 2020, 14:45:20

said


@ ERRORLEVEL -303	
                    
@ __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
@ __config _CONFIG2, _PLLEN_OFF & _LVP_OFF & _STVREN_OFF & _BORV_HI & _WRT_OFF  


DEFINE OSC 16
OSCCON = %01111000



Include "modedefs.bas"



Duty VAR byte


ADCON0=0
ADCON1=0 

ANSELA =%00000000    
ANSELB =%00000000  ;PORTA.6 ANALOG RıRıŞ

FVRCON =0
SRCON0=0
DACCON0 = 0
DACCON1 = 0
PCON=%00000000

CM1CON1 = 0
CM1CON0 = 0
OPTION_REG=%00000000

WPUA =0
WPUB =%00000100
CPSCON0.7=0
CPSCON0=0
LATB=%00000000

TRISA = %00000001  ;PORTA.4 ANALOG RıRıŞ
TRISB = %00000111

LEDB VAR PORTB.7
LEDC VAR PORTB.5

MOTOR VAR PORTB.3
'HALL VAR PORTB.6
SYMBOL TX=PORTA.1
SYMBOL TX1=PORTA.2
SYMBOL RX=PORTA.0
SYMBOL POW=PORTA.7
low pow
DAT VAR BYTE
DAT=0
'LOW HALL
low ledc
;*******************************************************************************
KON VAR BYTE
KON=0
i var word
k var BYTE

c var byte
b var byte
B2 VAR BYTE 
SAYAC VAR WORD
SAYAC=0
SAYI VAR BYTE
SAYI=0
SAYI1 VAR BYTE
SAYI1=14
DURUM VAR BYTE
DURUM=0


LOW PORTB.4
LOW PORTB.7
DUTYCYLE VAR BYTE
DUTYCYLE =255

HIGH LEDB
PAUSE 800
LOW LEDB
PAUSE 300
HIGH LEDB
PAUSE 800
LOW LEDB
PAUSE 300
HIGH LEDB
PAUSE 800
LOW LEDB
PAUSE 300

BASLA:

B2=0

WHILE PORTB.1=0 
GOTO KESME1

WEND
IF DAT=228 OR SAYI>0 AND SAYI<9 OR KON=1 THEN
DUTYCYLE =255
PWM PORTB.4,DUTYCYLE,40
DUTYCYLE =0
PWM PORTB.4,DUTYCYLE,30
ENDIF
GOTO BASLA

KESME1:
B2=0
PAUSE 100
IF PORTB.1=0 THEN
GOTO KESME
ENDIF
GOTO BASLA


KESME:
DISABLE
SAYI=0
KON=0
SAYAC=0
K=0 

HIGH LEDB
HIGH PORTB.4
HIGH TX
HIGH pow

FOR i=0 to 15000
next i

SEROUT2 TX,188,["#","2","0","2","3",10,13]
SEROUT2 TX,188,["#","2","0","2","3",10,13]


SERIN2 RX,188,[WAIT("#","2","0","3","8"),dec DAT]


low TX

IF DAT=228 THEN
SAYI=0
LOW LEDB
LOW PORTB.4
B2=0
low pow
DISABLE  
INTCON =%00000000
IOCBN  =%00000000 
IOCBF  =%00000000
GOTO BASLA
ENDIF

IF DAT<=87 THEN

PR2=62
T2CON =%00000100
Duty =255
CCP1CON.4 = duty.0 
CCP1CON.5 = duty.1 
CCPR1L = DUTY >>2






                    

CCP1CON=%10001100

'HIGH HALL
ON INTERRUPT GOTO KESMESAY
INTCON =%10001000
IOCBN  =%00000100
IOCBF  =%00000100
ENABLE



for c= 0 to  5
for i = 0 to 45000
'HIGH HALL
 




IF SAYI<9 AND DURUM=0 THEN
DURUM=1
SAYAC=0
K=0

ON INTERRUPT GOTO KESMESAY
enable
IOCBN=%00000100
IOCBF=%00000000
INTCON=%10001000
ENDIF

next i
next c
IF C<7 AND i<45005 THEN
KON=1
ENDIF

DISABLE
low pow

CCP1CON=%00000000
CCP1CON.2=0
CCP1CON.3=0
low PORTB.3


'LOW HALL
HIGH LEDB 
HIGH PORTB.4

DISABLE
for c= 0 to  18
for i = 0 to 30000

next i
next c
DISABLE

low pow
endIF
DISABLE

'LOW HALL
SAYI=0 
LOW PORTB.4
B2=0
low pow
SAYAC=0
k=0
DAT=0
DURUM=0

DISABLE
IOCBN=%00000000
IOCBF=%00000000
INTCON=%00000000
LOW LEDB
GOTO BASLA


DISABLE 
KESMESAY:


K=0

IF PORTB.2=0 AND DURUM=1 AND SAYI<9 THEN
GOTO BIRAKTIMI
BIRAKTI:
DISABLE
SAYI=SAYI+1
IF SAYI>1 AND SAYI<8 THEN
DUTY=245
PR2=62
T2CON =%00000100
CCP1CON.4 = duty.0 
CCP1CON.5 = duty.1 
CCPR1L = DUTY >>2
ENDIF

IF SAYI>6 THEN
DUTY=185
PR2=62
T2CON =%00000100
CCP1CON.4 = duty.0 
CCP1CON.5 = duty.1 
CCPR1L = DUTY >>2
ENDIF
IF SAYI>8 THEN 
DISABLE 
INTCON =%00000000
IOCBN  =%00000000 
IOCBF  =%00000000 
IF dat<87 and dat>82 THEN
For i=0 to 10000
next i
endif
CCP1CON=%00000000
CCP1CON.2=0
CCP1CON.3=0
low PORTB.3

'LOW HALL 
LOW LEDB
LOW PORTB.4
SAYI=0
i=45001
c=6 
B2=0
ENDIF
durum=0
SAYAC=0
K=0
ENDIF

IF PORTB.2=0 AND DURUM=0 AND SAYI<9 AND PORTB.3=1  THEN
BIRAKTIMI:
IF SAYAC>8000 AND K>1 AND SAYI<9 THEN

GOTO CIK
SAYAC=0
K=0
ENDIF



if PORTB.2= 1 then
SAYAC=0

goto birakti
else

SAYAC=SAYAC+1
IF SAYAC>8500 THEN
K=K+1
SAYAC=0
ENDIF 
goto biraktimi
endiF 
ENDIF

k=0

SAYAC=0
DURUM=1

IOCBF=%00000000
IOCBN=%00000100
INTCON=%10001000
Enable

IF DURUM=0 THEN
CIK:
DISABLE 
IOCBN=%00000000
IOCBF=%00000000
INTCON=%00000000
RESUME
ENDIF

RESUME


END













merhaba bu kodu daha önce arduino ile haberleştirdim ama şimdi haberleşmiyor. haberleşir ise arduinoda serial begin kaç olmalı ben 4800 yapıyorum acaba onumu yanlış yapıyorum. kafam karıştı resmen yardımcı olur musunuz

ete

Bu verdiğin programda bir gariplik var. İyice test edip düzeltmeni öneririm.
Bir basic programında 1 adet ON INTERRUPT GOTO xxxx satırı olur. Sende iki tane. Birisinin yanlışlıkla koyulduğunu düşünüyorum.
Bazı yerlerde Disable kullanılmış nerede enable yapıldığı belli değil.
Bence programı incele ve gerekn düzeltmeleri yap.

Ete

said

arduinoda serial begin kaç olmalı buradan onu anlaya biliyor musunuz

mehmetemin

Alıntı yapılan: said - 29 Haziran 2020, 19:41:19arduinoda serial begin kaç olmalı buradan onu anlaya biliyor musunuz
Serial begin 9600 olmalı.

ete

#4
Pic programına bakıp Arduino da Serial Begin ne olacak anlamak için program içinde yer alan;
SEROUT2 TX,188,["#","2","0","2","3",10,13]
komut satırına bakmak gerekiyor.

Komut içinde yer alan 188 sayısı Baud rate yani haberleşme hızını göstermektedir.
SEROUT2 komut formatına bakarsanız;
(1000000 / baud) - 20
şeklindeki formül bize BAud Rate sayısını varmektedir.
(1000000 / baud) - 20=188 çıkmış. O halde baud= 1.000.000/(188+20)=4807 yani 4800 olmalı.
Komut açıklamasında bazı örnek hesaplamalarda vermişler.
4800 Baud=188
9600 Baud=84

@mehmetemin,  neden 9600 olmalı dedin onu açıklarsan sevinirim.

Ete

said

çok teşekkür ederim bunu notlarım arasına ekledim

said

Sizlere bir soru daha sora bilir miyim ?
bu programda tx ve rx hangi portlar orduğunu nasıl belirliyor. tamam yazmış oraya tx bu rx bu diye ama denetleyiciye bu görev tanımını nerede yapmış nasıl yapmış. yazan ile tanımlanan uyuşuyor mu

alisumer

SYMBOL TX=PORTA.1
SYMBOL TX1=PORTA.2
SYMBOL RX=PORTA.0
Hep meraktan

Powered by EzPortal