Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Регистратор на PIC16F628A
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
DL36
Живет здесь... (>100)
Живет здесь... (>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)
Живет здесь... (>100)


Зарегистрирован: 04.10.2006
Сообщения: 192
Откуда: Херсон

СообщениеДобавлено: 09 Фев 2007, 22:56    Заголовок сообщения: Ответить с цитатой

Мне интересно, продолжать в том же духе, или поменять что. А может вобще никому это не интересно. Надо какаято обратная связь.

О том, что работать будет я не сомневаюсь.

Думаю завтра смогу закончить основной проект и выделить немного времени для регистратора.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DL36
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 04.10.2006
Сообщения: 192
Откуда: Херсон

СообщениеДобавлено: 11 Фев 2007, 16:41    Заголовок сообщения: Ответить с цитатой

К проектированию программы для микроконтроллера необходимо подходить со всей ответственностью. Главным ресурсом устройства есть процессор и этот ресурс, по возможности, всегда желательно беречь. Этому помогают различные периферийные устройства входящие в состав микроконтроллера. Одним из важных параметров считается время реакции на внешнее воздействие. Для реализации гарантированного времени реакции надо соблюдать несколько правил.

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

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

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

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

В регистраторе квантование я выполнил на таймере TMR1. Через равные промежутки времени обнуляется системная переменная syst, каждый бит которой отвечает за определенную программу. В главном цикле вызываем так.
Код:


   if (BITTST0(syst,ST2))kv_tx();// Вызываем подпрограмму старта посылки

причем при входе в подпрограмму сразу подымаем, бит ST2,
Код:

 
      BITSET(st,KV0);

Это дает возможность пропустить эту подпрограмму, на следующем проходе цикла, и так до следующего обнуления 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)
Знатный посетитель (>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)
Живет здесь... (>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)
Живет здесь... (>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)
Живет здесь... (>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)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 17 Фев 2007, 19:43    Заголовок сообщения: Ответить с цитатой

сейчас пытаюсь понять, почему у меня идет односторонний прием - без проблем принимает первый пакет из любого угла комнаты, а после отправления ответного - ошибка приема. Поставил формирователь импульсов после приемника - то же самое. Раздвинул пакеты - не помогает. Мистика. За время, что я уже снес на этот проект, мог бы сделать что-то полезное. Улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DL36
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 04.10.2006
Сообщения: 192
Откуда: Херсон

СообщениеДобавлено: 17 Фев 2007, 21:00    Заголовок сообщения: Ответить с цитатой

Начни с правильной обработки прерывания всегда надо (флаг)&&(разрешение) флаг подымается просто не вызывает прерывания.
И если находишься в модуле обработки прерываний а флаг выставлен. Сам понимаешь результат.

urry писал(а):
Мистика. За время, что я уже снес на этот проект, мог бы сделать что-то полезное. Улыбка


За обучение всегда надо платить. Личку прочитай.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
wowa
Знатный посетитель (>20)
Знатный посетитель (>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

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


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.666s (PHP: 90% - SQL: 10%) - SQL запросов: 11 - GZIP enabled - Debug on