Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Ozumandia
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
1

Создать устройство автоматического наполнения воды в ёмкости с 1 концевым датчиком

30.04.2015, 20:15. Просмотров 793. Ответов 4
Метки нет (Все метки)

Доброго времени суток!
Хочу создать устройство автоматического наполнения воды в ёмкости с 1 концевым датчиком (для поддержания воды на определенном уровне).
Написал код на Assembler в AVR Studio(4), сэмулировал схему в Proteus 7.7
Всё бы ничего, да только после нескольких переключений ключа ( симулирует датчик ) программа начинает капризничать, подскажите, пожалуйста в чём может быть дело?
Схему датчика брал в книге Рюмика С.М. 1000 и одна микросхема 1 выпуск (скрин прилагается в архиве)
Светодиод в схеме - эмуляция насоса

Код программы на языке Assembler
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
.include "tn24def.inc"
.org 0
rjmp reset
.org 1//.equ ISC01=1
rjmp int_0
 
reset:
ldi r16,RAMEND
out SPL,r16
sbi DDRA,0
ldi r16,0
out PORTB,r16
ldi r16,(1<<ISC01)//прерывание по спадающему фронту
out MCUCR,r16
ldi r16,(1<<INT0)//разрешение внеш. прерываний
out GIMSK,r16
ldi r16,(1<<CS00)|(1<<CS02)
out TCCR0B,r16
sei
 
pusto:
rjmp pusto
// sbis=1
//sbic=0
int_0:
sbic PINB,3//Если РВ3=0(есть контакт)пропустить след. строку
rjmp OnPortDiode
rcall delay
wait:
rcall delay
sbic PINB,3//Если РВ3=0(появился контакт)пропустить след. строку
rjmp wait
rcall delay
reti
 
//sbi - установить бит
//cbi - сбросить бит
OnPortDiode:
sbi PORTA,0
ret
 
delay:
ldi r20,255
ldi r21,17
del:
subi r20,1
sbci r21,0
brcc del
ret
Создать устройство автоматического наполнения воды в ёмкости с 1 концевым датчиком


Создать устройство автоматического наполнения воды в ёмкости с 1 концевым датчиком
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2015, 20:15
Ответы с готовыми решениями:

Написать автомат, который покажет сколько литров воды в ёмкости после каждого воздействия
Не очень понимаю в автоматах требуется помощь. Задача звучит так: есть некая емкость и 2е трубы с...

Алгоритм и реализация автоматического учета расхода воды
доброго времени суток. Хотел бы посоветоваться и принять помощь в решении задачи. (я дилетант и...

Устройство автоматического контроля заряда-разряда АКБ
При подачи питания с АКБ начинает работать МК и промерять напряжение на АКБ. После удачного завода...

Устройство для принудительной конвекции воды в трубах малого диаметра
Нужно устройство для принудительной конвекции воды в трубе малого диаметра. Есть ли такое в...

В посуде А (c) литров воды, в посуде В (х) литров воды. Из А сосуды вылили половину воды в сосуд В , потом из
В посуде А (c) литров воды, в посуде В (х) литров воды. Из А сосуды вылили половину воды в сосуд В...

4
Ethereal
8380 / 2347 / 317
Регистрация: 17.02.2013
Сообщений: 3,391
01.05.2015, 16:48 2
Последовательно со светодиодом поставь сопротивление ом сто. А то нехорошо как-то процессор током насиловать.

У тебя выход из прерывания то по reti, то по ret. Таков замысел ?
0
Ozumandia
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
02.05.2015, 09:11  [ТС] 3
В реальной схеме к светодиоду, бесспорно, поставлю резистор, просто в протеусе он особой роли не играет, кроме как изменения яркости (ну насколько я знаю, может и ошибаюсь).
В коде команда ret - возврат из подпрограммы к следующей строке после перехода к метке
а reti - выходит из подпрограммы обработки прерывания.
P.S. Поставил резистор, изменилась только яркость светодиода, а программа по прежнему капризничает (после 9 размыканий ключа сигнал не проходит, на 11 размыкании снова работает).

Добавлено через 15 часов 26 минут
Нашёл интересный момент, если изменить ёмкость конденсатора с 1nF на любую другую, программа вообще начинает неадекватно работать, не подскажете в чём может быть проблема? (В книге указана ёмкость 0,1...1 так, обычно, микрофарады указывают, но схема в протеусе только с нанофарадами работает)
0
Ethereal
8380 / 2347 / 317
Регистрация: 17.02.2013
Сообщений: 3,391
02.05.2015, 14:08 4
Лучший ответ Сообщение было отмечено raxp как решение

Решение

Цитата Сообщение от Ozumandia Посмотреть сообщение
В коде команда ret - возврат из подпрограммы к следующей строке после перехода к метке
Еще и спорит. Ты на OnPortDiode по rjmp прыгаешь, а не по rcall. Поэтому у тебя не возврат из подпрограммы, а выход из обработчика прерывания по ret происходит. С запрещением дальнейших прерываний навсегда.

Добавлено через 8 минут
Цитата Сообщение от Ozumandia Посмотреть сообщение
Нашёл интересный момент, если изменить ёмкость конденсатора с 1nF на любую другую, программа вообще начинает неадекватно работать, не подскажете в чём может быть проблема? (В книге указана ёмкость 0,1...1 так, обычно, микрофарады указывают, но схема в протеусе только с нанофарадами работает)
В топку протеус. Костыли мозга. Изыди сатана !!!
У тебя при нажатии кнопки конденсатор начинает разряжаться через сопротивление R2. Постоянная времени этого разряда RC = 1Мом * 1нф = 1 секунда. Где ты видел кнопки, которые нужно было бы удерживать целую секунду ? Это же будет писец как неудобно. Уменьши все сопротивления R2 R3 RV2 в схеме до 100 килоом, что-ли.

Добавлено через 11 минут
Для защиты от помех сопротивления меньше, конденсатор больше. 10 ком и 10 нф - вот это уже более-менее прилично выглядит. Это при условии, что нет промышленных помех. Только бытовые.

Добавлено через 6 минут
Если возможны промышленные помехи, т.е рядом с твоей схемой могут включить сварочный аппарат, то 2.2 ком и 0.047 мкф. И сопротивление R4 тоже 2.2 ком. И схему (особливо процессор) закрыть экраном. Коробочку металлическую запаять сверху. Вот в таком вот аксепте. Безо всякого протеуса.
1
Ozumandia
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
02.05.2015, 19:42  [ТС] 5
Код
[quote="Ethereal;7559373"]Еще и спорит. Ты на OnPortDiode по rjmp прыгаешь, а не по rcall. Поэтому у тебя не возврат из подпрограммы, а выход из обработчика прерывания по ret происходит. С запрещением дальнейших прерываний навсегда.[/quote]
Да ладно вам, никто не спорит, вы спросили, я ответил не заметил ошибку, спасибо.
Цитата Сообщение от Ethereal Посмотреть сообщение
У тебя при нажатии кнопки конденсатор начинает разряжаться через сопротивление R2. Постоянная времени этого разряда RC = 1Мом * 1нф = 1 секунда.
На счёт резисторов, действительно 1Мом было слишком много, спасибо, что откликнулись и помогли!
0
02.05.2015, 19:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2015, 19:42

Возможно ли создать программу для автоматического заполнения форм на qt?
Вопрос такой: имеется некая программа, в виде эл. формы, необходимо в эту программу слить данные из...

JavaScript Создать веб-страницу для перелистывания и автоматического просмотра картинок
Здравствуйте! Прошу помощи в JavaScript... У нас просто это все не объяснялось на лекциях, а...

Напишите программу, которая вычисляет количество капель и молекул воды в N гранёных стаканах воды.
Здравствуйте! Прохожу курс на Степике &quot;Основы программирования на Си&quot;, добрались до библиотеки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.