 |
|
|
|
| Автор |
Сообщение |
DL36 Живет здесь... (>100)

Зарегистрирован: 04.10.2006 Сообщения: 192 Откуда: Херсон
|
Добавлено: 09 Фев 2007, 19:13 Заголовок сообщения: |
|
|
Надеюсь, я Вас убедил в необходимости применения анализа типа сброса, и на моем примере постараюсь показать как это все работает.
| Код: |
include "as16f62xa.h" ;Я подкорректировал стандартный файл
;специально для этого случая и ложу в
;папку с проектом
;Указываем какой вывод предоставлен для индикации
OUT equ RB0 ;Вывод для сигнализации аварии
PORT equ PORTB
MASKA equ 0xFF ;Настраиваем PORTA для вывода индикации
MASKB equ 0xFE ;Настраиваем PORTB для вывода индикации
k_zd equ 0x02 ;Формирование задержки
;Эти две строки для компилятора
GLOBAL powerup,start, big_powerup
PSECT powerup,class=CODE,delta=2
powerup
bsf STATUS, RP0 ;Банк 1
btfsc PCON, POR ;Сброс при включении питания?
ljmp big_powerup ;НЕТ, WDT или сброс MCLR
bsf PCON, POR ;Подымаем POR необходимо только для анализа
bsf PCON, POR ;Подымаем BOR на следующем сбросе
bcf STATUS, RP0 ;Банк 0
ljmp start ;Да
;
PSECT big_powerup,class=CODE,delta=2
big_powerup
btfss PCON, BOR ;Сброс при снижении питания?
goto pdown ;
btfss STATUS, TO ;Сброс WDT?
goto pwdt
; В своих устройствах сброс от кнопки я не применяю и рассматриваю данный
; случай как аварию если все же надо – уберите «;» перед ljmp start
;Если предусмотрен сброс коментарий убрать
; ljmp start
pdown ;Здесь зациклившем на ошибке
movlw MASKB
movwf PORT ;TRIS порта
bcf STATUS, RP0 ;Банк 1
clrwdt ; Не даем возможности еще раз осуществить сброс
bcf PORT, OUT ; Выставляем на PORT, OUT низкий уровень
goto $-2
pwdt
movlw MASKB
movwf PORT
bcf STATUS, RP0 ;Банк 1
clrwdt
bsf PORT, OUT ;Выставляем на PORT, OUT высокий уровень
goto $-2
end
|
При реализации приведенного кода, программа получит управление только при сбросе по включению питания. Любая авария приведет к появлению на PORT, OUT высокого или низкого уровня. Таким образом, если светодиод горит ровным светом любого цвета это ошибка, которую необходимо найти.
Дополнительно здесь необходимо прописать код для установки прибора в безопасное состояние. |
|
| Вернуться к началу |
|
 |
DL36 Живет здесь... (>100)

Зарегистрирован: 04.10.2006 Сообщения: 192 Откуда: Херсон
|
Добавлено: 09 Фев 2007, 22:56 Заголовок сообщения: |
|
|
Мне интересно, продолжать в том же духе, или поменять что. А может вобще никому это не интересно. Надо какаято обратная связь.
О том, что работать будет я не сомневаюсь.
Думаю завтра смогу закончить основной проект и выделить немного времени для регистратора. |
|
| Вернуться к началу |
|
 |
DL36 Живет здесь... (>100)

Зарегистрирован: 04.10.2006 Сообщения: 192 Откуда: Херсон
|
Добавлено: 11 Фев 2007, 16:41 Заголовок сообщения: |
|
|
К проектированию программы для микроконтроллера необходимо подходить со всей ответственностью. Главным ресурсом устройства есть процессор и этот ресурс, по возможности, всегда желательно беречь. Этому помогают различные периферийные устройства входящие в состав микроконтроллера. Одним из важных параметров считается время реакции на внешнее воздействие. Для реализации гарантированного времени реакции надо соблюдать несколько правил.
Обработчик прерывания должен быть по возможности короче. Вы всегда должны совершенно точно знать, без каких действий нельзя обойтись в прерывании.
Обработчик более часто вызываемого прерывания должен стоять раньше других.
Применение задержек в виде цикла ожидания некоего события надо считать роскошью и по возможности избегать.
Как правило, нет необходимости выполнять все инструкции главного цикла, в котором постоянно крутится программа. Квантование времени позволяет вызывать разные части программы в разное время, в зависимости от потребности.
В регистраторе квантование я выполнил на таймере TMR1. Через равные промежутки времени обнуляется системная переменная syst, каждый бит которой отвечает за определенную программу. В главном цикле вызываем так.
| Код: |
if (BITTST0(syst,ST2))kv_tx();// Вызываем подпрограмму старта посылки
|
причем при входе в подпрограмму сразу подымаем, бит ST2,
Это дает возможность пропустить эту подпрограмму, на следующем проходе цикла, и так до следующего обнуления syst.
Макросы BITTST0 и BITSET позволяют слегка упростить, сделать более понятной запись программы. BITTST0(syst, ST2) позволяет тестировать бит ST2 в переменной syst на равенство 0. Имя BITSET говорит за себя, установить нужный бит в переменной. Макросы описаны в файле macro.h. Тут лучше использовать структуру битовых полей, но я привык к такому способу и не всегда вспоминаю, что структура выглядит понятнее.
Подпрограмма kv_tx() формирует начало посылки, а kv_tx() формирует окончание посылки.
| Код: |
void kv_tx(void) //Формирование посылки
{
if (!TRMT) return ; //Ожидаем окончание передачи
BITSET(syst,ST2);
CCP1CON = 0b00000000;//Выключаем ШИМ
}
|
Вызов в главном цикле выглядит так:
| Код: |
if (BITTST0(st,KV0)) kv_tm();//
|
Это сделано для возможности, отдельно периодически проверять окончание передачи. Работает это так, kv_tx() разрешает работу, для kv_tm и они друг друга блокируют.
Помимо старта посылки в kv_tx() в этой подпрограмме реализована логика определения направления движения и подсчета объектов.
Пока все, а об остальном будет позже.
Есть один вопрос, который хотелось бы прояснить.
Для вывода индикации можно применить LCD индикатор в 4-х битном вводе, при этом будут задействованы все ноги процессора.
Или в последовательном коде выдвинуть данные на несколько LED индикаторов. Сэкономленные ноги можно применить, например для кнопок. |
|
| Вернуться к началу |
|
 |
wowa Знатный посетитель (>20)

Зарегистрирован: 18.10.2006 Сообщения: 35
|
Добавлено: 13 Фев 2007, 13:25 Заголовок сообщения: |
|
|
| Цитата: | Есть один вопрос, который хотелось бы прояснить.
Для вывода индикации можно применить LCD индикатор в 4-х битном вводе, при этом будут задействованы все ноги процессора.
Или в последовательном коде выдвинуть данные на несколько LED индикаторов. Сэкономленные ноги можно применить, например для кнопок. |
У меня вопрос?
Какие функции планируете поручить дополнительным кнопкам и сколько их будет?
На даный момент свободных выводов остается: RA 0,1,2,3,4,6,7 и RB 6,7.
на RA можно подключить индикатор, со счетом от 0 до 9, если больше 9, то буква Р
(переполнение). А оставшиеся RB 6,7 оставить для кнопок, или один из них.
Хорошо было бы что бы индикатор активировался при пересечении лучей - допустим,
прошел человек, индикатор загорелся и нарисовал 1, вышел - нарисовал 0 и через
несколько секунд погас.Это разгрузит порты РІС и позволит наблюдать за индикатором
в темноте. Желательно было бы предусмотреть плавное включение и выключение нагрузки,
(экономия лампочек) и аварийное выключение через несколько часов (аварийный режим
при сбоях).
Я наконец то переселился в свой кабинет, попробую собрать макет на днях.
Какую версию НЕХ зашивать в РІС? |
|
| Вернуться к началу |
|
 |
DL36 Живет здесь... (>100)

Зарегистрирован: 04.10.2006 Сообщения: 192 Откуда: Херсон
|
Добавлено: 15 Фев 2007, 9:39 Заголовок сообщения: |
|
|
| wowa писал(а): |
У меня вопрос?
Какие функции планируете поручить дополнительным кнопкам и сколько их будет?
На даный момент свободных выводов остается: RA 0,1,2,3,4,6,7 и RB 6,7. |
RA6,RA7 заняты под кварц, т.е остается только 5. О кнопках я не думал, может +1, -1? Какие еще будут предложения?
| wowa писал(а): |
на RA можно подключить индикатор, со счетом от 0 до 9, если больше 9, то буква Р
(переполнение). А оставшиеся RB 6,7 оставить для кнопок, или один из них.
Хорошо было бы что бы индикатор активировался при пересечении лучей - допустим,
прошел человек, индикатор загорелся и нарисовал 1, вышел - нарисовал 0 и через
несколько секунд погас.Это разгрузит порты РІС и позволит наблюдать за индикатором
в темноте. Желательно было бы предусмотреть плавное включение и выключение нагрузки,
(экономия лампочек) и аварийное выключение через несколько часов (аварийный режим
при сбоях). |
Я сделал на отражение, технологически так проще. Все можно собрать в одном устройстве и длинных проводов не надо.
Только чувствительность уменьшить надо, метров до 2-х, что касается счета предусмотрено до 32768. Получается пять разрядов.
Плавное включение я не предусмотрел. Для энергосберегающих лампочек не надо.
Если пожертвовать каким еще выводом, можно сделать, пол накала и через время полный накал.
| wowa писал(а): |
Я наконец то переселился в свой кабинет, попробую собрать макет на днях.
Какую версию НЕХ зашивать в РІС? |
Зашивать НЕХ который с моделью.
Я тоже вчера купил кварц и думаю на этой неделе заказать плату. |
|
| Вернуться к началу |
|
 |
urry Живет здесь... (>100)


Зарегистрирован: 23.10.2006 Сообщения: 243
|
Добавлено: 16 Фев 2007, 11:33 Заголовок сообщения: |
|
|
вопрос - начал бить свой файл на несколько частей с общими переменными. Сразу линковщик выдал ошибку
//----------------------------------------
Error[500] : undefined symbols:
_rejim (J:\baryer_1\slave1\bar_2_s.obj)_read_write_massiv (J:\baryer_1\slave1\bar_2_s.obj)_st_bat (J:\baryer_1\slave1\bar_2_s.obj)
//----------------------------------------
Объявлено extern, потом добавил volatile (эту переменную можно изменять)- по фик.
Для интереса попробовал скомпилилить твои файлы с первой страницы
Результат приблизительно тот же
//------------------------------------------
Error[500] : undefined symbols:
_BITSET (J:\\reg\isr.obj)_BITINV (J:\reg\syscont.obj)_BITCLR (J:\reg\init.obj)
//------------------------------------------
Компилятор PICC 9.50 pl2
Раньше я как-то обходился 2 файлами - с и н, такая проблема не стояла.
В гуглях говорят, что такая ошибка линковщика - от неполной версии компилятора.
Я брал здесь в файлообменнике ... |
|
| Вернуться к началу |
|
 |
DL36 Живет здесь... (>100)

Зарегистрирован: 04.10.2006 Сообщения: 192 Откуда: Херсон
|
Добавлено: 17 Фев 2007, 14:53 Заголовок сообщения: |
|
|
| urry писал(а): | вопрос - начал бить свой файл на несколько частей с общими переменными. Сразу линковщик выдал ошибку
//----------------------------------------
Error[500] : undefined symbols:
_rejim (J:\baryer_1\slave1\bar_2_s.obj)_read_write_massiv (J:\baryer_1\slave1\bar_2_s.obj)_st_bat (J:\baryer_1\slave1\bar_2_s.obj)
//----------------------------------------
Объявлено extern, потом добавил volatile (эту переменную можно изменять)- по фик. |
Положи здесь проект посмотрю и подправлю а так сказать тяжело. Я в сети постараюсь ответить быстро.
volatile это только способ обработки регистра.
Сначала происходит чтение во временную переменную.
Модификация временной переменной.
Вывод из временной переменной
В твоем случае ошибка в объявлении переменной rejim
| urry писал(а): |
Для интереса попробовал скомпилилить твои файлы с первой страницы
Результат приблизительно тот же
//------------------------------------------
Error[500] : undefined symbols:
_BITSET (J:\\reg\isr.obj)_BITINV (J:\reg\syscont.obj)_BITCLR (J:\reg\init.obj)
//------------------------------------------
Компилятор PICC 9.50 pl2
Раньше я как-то обходился 2 файлами - с и н, такая проблема не стояла.
В гуглях говорят, что такая ошибка линковщика - от неполной версии компилятора.
Я брал здесь в файлообменнике ... |
Конкретно не находит макрос BITSET
С моим проектом попроще добавь строку #include "macro.h" |
|
| Вернуться к началу |
|
 |
urry Живет здесь... (>100)


Зарегистрирован: 23.10.2006 Сообщения: 243
|
Добавлено: 17 Фев 2007, 19:43 Заголовок сообщения: |
|
|
сейчас пытаюсь понять, почему у меня идет односторонний прием - без проблем принимает первый пакет из любого угла комнаты, а после отправления ответного - ошибка приема. Поставил формирователь импульсов после приемника - то же самое. Раздвинул пакеты - не помогает. Мистика. За время, что я уже снес на этот проект, мог бы сделать что-то полезное.  |
|
| Вернуться к началу |
|
 |
DL36 Живет здесь... (>100)

Зарегистрирован: 04.10.2006 Сообщения: 192 Откуда: Херсон
|
Добавлено: 17 Фев 2007, 21:00 Заголовок сообщения: |
|
|
Начни с правильной обработки прерывания всегда надо (флаг)&&(разрешение) флаг подымается просто не вызывает прерывания.
И если находишься в модуле обработки прерываний а флаг выставлен. Сам понимаешь результат.
| urry писал(а): | Мистика. За время, что я уже снес на этот проект, мог бы сделать что-то полезное.  |
За обучение всегда надо платить. Личку прочитай. |
|
| Вернуться к началу |
|
 |
wowa Знатный посетитель (>20)

Зарегистрирован: 18.10.2006 Сообщения: 35
|
Добавлено: 20 Фев 2007, 14:33 Заголовок сообщения: |
|
|
Собрал наконец макетку, прошил PIC, кварц на 8,64 не нашел - поставил на 8.5 МГц.
Светодиоды Д1 и Д2 горятпостоянно, судя из описания это означает аварию.
Д3 не загорается. Импульсы на Д4 и Д5, а также на выходе фотоприемника есть.
Когда перекрываю Д4 и Д5 импульсы пропадают.
Что не так жду инструкций.  |
|
| Вернуться к началу |
|
 |
|
 |
Форум по разработке и ремонту электронной техники
-> Микроконтроллеры, процессоры, ПЛИС... |
Часовой пояс: GMT + 2 На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 След.
|
| Страница 5 из 10
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять вложения в этом форуме Вы можете просматривать вложения в этом форуме
|
|