Вы занимаетесь отчаянной ерундой. Никакого флоата не требуется. Вы пытаетесь считать на МК как на калькуляторе. Это совершенно пустое мероприятие. Для чего Вам нужны вольты?
Это апокалиптический бред. Вместо внятного дефайна константы сравнения Вы считаете никому не нужный флоат. Уважаемый, Вам бы основы программирования почитать, прежде чем писать код... ЗЫ. Вывод на дисплей тоже не требует флоата. На дисплей выводят ДВОИЧНО-ДЕСЯТИЧНОЕ ЦЕЛОЕ ЧИСЛО, а не флоат. Точку зажигают в необходимой позиции независимо от расчета цифр в разрядах.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вс дек 17, 2017 10:15:15
Открыл глаза
Зарегистрирован: Вс май 28, 2017 19:07:32 Сообщений: 63
Рейтинг сообщения:0
Мне так удобнее было бы разобраться.
Так-то вот, нашел один код, который я в проект свой вставил:
Спойлер
Код:
/* * File: newmain.c * Автор: ViktoR * Программа: Передача параметров с клавиатуры * Создана: 15 декабря 2017 г., 15:44 */
// Подключаем библиотеки #include <stdio.h> // Стандартная библиотека Си для ввода-вывода #include <stdlib.h> // Стандартная библиотека Си для контроля #include <xc.h> // Библиотека компилятора XC8 для работы с PIC
// Определение параметров микроконтроллера #define _XTAL_FREQ 16000000 // Тактовая частота 16 МГц (см. OSCCON) #define DELAY_ADC 10 // Задержка АЦП, в мс
// Определение параметров для подключение периферии // Светодиоды #define LED_ERROR RB6 // Светодиод, индицирующие статус набора (ошибка) #define LED_OK RB7 // Светодиод, индицирующие статус набора (норм) #define KEYBOARD AN0 // Определяем порт для подключения клавиатуры через АЦП // ВАЖНО: ПОРТ ДОЛЖЕН ПОДДЕРЖИВАТЬ АНАЛОГОВЫЕ СИГНАЛЫ (НАЗЫВАТЬСЯ AN) // LCD биты и переменные #define LCD_width 15 // Ширина дисплея #define LCD_height 1 // Высота дисплея #define RS_1 RB6 = 1 // RC0 #define RS_0 RB6 = 0 // RC0 #define E_1 RB5 = 1 // RA0 #define E_0 RB5 = 0 // RA0
/*// Объявляем глобальные переменные: int gNumber[5] = {0}; // Массив с разрядами набранного числа*/
// Объявляем используемые функции void Prepare(); // Функция подготовки МК (настройка портов и т.п.) int get_Number(); // Функция получения набранного номера void DelLastNumb(int i); // Функция удаления последней цифры void StartADC(); // Функция запуска АЦП
int main() // Главная функция { // Определяем локальные переменные: /*int key, i = 0; // Переменные для определения нажатой кнопки и разрядности соотвественно float Middle; // Костыльная переменная*/
// Описание функции получения числа /*int get_Number() { return (gNumber[4]*10000 + gNumber[3]*1000 + gNumber[2]*100 + gNumber[1]*10 + gNumber[0]); }*/
// Описание функции запуска АЦП void StartADC() { __delay_ms(DELAY_ADC); // Задержка перед началом АЦП ADCON0bits.GO = 1 ; // Метка начала преобразования }
Жаль только, что что слишком часто сменяются надписи Ok и Test, но это задержки тут кривые, наверное.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вт мар 13, 2018 18:55:01
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:4 Медали: 1
Перед знаком "=" всегда должен стоят "адресат". Просто прочитать можно написав имя регистра без всяких лишних знаков.
Добавлено after 3 minutes 25 seconds: А вообще, в Вашем коде можно сделать чтение регистра во временную переменную, вначале условия, а потом уже работать с ней. Т.к. : 1. Он в коде у Вас 2 раза читается. 2. Компилятор, в любом случае, выделит место для его чтения.
Не читается - второе под условием else - будет или один или второй. Думал, может кто замечание по реализации кольцевого буффера скажет... чёрт, вижу еще один затык: если буфер переполнен, то я тоже не читаю регистр, а флаг прерывания снимаю - тоже может повиснуть и не отвиснуть.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
спасибо за подсказку по поводу флага прерывания. а по поводу ошибки фрейма - так делать нельзя. флаг надо проверить до считывания регистра. и сбрасывать его как я пытался - тоже нельзя - он только читается.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
if (RCIE && RC1IF) { if (FERR == 1) { // framing error clear, but skip data. RC1REG; } else { if (uart_count < UART_BUFFER_SIZE) { *wr_ptr = RC1REG; uart_count++; if (++wr_ptr >= &uart_buf[UART_BUFFER_SIZE]) wr_ptr = uart_buf; } else RC1REG; } }
Поправил и кольцевой буфер, а то похоже, у меня на один байт дальше указатель вылетал. А объявлять локальную переменную в обработчике прерывания что-то желания нет. нет у меня доверия к этому компилятору в бесплатном режиме. Больше нет.
Еще вопрос. А как быть с EEPROM? как его проинициализировать? когда-то писал ORG 0x2000. А вот в С что-то не соображу. А до юзер мануала еще 3 часа ехать.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Неплохой вариант. Я т пытался снахрапа взять. Собственно, еще одна ситуация не обрабатывается: OERR. Но, подумал, что это событие маловероятно, да и выход из него далеко не прост. Хотя, чё там не выключить и не включить обратно приём, раз уж данные и так потеряны?
uart_count у меня вычитается по мере считывания буфера в основном теле программы:
Код:
if (uart_count) { // в буфере есть данные. uart_byte = *rd_ptr; uart_count--; if (++rd_ptr >= &uart_buf[UART_BUFFER_SIZE]) rd_ptr = uart_buf;
Может кольцевой буфер можно изящнее организовать? Надо посмотреть, как я сто лет назад его делал на 580-м процессоре...
Аlex писал(а):
А если сделать его "платным" ?
да, это про XC8 - платный он дюже дорог. А триальными 60-ю днями я уже в прошлом году воспользовался и это счастье больше мне не светит. А обмануть, его можно было только до какой-то версии. Говорят, они теперь стали внутрь зашивать SHA256 файла проверяющего лицензию, поэтому подменить пустышкой его больше нельзя.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Ср мар 14, 2018 20:19:11
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
А зачем гнаться за этими версиями ? Можно пользоваться той версией, до которой лекарство подходит. Вряд ли они что-то там серьёзное исправляют и добавляют.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения