АвторСообщение
постоянный участник


Пост N: 35
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 16:39. Заголовок: Восьмисветодиодная бегушка


Здравствуйте всем! Помогите пожалуйста определить почему моя программа по переключению восьми светодиодов не работает как задумано!
Вообщем в программе зажигается светодиод, потом подпрограмма задержки (изначально одна секунда), после идёт опрос кнопки (вывод 10 - RB4), потом светодиод тухнет, затем то же самое происходит со следующим светодиодом и так далее.
Проблема в том, что при каждом опросе кнопки, микроконтроллер думает, что она нажата, хотя я даже провода к выводу RB4 и к "-" не припаивал. Мультиметром проверял : сопротивление большое (если верить то 12 МгОм) между RB4 и "-". Может я подпрограмму опроса кнопки не так сделал? (даже и незнаю)!
(Хочу добавить) Сделал печатную плату под бегушку, но в торапях вытравил дорожки не той стороной ( можно сказать забыл инверсию сделать) ! Пришлось поступить нехорошо и вывернуть ножки Пика (Pic16F84A) наизнанку.
Не знаю почему, но три вывода (при проверке) не работали ( может я их до этого как-то сжёг - тут я не проверял)
Задумано так, что при нажатии кнопки, запустится подпрограмма, которая уменьшит содержимое аккумулятора на 1,
что в свою очередь уменьшит время переключения светодиодов!
Подпрограмма опроса кнопки:
 
Y1 Btfss PORTB,4 ; Спрашиваем RB4
Return ; если 0 - возвращаемся
Movwf B3 ; сохраняем прежнее значение аккумулятора
Movlw .200 ; задержка
Movwf B2 ; задержка
T4 Movlw .200 ; задержка
Movwf B1 ; задержка
T2 Decfsz B1 ; задержка
Goto T2 ; задержка
Decfsz B2 ; задержка
Goto T4 ;
Btfss PORTB,4 ; проверка нажатия кнопки
Return ;
Movf B3,0 ; возвращаем прежнее значение аккумулятора
Decf B3,0 ; Вычесть из аккумулятора W константу .1
Return ;

Видео 1мб вот здесь: http://slil.ru/29079464
Помогите пожалуйста каким-нибудь советом!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 79 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 134
Зарегистрирован: 22.01.08
Откуда: Воркута
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 17:05. Заголовок: А вместо видео-чёрны..


А вместо видео-чёрный экран.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 36
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 17:44. Заголовок: Ewgen пишет: А вмес..


Ewgen пишет:

 цитата:
А вместо видео-чёрный экран.


Странно! У меня всё показывает! Снимал мобильным телефоном! При запуске через винамп выскакивает значок (где часы ) Divx Messenger Settings! Может быть какой-нибудь кодек не установлен? На крайний случай вечером постараюсь цифровым фотоаппаратом снять!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 15
Зарегистрирован: 30.07.09
Откуда: Россия, г.Рыбинск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 18:18. Заголовок: Видео все нормально...


Видео все нормально.Kimm пишет:

 цитата:
Проблема в том, что при каждом опросе кнопки, микроконтроллер думает, что она нажата, хотя я даже провода к выводу RB4 и к "-" не припаивал.


Программа небольшая , выложи полностью .

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 260
Зарегистрирован: 20.10.08
Откуда: Россия, Горно-Алтайск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 18:47. Заголовок: nick14 пишет: вылож..


nick14 пишет:

 цитата:
выложи полностью


И не забудь про моноширинный шрифт, а то как-то смотрится нехорошо

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1264
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 04.05.10 20:18. Заголовок: Kimm пишет: Проблем..


Kimm пишет:

 цитата:
Проблема в том, что при каждом опросе кнопки, микроконтроллер думает, что она нажата, хотя я даже

Ну и будет думать что нажата при определенном уровне на порту... Какой логический уровень на порту В 4???

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 370
Зарегистрирован: 18.11.08
Откуда: Россия, г.Уфа
Рейтинг: 1
ссылка на сообщение  Отправлено: 04.05.10 20:25. Заголовок: Ewgen пишет: А вмес..


Ewgen пишет:

 цитата:
А вместо видео-чёрный экран.

Здесь конвертированный в mpg. click here

Алгоритм кривой какой то. Надо исходник смотреть.
Порты вроде работают.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 37
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 20:44. Заголовок: Щас скопировал прогр..


Щас скопировал программу в окошко для ответа, минут 20 расставлял пробелы, нажал предосмотр, и бац всё опять слилось - все пробелы исчезли! Думаю лучше через БЛОКНОТ показать вам программу!
http://slil.ru/29081331



Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1265
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 3
Фото:
ссылка на сообщение  Отправлено: 04.05.10 20:49. Заголовок: Kimm пишет: Щас ско..


Kimm пишет:

 цитата:
Щас скопировал программу в окошко для ответа, минут 20 расставлял пробелы, нажал предосмотр

Дык кнопочку моноширный шрифт надо использовать... Первый пост у меня отображается нормально в области программы... Оформлен так как надо с использованием именно этой кнопки...

Еще неизвестно, что хуже: постоянный бардак или непостоянный порядок? Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 38
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 21:13. Заголовок: Алексей пишет: Ну и..


Алексей пишет:

 цитата:
Ну и будет думать что нажата при определенном уровне на порту... Какой логический уровень на порту В 4???



Замерил напряжение! 4.98! Но откуда оно там взялось? Это большой вопрос! Может попробовать использовать RB3!

Алексей пишет:

 цитата:
Дык кнопочку моноширный шрифт надо использовать...


У вас, похоже дело, расширенное меню, а у меня урезанное. ( Я ещё не купил вторую часть самоучителя).
Сейчас только что залил видео с цифрового фотоаппарата - только чего-то много получилось 30 Мб.
Смазываний уже нет! http://slil.ru/29081564


Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 135
Зарегистрирован: 22.01.08
Откуда: Воркута
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.10 21:23. Заголовок: Так Вы всю программу..


Так Вы всю программу выложите.Как Вы порт В инициализировали?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1835
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 04.05.10 22:47. Заголовок: У Вас включены подтя..


У Вас включены подтягивающие резисторы на вход PORTB. Они подтягивают + поэтому и 5В.
А кнопку надо замыкать на корпус, тогда вход и будет реагировать. Кстати грамотно и безопасно, если так.
А то кто нибудь сядет сразу на все кнопки, погорим если плюс подавать.
 
Y1 Btfsс PORTB,4 ; Спрашиваем RB4
Return ; если 1 - возвращаемся
сall zad_20mc
Btfsc PORTB,4 ; проверка нажатия кнопки
Return ; не нажата
;нажата выполняем


Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 39
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 05.05.10 06:11. Заголовок: Ewgen пишет: Так Вы..


Ewgen пишет:

 цитата:
Так Вы всю программу выложите.Как Вы порт В инициализировали?


Я же написал выше:
Kimm пишет:

 цитата:
Думаю лучше через БЛОКНОТ показать вам программу!
http://slil.ru/29081331



MAZ пишет:

 цитата:
У Вас включены подтягивающие резисторы на вход PORTB. Они подтягивают + поэтому и 5В.


Спасибо! Не знал, что от потенциал ножек пика (Порта Б) зависит от подтягивающих резисторов!
Сегодня вечером постараюсь посадить RB4 на "-". Должно сработать!!!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 40
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 05.05.10 06:14. Заголовок: И можно ещё один воп..


И можно ещё один вопрос:
При подаче питания на бегушку, бывает что вспыхивают несколько светодиодов, то есть получается что порты произвольным образом открываются! По идее так не должно быть! Почему так происходит?

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1836
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 05.05.10 07:35. Заголовок: Надо как можно быстр..


Надо как можно быстрей сделать инициализацию контроллера и сбросить порты. Ничего мигать не будет.
При включении порты работают на вход (по умолчанию)
Kimm пишет:

 цитата:
Не знал, что от потенциал ножек пика (Порта Б) зависит от подтягивающих резисторов!
Сегодня вечером постараюсь посадить RB4 на "-"


Только через кнопку на землю . Опрашивать, 0 нажата, а не плюс. Резисторы не отключать.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 41
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 06.05.10 07:00. Заголовок: MAZ пишет: Только ч..


MAZ пишет:

 цитата:
Только через кнопку на землю . Опрашивать, 0 нажата, а не плюс. Резисторы не отключать.


Либо,(как я понимаю), оставить программу как есть, только взять кнопку с нормально замкнутыми контактами?

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1840
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 06.05.10 07:06. Заголовок: Можно, но не красиво..


Можно, но не красиво как-то.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 263
Зарегистрирован: 20.10.08
Откуда: Россия, Горно-Алтайск
Рейтинг: 0
ссылка на сообщение  Отправлено: 06.05.10 07:28. Заголовок: Kimm пишет: взять к..


Kimm пишет:

 цитата:
взять кнопку с нормально замкнутыми контактами


Кнопок с НО контактами, как грязи, любых видов. Да и экономия на подтягивающем резисторе

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 42
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 06.05.10 09:10. Заголовок: MAZ пишет: Опрашива..


MAZ пишет:

 цитата:
Опрашивать, 0 нажата, а не плюс.


Сделал как вы написали! Всё заработало! Спасибо!

Так же спасибо всем кто помог решить мою задачу!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1841
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 06.05.10 11:57. Заголовок: :sm36: С маленькой..


С маленькой, но победой!

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 43
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 08.05.10 13:19. Заголовок: MAZ пишет: С малень..


MAZ пишет:

 цитата:
С маленькой, но победой!


Спасибо!
Щас только возник ещё вопрос! Так-то бегушка работает чётко, единственно что во время отпуска кнопки, бывает что бегушка останавливается (зависает)! То есть, светодиод, который горел последним , так и горит, пока не снимешь питание. Не знаете, случайно, почему так происходит?

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 193
Зарегистрирован: 03.12.09
Откуда: Украина, Киев
Рейтинг: 0
ссылка на сообщение  Отправлено: 08.05.10 22:01. Заголовок: Kimm пишет: Щас тол..


Kimm пишет:

 цитата:
Щас только возник ещё вопрос! Так-то бегушка работает чётко, единственно что во время отпуска кнопки, бывает что бегушка останавливается (зависает)!


