Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 11.06.2024, 20:22  
Darkmaster777
Частый гость
 
Регистрация: 01.07.2016
Сообщений: 15
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Darkmaster777 на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

eddy, хм
Запросто зип

Да, беспаечная макетка
Вложения:
Тип файла: zip PWMF.zip (5.0 Кб, 0 просмотров)
Реклама:
Darkmaster777 вне форума  
Непрочитано 11.06.2024, 20:37  
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

Вот ваша ошибка:
Сообщение от Darkmaster777 Посмотреть сообщение
При прерывании я просто читаю порт "пустоту" чтоб убрать несоответствие и можно было сбросить флаг (RBIF).
ПОТОМ просто смотрю что на входах (типа RB4==0,temp1++).
1. порт должен читается один раз за прерывание во временную переменную.
Код:
        Button = PORT;
        RBIF=0;
        ; определяем только что нажатые кнопки
        W = Button;
        W ^= ButtonOld;
        W &= Button;
        ButtonJastPressed = W;
		; определяем только что отпущеные кнопки
        W = Button;
        W ^= ButtonOld;
        W &= ButtonOld;
        ButtonJustReleased = W
		
        ; обновляем старое значение кнопок
        ButtonOld = Button;
        ButtonPressed = Button;
2. импульсы должны инкриминироваться или по фронту или по спаду
Код:
//по фронту
 if(ButtonJastJustPressed&(1‹‹4)) 
     {temp4++;
       ButtonJustPressed &=~(1‹‹4);
// по спаду
 if(ButtonJustReleased&(1‹‹5)) 
     {temp5++;
       ButtonJustReleased &=~(1‹‹5);
3.В основной код состояние счетчиков должно передаваться атомарно
4.ну и для ускорения обработки код приведенный выше пошется на ASMе где переменная W -рабочий аккумулятор.
DmitriyVDN вне форума  
Непрочитано 11.06.2024, 21:04  
Darkmaster777
Частый гость
 
Регистрация: 01.07.2016
Сообщений: 15
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Darkmaster777 на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

DmitriyVDN,
Я в общем-то почти так и делал, в одном из вариантов..
Кроме записи в переменную Предыдущего состояния.
По фронту конечно замечательно, но я пытался замутить просто по изменению.
Мне просто кажется что импульсы с одного датчика мешают другому... Хз
Darkmaster777 вне форума  
Непрочитано 11.06.2024, 22:04  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 707
Сказал спасибо: 362
Сказали Спасибо 795 раз(а) в 370 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

Сообщение от Darkmaster777 Посмотреть сообщение
Мне просто кажется что импульсы с одного датчика мешают другому..
Это элементарно проверяется ( например, логическим анализатором на линиях RB4 и RB5 )

Последний раз редактировалось j-Roger; 11.06.2024 в 22:49.
j-Roger вне форума  
Непрочитано 11.06.2024, 22:41  
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

Сообщение от Darkmaster777 Посмотреть сообщение
По фронту конечно замечательно, но я пытался замутить просто по изменению.
Мне просто кажется что импульсы с одного датчика мешают другому... Хз
вот по этому они и мешают. Это же очевидно... или нет?
прерывание по изменению на RB5, вы делаете проверку (RB4=1,RB5==0)
RB4==0,temp1++
RB5==0,temp5++ (счетчик увеличился)
прерывание по изменинию на RB4, вы делаете проверку (RB4=0,RB5==0)
RB4==0,temp1++ (счетчик увеличился)
RB5==0,temp5++ (счетчик увеличился)
прерывание по изменинию на RB5, вы делаете проверку (RB4=0,RB5==1)
RB4==0,temp1++ (счетчик увеличился)
RB5==0,temp5++
прерывание по изменинию на RB4, вы делаете проверку (RB4=1,RB5==1)
RB4==0,temp1++
RB5==0,temp5++
игого получаем счетчики считают в два раза больше положенного
DmitriyVDN вне форума  
Сказали "Спасибо" DmitriyVDN
Darkmaster777 (13.06.2024)
Непрочитано 12.06.2024, 00:58  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

Таки для начала стоило бы запаять. Ну или подтяжки по полкилоома поставить на всякий пожарный: "беспаечная макетка" - тот еще источник фокусов. Ну, а коль МК имеет вменяемый счетный вход для энкодера, то грех им не воспользоваться, а не лупить тупой ногодрыг, как на всратой аврке! У тех же STM32 можно и антидребезг настроить на входе энкодера, подозреваю, тут не хуже… Хотя, с пиками я имел дело лет 15 назад, потом были небольшие извращения с STM8. Но таки потом я полностью на STM32 перешел (правда, в свете последних событий немного стал посматривать на китайские RISC-V, но покуда запас STM32 еще ого-го, да и на алике они все еще "по пять рублей за кучку" - даже 100-ногие F303 вполне по адекватным ценам).
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Сказали "Спасибо" eddy
Darkmaster777 (13.06.2024)
Непрочитано 12.06.2024, 01:59  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 707
Сказал спасибо: 362
Сказали Спасибо 795 раз(а) в 370 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

У ТС очень уж древний ПИК, там никаких таймеров с входами для энкодера нет...

[оффтоп]
А вот в ПИКах чуть посвежее ( которым в обед уже лет как 5-10, например из серий PIC16F1xxx и PIC16F1xxxx ) реакция на внешние прерывания организована вполне вменяемо, практически точь-в-точь как у STM32 - можно выбрать либо фронт, либо спад, либо и то и другое:

Нажмите на изображение для увеличения
Название: ioc.png
Просмотров: 0
Размер:	29.5 Кб
ID:	182253

Для данной задачи было бы так: разрешаем прерывание по спаду сигнала на линиях RB4 и RB5, в прерывании проверяем флаги для линий RB4 и RB5, обновляем соответствующий счетчик если флаг установлен. Всё. А, ну еще сбрасываем флаги вручную.

Понятное дело, что на старом ПИКе это программно можно решить. Но с более продвинутой периферией это получается элегантнее и с меньшим "оверхедом" ( ваш капитан Очевидность )

P.S.
Кроме того, у "свежих" ПИКов на борту может быть модуль PPS ( Peripheral Pin Select ) - в качестве цифрового входа периферии может быть выбран любой пин, a на пин можно вывести сигнал с любого цифрового выхода периферии. За редкими исключениями. Можно один сигнал ШИМ вывести на все пины одновременно ))))
[/оффтоп]

Последний раз редактировалось j-Roger; 12.06.2024 в 02:57.
j-Roger вне форума  
Непрочитано 12.06.2024, 06:12  
Darkmaster777
Частый гость
 
Регистрация: 01.07.2016
Сообщений: 15
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Darkmaster777 на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

DmitriyVDN, значит надо мне подумать, переписать.
eddy, ну само собой, бейспайка это не нормальная плата, всё возможно.
j-Roger, древний, 3шт осталось, надо использовать.
Так я ж не профи, хобби время от времени.

Всем пасибо, как перепишу проверю, приду отпишусь

Блин и в переменную я считывал порт, и даже если счёт должен идти по одному каналу, всё равно считает обе переменные хранения и во вторую в2 раза больше
Код:
void count_rpm(void)                       //count RBIE
           {
             static uint8_t PulseOld;
             static uint8_t PulseNew;
             static uint8_t PulseW;
             PulseNew = PORTB;
             PulseW = ((PulseNew ^ PulseOld)& PulseNew);
             PulseOld = PulseNew;
             
             if(!(PulseW &= ~(1‹‹4))) {fan1++;}
             if(!(PulseW &= ~(1‹‹6))) {fan2++;}

        
            }

Последний раз редактировалось Darkmaster777; 12.06.2024 в 15:54.
Darkmaster777 вне форума  
Непрочитано 12.06.2024, 21:17  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 707
Сказал спасибо: 362
Сказали Спасибо 795 раз(а) в 370 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

Darkmaster777, как-то так?..

PHP код:
void count_rpm(void) {
    
// считаем, что изначально уровни пассивны (единицы на линиях порта)
    
static uint8_t PulseOld _PORTB_RB4_MASK _PORTB_RB5_MASK
    
uint8_t PulseNewFallingEdges;

    
PulseNew PORTB;
    
// получить единицы в разрядах, где уровень на линиях порта изменился с 1 на 0 
    
FallingEdges = (uint8_t) ((PulseOld PulseNew) & ~PulseNew);
    
PulseOld PulseNew;

    if (
FallingEdges _PORTB_RB4_MASK) { fan1++; }
    if (
FallingEdges _PORTB_RB5_MASK) { fan2++; }


И нужно не забыть об АТОМАРНОМ чтении/записи 16-битных fan1 и fan2 вне обработчика прерывания
j-Roger вне форума  
Сказали "Спасибо" j-Roger
Darkmaster777 (13.06.2024)
Непрочитано 12.06.2024, 21:48  
Darkmaster777
Частый гость
 
Регистрация: 01.07.2016
Сообщений: 15
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Darkmaster777 на пути к лучшему
По умолчанию Re: Подсчёт импульсов по входам с общей подтяжкой

j-Roger, да, типа того.У вас хороший пример спасибо

Я переписал чуть по другому проверку теперь считает нормально если подключать отдельно каналы
Код:
 pulse = PORT;
if( (pulse & (1‹‹4))==0){temp1++;}
Чо т я в предыдущем сообщении с Бит-операциям мутил...
Ну и естественно надо добавить запись в лишнюю переменную Предыдущего Состояния порта.
Darkmaster777 вне форума  
 

Закладки

Метки
pic, подсчёт импульсов, прерывание rb4 rb7
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчёт импульсов yellow87 Микроконтроллеры, АЦП, память и т.д 29 27.01.2012 20:54


Часовой пояс GMT +4, время: 20:59.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot