Перейти к содержанию

Вольтметр На Меге8


Skazzi

Рекомендуемые сообщения

Драсте, сори за тупость, но такая вот штука получилась.

Собрала вольтметр. он КАК БЫ показывает..

ну то есть - включаю - на индикаторе показывает нули. Когда подаю напряжение на вход, то нули не исчезают, а немного тускнеют и при етом же там же показывается измеренное напряжение.. то есть он меряет, НО не выключаются "ненужные" палочки на семисегментном индикаторе... а просто становятся чуть-чуть тусклее...

в чем причина может быть? :blink:

-А вам не приходило в голову копье?

Ссылка на комментарий
Поделиться на другие сайты

Криво сделана динамическая индикация или ошибка в схеме. Схему и программу в студию!

Пока в груди моей бьётся мотор, надежда есть на чистый бензин...

Ссылка на комментарий
Поделиться на другие сайты

http://shareua.com/get_file/6b58b5/3327281

http://slil.ru/27998640

вот...

:blink:

Изменено пользователем Skazzi

-А вам не приходило в голову копье?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Криво сделана динамическая индикация

+1

протеус 7.2 не читает файл, выложи просто экспортированную картинку со схемой... прошивка из архива вот:

;***********************
;Author: Alex Joz		*
;Date:					*
;Version:				*
;File name:				*
;Microcontroller:		*
;Clock Freq: 			*
;Functions:				*
;***********************

.nolist
.device ATmega8
.include "m8def.inc"
.list


.def temp=r16

.org $0
rjmp init
.org $00E
rjmp ADC_end

init:
;стек
ldi  temp,high(RAMEND)    
	out  SPH,temp
  	ldi  temp,low(RAMEND)
  	out  SPL,temp

;порты
ldi temp,$ff
out DDRB,temp
ldi temp,$ff
out DDRD,temp

ldi temp,0b00000000
out PortB,temp
ldi	temp,0b00000000
out PortD,temp

;ацп
ldi temp,0b10101011	;ADEN=1 ADIE=1 prescaler =8
out ADCSRA,temp
ldi temp,$E0	;ref in 2.56, adlar =1 (left adjust)
out ADMUX,temp
	ldi temp,0b10010000
	out	MCUCR,temp	;Noise Reduction
sei				

	;******************************************************** 
	;некоторые константы для BCD
	.equ in_size=1 ; in future adch - 1 byte
	.equ out_size=3 ; out - 3 byte bcd, unpacked
	.equ in_arr=57;	тестовое число гг в последствии поставить АЦП!!!!!!
	.equ out_arr=0x16; адрес 22 РОН, для косвенной адресации
	;*********************************************************

