K

hf alıcı verici

Başlatan kamil, 05 Eylül 2011, 22:24:43

kamil

 Ete hocam saygılar
Bu proje hf alıcı vericiler için osilatör kontrol devresidir.
Sora sora bağdat bulunur demişler bende sonunda çok istediğim bir projeyi bitirdim Ete hocamın sayesinde.
Bu devre 1kw çıkışta rahatlıkla çalışmıştır.montaj da kurallara uyulursa, örneğin 16f877A nın 5v girisi ile şase
arasına  en kısa yoldan 100n ile 220mf paralel bağlanmalı.
projemiz de lm7001 kullanıldı.lm7001 de 14bit kontür oldugu için frekans 16383 khz ye kadardır.
16 bit kontürü olan mc145170 kullanacaktım piyasada yok eğer mc145170 kullanılırsa yazılımda ufak bir değişiklik yapmak gerekir.mc145170 1khz step te frekans 65535 khz  kadar olur. 

'****************************************************************
'*  Name    : HF ALICI VERİCİ İÇİN OSC KONTROLÜ.BAS             *                 '*                            *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 03.09.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :LM7001 7.2MHZ KRİSTAL                                               
'*          :                                                   *
'****************************************************************
TRISA=%00001
TRISB=%01111111
TRISC=%00000000
TRISD=%00000000
TRISE=%000
'-----------------------------------------------------------------
@ Device PROTECT_ON,CPD_ON,WDT_OFF,XT_OSC,PWRT_OFF,BOD_OFF,WRT_1FOURTH,LVP_OFF,DEBUG_OFF

'-------------------------------------------------------------------
DEFINE LCD_DREG   PORTD       'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT      4      'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG   PORTC   'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   0      'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG   PORTB       'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT      7      'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS      4      'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES   4      'LCD Kaç sıra yazabiliyor
DEFINE Adin_Res 4     
DEFINE Adin_Tad FRC   
DEFINE Adin_Stime 50   
'ADCON1 = 7  'ADC İPTALİ
ADCON1 = %00000100
CMCON=7        'KARŞILAŞTIRICI İPTALİ
OPTION_REG.7=0   'Dahili pull-up ları AKTİF
'ADCON1 = 2  ' PORTA is analog
'-------------------------------------------------------------------
SYMBOL USBLSB=PORTB.6
SYMBOL TX= PORTB.0
SYMBOL YUKARI=PORTB.3
SYMBOL ASAGI=PORTB.4
SYMBOL BANTI=PORTB.1
SYMBOL ADIMI=PORTB.2
SYMBOL INCE= PORTB.5
SYMBOL DAT= PORTC.5
SYMBOL CLK= PORTC.6
SYMBOL EN= PORTC.7
CEK  VAR  word       
TAMSAYI VAR  word                                                 
ONDALIK VAR  word
TXSAYI   VAR  word
SAYI   VAR  word
BANT  VAR  BYTE
ADIM VAR   BIT
INCEAY  VAR  BYTE
TB  VAR  BYTE 
SEC  VAR  BYTE
REF  VAR  BYTE
MXA  VAR  BYTE
BUZ    VAR  BYTE
CAM    VAR  BYTE
ENEK    VAR  BYTE
'--------BAŞLAMA AYARLARI----------------------------
LCDOUT $FE,1
PAUSE 200
BANT=4
SAYI=7547
GoSub AYAR
GoSub SAL
LCDOUT $FE,$84,"<< >>"
LCDOUT $FE,$DF,"  bant ",DEC1 BANT
INCEAY=5
PORTD=(PORTD & %00000000) + INCEAY
LCDOUT $FE,$C9,".", DEC1 INCEAY," khz"
GoSub AYAR
GoSub SAL

'-------------------------------------------------------------------
BASLA:
LCDOUT  $FE,64,Rep $0\7   'KALINLIK   
LCDOUT  $0,Rep $F\9          

ADCIN 0,MXA         
CAM=MXA/3
BUZ =(CAM Min 9)                                   
ENEK=10-BUZ                  

If BUZ>0 Then 
LCDOUT $FE,$97,"s.",Rep $1\BUZ,Rep " "\ENEK,"+",Dec1 BUZ
Else
LCDOUT $FE,$97,"s.",Rep $1\BUZ,Rep " "\ENEK,"-",Dec1 BUZ
EndIf
PAUSE 100


If PORTB.6=0 Then
Toggle PORTE.0
While PORTB.6=0:Wend 'tuşu bırakıncaya kadar bekle
PAUSE 100
EndIf

If PORTE.0=1 Then
LCDOUT $FE,$80,"usb"
Else
LCDOUT $FE,$80,"lsb"
EndIf
PAUSE 100
      If BANT=1 Then
PORTE.1=1
Else
PORTE.1=0
EndIf

If BANT=2 Then
PORTE.2=1
Else
PORTE.2=0
EndIf       
     
If BANT=3 Then
PORTC.1=1
Else
PORTC.1=0
EndIf     
     
     If BANT=4 Then
PORTC.2=1
Else
PORTC.2=0
EndIf 
     
       If BANT=5 Then
PORTC.3=1
Else
PORTC.3=0
EndIf
       If BANT=6 Then
PORTC.4=1
Else
PORTC.4=0
EndIf     
      PAUSE 100
      IF ADIMI=0 THEN 
      While ADIMI=0
      Wend         
      ADIM=ADIM+1
      ENDIF
      PAUSE 50
      IF ADIM=0 then
      LCDOUT $FE,$D4,"1  step "
      ELSE
      LCDOUT $FE,$D4,"10 step "
      ENDIF
     PAUSE 50                 
     IF INCE=0 THEN           
     INCEAY=INCEAY+1             
     PORTD=(PORTD & %00000000) + INCEAY
     If INCEAY=10 Then INCEAY=0     
     LCDOUT $FE,$C9,".", DEC1 INCEAY," khz"
     ENDIF
     
     PAUSE 50                                           
      IF BANTI=0 THEN   
      BANT=BANT+1
      IF BANT=7 then BANT=1
      LCDOUT $FE,$DF,"  bant ",DEC1 BANT 

      SELECT CASE BANT
      CASE 1
      SAYI=3455
      GoSub AYAR
      GoSub SAL
      CASE 2
      SAYI=4455
      GoSub AYAR
      GoSub SAL
      CASE 3
      SAYI=5455
      GoSub AYAR
      GoSub SAL
      CASE 4
      SAYI=7455
      GoSub AYAR
      GoSub SAL
      CASE 5
      SAYI=10455
      GoSub AYAR
      GoSub SAL
      CASE 6
      SAYI=14655
      GoSub AYAR
      GoSub SAL
      END SELECT
      While BANTI=0: Wend     
      ENDIF
     PAUSE 100
If TX=1 Then  LCDOUT $FE,$91,"rx"
If TX=0 Then 
LCDOUT $FE,$91,"tx"
EN=1
SHIFTOUT DAT,CLK,0,[TXSAYI\14,TB\3,REF\6,SEC\%1] 'TX
EN=0   
While TX=0
Wend
GoSub AYAR                                               
GoSub SAL
EndIf   
      PAUSE 50
      IF ADIM=0 THEN
      IF YUKARI=0 THEN
      SAYI=SAYI+1
      GoSub AYAR
      GoSub SAL
       ENDIF
       ENDIF   
      PAUSE 10         
      IF ADIM=0 THEN
      IF ASAGI=0 THEN
      SAYI=SAYI-1
      GoSub AYAR
      GoSub SAL
      ENDIF
      ENDIF
      PAUSE 10       
      IF ADIM=1 THEN
      IF YUKARI=0 THEN
      SAYI=SAYI+10
      GoSub AYAR
      GoSub SAL
       ENDIF
       ENDIF
      PAUSE 10
      IF ADIM=1 THEN
      IF ASAGI=0 THEN
      SAYI=SAYI-10
      GoSub AYAR
      GoSub SAL
      ENDIF
      ENDIF       
      LCDOUT $FE,$C3,Dec2 TAMSAYI,".",Dec3 ONDALIK
      PAUSE 50       
    GOTO BASLA   
   
AYAR: 
TB=%00   
SEC=1      '1 ise 14 bit 0 ise 10 bit  LM7001 İÇİN
'REF=8    '10khz de  160 MHZ YE KADAR  LM7001 İÇİN
REF=24  '1khz de ADIM DA 16 MHZ YE KADAR
TXSAYI=SAYI-455  'KULLANILAN GÖNDERME FREKANSINA GÖRE +YADA-
CEK=SAYI-455 'KULLANILAN IF A GÖRE +YADA- lcd de gösterme         
TAMSAYI =CEK/1000                                                 
ONDALIK=CEK//1000
RETURN
SAL:
EN=1
SHIFTOUT DAT,CLK,0,[SAYI\14,TB\3,REF\6,SEC\%1]
EN=0
Return







kamil

Ete hocam bu proğramda yukarı aşağı butonları yerine enkoder kullanabilirmiyim bunu nasıl yapabilirim.enkoder konusunu biraz araştırdım sizinde
fikrinizi almak istedim.
saygılar.

ete

Encoder konusu çok zor değil.  Hemr artırma (saat yönünde) hemde eksiltme (saatin ters yönünde) yaptıracağın için encoder dönüş yönüde sana gerekiyor.
Pot tipi encoder lerden kullanacaksın Orta uç hariç diğer uçları 10K ile pullup yapacaksın Orta uç da GND ye bağlanacak.
Potların Pullup yapılan uçlarını Pic'e gireceksin. Diyelimki PortB.0 ile PortB.1 de bağlı olsun encoder.
Önce bir çift giriş okuyacaksın.

ESKI=PORTB & %00000011
Sonra hemen Yeni okuyacaksın
ENC:
YENI=%00000011
IF ESKI=YENI THEN ENC ''ise pot dönmemiş demektir. Ohalde yeniden değer okumaya git.
Bu satıra gelince pot dönmüş olacaktır.  Bu durumda Eski bit0 ile Yeni Bit1 XOR işlemine tabi tutulacaktır.
YON=ESKI.0 ^ YENI.1
IF YON=1 then
    ADIM=ADIM+1
ELSE
    ADIM=ADIM-1
ENDIF
Hepsi bu kadar.
Daha emniyetli bir okuma için encoder girişleri kesmeye bağlanabilir. Böylece beklemek zorunda kalmazsın.

Ete

kamil


kamil

Ete hocam PORTB.0 ve PORTB.1 girişlerine nasıl kesme uyguluyacağım   örnek vermeniz mümkünmü.Aşağıdaki örnekteki kod kesmesiz çalışıyor isis te denedim.


'16f877A
TRISA=%000001
TRISB=%00000011
TRISC=%00000000
TRISD=%00000000
TRISE=%000
'-----------------------------------------------------------------
@ Device PROTECT_ON,CPD_ON,WDT_OFF, XT_OSC,PWRT_OFF,BOD_OFF,WRT_1FOURTH,LVP_OFF,DEBUG_OFF
Define OSC 8
'-------------------------------------------------------------------
DEFINE LCD_DREG PORTD     'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTC 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 6 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTC     'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 7 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 4 'LCD Kaç sıra yazabiliyor
DEFINE Adin_Res 4     
DEFINE Adin_Tad FRC   
DEFINE Adin_Stime 50   
ADCON1 = %00000100
CMCON=7        'KARŞILAŞTIRICI İPTALİ
OPTION_REG.7=0   'Dahili pull-up ları AKTİF

'-------------------------------------------------------------------
SYMBOL YENI=PORTB.0
SYMBOL ESKI=PORTB.1
SAYI   VAR  word
YON  VAR  BIT
LCDOUT $FE,1
SAYI=12735
PORTA=0
'PORTB=O
PORTC=0
PORTD=0
PORTE=0
PAUSE 200
'On Interrupt  Goto   KESME

'-------------------------------------------------------------------
BASLA:
ESKI=PORTB & 00000011
ENC:
YENI= %00000011
IF ESKI=YENI THEN ENC
YON=ESKI=0 ^ YENI=1
IF YON=1 then
   SAYI=SAYI-1
ENDIF

IF YON=0 then
   SAYI=SAYI+1
ENDIF

LCDOUT $FE,$C3,Dec5  SAYI,"."   
GOTO BASLA   

ete

Kesme yalnızca PORTB.0 da ve PORTB.4-PortB.7 pinlerinde çalışır. PORTB.1 de kesme olmaz.

Ete

reflex_r4p

slm lar kamil hocam.. merak ediyorum bu şemayı hangi programla tasarladınız

Powered by EzPortal