16F1827 program gecikmeli çalışıyor ???

Başlatan xcyqp09k2, 25 Mayıs 2015, 18:34:09

ferit06

#15
 proglamlamanda bir sorun yok ise şu registerde de düzenleme yapman gerekebilir.

WPUB: WEAK PULL-UP PORTB REGISTER

xcyqp09k2

#16
bakın şu iki programı da boarda atıyorum ve aradaki farklara bakın arkadaşlar.


BUNDA BOARDDA ÇALIŞMIYOR bu kodda sadece %50 pwm ile çalıştır diyorum ve programda hserin ile bilgi alma kodu da var:


Device = 16F1827

Config1 FOSC_HS,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_OFF,CPD_OFF,BOREN_OFF,CLKOUTEN_OFF,IESO_ON,FCMEN_ON
Config2 WRT_ALL,PLLEN_OFF,STVREN_OFF,LVP_OFF,BORV_19
' PLL kapalı
'FOSC_HS harici yüksek hız kristal osilatör 20 mhz 
        
Include "modedefs.bas" 
Xtal 20

Declare Hserial_Baud = 9600 ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000 ' Enable continuous receive
Declare Hserial_TXSTA = %00100000 ' Enable transmit and asynchronous mode
Declare Hserial_Clear = On ' Clear the buffer before receiving

Declare CCP3_Pin PORTA.3

TRISA = %00100000
TRISB = %11111111

PORTA = 0
PORTB = 0

Dim x As Word

basla:

HSerIn [x] 

HPWM 3, 128, 10000

GoTo basla



VE ARADAN Hserin
  • komutunu kaldırıyorum. yine % 50 pwm  veriyorum. ve çalışıyor. kodlarda böyle.

    Device = 16F1827
    
    Config1 FOSC_HS,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_OFF,CPD_OFF,BOREN_OFF,CLKOUTEN_OFF,IESO_ON,FCMEN_ON
    Config2 WRT_ALL,PLLEN_OFF,STVREN_OFF,LVP_OFF,BORV_19
    ' PLL kapalı
    'FOSC_HS harici yüksek hız kristal osilatör 20 mhz 
            
    Include "modedefs.bas" 
    Xtal 20
    
    Declare Hserial_Baud = 9600 ' Set baud rate to 9600
    Declare Hserial_RCSTA = %10010000 ' Enable continuous receive
    Declare Hserial_TXSTA = %00100000 ' Enable transmit and asynchronous mode
    Declare Hserial_Clear = On ' Clear the buffer before receiving
    
    Declare CCP3_Pin PORTA.3
    
    TRISA = %00100000
    TRISB = %11111111
    
    PORTA = 0
    PORTB = 0
    
    Dim x As Word
    
    basla:
    
    
    HPWM 3, 128, 10000
    
    GoTo basla
    




    sanırım bu picte serial ile pwm yi kullanırken bişeyler ayarlamak lazım. çok ilginç bir durum.

    mesaj birleştirme:: 28 Mayıs 2015, 03:02:35

    @ferit06 deiğin gibi önce WPUB registerini 1 yaparak sonra 0 yaparak denedim ama yine olmadı. bir de option_reg registerinin WPUEN bitini 1 ve sıfır yaparak da denedim. 2^4 ten 16 farklı durumu boardda denedim ama sonuç aynı ://

    ya arkadaşlar bu programın protonda çalışıp boardda çalışmamasından yola çıkarsak ve hserini kullannca sorun çıktığını göz önüne alırsak yorumlarınız yok mu ya hiç. nereden kaynaklanıyor olabilir bu sorun


    mesaj birleştirme:: 27 Mayıs 2015, 13:18:56

    sanırım oturup herşeyi registerle girecem artık. bu işin içinden ancak öyle çıkılır. bütün registerleri ve birbirleriyle ilişkili durumları yazıp çizmek lazım bi kağıda ondan sonra bütün registerleri elle girmek lazım. protonun da esprisi kalmıyor burada. ya da artık avr ye geçme vakti cidden geldi. sonucta atmelstudio6 da da baya register giriliyor.

ferit06

#17
Hserin komutunun kullanımı için proton manualde verilen örnek;
' Receive values serially and timeout if no reception after 1 second
Device 16F877
Declare Xtal = 4
Declare Hserial_Baud = 9600 ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000 ' Enable continuous receive
Declare Hserial_TXSTA = %00100000 ' Enable transmit and asynchronous mode
Declare Hserial_Clear = On ' Clear the buffer before receiving
Dim Var1 as Byte
Loop:
Hserin 1000, Timeout, [Var1] ' Receive a byte serially into Var1
Print Dec Var1, " " ' Display the byte received
Goto Loop ' Loop forever
Timeout:
Cls
Print "Timed Out" ' Display an error if Hserin timed out
Stop


Siz Hserin ile x değerini almak istiyorsunuz ancak alınamadığı durumda ne olacak? Bunlar belirsiz olduğu için sizin Hserin li kısım çalışmıyor olabilir. Sadece alıcı kısmı değil gönderen kısımda da WPUB de düzenleme yapmanız gerekebilir.

OG

HPWM komutu protonda yanlızca HPWM1 ve HPWM2  için kullanılır.

CCPR1L = deger
CCPR2L = deger
CCPR3L = deger

gibi sürmen gerekir.

Tabi önce declare işleri timer frekans vs

    CCPTMRS0 = %01010101                     ' 4 CCPxCON için Timer 4 kullanılsın.   
    T4CON    = %00000110                       ' TIMER4 PRESCALAR = 16
    PR4 = 255                                           '
   
   
    CCP1CON = %00001100                     ' ENABLE PWM1
    CCP2CON = %00001100                     ' ENABLE PWM2
    CCP3CON = %00001100                     ' ENABLE PWM3
    CCP4CON = %00001100                     ' ENABLE PWM4
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

xcyqp09k2

@ferit06 weak pullupları her iki tarafta da denedim. manual da sadece hserin
  • veya hserout
  • komutları da var. o şekilde de kullanılabilr.

    @OG dediğim gibi hocam artık bir gün oturup bütün registerleri elle gireceğim. proton işin kalan kısmını pek de halletmiyor. Yani sonuçta çoğunu halledemiyor diyebiliriz bunda bir sakınca yok. gönül ister ki biz yazalım programı compiler ayarlasın registerleri :/ . aslında  register girerek yapmak bu işleri en temizi. zaten işe yarayan çok sık kullanılan 20 tane falan register var.