Скорее всего это дребезг контактов кнопки. Надо принять антидребезговые меры (задержки). 50-150 мс при нажатии кнопки и 50-150 мс при ее отпускании. И только после этого дальнейшее исполнение программы.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1847
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 08.05.10 22:48. Заголовок: Bigor пишет: 50-150..


Bigor пишет:

 цитата:
50-150 мс при нажатии кнопки


Можно, но очень много. Оптимально 20мс.
И от этого зависать не будет.
Давайте новый текст.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 44
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.05.10 20:58. Заголовок: Bigor и MAZ спасибо ..


Bigor и MAZ спасибо за информацию! Вот типа того получилось!
Скрытый текст


http://slil.ru/29104898 - тут в блокноте с пробелами!
Спасибо ещё раз! Завтра проверю!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1851
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.05.10 00:27. Заголовок: Ну и что? Это вся пр..


Ну и что? Это вся программа?
Зачем задержка после отпускания кнопки. В разомкнутом состоянии дребезга не бывает.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 198
Зарегистрирован: 03.12.09
Откуда: Украина, Киев
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.05.10 01:03. Заголовок: MAZ пишет: Зачем за..


MAZ пишет:

 цитата:
Зачем задержка после отпускания кнопки. В разомкнутом состоянии дребезга не бывает.


В разомкнутом состоянии дребезга действительно не бывает, а вот в момент размыкания (когда уменьшается сила давления на кнопку) очень даже бывает. Особенно, если кнопка старая и/или имеет загрязненные или окисленные контакты. С переходными процессами всегда надо бороться, я так думаю.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 45
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.05.10 07:19. Заголовок: Да тут поторопился н..


Да тут поторопился немного! Я так понял у меня ошибка в том, что рабочая точка войдя в подпрограмму опроса кнопки (при нажатой кнопки) ,уменьшает содержимое аккумулятора на 1, и возвращается обратно в программу, вне зависимости от того нажата кнопка или нет.А когда исполняется основная программа и происходит отпускание кнопки, получается зависание! Так вот надо запретить рабочей точки уходить из подпрограммы опроса кнопки, когда кнопка нажата!


Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 46
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.05.10 10:15. Заголовок: Вот исправил! Поскол..


Вот исправил! Поскольку у меня уже есть подпрограмма задержки, я её и использовал.
В результате получилось более-менее прилично: (с пробелами) : http://slil.ru/29106133.
Скрытый текст


Спасибо всем, что помогли мне разобраться с этой программкой!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 47
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.05.10 13:08. Заголовок: Прошил контроллер! В..


Прошил контроллер! Всё работает , без зависаний! Благодарю ещё раз всех!

Истина где-та рядом!) Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1854
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.05.10 22:12. Заголовок: Bigor пишет: а вот ..


Bigor пишет:

 цитата:
а вот в момент размыкания (когда уменьшается сила давления на кнопку) очень даже бывает.


Из опыта, такого не встречал. Если давление уменьшилось, то это какие наносекунды.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 199
Зарегистрирован: 03.12.09
Откуда: Украина, Киев
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.05.10 23:42. Заголовок: MAZ пишет: Из опыта..


MAZ пишет:

 цитата:
Из опыта, такого не встречал. Если давление уменьшилось, то это какие наносекунды.


Посмотрел на свой указательный палец и подумал, что задержка в наносекунды - это сильное преувеличение точнее преуменьшение. Все таки, желательно подавать команду на дальнейшую работу после того, как кнопка окончательно "успокоилась". Эту идею на нашем форуме мне подал КЕА в моей первой теме "Устройство управления (УУ) на PIC16F84A. Программные сбои."

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1856
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 11.05.10 07:31. Заголовок: Посмотрел на средний..


Посмотрел на средний палец И подумал, глюки при замыкании были, при маленькой задержке. При размыкании никогда.
Возможно при высокой тактовой частоте это и актуально от 20МГц и выше. Но при 4МГц, это точно, лишнее.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 7
Зарегистрирован: 24.01.11
Откуда: Россия, Тулун
Рейтинг: 0
ссылка на сообщение  Отправлено: 31.01.11 19:21. Заголовок: В одной книжке я прч..


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 3049
Зарегистрирован: 03.01.07
Рейтинг: 5
ссылка на сообщение  Отправлено: 31.01.11 20:12. Заголовок: Переходные процессы ..


Переходные процессы практически одинаковые. Но в большинстве случаев достаточно точно знать что-то одно, нажата (проверить), не нажата ( не проверять).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 8
Зарегистрирован: 24.01.11
Откуда: Россия, Тулун
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.02.11 18:10. Заголовок: А как точно узнать: ..


А как точно узнать: нажата кнопка или нет? Так как я только начал изучать микроконтроллеры, то я кнопку (кнопки) опрашиваю постоянно (например, каждые 50 мс) и смотрю была она нажата или нет, после этого принимаю решение куда идти "рабочей точке" дальше.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 2137
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 04.02.11 18:20. Заголовок: Всё правильно. Так в..


Всё правильно. Так все и делают. Опрашивают постоянно.
Можно ещё работать по прерываниям. Это относится к кнопкам "навешанным" на PORTB. При нажатии кнопки, происходит прерывание.

В радиотехнике, существует два вида неисправностей-есть контакт там, где его не должно быть никогда и, нет контакта там, где он должен быть постоянно. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 504
Зарегистрирован: 26.12.06
Откуда: Украина, Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.02.11 20:06. Заголовок: Можно в п\п прер..


Можно в п\п прерываний (по другому событию) опрашивать кнопку, и фиксировать нажатие с помощью поднятия "флага". Когда нажатие отрабатывается, "флаг" сбрасывается.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 10
Зарегистрирован: 24.01.11
Откуда: Россия, Тулун
Рейтинг: 0
ссылка на сообщение  Отправлено: 05.02.11 13:13. Заголовок: К сожалению, с преры..


К сожалению, с прерываниями я толком еще не разобрался. Наверно, где-то в самоучителе об этом должно быть подробно рассказано. Пока я прочитал только первые 17 глав.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 506
Зарегистрирован: 26.12.06
Откуда: Украина, Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 05.02.11 14:20. Заголовок: Тогда создайте цикл,..


Тогда создайте цикл, в котором будет участвовать опрос кнопки.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.04.12 18:14. Заголовок: Здравствуйте! Подска..


Здравствуйте! Подскажите как быть с кнопками...
У меня в дипломе терморегулятор. Вход - термопара и DS1820, выход - 3 семисегментника и управление нагревом (самое простое, через установку 1 на ногу и при превышении заданной и текущей температуры и на оптрон)
Много чего использовал из Самоучителя... и практикума (по части ацп и ДС)
Сейчас столкнулся с такой проблемой - нужно кнопками задать температуру (ну и записать ее в EEPROM).
Алгоритм пока такой - чтение АЦП, преобразование ADRES в значение температуры (интерполировал 2мя прямыми), чтение температуры с DS, сложение (DS на холодном спае), проверка разности с номинальной (управление нагревом), индикация текущей.
Порт Б используется для 7 сегментов, одновременно старшие ноги - 5..7 соединены с кнопками на землю. 3 кнопки - установка (SET), + и -.
Как лучше организовать их обработку (установка номинала)? Куда воткнуть этот кусок кода?
Допустим, после 1 цикла работы всей программы установить порт Б на вход и считывать пока не установится 0 на порте с кнопкой SET. Но поскольку цикл большой и особенно индикация длится долго относительно, наверное можно пропустить нажатие SET? Тогда по прерываниям может? Но где поставить в этом случае "разрешенную зону" для них?
И далее, допустим, мы вошли в ПП обработки кнопок (SET по кнопке ушел в ноль). Нужно одновременно как-то опросить состояние кнопок + и - (а это 2 задержки по 20мс на дребезг) И вывести на индикацию установленную температуру (причем в реальном времени это число же будет меняться теми же кнопками).
Контроллер PIC16f873
Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 65
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 30.04.12 17:10. Заголовок: JEy предлагаю сделат..


JEy предлагаю сделать обработку кнопок сразу после обработки последнего разряда индикации, разумеется с уравниванием отработанных маш. циклов, причем обработку сразу всех трех кнопок, ты схему собирал чтоб поэкспериментировать?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 30.04.12 23:45. Заголовок: Александр Нет, все э..


Александр Нет, все это чисто в теории))
в общем я мыкался и пока тоже вот остановился на таком варианте:
опрос 3 х кнопок во время (перед) задержки индикации 3х разрядов соответственно, будут ставиться 3 флага
обработка сразу после, перед началом нового круга индикации, по флагам
тогда, если сделать задержку на индикацию 1 разряда небольшой (6мс например), то 3 задержки дадут 18 мс с хвостом, то есть одна кнопка будет (в идеале) опрашиваться каждые 18 мс
дальше, если по состоянию флага кнопки SET (будет инвертироваться с каждым нажатием) у нас будет установка, надо внести какую-то корректировку вновый цикл индикации, ведь нужно будет индицировать "нормальную", установочную температуру, пока флаг SET не сбросится.....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 67
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 01.05.12 01:33. Заголовок: а можно и с прерыван..


а можно и с прерываниями сделать например по переполнению TMR0

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 68
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 01.05.12 02:24. Заголовок: JEy пишет: надо вне..


JEy пишет:
 цитата:
надо внести какую-то корректировку вновый цикл индикации, ведь нужно будет индицировать "нормальную", установочную температуру


сначала ты опрашиваешь кнопки на факт нажатия, если нажата прибавляем или отнимаем единицу от "уставочного" регистра, затем на индикацию, после индикации уже проверяем не факт нажатия, а факт отжатия кнопки, если отжатия не было то пропускаем инкремент или декремент уставки, значит тебе для кнопок потребуется не 3 флага, а 6 флагов, например для одной кнопки:
1-й бит- кнопка SET, если нажата устанавливаем 0, отжата 1
2-й бит- флаг ее нажатия в предыдущем цикле, если была нажата то 1 если отжата то 0.
Проверяем нажатие кнопки SET если нажата то проверяем флаг бита 2
посмотри по этой блок схеме http://zalil.ru/33161944

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 01.05.12 20:18. Заголовок: Александр Да, про от..


Александр Да, про отжатие я не подумал... исходил из мгновенного нажатия ONLY
Если проверить нажатие перед, а отжатие - после, то кнопка должна в теории отжаться за время индикации одного разряда, в моем случае - 6мс, это маловато получается, там же дребезг 20 мс хотя бы. В тоже время опрашивать кнопку реже чем в 20 мс означает возможность пропустить само нажатие...
А по поводу

 цитата:
корректировку вновый цикл индикации, ведь нужно будет индицировать "нормальную", установочную температуру


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 01.05.12 20:50. Заголовок: я тут глянул время п..


я тут глянул время преобразования DS18S20 - 750 милисекунд!!! У B20 от 94 до 750... кошмар, почти секунда, за котрую наверняка можно пропустить нажатие!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 168
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 02.05.12 00:45. Заголовок: Jey посмотрите стать..


Jey посмотрите статьи на chipmk.ru именно про клавиатуру и навсегда забудете про КЕАвский способ ее опроса. Поверьте хуже его способа опроса придумать еще надо постараться... Это самый настоящий геморрой, а проблемы начинаются уже при опросе более одной кнопки, а если еще необходимо обработать длительные нажатия кнопок...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 69
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 02.05.12 09:14. Заголовок: JEy пишет: глянул в..


JEy пишет:
 цитата:
глянул время преобразования DS18S20 - 750 милисекунд!!! У B20 от 94 до 750... кошмар, почти секунда


это не так уж и страшно, я вышел из подобной ситуации когда изобретал часы, уходил в прерывания каждые 10мс с опросом кнопок в прерываниях, а про DS не парься, там просто нужно будет сделать запрет прерываний когда происходит считывание и передача байта, а во всем остальном промежутке времени а это почти 600мс прерывания будут разрешены и контроллер сразу заметит если ты ткнешь на кнопку.

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.05.12 15:45. Заголовок: Алексей глянул, наше..


Алексей глянул, нашел 2 статьи - "Вариант создания клавиатуры без прерываний", где есть такая фраза - "При выполнении какой-нибудь программы, опрос клавиатуры нужно включать не чаще 1 сек, это оптимально и практически для человека это мгновенная реакция кнопки.", 1 секунда - же слишком много... пропуск кнопки очень вероятен; и вторая - "Создание удобного обработчика клавиатуры", там вроде кнопки опрашиваются раз в цикл программы... А что за КАЕвский способ? В его самоучителе что-то не видел про кнопки
Александр
Можно про запреты и разрешения прерываний поподробнее? С ДС18 понятно, а где ставить запреты и разрешения в следующих случаях?
- динамическая индикация
- считывание ацп
- сложение температур
- управление нагрузкой

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 495
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 02.05.12 16:46. Заголовок: JEy пишет: 1 сек..


JEy пишет:

 цитата:
1 секунда - же слишком много...


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


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.05.12 17:01. Заголовок: MAZ ну я пробовал по..


MAZ ну я пробовал подсчитать, максимум доходило до 8 раз в секунду... Если "осмысленно" нажимать на кнопку "-", например, то можно 2-3 раза вполне нажать... А еще может получиться такая неприятность, когда нажатия осуществляются например раз в секунду, но со сдвигом относительно проверки программой нажатия, к примеру в полсекунды... Но это все так, мысли и вообще я новичек в этом деле, практики нет)) А нажатия нескольких или удержание меня тоже не очень волнует, мне бы с обычным разобраться.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 70
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 02.05.12 18:16. Заголовок: JEy вот ссылка на пр..


JEy вот ссылка на программу работы с DS1820 программа с самоучителя, но доработанная, с вставками разрешения и запрета прерываний: http://zalil.ru/33170046

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник


Пост N: 71
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 02.05.12 18:19. Заголовок: а с кнопками ничего ..


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 7
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.05.12 18:43. Заголовок: Александр спасибо за..


Александр спасибо за код, смысл понял... Хотя задержка в 750 мс состоит из циклов, основную часть которых составляет InBYTE, длящийся более 500мкс... во время которого прерывания запрещаются.. Тогда лучше фиксированную задержку сделать и разрешить в ней прерывания...
В индикации ты разрешал прерывания?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 496
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 02.05.12 21:15. Заголовок: JEy пишет: MAZ ну я..


JEy пишет:

 цитата:
MAZ ну я пробовал подсчитать, максимум доходило до 8 раз в секунду... Если "осмысленно" нажимать на кнопку "-", например, то можно 2-3 раза вполне нажать... А еще может получиться такая неприятность, когда нажатия осуществляются например раз в секунду, но со сдвигом относительно проверки программой нажатия, к примеру в полсекунды.


