Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 06.12.2009, 15:23  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Стыковка подпрограммы измерения и динамической индикации

Есть подпрограмма для измирения переменного напряжения: по прерыванию таймера Т1 каждых 625 мкс запускаеться АЦП,делает замер,и в обработчике АЦП обрабатывает результат (возводить в квадрат результат измирения,сумирует квадраты за 32 выборки,потом усредняет результат и извлекает квадратный корень).
виборки производиться в течении 20мс (периода синусоиды)

Другая подпрограмма - динамическая индикация: у меня есть два варианты реализации на таймере Т0 и в главном цикле программы.

Отдельно подпрограммы работают,вместе нет!
Не могу понять в чем причина!

c индикацией на таймере Протеус на индикаторах показивает всякую чушь,но “бежучая единица” (используються тран.ключи) едет и заметно что идут даные на индикатор. Программа не реагирует на изминения напряжения на входе АЦП.

При индикации в главном цикле - отображаеться “0″ но не идут даные на дисплей и нет “бежучей единицы”
Реклама:
sad-angel вне форума  
Непрочитано 06.12.2009, 15:23  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Re: Стиковка подпрограммы измирения и динамической индикации

МК ATmega8
sad-angel вне форума  
Непрочитано 06.12.2009, 15:30  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Стиковка подпрограммы измирения и динамической индикации

Телепаты в запое ...
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 06.12.2009, 16:25  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Re: Стиковка подпрограммы измирения и динамической индикации

Сообщение от dosikus Посмотреть сообщение
Телепаты в запое ...
измирение:
.include "m8def.inc"
.def temp=r17
.def al=r0
.def ah=r1
.def ADSL=r2
.def ADST=r3
.def ADSH=r4
.def ACT=r5

.def rzl=r6
.def rzt=r7
.def rzh=r8


.macro outi
ldi r16,@1
out @0,r16
.endmacro

.org 0
rjmp reset
.org OC1Aaddr
rjmp T1_comp
.org ADCCaddr
rjmp Result



reset:
ldi temp,32
mov ACT,temp

outi ddrd,0xff
outi SPH,High(RamEnd)
outi SPL,Low(RamEnd)

outi ADMUX,0b11000000
outi ADCSR,0b10011110

outi TIMSK,0x10; // 0001 0000
outi OCR1AH,High(5000)
outi OCR1AL,Low(5000)
outi TCCR1B,0x9; // 0000 1001
outi TCNT1H,0x0; // 0000 0000
outi TCNT1L,0x0; // 0000 0000

sei

loop:rjmp loop

T1_comp:
sbi ADCSR,ADSC
reti

Result:

in aL,ADCL ;r0
in aH,ADCH ;r1

; відкидання двох молодших біт із 10 розядів (-› 8 резул.)
clc
ror ah
ror al
clc
ror ah
ror al ; результат залишиться в r18 (r19=0)

;математика
;;****(квадрат і сумування квадратів)
mul al,al ; піднесення в квадрат al (r1;r0 рез)

clr temp
smcvd: ;нагромадження суми квадратів за 32 вимірювання
add ADSL,r0 ;дадаваня мол знач квад.(r0)
adc ADST,r1 ;додавання ст знач квад.(r1)
adc ADSH,temp ;додаваня значення нуль (для врах. переносу)

dec ACT
brne exit


movw rzt:rzl,ADST:ADSL
mov rzh,ADSH

clr ADSL
clr ADST
clr ADSH

ldi temp,32
mov ACT,temp
clr temp

div32:
lsr rzH
ror rzT
ror rzL
inc temp
cpi temp,5
brne div32

movw r3:r2,rzT:rzL ;пересилка суми квадратів за
; 32 виборки до r3:r2
;для добування квадратного кореня

;добування квадратн. кореня, результат в r16 (r17=0)
Sqrt16:
ldi R17,0xc0 ; Rotation mask register
ldi R16,0x40 ; Developing sqrt
clc ; Enter loop with C=0

_sq16_1:
brcs _sq16_2 ; C --› Bit is always 1
cp R3,R16 ; Does value fit?
brcs _sq16_3 ; C --› bit is 0

_sq16_2:
sub R3,R16 ; Adjust argument for next bit
or R16,R17 ; Set bit to 1

_sq16_3:
lsr R17 ; Shift right rotation mask
lsl R2
rol R3 ; Shift left argument, C --› Next sub is MUST
eor R16,R17 ; Shift right test bit in developing sqrt
andi R17,0xfe ; Becomes 0 for last bit
brne _sq16_1 ; Develop 7 bits
brcs _sq16_4 ; C--› Last bit always 1
lsl R2 ; Need bit 7 in C for cpc
cpc R16,R3 ; After this C is last bit

_sq16_4:
adc R16,R17 ; Set last bit if C (R17=0)
;результат знаходиться
;mov r16,r2 ;в end_dat (r16)
out PortD,r16
clr r3
clr r2
exit:
out sreg,r9
reti
sad-angel вне форума  
Непрочитано 06.12.2009, 16:26  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Re: Стиковка подпрограммы измирения и динамической индикации

Индикация на таймере:

.include "m8def.inc"
.def tmpl=r17
.def tmph=r18


.macro outi
ldi r16,@1
out @0,r16
.endmacro

.org 0
rjmp reset
.org OVF0addr
rjmp T0_OF

_symtab:
;таблица истинности декодера
; hgfedcba hgfedcba
.db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9

reset:
outi ddrb,0xFF; // 1111 1111
outi ddrd,0x7; // 0000 0111

outi TIMSK,1‹‹TOIE0
outi TCNT0,256-62 ;частота індикації 42 Гц
outi TCCR0,0b00000101
sei


loop:
ldi tmpl,Low(145)
ldi tmph,High(145)
rjmp loop

T0_OF:
outi TCNT0,256-62

binBCD3:
clr zh
clr zl ;обнуляем счетчик сотен (потом десятков)

; считаем сотни
_bin100:
subi tmpl,100
sbci tmph,0
brcs _bin100end
inc zl
rjmp _bin100
_bin100end:
_codtosym100:
adiw zl,_symtab*2
lpm r19,z

subi tmpl,-100
clr zl

; считаем десятки
_bin10:
subi tmpl,10
brcs _bin10end
inc zl
rjmp _bin10
_bin10end:
_codtosym10:
adiw zl,_symtab*2
lpm r18,z

subi tmpl,-10

; в остатке - единицы
mov zl,tmpl
adiw zl,_symtab*2
lpm r17,z



sbic portd,0
rjmp d1
sbic portd,1
rjmp d2
sbic portd,2
rjmp d0

d0: ;молодший розряд
cbi portd,2
cbi portd,1
sbi portd,0
out portb,r17
rjmp end

d1:
cbi portd,2
cbi portd,0
sbi portd,1
out portb,r18
rjmp end

d2: ;старший розряд
cbi portd,1
cbi portd,0
sbi portd,2
out portb,r19

end:
reti
sad-angel вне форума  
Непрочитано 06.12.2009, 16:27  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Re: Стыковка подпрограммы измерения и динамической индикации

инидикация в главном цикле:
.include "m8def.inc"
.equ p_data=Portb
.equ p_cv=Portd
.def tmpl=r17
.def tmph=r18

.include "macro.inc"


.DSEG
dg0: .byte 1
dg1: .byte 1
dg2: .byte 1

.CSEG
.org 0
rjmp reset
.org 0x13
rjmp _symtab

_symtab:
;таблица истинности декодера
; hgfedcba hgfedcba
.db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9


reset:
outi DDRB,0xFF; // 1111 1111
sbi DDRD,0 ;вкл. потрібн. виводів
sbi DDRD,1 ;керування на вихід
sbi DDRD,2 ; ---/----



loop:
ldi tmpl,low(999)
ldi tmph,high(999)

.include "binBCD.inc"

indic:
seg0
delay
seg1
delay
seg2
delay
rjmp loop
sad-angel вне форума  
Непрочитано 06.12.2009, 16:28  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Re: Стыковка подпрограммы измерения и динамической индикации

Макросы:
macro.inc
.macro outi
ldi r16,@1
out @0,r16
.endmacro

.macro seg0
cbi p_cv,2
cbi p_cv,1
sbi p_cv,0
lds r16,dg0
out p_data,r16
.endmacro

.macro seg1
cbi p_cv,0
cbi p_cv,2
sbi p_cv,1
lds r16,dg1
out p_data,r16
.endmacro

.macro seg2
cbi p_cv,0
cbi p_cv,1
sbi p_cv,2
lds r16,dg2
out p_data,r16
.endmacro

.macro delay
; =============================
; delay loop generator
; 64000 cycles:
; -----------------------------
; delaying 63990 cycles:
ldi R17, $5A
WGLOOP0: ldi R18, $EC
WGLOOP1: dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 9 cycles:
ldi R17, $03
WGLOOP2: dec R17
brne WGLOOP2
; -----------------------------
; delaying 1 cycle:
nop
; =============================
.endmacro

binBCD:
binBCD3:
clr zh
clr zl ;обнуляем счетчик сотен (потом десятков)

; считаем сотни
_bin100:
subi tmpl,100
sbci tmph,0
brcs _bin100end
inc zl
rjmp _bin100
_bin100end:
_codtosym100:
adiw zl,_symtab*2
lpm r16,z
sts dg2,r16
subi tmpl,-100
clr zl

; считаем десятки
_bin10:
subi tmpl,10
brcs _bin10end
inc zl
rjmp _bin10
_bin10end:
_codtosym10:
adiw zl,_symtab*2
lpm r16,z
sts dg1,r16
subi tmpl,-10

; в остатке - единицы
mov zl,tmpl
adiw zl,_symtab*2
lpm r16,z
sts dg0,r16
sad-angel вне форума  
Непрочитано 06.12.2009, 16:46  
Alexey_sevast
Частый гость
 
Регистрация: 31.07.2009
Сообщений: 23
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Alexey_sevast на пути к лучшему
По умолчанию Re: Стыковка подпрограммы измерения и динамической индикации

Сообщение от sad-angel Посмотреть сообщение
c индикацией на таймере Протеус на индикаторах показивает всякую чушь,но “бежучая единица” (используються тран.ключи) едет и заметно что идут даные на индикатор. Программа не реагирует на изменения напряжения на входе АЦП.
Кусок начала подпрограммы индикации на таймере:
Сообщение от sad-angel Посмотреть сообщение
reset:
outi ddrb,0xFF; // 1111 1111
outi ddrd,0x7; // 0000 0111
Конечно будет показывать всякую чушь, т.к. нет инициализации стека, при возникновении прерывания подпрограмма будет уходить в никуда!
И где в этой же программе настройка АЦП?
Alexey_sevast вне форума  
Непрочитано 06.12.2009, 16:55  
Alexey_sevast
Частый гость
 
Регистрация: 31.07.2009
Сообщений: 23
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Alexey_sevast на пути к лучшему
По умолчанию Re: Стыковка подпрограммы измерения и динамической индикации

Особо коды не смотрел, но на некоторые моменты сразу обратил внимание...

Сообщение от sad-angel Посмотреть сообщение
loop:
ldi tmpl,low(999)
ldi tmph,high(999)

.include "binBCD.inc"

indic:
seg0
delay
seg1
delay
seg2
delay
rjmp loop
В данном случае подсвеченную красным строчку не стоит располагать в основном цикле программы! Все подпрограммы, которые входят файл "binBCD.inc" каждый раз будут выполняться в основном цикле программы, что и вызовет большие глюки! Её следует расположить в самом начале текста после строчки ".include "m8def.inc", и по мере надобности вызывать отдельные подпрограммы, описанные в файле "binBCD.inc"

Последний раз редактировалось Alexey_sevast; 06.12.2009 в 16:58.
Alexey_sevast вне форума  
Непрочитано 06.12.2009, 17:40  
sad-angel
Частый гость
 
Регистрация: 08.02.2009
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sad-angel на пути к лучшему
По умолчанию Re: Стыковка подпрограммы измерения и динамической индикации

outi SPH,High(RamEnd)
outi SPL,Low(RamEnd) ; инициализация СТЕКА
sad-angel вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 04:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot