Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
1. После изменением номера канала, необходимо выдерживать паузу. 2. По программе. У Вас имеются совершенно одинаковые куски кода. Зачем их плодить в такую огромную нечитаемую простыню, вместо создания одной функции и её вызова ?
У этих ПИКов обслуживание прерываний весьма специфичное (в отличии от стандартной "среднемладшей" серии). В обязательном порядке помимо стека задействуются "теневые хранилки". Так что прежде, чем прерываниями воспользоваться внимательно даташит перечитать надо и помозговать над возможными "наложениями"
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Теневые регистры используются в обязательном порядке только при СОХРАНЕНИИ контекста. А вот при восстановлении совсем нет. Совсем как в 18-х. В зависимости от параметра команды retfie контекст будет или не будет восстановлен из теневых регистров. И тем обеспечена возможность вложенных прерываний.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
DarkWolf писал(а):
задержка имеется в 20 мкс
Вы уверены, что этого достаточно ? Попробуйте поставить побольше. Для эксперимента, можно и миллисекунду воткнуть.
DarkWolf писал(а):
просто срочно надо рабочий код, а не красивый.. красоту позже наведу
Красота тут не причём. Выведя код в функцию, Вы получаете быстрое изменение кода для всех каналов, меняя код только в одном месте. Разве это не быстрее ?
if (count == 2) { PORTA = 0x20; // Порт A5 устанавливаем 1. mydelay_ms(87); PORTA = 0; // Порт A5 устанавливаем 1. mydelay_ms(25); PORTA = 0x20; // Порт A5 устанавливаем 1. } else { PORTA = 0x20; // Порт A5 устанавливаем 1. }
сейчас у меня два канала с напряжением 4.75 вольта. Но программа почему то не работает. Прерывания не использую. Из отладочных средств только вольтметр и осцилограф. Может кто в протеусе проверить работоспособность кода?
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
1.
Цитата:
Код:
while (ADCON0bits.GO); { ADC = calc_v(); }
Что то тут не то ... Вам не кажется ? Зачем, пока идёт преобразование, постоянно читать его результат ? Его же (результата) пока ещё нет, он появится только после преобразования.
2. Для чего Вы преобразовываете в милливольты ? Пороги известны, а значит и значение "попугаев" тоже известны. Почему бы с ними и не сравнивать ? Вам же не на экран значения выводить. Только лишние преобразования, которые только увеличивают вероятность совершения ошибки.
Цитата:
Может кто в протеусе проверить работоспособность кода?
Почему бы Вам самому его не установить и не погонять свой код ?
Всем принявшим участие в помощи, огроменное спасибо. Поставленная задача выполнена. Но не без костылей. Наблюдается следующая особенность поведения АЦП. Если подать напряжение питания на 3 и больше каналов, то в результате код выдает как будто напряжение питания подано на все 8 каналов. Если напряжение питания подать на 2 и меньше каналов то они успешно определяются программой.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения