16F628A'NIN RA6 VE RA7 BACAKLARININ KULLANIMI.

Başlatan erdogan2734, 04 Ağustos 2012, 10:04:32

erdogan2734

            Arkadaşlar öncelikle herkese merhaba. Hayırlı ramazanlar.
Arkadaşlar bir projem için 16f628a mikro işlemcisini kullanıyorum. Dahili osilatör kullanıp ra6 ve ra7 pinlerini çıkış olarak kullanmak istiyorum.
Buna benzer nette örnekler buldum ancak çalıştıramadım. Yazılım olarak Basic dilini kullanıyorum. Derleyici ile ilgili sıkıntı olabilir. Ama tüm denemelerime rağmen RA6 ve RA7 bacaklarından sonuç alamadım. Yardımcı olursanız çok sevinirim.
İyi çalışmalar.
Bildiğim tek şey henüz hiç bir şey bilmediğim...

FEHMİ_ASM

   Yazılım kesmeleri ve kesme izinleri hakkında bilgi ver. Ayrıca şema yükle.

OG

configde osc ayarı
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT   '' osilator ayarı ilgili pinler in-out
veya config şu gibi şekilde yazılır
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _BODEN_ON & _LVP_OFF & _CP_ALL & _DATA_CP_ON

TRISA.6 = 0
TRISA.7 = 0
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

serhat1990

#3
Datasheet sayfa 96 osilatör seçme bitlerinde sorunun cevabı hazır bekliyor. Adobe Reader için sayfa 98 bazıları dediğin yerde çıkmıyor diyorda :)

http://ww1.microchip.com/downloads/en/devicedoc/40044f.pdf

erdogan2734


Sevgili Fehmi
Şemam yukarda devrede 3 tane pic kullanıyorum. Pic 16f628a' da USART kesmesi kullanıyorum. Ara bağlayıcı olarak 2 pic arasında yaklaşık 10 çıkışı kontrol etmeme yarıyor. Yalnız bana bir tane daha çıkış lazım. RA4 bacağını kullanıyorum ancak RA6 ve RA7 bacaklarını kullanamadım.
Sevgili OG bu config ayarları benim sürümde hata veriyor programda ancak şöyle kullanabiliyorum.
ASM
MCLR_OFF 
INTRC_OSC_NOCLKOUT
ENDASM
   
DEFINE OSC 4


ASM
MCLR_OFF 
INTRC_OSC_NOCLKOUT
INTRC_OSC_NOCLKOUT 
WDT_ON 
PWRTE_ON
BODEN_ON
LVP_OFF
CP_ALL 
ENDASM   
DEFINE OSC 4

Biraz evvel böylede denedim ama yine olmadı.

Sevgili Serhat verdiğin datasheeti iki defa okudum. Sonuç elde edemedim. Gözden kaçırdığım birşeyler olmalı. Direk sonuç odaklı cevap alsam süper olur çünkü baya bezdirdi beni. 3 gündür araştırıyorum ama hala sonuç elde edemedim.

İsterseniz programı size gönderiym bana derleyip yollayın bu şekilde derleyicide sıkıntı varsa çözmüş oluruz.
Bildiğim tek şey henüz hiç bir şey bilmediğim...

OG

Kodların gereken bölümünü yazmazsan hatanı nereden anlayabiliriz..................
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

erdogan2734

#6
Kodların gereken bölümü.
Ete hocamın yardımlarıyla düzenlenmiş bir programdır.

ASM
MCLR_OFF 
INTRC_OSC_NOCLKOUT
INTRC_OSC_NOCLKOUT 
WDT_ON 
PWRTE_ON
BODEN_ON
LVP_OFF
CP_ALL 
ENDASM   
DEFINE OSC 4



'************************haberlesme define***********************
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
'*****GİRİŞ VE ÇIKIŞLARI TANIT*****
OPTION_REG.7=1
CMCON=7 
TRISA=0
TRISB=%00000010 
PORTB=0                             
PORTA=%00010000                             

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                      

'*****DEĞİŞKENLERİ TANIMLA*****
B VAR WORD
temp var BYTE 56
A    var word 57
AL   VAR word 59 
Z    var WORD 61  
SURE VAR WORD 63                                               
CLEAR
PAUSE 250                        
PORTB=0
a=0
B=0

INTCON=%11000000
ON INTERRUPT GOTO INT
RCIE=1
  
'*******************AÇ KAPA KONTROL***************************  

AKKONTROL:
IF AL=12 THEN 
GOTO START
ELSE
gosub delay_ON
ENDIF

IF AL=11 THEN 
GOTO START1
else
gosub delay_ON
ENDIF

GOTO AKKONTROL



'*******************ŞİFREKONTROLÜ****************************
START:
 READ 0,AL.LowByte       
 READ 1,AL.Highbyte
 IF AL=1453 OR AL=1001 THEN GOTO BAS
        
'*******************ŞİFREKONTROLÜ****************************
START1:
PORTA.4=0 
PAUSE 1000 
PORTA.4=1

START2: 
IF AL=1453 OR AL=1001 THEN GOto SIFREYAZ
IF AL=1987 OR AL=1101 THEN goto  SIL 
gosub delay_ON    
GOTO START2


'*******************ŞİFREYAZMA****************************
SIFREYAZ:
PORTA.4=0:GOSUB DELAY_ELLI:PORTA.4=1
PORTA.4=0
WRITE 0,AL.LOWBYTE
WRITE 1,AL.HIGHBYTE
SIFREYAZ2:
if al=12 THEN 
goto bas
else
gosub delay_ON
endif
goto SIFREYAZ2
'********************ACILMASI GEREKEN PORTLAR ACILDI******************
BAS:
AL=0
PORTA.4=0:GOSUB DELAY_BIN:PORTA.4=1  'burada ledlerle sıfre alındıgı belırtılıyor
PORTB=%11111000
PORTA=%00010001
gosub delay_YUZ
goto basla

'********************BASLA*******************
BASLA:
IF AL=1 THEN 
PORTA.0=0
GOSUB DELAY_ELLI
PORTA.0=1
AL=0
ENDIF

IF AL=2 THEN 
PORTB.4=0
Gosub Delay_ELLI
PORTB.4=1
AL=0
ENDIF

IF AL=3 THEN 
toggle PORTA.1
gosub delay_ELLI
AL=0
ENDIF

IF AL=4 THEN 
PORTB.3=0
Gosub Delay_ELLI
PORTB.3=1
AL=0
ENDIF

IF AL=5 THEN 
toggle PORTA.2
gosub delay_ELLI
AL=0
ENDIF

IF AL=6 THEN 
toggle PORTA.3
gosub Delay_ELLI
AL=0
ENDIF

IF AL=7 THEN 
PORTB.7=0
Gosub Delay_ELLI
PORTB.7=1
AL=0
ENDIF

IF AL=8 THEN 
PORTB.5=0
Gosub Delay_ELLI
PORTB.5=1
AL=0
ENDIF

IF AL=9 THEN 
PORTB.6=0
Gosub Delay_ELLI
PORTB.6=1
AL=0
ENDIF

IF AL=10 THEN 
toggle PORTB.0
gosub Delay_ELLI
AL=0
ENDIF


IF AL=12 THEN
GOTO KAPAT
ELSE 
PAUSE 10
ENDIF



GOTO BASLA
'*******************AK2KONTROL****************************
KAPAT:
AL=0
PORTB=0
PORTA=%00010000
PAUSE 100

KAPAT1:
IF AL=12 THEN 
GOTO BAS
ELSE
gosub delay_ON
ENDIF
IF AL=11 THEN
GOTO AKKONTROL
ELSE
GOSUB delay_ON
endif



GOTO KAPAT1

'*******************ŞİFRESİLME****************************
SIL:
A=0
PORTA.4=0:Gosub Delay_Yuz :PORTA.4=1:Gosub Delay_Yuz
PORTA.4=0:Gosub Delay_Yuz :PORTA.4=1:Gosub Delay_Yuz
PORTA.4=0:Gosub Delay_Yuz :PORTA.4=1:Gosub Delay_Yuz
al=0
PORTB=0
PORTA=%00010000
WRITE 0,AL.LOWBYTE
WRITE 1,AL.HIGHBYTE
Gosub Delay_on
GOTO start2

Delay_ON:       
    for Z=0 to 215:next    
    return
DELAY_ELLI:    
'    T1CON=%00110001:TMR1L=0:TMR1H=0  
    for Z=0 to 1115:next
'    T1CON=0:SURE.BYTE0=TMR1L:SURE.BYTE1=TMR1H            
    return    
Delay_YUZ:
'    T1CON=%00110001:TMR1L=0:TMR1H=0  
    for Z=0 to 2130:next
'    T1CON=0:SURE.BYTE0=TMR1L:SURE.BYTE1=TMR1H            
    return
DELAY_BIN:
'    T1CON=%00110001:TMR1L=0:TMR1H=0  
    for Z=0 to 18000:next
'    T1CON=0:SURE.BYTE0=TMR1L:SURE.BYTE1=TMR1H            
    return

    
'*******************kesme****************************
DISABLE
INT:
    GIE=0
    hSerIn 5,atla, [WAIT("ERD"),AL.lowbyte,al.highbyte]
    
ATLA:    
    TEMP=RCREG 
    GIE=1
     Resume
     enable
    
    
end
Bildiğim tek şey henüz hiç bir şey bilmediğim...

coco

programa bakamadım  ama neyaptiğini kısa anlatırsan  daha sonra bu sorunla karşılaşırsak faydalanabiliriz.

serhat1990

Ben sana şöyle anlatayım bazı chiplerde dahili osilatör özelliği vardır. Ayrıca harici osilatörde bağlanabilmesi için harici osilatör pinleri vardır. Eğer dahili osilatör kullanmak istersen , ve chipinde harici osilatör pinlerini i/o ( giriş / çıkış ) pini olarak kullanmana izin veriyorsa bunları giriş çıkış pini olarak kullanabilirsin. Arkadaş picin içerisindeki dahili osilatörü kullanmış fakat harici osilatör için kullanılan pinlerden giriş çıkış işlemi yapamıyormuş. Bu pinleri nasıl giriş çıkış ayarlayacağı konusunda bir soru sormuş. Soru ve çözümler bu konuyla alakalı.

erdogan2734

Allah razı olsun serhat benım anlatmama gerek kalmadı :)
Bildiğim tek şey henüz hiç bir şey bilmediğim...

serhat1990

Ne demek Görevimiz.

Her zaman söylediğim tek şey şu ki Hocam .

Datasheet açmayı karıştırmayı sevmeyebilir bir insan. Derleyicinden dolayı gerek yoktur vs. Ama bana göre en azından configrasyon ayalarına göz gezdirmekte büyük fayda var. Yani oluyo bi arkadaş program çalışmıyor diyor. Configrasyon hatası , picim hiç çalışmıyor diyor halbuki çalışıyor fakat brown out reset 3.3V reset atıyor , 3v ile besliyor. Pic direk reset atıyor. Osilatör dahili kullanıyor harici tanımlıyor. Pici programlarken write protect yapıyor bidaha program atamıyorum diyor bu durumların yaşanmaması için en azında configrasyon diyorum. Hatalı olduğum yer varsa özür dilerim.

Herkese İyi çalışmalar. :)

erdogan2734

  Doğru diyorsun;
Data sheetlerin sevilmemesinin en büyük sebebi malumunuz ingilizce olmasıdır. Ben şahsen Elektrik-Elektronik Mühendisi olarak En az 6 tane ülke gezdim İngilizcem beni hiç yarı yolda  bırakmadı ama gel görki datasheet okumayı bende sevmiyorum.Çünkü çok zor kavrıyorum. Yada anlamıyorum. Birde bu mikro işlemci datasheet'i ise eğer en az 120 sayfa oku oku bitmez...
Bu arada programımda config ayarı olarak sadece mlcr off ve int_osc yi tercih ediyorum. Çünkü dahili osilatör varken ne gerek var.
Üstteki programda denemek maksatlı diğer ayarlarıda yazdım olmadı. Ben sadece Porta.6 yada Porta.7 den herhangi birinden doğru bilgi geldiğinde çıkış istiyorum ama gel görki çok zor bir şey istiyormuşum gibi yapamıyorum :S
     Nese işallah çözücez...
Bildiğim tek şey henüz hiç bir şey bilmediğim...

serhat1990

Hocam siz programda sorun giderildi diye yazmadınızmı yoksa sıkıntı hala devammı ediyor. ETE hoca düzenlemiş diye algıladım olayı. Basic bilgim olmadığından kod olarak yardımcı olamıyorum. Basic'te 1 ay kadar program yazdım. Pek hatırlamıyorum. Ayrıca Datasheet'i komple okumaya gerek yok hocam. İşe yarayan bölümleri yeterlidir. Yan, adc kullanacam. Bu bilgiyi lcd'ye yazdıracam. Benim okuyacağım configuration registeri , adc registerleri , olan bölüm olur. ccp modülünü bu iş için okumaya gerek yok anlatmak istediğim işimize yarayacak bölümleri :)

İngilizce en büyük etken haklısınız ben bunun eksikliğini çekiyorum. İlk hedefim çok iyi bir ingilizce. Datasheet'te zorluklar çekiyorum ama zorda olsa istediğim anlamı çıkarıyorum :)

erdogan2734

Sorun çözülmedi ben sadece bu programı oluştururken ETE hocamızdan yardım aldığımı belirtmek istedim. Hala çözüm bekliyorum :)
Bildiğim tek şey henüz hiç bir şey bilmediğim...

serhat1990

#14
Basic bilmiyorum ama çözümün şu :)

Datasheette şu kısım var.

bit 4, 1-0: FOSC<2:0>: Oscillator Selection bits(4)
111 = RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN
110 = RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
100 = INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
011 = EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
010 = HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
000 = LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN

düzeltme: yanlışlıkla 110 yazmışım - 100 olacak.

senin burada 100 değerini ayarlaman gerek ki i/o pini olarak kullanabilesin. Pic basicte direk configuration registerina değer girebiliyormusun ?