Jump to content
Skazzi

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Особенности схемотехники и трассировки печатных плат для STM32WB55

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

Читать статью

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

+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

Share this post


Link to post
Share on other sites
                     

CoolGaN - на предельной скорости коммутации!

Решения на галлий-нитриде (GaN) обладают фундаментальными преимуществами перед кремнием. В частности, имея более высокую критическую напряжённость электрического поля, в сравнении с традиционными кремниевыми транзисторами, транзисторы на основе галлий-нитрида обладают выдающимися динамическими характеристиками, что позволяет коммутировать их на высоких частотах. Семейство CoolGaN™ – это именно то, что необходимо, чтобы поднять ваши устройства на принципиально новый уровень. Мы собрали все самые интересные материалы по данной теме на одной странице.

Читать статьи

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
вот оно как, даже динамической индикации нет...

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Схему не смотрел. Но если прошивка та, что 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-а так и так (если режим настроен правильно).

Edited by Геннадий

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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 тактов происходит сброс. и программа начинается сначала.

Share this post


Link to post
Share on other sites

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

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

Edited by Геннадий

Share this post


Link to post
Share on other sites
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:

Share this post


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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Мужики, вам бы романы писать...
    • Согласен. У меня все уже заготовлено. Завтра собираюсь пилить. Ящик- 100 литров, расчитанный под щелевой ФИ (BassBox ) . Объем  ФИ программы  соответствует объему  резонатора акустического монополя. Расчет делался под 2а12. Габариты передней панели 90х60см. Дополнительно разместить 4а32 труда не составит.  Склейку-сшивку буду делать в процессе, Однако возникает вопрос, нужно ли 4а32 прятать под колпак?
    • Кто всетртится с шевронами ЧЕРных мышей - лучше сразу молиться своему богу.... ниодной стране мира с нашими ребятами вообще вариантами не побороться, просто никак... человек умер сам для себя , и он работает как киборг.   НА стриках (по глупости) у нас на руке выколка есть, АиС  - Ангелы смерти  , дурь конено 
    • ЭТО БЕЗ коментнариев, надеюсь НИКТО ПРОТИВ НЕ БЫЛ  БОЙЦЫ как торпеда Черный берет  в любой стране может сделать БЯКУ    ... я не такой послушный клайд  Кто меня знает - Слава =КЛАЙД  = кто прошел это испытание были в таких странах , что не в сказке сказать  не бульдозером разгребать ... просто не злите мимолетом, уважайте своих защитников Командер КРАПОВЫХ = лакомый кусок - так думали многигие разведчики  АМЕРИКОСОВ .... боюсь рссстроить - бесполяезняк
    • @Borodach вот и у меня это из головы не выходит...
    • Еще один усилитель, автор Г.Крылов, который ,не только измерял, но и слушал. Усилитель на современных комплектующих дает THD менее 0.1%, при потрясающей простоте и приемлемых для 90 % реальных , современных потребителях усилитель. Предложу, новичкам, желающим сотворить собственноручно хороший усилитель mk8802.ms14 Любителям "посимулировать"  есть моделька АС не было, ЗК, плюс наушники. ЗК проверена не только приборами, Наушники, поверьте мне, не дешевые. Прежде, чем спорить, возможно просто включить синус, и реально послушать свои уши
    • А как вы убедились, что ваша связка ЗК+УМ+АС воспроизводит частоты выше 14 кГц также линейно, как и остальные?
×
×
  • Create New...