Вы представьте, нажать кнопку 8 раз в секунду, это ключ коротковолновика получается. Если у вас устройство, нажимаете на кнопку, слышите подтверждение и видите результат этого нажатия. Вот что я имел ввиду осмысленно.
Ну не получится быстрей секунды. А опрашивать кнопку можете сколько хотите раз , как удобно по алгоритму и т.д. Например из 8 опросов только один зафиксирует нажатие. Насчет определения отжатия кнопки и и отсчета времени для этого. В моем случае это не нужно, т.к отжатие не несет ни какой информации. Главное определить точно, что было нажата. И тут появляется интересная возможность, если продолжать держать, то мк примет в следующем опросе опять нажатие. Например таким образом я делал быстрый выбор цифры. Не жать тупо и ждать отжатия. А только при опросе фиксировать нажатие. Цифры увеличиваются/ уменьшаются на 1. Частота их счета будет зависеть от частоты опроса в программе. Обычно, подбираю комфортное изменение для визуального восприятия в отладчике.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 72
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 03.05.12 05:17. Заголовок: JEy пишет: В индика..


JEy пишет:
 цитата:
В индикации ты разрешал прерывания?


нет если разрешить прерывания в индикации, то получится, что один их индикаторов сразу начинает либо гореть ярче, либо тусклее остальных, ты читал статью КЕА, взлом? Там термостат, с семисегментными индикаторами, и датчиком DS, а также кнопки установки температуры. если у тя его нет посмотри тут http://zalil.ru/33172962

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 497
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 03.05.12 05:41. Заголовок: Почитал первую пробл..


Почитал первую проблему. Это из серии, как создать себе проблемы и успешно бороться с ними. Даже холодный спай считывать ДС. Это задание такое? Динамика от прерывания?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 73
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 03.05.12 06:14. Заголовок: MAZ пишет:Даже холо..


MAZ пишет:
 цитата:
Даже холодный спай считывать ДС. Это задание такое? Динамика от прерывания?


а что такое холодный спай? это скрутка чтоли? А я понял так что ему нужно организовать: динамику от прерываний TMR0, кнопки от прерываний TMR1, да еще и АЦП воткнуть...

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 498
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 03.05.12 13:26. Заголовок: Да одним таймером мо..


Да одним таймером можно обойтись. 5мс таймер на динамику. 20мс время "дребезга"это 4 прерывания. простой счетчик
за 5мс он 100 раз измерит АЦП, опросит кнопку и еще 10 раз покурит. Можно и время посчитать и еще чего нибудь вкл/откл.
Опрашивать кнопку с частотой 5мс думаю нормально. это не 8 раз в секунду

холодный спай у термопары. Очень простая схема, многими испытанная. С отличными показаниями.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 8
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 03.05.12 15:34. Заголовок: MAZ пишет: Это из ..


MAZ пишет:

 цитата:
Это из серии, как создать себе проблемы и успешно бороться с ними.



 цитата:
холодный спай у термопары. Очень простая схема, многими испытанная. С отличными показаниями.


В Общем-то вы правы.. Схему переделывать уже нет времени, есть принципиальная, разводка...
Я думал динамику сделать без таймера через регистры в основном цикле, как у КЕА в.... Самоучителе; с таймером удобнее будет?
Кнопки можно опрашивать раз в 20мс (дребезг) по таймеру и ставить флаги нажатия, запоминая флаг предыдущего нажатия. А в основном цикле их обрабатывать... По двум флагам можно будет судить, отпустили ли мы кнопку, а если она не отпущена в течении, например 2 сек, то да, другой алгоритм обработки (быстрое увеличение/уменьшение)
П.с. если опрашивать кнопки раз в 5мс, то за секунду будет 200 опросов, это же куда больше 8 опросов
Александр пишет:

 цитата:
ты читал статью КЕА, взлом?


неа, не читал, может гляну.. времени уже нет, скоро защита

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 74
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 03.05.12 18:41. Заголовок: JEy я вот только одн..


JEy я вот только одного не пойму, зачем еще мерить АЦП с термопары если температура прекрасно мерится и с DS? или у тебя в задании нужно еще мерить температуру до 1000градусов?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 03.05.12 18:46. Заголовок: Александр да, там 2..


Александр
да, там 200-300 градусов

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 03.05.12 21:05. Заголовок: Решил по таймеру 10м..


Решил по таймеру 10мс выводить индикацию 3 разрядов разовую (100Гц получится), а каждые 20мс опрашивать кнопки и ставить флаги. Обработка нажатий в основном цикле (замер,сравнение,управление реле,обработка нажатий)

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 499
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 03.05.12 21:42. Заголовок: Все таки последний р..


Все таки последний раз вмешаюсь. На сколько помню у КЕА динамика в циклах. Это огромный геморрой. Он сам это признавал, но типа для учебных целей нужно. Бог с ним.
Программа очень простая с таймером. настраиваем прерывание через 5мс. прервались установили флаг и вышли. Основная программа ждет этого флага и ничего не делает. Дождалась. Измеряет с АЦП температуру, опрашивает кнопку, если нажата, запускает счетчик на 4 прерывания. После появления флага прерывания, прибавляем 1. Если есть подтверждение нажатия выполняет, что нужно. Преобразовываем и выводит один разряд на индикацию. И опять ждет флага происшедшего прерывания. Я даже трели звуковые разной тональности запускал в этой конфигурации. И все одним таймером.

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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 76
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 04.05.12 00:34. Заголовок: JEy и всё же как ты ..


JEy и всё же как ты решил опрашивать DS, а то ты меня в замешательство вогнал, что прием отправка там 500мс?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 11
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.12 00:41. Заголовок: MAZ ну я в принципе ..


MAZ ну я в принципе так и хотел, только не 5, а 10 и счетчик до 2х. А почему индицировать 1 разряд а не 3? В самоучителе "взлом" тоже индицируется 1 разряд. Правда он индицируется в прерывании, как я и хотел, не совсем понял, как вы имели ввиду
Александр ну во время задержки, которая до 750мс, разрешить прерывания и всё. Просто сделать задержку фиксированной =750, а не "плавающей", потому что плавающая постоянно опрашивает датчик на прием байта 11111111, это длительный процесс и прерывания там запрещены должны быть по всей видимости.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 77
Зарегистрирован: 23.01.11
Откуда: Россия, Респ. Саха Якутия г.Мирный
Рейтинг: 1
ссылка на сообщение  Отправлено: 04.05.12 07:50. Заголовок: Александр


тогда ясно, ну дерзай, удачи, обращайся если появятся вопросы.


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 500
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 04.05.12 13:14. Заголовок: 5мc это оптимально. ..


5мc это оптимально. Не моргает индикатор. 10 долго.
Каждые 5мс выводится только 1 разряд. Поэтому и писал про один разряд.
В прерываниях ничего делать не надо. Только флаг поставить и слинять. Это нормальная практика. Конечно можно и по хулиганить. Потом приобретается вредная привычка.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.12 20:02. Заголовок: MAZ понятно MAZ пише..


MAZ понятно
MAZ пишет:

 цитата:
Каждые 5мс выводится только 1 разряд.


эту фразу я читаю так: в обработке прерывания вывести на индикацию 1 разряд, я правильно понимаю?
и все-таки почему 1, а не 3? для уменьшения времени обработки прерывания? просто тогда появятся новые флаги, показывающие, какой именно разряд выводить в прерывании, это пахнет геморроем

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 501
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 04.05.12 21:05. Заголовок: Да все просто. Это ж..


Не надо в обработке ничего делать. Только, поставьте флаг что произошло прерывание. Основная программа все время проверяет этот флаг, как он появился, сбрасывает его и дальше выполняется программа в теч. 5мс. Обычно намного меньше, по Вашей задаче. Выводится 1 разряд, кнопки и т.д. и возвращается на поиск флага прерывания. Произошло прерывание, опять есть флаг, опять сделали цикл в 5мс. Это очень удобно. Зачем делать что-то в прерывание? Оно фиксирует событие.
Да все просто. Это же динамика. Она выводится по разрядно. Т.е. постоянно (5мс) горит только один разряд. Потом второй, и т.д. Если три разряда через 5мс нормально, стоят как вкопанные.. Если больше надо время уменьшать.
Флаги 1 разряда, 2 и 3. Почему геморрой? Проверяем флаг, нет ни одного. Ставим 1 разряда, загружаем число из таблицы индикатора в порт. Включаем разряд. Сбрасываем флаг 1 разряда, устанавливаем 2. При следующем заходе в программу индикации (через5мс) проверяем первый флаг, сброшен, второй стоит, значит выводим второй разряд и т.д. Вот пример
Скрытый текст

Все чудненько работает. И можно вставлять мигание точками их загорание в нужном разряде, мигание разрядов и т.д. Могу весь текст дать. Вольтмер , амперметр ЗУ с отсчетом времени зарядки, контролем режимов и т.д. Просто вот недавно закончил, под рукой.


Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.05.12 22:27. Заголовок: MAZ ну смысл я понял..


MAZ ну смысл я понял

 цитата:
Основная программа все время проверяет этот флаг


насколько часто? у меня программа 1 цикл проходит за 4 мс примерно + 750 мс для задержки на преобразование DS1820! Это без учета индикации. Уж слишком большой промежуток времени.
За пример спасибо, примерно так же было и во "взломе" КЕА.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 234
Зарегистрирован: 10.02.11
Откуда: Россия
Рейтинг: 3
ссылка на сообщение  Отправлено: 04.05.12 23:24. Заголовок: Если в прерывании то..


Если в прерывании только устанавливать флаг и всё, а в основном цикле его опрашивать, то неоходимось в обработчике отпадает совсем.
В таком случае можно просто опрашивать флаг таймера. Это тоже вариант, но он подходит только для циклов, которым нечем заняться. А такое бывает очень редко.
А вот в обработчике ловить изменения входа и устанавливать соответствующие флаги (нажата, отжата, долго нажата, ....) - это будет самым правильным вариантом. Времени займёт это не много, и цикл будет освобождён для своих целей.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 502
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 05.05.12 12:32. Заголовок: 750мс/5мс=150 прерыв..


750мс/5мс=150 прерываний счетчика или переполнений, как предложил Алекс. Запросил дску в цикле. Это быстро. и включил счетчик на 150 прерываний. Потом попросил отдать данные, по окончание счета.
Индикация 10 мкс. при 4МГц, чего о ней думать.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 235
Зарегистрирован: 10.02.11
Откуда: Россия
Рейтинг: 3
ссылка на сообщение  Отправлено: 05.05.12 14:34. Заголовок: MAZ пишет: Запросил..


MAZ пишет:

 цитата:
Запросил дску в цикле. и включил счетчик на 150 прерываний.

Так и нужно делать. Т.е. создать программные таймеры, считающие переполнения основного таймера. Это будет переменные, которые в обработчике проверяются на неноль и декрементируются. В основном цикле, для запуска таймера, устанвливаем эту переменную на нужное значение (например 150) и продолжаем цикл дальше, выполняя другие задачи. Там же, в цикле, проверяем эту переменную на ноль и, если равна, то переустанавливаем её и выполняем действия (например - работаем с ДСкой). Значение переменной, равное нулю - означает, что таймер отсчитал, и необходимое время прошло.
Всё до боли просто и логично.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 14
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 05.05.12 16:35. Заголовок: MAZ Во время работы ..


MAZ Во время работы программного таймера на 150 прерываний просто ждать? Или произвести обработку кнопок, а что еще важнее - индикацию (150 раз получится)?
Alex Декремент программного таймера должен быть в обработчике прерывания, как я понимаю?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 236
Зарегистрирован: 10.02.11
Откуда: Россия
Рейтинг: 3
ссылка на сообщение  Отправлено: 05.05.12 16:52. Заголовок: JEy пишет: Во время..


JEy пишет:

 цитата:
Во время работы программного таймера на 150 прерываний просто ждать?

Дак что угодно делайте. Это время - свободное !

JEy пишет:

 цитата:
Декремент программного таймера должен быть в обработчике прерывания, как я понимаю?

Совершенно верно. Он и будет считать переполнения основного таймера, а использовать его (установка, ожидание отсчёта, ...) будете в другом месте.

И забудьте все супер-пупер-мега-подпрограммы КЕА, который любил говрить "Я люблю точность до 1 МЦ" и его преемника Пети, создавшего программу для расчёта задержек. Всё это - запудривание мозгов себе и окружающим. Все подобные задержки летят со свистом коту под хвост при добавлении ещё какой-либо задачи в программу. Очень глупо циклить программу на долгое время, за которое проц мог бы что-нибудь сделать полезное. Если только светодиодом поморгать, не более того...

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 503
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 05.05.12 17:56. Заголовок: Ну мне и сказать неч..


Ну мне и сказать нечего. Алекс все сказал.
JEy пишет:

 цитата:
Во время работы программного таймера на 150 прерываний просто ждать? Или произвести обработку кнопок, а что еще важнее - индикацию (150 раз получится)?


Я же уже и говорил, что 150 циклов полных, программы. И не надо ничего ждать. Просто считаем эти циклы, опрашиваем кнопки, индикацию делаем , измеряем, преобразовываем. Таймер же считает отдельно. А мы только его переполнения .


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 29.04.12
Рейтинг: 0
ссылка на сообщение  Отправлено: 05.05.12 19:08. Заголовок: Alex пишет: Дак что..


Alex пишет:

 цитата:
Дак что угодно делайте. Это время - свободное !


MAZ пишет:

 цитата:
Я же уже и говорил, что 150 циклов полных, программы.


Мы наверное на разных языках говорим) В моем понимании в "полный цикл" программы должен входить замер АЦП, замер DS, обработка флагов кнопок, вы предлагаете индикацию тоже в нем сделать (по флагам). Или вы имеете ввиду выкинуть из полного цикла замер DS? потому что он как раз должен включать в себя задержку 150*5 мс, а не быть частью 1 из 150 циклов... Или быть может игнорировать ВЕСЬ кусок кода про DS (либо его часть, связанную с получением после задержки), пока не будет произведено 150 прерываний. Но тогда смысл мерить АЦП, если потом надо его значение сложить с ДС.
Я понимаю, что таймер TMR независим.


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 237
Зарегистрирован: 10.02.11
Откуда: Россия
Рейтинг: 3
ссылка на сообщение  Отправлено: 05.05.12 19:10. Заголовок: Индикация в обработч..


Индикация в обработчике,там-же опрос кнопок, там-же счёт таймера(ов). В основном цикле - обработка флагов кнопок, все замеры, работа с DS, АЦП, вычисления, и т.д...

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 504
Зарегистрирован: 01.03.11
Рейтинг: 2
ссылка на сообщение  Отправлено: 05.05.12 21:57. Заголовок: Возможно да. Разные ..


Возможно да. Разные языки.
JEy пишет:

 цитата:
Или быть может игнорировать ВЕСЬ кусок кода про DS (либо его часть, связанную с получением после задержки), пока не будет произведено 150 прерываний.


А какой там кусок? Запрос на измерение,( микросекунды) потом задержка о которой мы говорим. И запрос на выдачу данных и прием. (опять микросекунды)

Ну кто Вам мешает измерит 150 раз с помощью АЦП, потом усреднить результат при получении данных с дс. Нормальная индикация со сменой показаний раз в секунду. Почти.
Можно 150 раз не измерять, а только по истечении 750мс. Можно 10,11,... раз измерять и усреднять. Тут фантазия, как угодно. ДС после запроса, переваривает 750мс и программа ждет только время, когда будет смысл попросить выдать данные от дс. А все это время идет спокойно индикация и опрос кнопок и еще много чего. Таймер считает. ДС переваривает". Программа занимается 150 раз своими делами пока дс "неадекватна"

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 79 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия