Форум за електроника Форуми Форум за електроника

Форум за електроника
Български форум за електроника, ремонти, схеми, документация
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ГрупиГрупи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Service Manual Search :   Enhanced by: Jabse.com : българската търсачка
Промяна на времеви интервал в сорс за PIC - РЕШЕНО

 
Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Обща електроника - General Electronics
Предишната тема :: Следващата тема  
Автор Съобщение
eler
Опитен потребител
Опитен потребител


Регистриран на: 30 Яну 2005
Мнения: 2248
Местожителство: Раднево

[download attachment]
МнениеПуснато на: Сря Апр 14, 2010 17:47    Заглавие: Промяна на времеви интервал в сорс за PIC - РЕШЕНО Отговорете с цитат

Нужна ми е малко помощ от някой, който е на ти с асемблер. Файла със сорса е в атача. Той е за един честотомер. Така както е, времето за броене на входните импулси е 100 милисекунди. Въпросът ми е какво трябва да се промени за да стане времето на броене 640 милисекунди (при кварц на 4 MHz)? Формулата за пресмятане на броя цикли на процесора е дадена в коментари, но като не съм на ти с асемблера не мога да се ориентирам къде се задава времето за броене. Пък и се прибавя или изважда допълнително време от калибровъчни константи в EEPROM-a, също има и възможност за прибавяне или изваждане към измерената честота на честота, записана в EEPROM-a, но те не са важни, важно е как цикъла от 100 милисекунди да стане 640 милисекунди.

Последната промяна е направена от eler на Вто Апр 20, 2010 15:22; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Ichko
Опитен потребител
Опитен потребител


Регистриран на: 13 Мар 2004
Мнения: 305

МнениеПуснато на: Чет Апр 15, 2010 17:57    Заглавие: Отговорете с цитат

Аз също съм доста зле с асемблера, но в моя случай много ми помогна това тук: http://nmarov.narod.ru/pause.htm
_________________
Интелектът на Земята е константа, а населението непрекъснато расте!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
eler
Опитен потребител
Опитен потребител


Регистриран на: 30 Яну 2005
Мнения: 2248
Местожителство: Раднево

МнениеПуснато на: Чет Апр 15, 2010 18:47    Заглавие: Отговорете с цитат

Ще я разгледам програмката. Само дето в моя случай времето се задава от няколко цикъла, в които участват едни променливи. И стигам до извода, че промяна на времето може да стане с промяна на стойностите при дефиниране на променливите. Ей тук май се формира времето:
Код:
; ------------------------------------------------------------------------
; Start measurement:  RA3 + RA4 set input
; ------------------------------------------------------------------------

            movlw      b'00010000' ; all ports set L, RA4 set H
            movwf      PORTA

            bsf        STATUS,RP0
            movlw      b'00011111' ; RA0..RA4 input
            movwf      TRISA
            bcf        STATUS,RP0

; -------------------------------------------------------------------------
; It is opened now...
; -------------------------------------------------------------------------

Cycle       btfss      INTCON,2   ; 1   Test for TMR0 overflow
            goto       Nothing    ; 3
            incf       TimerH,F   ; 3
            bcf        INTCON,2   ; 4
            goto       Nxt        ; 6

Nothing     nop                   ; 4
            nop                   ; 5
            nop                   ; 6

Nxt         decfsz     R1,F       ; 7
            goto       Cycle      ; 9
            movlw      T1         ; 9*T1

            movwf      R1         ; 9*T1+1
            decfsz     R2,F       ; 9*T1+2
            goto       Cycle      ; 9*T1+4
            movlw      T2         ;(9*T1+4)*T2

            movwf      R2         ;(9*T1+4)*T2+1
            decfsz     R3,F       ;(9*T1+4)*T2+2
            goto       Cycle      ;(9*T1+4)*T2+4

; ------------------------------------------------------------------------
; Final test for TMR0 overflow
; ------------------------------------------------------------------------

            movlw      T4         ;((9*T1+4)*T2+4)*T3
            movwf      Help       ;((9*T1+4)*T2+4)*T3+1

Cycle2      btfss      INTCON,2   ; 1
            goto       Not2Do     ; 3
            incf       TimerH,F   ; 3
            bcf        INTCON,2   ; 4
            goto       Nx         ; 6

Not2Do      nop                   ; 4
            nop                   ; 5
            nop                   ; 6

Nx          decfsz     Help,F     ; 7
            goto       Cycle2     ; 9
;           nop                   ; ((9*T1+4)*T2+4)*T3+1+9*T4+Z
;           nop                   ; Z times fine tuning nops
;-------------------------------------------------------------------------
; Fine tuning loops set by EEPROM parameters
;-------------------------------------------------------------------------
            movf       EE_Fine1,0
            movwf      Help     

