Перейти к содержанию

crazz

Рекомендуемые сообщения

Нужно было прописать (насколько я это понял)адреса векторов прерываний.
По этому я и спрашивал какой компилятор. Иногда нужно отвечать на вопросы, хоть они для Вас и считаются глупыми :)
Простите, что вмешиваюсь... а на мой вопрос ответ неизвестен?
Ждите, может кто ответит. У Вас вопрос про кит, не у всех он валяется на столе :)
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Помогите кто-нибудь :help:.

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

Для одного разряда все работает нормально.

Никак не могу разобраться с включением и переключением разрядов индикатора.

Например я хочу вывести число 1234.

Каким образом должен выглядеть процесс обработки этого числа и включения нужного разряда и цифри?

// Программа обработки низкоприоритетных прерываний

#pragma code

#pragma interrupt InterruptHandlerLow

void InterruptHandlerLow ()

{

static unsigned char ind_num;

int XXXX, XXX, XX, X;

if (PIR1bits.TMR1IF==1)

{

PIR1bits.TMR1IF=0;

PORTD &= 0b00000000;

//Цифры для каждого из розрядов

XXXX = Y/1000;

XXX = (Y-(XXXX*1000))/100;

XX = (Y-(XXXX*1000)-(XXX*100))/10;

X = Y-(XXXX*1000)-(XXX*100)-(XX*10);

//----------------------------------------------

PORTD=ind[1];

PORTC=digit[XXXX];

PORTD=ind[2];

PORTC=digit[XXX];

PORTD=ind[3];

PORTC=digit[XX];

PORTD=ind[4];

PORTC=digit[X];

//------------------------------------

Delay10TCYx(200); //задержка

PORTD &= 0b11110000; //гасим

//----------------------------------------------

}

}

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я же Вам пример написал, там всё разжовано до некуда. Что Вам ещё нужно ??? :angry: Что за отсебятину Вы написали в обработчике ? :blink:

Если хотите что-бы Вам помогали, делайте так как Вам советуют. А то Вы берёте из головы какуюто хрень, а потом пишете что у Вас не работает !

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я же Вам пример написал, там всё разжовано до некуда. Что Вам ещё нужно ??? :angry: Что за отсебятину Вы написали в обработчике ? :blink:

Если хотите что-бы Вам помогали, делайте так как Вам советуют. А то Вы берёте из головы какуюто хрень, а потом пишете что у Вас не работает !

На конец разобрался)))) работает..

Сейчас хочу подключить клавиатуру для вводу цифр, которые должны отображаться на индикаторе.

Подскажите с чего начать

Ссылка на комментарий
Поделиться на другие сайты

Матричная клавиатура работает просто. Допустим есть 3 линии на выход и 4 на вход. 4 входных подтягиваем резисторами по 10к или внутренними подтяжками порта на + чтобы там был лог.1 если не будет ничего подключено. Устанавливаем на выходах нули. Теперь при нажатии ЛЮБОЙ кнопки на входах появится 0, поэтому просто опрашиваем постоянно вход на наличие хотябы одного нуля. Как только ноль появился - делаем выдержку примерно в 1мс и проверяем снова, если ноль все еще есть - запускаем процедуру сканирования.

Она состоит в том чтобы подавать 0 последовательно на каждый из выходов и считывать входы - как только появится на них 0 - мы нашли линию на которой нажата кнопка, а бит на котором имеется ноль укажет нам на столбец. По этим данным, сдвигом или как еще(хорошая задачка для подумать!) преобразуем номер столбца и строки в код кнопки.

Повторяем процедуру 10 раз через каждые 1мс(или 2-5-10) и если код не совпадет - считаем кнопку не нажатой, и выходим из подпрограммы определения нажатия. Это защита от дребезга.

Дополнительно, подумай над тем какая реакция должна быть на нажатие нескольких кнопок - скорей всего полное игнорирование клавиатуры до тех пор пока на входах(при установленных всех выходах в "0") как минимум 10мс будут все "1".

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Помогите расчитать переменные задержки SecL и SecH, если у меня прерывания каждые 65мс, а надо отсчитать 50 секунд, ну не получается.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Андрей, я Вам давал совет по этому поводу. Видимо Вы его проигнорировали. Сделайте системный тик более удобным, например 10 mS, будет легче расчитывать задержки.

Ссылка на комментарий
Поделиться на другие сайты

Нет, я его не проигнорировал, я просто не понял как это сделать. Если кварц 4 мГц, то какои надо предделитель перед TMR0, что-бы получилось 10 мс?

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

На 8-ми битном таймере сложно сделать точно 10 mS. Какой у Вас контроллер ? Задействуйте TMR1 и переустанавливайте его на 10000 тактов (TMR1H=0x27, TMR1L=0x10).

Ссылка на комментарий
Поделиться на другие сайты

Имеем, 50 секунд = 50 000 мс, один шаг у нас 65мс значит нам надо пропустить 50000/65 = 769 циклов. 769d = 0x0301h ... SecL = 0x01h и SecH = 0x03h

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

С такими значениями считал только до 33 сек, увеличил значения SEcL и SecH на 1 и получилось ровно 50 секунд!!!! SecL=0x02h, SecH=0x04h.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

При нажатии кнопки нужно входы контроллера опрашивать на наличие "0"...........Это делается с помощью таймера? При его переполнении опрашиваем порт контроллера? Или это делается как-то иначе?

Ссылка на комментарий
Поделиться на другие сайты

Да как угодно, можно даже по прерыванию на изменение состояния выводов. или когда в программе имеется свободный участок, например в начале главного цикла.

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Помогите настроить прерывания в части кода с низким приоритетом........

Я не пойму, почему не работает.

//--------------------------------------------------------

Каким образом заставить в коде показать число Y на индикатор?

if (INTCONbits.TMR0IF==1)

{

PORTB=0B11110000;

if (PORTB != 0xF0)// Нажато кнопку

{

Delay1KTCYx(5); //Задержка в 1 мс

if (PORTB != 0xF0) //Повторно нажато ли кнопку

{

void keypad(); //Обработка клавиатуры

{

PORTA=0x07; //Зажигаем диоды (работает кнопка)

Y=1223;

}

}

}

}

INTCONbits.TMR0IF=0;

}

//========================================================

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

А когда я посмотрел в МПлабе............там прерывания таймера ТМR0 срабатывает только один раз.....

work03.rar

Изменено пользователем wi3ik
Ссылка на комментарий
Поделиться на другие сайты

А как это Вы в блок if запихнули процедуру ? Разьве так можно ? :o:blink:

INTCON2bits.TMR0IP=1;	//встановити пріоритет переривань від TMR0 низьким

Ещё раз пошлём читать даташит!

Ссылка на комментарий
Поделиться на другие сайты

А как это Вы в блок if запихнули процедуру ? Разьве так можно ? :o:blink:

INTCON2bits.TMR0IP=1;	//встановити пріоритет переривань від TMR0 низьким

Ещё раз пошлём читать даташит!

Я не обратил на это внимания :).........Да и весь даташит я еще не прочел...

Изменено пользователем wi3ik
Ссылка на комментарий
Поделиться на другие сайты

Вы проинициализировали бит не посмотрев как это делается ? :blink: Значит Вы либо перебирали все символы в его названии и значения(что есть глупо), либо Вы считаете себя экстрасенсом (тогда он из Вас вышел плохим), либо Вы боитесь признать свою ошибку (что есть тоже глупо, ничего в этом зазорного нет).

А даташит весь читать не нужно, можно разок пролистать что-бы понять возможности данного МК. В него нужно заглядывать по мере необходимости.

Ссылка на комментарий
Поделиться на другие сайты

Вы проинициализировали бит не посмотрев как это делается ? :blink: Значит Вы либо перебирали все символы в его названии и значения(что есть глупо), либо Вы считаете себя экстрасенсом (тогда он из Вас вышел плохим), либо Вы боитесь признать свою ошибку (что есть тоже глупо, ничего в этом зазорного нет).

А даташит весь читать не нужно, можно разок пролистать что-бы понять возможности данного МК. В него нужно заглядывать по мере необходимости.

Это да..............я иногда не совсем понимаю ваши подсказки, так как вы пишете не совсем для меня знакомым "языком"....

Подскажите на какой странице в ДАТАШИТ я найду, то что мне поможет разобраться :help:

http://www.microchip.ru/files/d-sheets-rus/PIC18FXX2_manual.pdf

Ссылка на комментарий
Поделиться на другие сайты

Смотря что Вы хотите найти. Что конкретно интересует ?

Меня интересует где в коде, который я набрал (в конфигурации) ошибка, из-за которой не работает прерывание с низким приоритетом. Подскажите......

Ссылка на комментарий
Поделиться на другие сайты

Помогите, написать таимер обратного отсчета времени от 9 до 0 с индикациеи на семисегментном.

Нужен сам алгоритм с чего начать вообще?

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...