Main:
sbi ADCSRA,6
sleep; Спим, ждём преобразования от ацп (;


hex2bcd: 
;ацп в р21
;начнем ((:
ldi r22,0
ldi r23,0
ldi r24,0

ldi temp,in_size
swap temp
lsr temp       ; подсчет количества битов во входном массиве (;
mov r17,temp   ; сохранили (счетчик глобал)
mov r20,r21
ilop:
mov temp,r20
rol temp
mov r20,temp	; сейв сдвинутое 

ldi XH,$0
ldi XL,out_arr
ldi r19,3
slop:
ld temp,X	; загрузили 1 выходной байт
in r30,SREG	; сохраняем флаг с
bst r30,0	; в пользовательском флаге Т
ldi r28,3	; прибавляем 3 
add temp,r28
sbrs temp,3	; пропустить если темп.3 = 1
ld temp,X	; если 0 то загружаем снова (т.е. не прибавляем 3)
bld r30,0	; восстанавливаем значение	
out SREG,r30; флага С
rol temp	; сдвигаем выходной масив
sbrc temp,4	; если temp.4 =1 то:
sec			; С=1
andi temp,$0F; маска, забираем младшую тетраду
st X+,temp	; сохраняем сдвинутое значение обратно в памяти и инкремент счетчика 
dec r19		; 19--	
brne slop	; если 19 не =0 то сдвигать сл. байт
brcs overflow; усе, выход
dec r17		; 17--	
brne ilop	; если 17 не 0 то сдвигаем (8 бит вх. числа)
overflow:
ret

vyvod:
;упаковка BCD и вывод в порты.
mov temp,r22
swap temp
or temp,r23
swap temp
out PORTB,temp
out PORTD,r24
ret

ADC_end:
in r21, ADCH
rcall hex2bcd
rcall vyvod
reti

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

вот оно как, даже динамической индикации нет, BCD дешифратор... в таком случае имхо копай в сторону проблем самого дешифратора и его подключения в железе...

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

бред уже 20 раз перепроверила схему.

еще другой может попробую дешифратор, микросхемку перепаять всмысле.. хз=\

-А вам не приходило в голову копье?

Ссылка на комментарий
Поделиться на другие сайты

Скорей всего не синхронное переключение катодов с анодами. У меня было подобное когда деал таймер Показания одной цифры кратковременно переходили на на начло индикации следующей цифры они как бы накладывались. одинаковые цифри показывали чётко потому как использовались одни и те же сегменты. Думаю нужно смотреть на время задержки шифратора, и коректировать включение катодов.

Ссылка на комментарий
Поделиться на другие сайты

вот оно как, даже динамической индикации нет...

Это как раз и есть динамическая индикация, разряды то включаются поочерёдно.

Я с программой не разбирался, но скорее всего ошибка в том, что сначала выводится символ, а затем выбирается нужный разряд.

А нужно погасить все разряды, затем вывести символ, затем включить нужный разряд.

И будет тебе счастье!

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

виноват, не так выразился))

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

та уже как ток не писала. гашу все естественно... промежуток времени когда не горит ни один елемент имеется...(его хорошо видно если поставить маленькую частоту в протеусе..)

но на деле не так=\

вот про время задержки шифатора не смотрела... почитаю даташит еще посмотрю... но не думаю что оно такое огромное...

ну спасиб еще посмотрю знач.. :o

-А вам не приходило в голову копье?

Ссылка на комментарий
Поделиться на другие сайты

Схему не смотрел. Но если прошивка та, что NebsteR выложил, то есть некоторые недочеты.

1. Цикл main не закрыт.

2. У Mega8 нет ADCSRA, только ADCSR.

Попробуйте этот код (с исправлениями).

.def temp=r16



.org $0

rjmp init

.org $00E

rjmp ADC_end



init:

;стек

ldi  temp,high(RAMEND)

	out  SPH,temp

  	ldi  temp,low(RAMEND)

  	out  SPL,temp



;порты

ldi temp,$ff

out DDRB,temp

ldi temp,$ff

out DDRD,temp



ldi temp,0b00000000

out PortB,temp

ldi	temp,0b00000000

out PortD,temp



;ацп

ldi temp,0b10101011	;ADEN=1 ADIE=1 prescaler =8

out ADCSR,temp

ldi temp,$E0	;ref in 2.56, adlar =1 (left adjust)

out ADMUX,temp

	ldi temp,0b10010000

	out	MCUCR,temp	;Noise Reduction

sei				



	;********************************************************

	;некоторые константы для BCD

	.equ in_size=1 ; in future adch - 1 byte

	.equ out_size=3 ; out - 3 byte bcd, unpacked

	.equ in_arr=57;	тестовое число гг в последствии поставить АЦП!!!!!!

	.equ out_arr=0x16; адрес 22 РОН, для косвенной адресации

	;*********************************************************



Main:

sbi ADCSR,6

sleep; Спим, ждём преобразования от ацп (;

rjmp	main



hex2bcd:

;ацп в р21

;начнем ((:

ldi r22,0

ldi r23,0

ldi r24,0



ldi temp,in_size

swap temp

lsr temp       ; подсчет количества битов во входном массиве (;

mov r17,temp   ; сохранили (счетчик глобал)

mov r20,r21

ilop:

mov temp,r20

rol temp

mov r20,temp	; сейв сдвинутое



ldi XH,$0

ldi XL,out_arr

ldi r19,3

slop:

ld temp,X	; загрузили 1 выходной байт

in r30,SREG	; сохраняем флаг с

bst r30,0	; в пользовательском флаге Т

ldi r28,3	; прибавляем 3

add temp,r28

sbrs temp,3	; пропустить если темп.3 = 1

ld temp,X	; если 0 то загружаем снова (т.е. не прибавляем 3)

bld r30,0	; восстанавливаем значение	

out SREG,r30; флага С

rol temp	; сдвигаем выходной масив

sbrc temp,4	; если temp.4 =1 то:

sec			; С=1

andi temp,$0F; маска, забираем младшую тетраду

st X+,temp	; сохраняем сдвинутое значение обратно в памяти и инкремент счетчика

dec r19		; 19--	

brne slop	; если 19 не =0 то сдвигать сл. байт

brcs overflow; усе, выход

dec r17		; 17--	

brne ilop	; если 17 не 0 то сдвигаем (8 бит вх. числа)

overflow:

ret



vyvod:

;упаковка BCD и вывод в порты.

mov temp,r22

swap temp

or temp,r23

swap temp

out PORTB,temp

out PORTD,r24

ret



ADC_end:

in r21, ADCH

rcall hex2bcd

rcall vyvod

reti

Возможно не имеет смысла выводить результат на дисплей в прерывании "преобразование завершено". Достаточно это сделать после Sleep в main. Может вызов прерывания наступает несколько раз с разными значениями, что и приводит к "подсветке" (несколько цифр) сегментов. После преобразования камень выйдет из Sleep-а так и так (если режим настроен правильно).

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

...Может вызов прерывания наступает несколько раз с разными значениями, что и приводит к "подсветке" (несколько цифр) сегментов...

Согласен, это оно и есть.

Кто же так вывод делает? Нужно делать по таймеру, и обновлять значение на дисплее не так часто.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Skazzi ты писала программу? Программа не рабочая, Сегодня скачал и закинул её в AVRStudio. Там вообще по портам ничего не происходит. Да и как может происходить если туда постоянно записываються нули.

Сначала:

ldi r22,0

ldi r23,0

ldi r24,0

Следующий раз регистр 22,23,24 используються

mov temp,r22

swap temp

or temp,r23

swap temp

out PORTB,temp

out PORTD,r24

ret

Между этими двумя фрагментами кода с данными регистрами ничего не делаеться.А точнее сказать вообще они больше нигде не встречаються. Как у тебя может чтото светитьтся не понимаю. Но если исходники не твои скорей всего HEX у тебя правильный, может не ту частоту внутреннего генератора установила.

+ Незнаю частоту генератора, по прилагаемому исходнику примерно через 5000 тактов происходит сброс. и программа начинается сначала.

Ссылка на комментарий
Поделиться на другие сайты

Кроме указанных ранее глюков, есть еще такой. Запуск преобразования осуществляется принудительно в main, а сам АЦП натроен на непрерывное преобразование, т.е. преобразование запускается автоматически по окончании предыдущего сеанса.  

Нужно в ADCSR загрузить 0b10001011 так будет правильней. Результат преобразования стабильный, а вот вывод нерабочий. Точнее нет динамической индикации как таковой. R24, предназначенный для переключения катодов(анодов) индикатора, нигде не используется, кроме out PORTD,r24 (или у меня глаза уже в кучу). По алгоритму в порт D должно выводиться одно и то же значение 0 (ldi R24,0), хотя для динамики надо 0b00000010, 0b00000100 и 0b00001000 (для общего анода и обратный код для общего катода). Но самое интересное, что по какой-то бешеной случайности, в R24 иногда (без какой-либо закономерности) появляются значения 00h, 01h, 02h. Я не знаю, какой тип дисплея используется. Если с общим катодом, то все цифры "светятся" одним значением, которое может меняться с высокой скоростью, зависящей от тактовой частоты и временем преобразования. В добавок к этому порт B выводит сегменты только одной цифры, причем только по завершению преобразования, не регенерируюя дисплей постоянно для чтения. Вот и вся беда - общие катоды (аноды) не переключаются, а сегменты цифр не учитывают разряда индицируемого числа. При этом нет постоянной "подпитки" дисплея информацией.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Skazzi ты писала программу? Программа не рабочая, Сегодня скачал и закинул её в AVRStudio. Там вообще по портам ничего не происходит. Да и как может происходить если туда постоянно записываються нули.

Сначала:

ldi r22,0

ldi r23,0

ldi r24,0

Следующий раз регистр 22,23,24 используються

mov temp,r22

swap temp

or temp,r23

swap temp

out PORTB,temp

out PORTD,r24

ret

Между этими двумя фрагментами кода с данными регистрами ничего не делаеться.А точнее сказать вообще они больше нигде не встречаються.

Все встречается.. косвенная адресация.

Программа работает стопроцентов, алгоритм правильный и все там пральна считает. просто как у тебя там может чето происходить если на ацп ничего не приходит.. никаких данных??

Проблема были все таки с таймингами, нужна просто чуть более длинная задержка между зажиганиями символов...чтоб просто побольше было времени когда ничего не горит. :blink:

Сори, я не ту прогу скинула (почему-то имя того файла совпало с именем хекса... а оказалось что с динамической уже было пересохранено, просто писала я ето еще вначале лета, забылась, простите),

И в той версии действительно нет динамической индикации.. ето более ранняя версия когда все работало на 3х дешифраторах без динамической индикации...но кроме подпрограммы вывода, впринципе ничего не менялось. алгоритм bcd и остальное то же самое...

Всем спасибо. ;) Мой вольтметр уже работает по его прямому назначению :P Осталось дособирать все добро в корпус.

Схему не смотрел. Но если прошивка та, что NebsteR выложил, то есть некоторые недочеты.

1. Цикл main не закрыт.

2. У Mega8 нет ADCSRA, только ADCSR.

Попробуйте этот код (с исправлениями).

Возможно не имеет смысла выводить результат на дисплей в прерывании "преобразование завершено". Достаточно это сделать после Sleep в main. Может вызов прерывания наступает несколько раз с разными значениями, что и приводит к "подсветке" (несколько цифр) сегментов. После преобразования камень выйдет из Sleep-а так и так (если режим настроен правильно).

1. Согласна, спасибо.

2. Не согласна. у меня в файле и так и так оно записано.. ну то есть в м8деф.инке пишется:

.equ	ADCSR   =$06
.equ	ADCSRA	=$06

Так что не важно как писать <_<

3. Может и не имеет смысла. не знаю. нужно поэксперементировать, но думаю особо на результате работы это не скажется.. хотя хз...Но все равно спасибо за внимание :rolleyes:

-А вам не приходило в голову копье?

Ссылка на комментарий
Поделиться на другие сайты

Кроме указанных ранее глюков, есть еще такой. Запуск преобразования осуществляется принудительно в main, а сам АЦП натроен на непрерывное преобразование, т.е. преобразование запускается автоматически по окончании предыдущего сеанса.  

Нужно в ADCSR загрузить 0b10001011 так будет правильней. Результат преобразования стабильный, а вот вывод нерабочий. Точнее нет динамической индикации как таковой.

Уга. Спасибо, исправлено (написала на время пока было все без слипа, а потом и поменять забыла :wub: )

-А вам не приходило в голову копье?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...