LCycleFine1 decfsz     Help,F      ; 1 Fine tuning loop 1 set by EEPROM
            goto       LCycleFine1 ; 3

            movf       EE_Fine2,0
            movwf      Help     
LCycleFine2
            nop                    ; 1 
            decfsz     Help,F      ; 2 Fine tuning loop 2 set by EEPROM
            goto       LCycleFine2 ; 4
           
; ------------------------------------------------------------------------
; Stop the measurement
; ------------------------------------------------------------------------

На променливите T1, T2, T3 и T4 тук се присвояват стойности:
Код:
; ------------------------------------------------------------------------
                                   ; timing loop values
                                   ; must be from 1 to 255!!!
T1          equ       .199         ; first timing loop
T2          equ       .11          ; second timing loop
T3          equ       .5           ; third timing loop
T4          equ       .130         ; last timing loop

; ------------------------------------------------------------------------

и с промяна цифрите ще се промени времето, но не съм сигурен.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
ELP
Опитен потребител
Опитен потребител


Регистриран на: 07 Яну 2004
Мнения: 6902
Местожителство: София

МнениеПуснато на: Чет Апр 15, 2010 19:09    Заглавие: Отговорете с цитат

Ако искаш да го увеличиш 6,4 пъти ,май излизаш извън границата от 255 ? Поне първото и последното време .
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Ichko
Опитен потребител
Опитен потребител


Регистриран на: 13 Мар 2004
Мнения: 305

МнениеПуснато на: Чет Апр 15, 2010 19:27    Заглавие: Отговорете с цитат

Според калкулатора тези стойности дават времезадръжка от 6510553984 машинни цикъла. При 4 MHz кварц това (ако не граша в сметките) е около 2 часа
_________________
Интелектът на Земята е константа, а населението непрекъснато расте!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
eler
Опитен потребител
Опитен потребител


Регистриран на: 30 Яну 2005
Мнения: 2248
Местожителство: Раднево

МнениеПуснато на: Чет Апр 15, 2010 21:18    Заглавие: Отговорете с цитат

Това е обяснението как се смята времето:
Код:
; ------------------------------------------------------------------------
;
; The measuring period is 100 000 us.
; Procesor cycle is T = 4/Fx [us,MHz], Fx is Xtal frequency
;
; Number of processor cycles per measuring period:
;
;        N = 100 000/T processor cycles
;        N = Fx * 100 000/4 = 25 000 x Fx
;
;        The main steps of measuring period:
;
;        1. decode 3-byte value into 7 decimal numbers,
;        2. decode decimal value of digit to chars,
;        3. set decimal point if needed,
;        4. output to PORTB (LCD) either 6 or 7 digits,
;        5. start measurement,
;        6. test TMR0 overflow bite, if YES increase TimerH,
;        7. goto 5 until measuring period is done,
;        8. stop measurement,
;        9. shift out precounter content,
;       10. Add/substract RF according signal from optocoupler,
;       11. goto 1
;
; ------------------------------------------------------------------------
; Total timing formula: N = 25 000 * Fx = ((9*T1+4)*T2+4)*T3+5+9*T4+Z
;
; N = 25 000 * Fx [MHz]
;
; Example:  Fx = 4 MHz
;
; N = 25 000 * 4 = 100 000
; N = 25 000 * Fx = ((9*T1+4)*T2+4)*T3+5+9*T4+Z

Направих си един Excel-ски файл с формулата и като задавам различни стойности на променливите дава съвсем реални времена. За 640 mS се получи:
T1 202
T2 35
T3 10
T4 242
Само дето не съм сигурен дали ще стане така, но някой ден ще пробвам. В момента с този сорс работи един честотомер и си мери съвсем точно и при промяна на честотата индикацията на дисплея се променя почти моментално. Значи наистина времето за броене е 100 mS както е написано в коментарите.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
eler
Опитен потребител
Опитен потребител


Регистриран на: 30 Яну 2005
Мнения: 2248
Местожителство: Раднево

МнениеПуснато на: Вто Апр 20, 2010 15:28    Заглавие: Отговорете с цитат

Стана с промяната на стойностите на T1, T2, T3 и T4. Само дето само смятане по формулата не дава много точен резултат и се налага опитно донагласяне.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Потърси "Промяна на времеви интервал в сорс за PIC - РЕШЕНО" в магазин за електроника Pulsator.bg : БЕЗПЛАТНА ДОСТАВКА над 90 лв.

Покажи мнения от преди:   
Потърси "Промяна на времеви интервал в сорс за PIC - РЕШЕНО" в Интернет



Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Обща електроника - General Electronics Часовете са според зоната GMT + 2 Часа
Страница 1 от 1

 
Към:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети