Например TDA7294

Форум РадиоКот • Просмотр темы - Програмирование pic на СИ.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 18:38:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1334 ]     ... , , , 45, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 01, 2017 13:03:11 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Аlex писал(а):
Ну, примерно как то так :

Спасибо!
Начало - это текущее значение rtc_timer на момент активации таймера. Что бы знать когда его останавливать.

А теперь про тонкости :)
У каждого таймера могут быть свои функции выполняемые по окончании работы таймера.
Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},
и т.д.
Будем считать, что все функции заранее предопределены. Запускаются они без параметров.

P.S. а нафига функции, я тут подумал. а не проще ли ставить флаг, что таймер отработал? :) Количество таймеров фиксированно, их задачи заранее ясны. Меняется только время их запуска.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 01, 2017 13:29:26 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
spongebob писал(а):
Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},


так сойдёт?

Код:
void func1(void);
[...]

struct {
   [...]
   void (*tmrFuncPtr)(void);
} a[] = {
  { 0, 0, 10, func1 },
[...]
};

void func1(void)
{
[...]
}

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 01, 2017 13:44:25 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Siarzhuk писал(а):
так сойдёт?

Ещё как сойдёт :) спасибо!
Пойду экспериментировать.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 01, 2017 14:48:06 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
spongebob писал(а):
У каждого таймера могут быть свои функции выполняемые по окончании работы таймера.
Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},

Если у Вас есть тип-таймер (как в моём примере - Timer), то массив этих типов создать не проблема :
Код:
Timer   timers[10];
Если нужно сразу с инициализацией, то :
Код:
Timer   timers[]={
  {0,0,0,func1},       //
  {0,0,0,func2},       //
  {0,0,0,0},           // В этом таймере нет пока функции, присваиваться будет потом при запуске таймера.
   ...........
};


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 01, 2017 15:59:04 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Alex, Спасибо!
Пробую различные комбинации. Выбираю наиболее удобный вариант.

p.s. а кстати, а как определить функцию потом? это на будущее мне. и можно ли её передать как аргумент другой функции (которая активиурет таймер)?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 01, 2017 16:42:57 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
spongebob писал(а):
p.s. а кстати, а как определить функцию потом? это на будущее мне. и можно ли её передать как аргумент другой функции (которая активиурет таймер)?


Код:
typedef void (*TimerProc)(void);

void SetHandler(TimerProc proc)
{
[...]
}

void Handler(void)
{
[...]
}

int main ([...])
{
[...]
  SetHandler(Handler);
[...]
}

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Чт фев 02, 2017 09:44:53 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Боюсь, что я не понял :(
Допустим у меня есть пяток функций func1() .. func5().
И в зависимости от каких-либо событий мне нужно тому или иному таймеру присвоить данную фунцкию при инициализации.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Чт фев 02, 2017 13:23:05 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
Код:
typedef struct{
  unsigned          enabled :1;
  unsigned          start :1;
  unsigned long     time;
  void              (*p_func)();
}Timer;

Timer   timer[5];  // Массив таймеров

void func1(void){  // Вызываемая функция

}

............
............

timer[0].p_func = func1;  // Присваиваем первому таймеру функцию func

............
............

timer[0].p_func();    // Вызов функции первого таймера

............
............


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб фев 11, 2017 21:00:15 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Снова я со своими структурами
Придумал я "меню" для настройки своего девайса и захотелось мне её улучшить и унифицировать.
Код:
struct _curmenuitem { // текущая позиция
   unsigned char x:4;
   unsigned char y:4;
} curmenuitem;

const struct _menuitem { // пункт меню
   const char *name; // название пункта
   void (*mL)(void);  // действие при нажатии кнопки Влево
   void (*mR)(void); // -- Вправо
   void (*mU)(void); // -- Вверх
   void (*mD)(void); // -- Вниз
} menuitem[10][3] = { тут перечисляются пункты
   {
      {"Var 1",m_prev,m_next,m_null,m_child},
      {"Time 1",m_time_d,m_time_u,m_parent,m_child},
      {"Temp 1",m_temp_d,m_temp_u,m_parent,m_null}
   },
   
и т.д.


функции m_time_d, m_time_u, m_temp_d, m_temp_u занимаются тем, что меняют значения различных переменных в зависимости от пункта меню (по данным curmenuitem.x и curmenuitem.y)
это пришло мне в голову быстро - реализовал (возможно так и оставлю, но на будущее хотелось бы как-то облагородиться)
В структуру добавить указатель на переменную которой нужно управлять (или вообще никакой переменной). Переменные могут быть разных типов (ну или одного, если нет возможности делать разного)
и желательно, что бы можно было в качестве этой переменной использовать элемент массива.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вт фев 14, 2017 11:25:22 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
разобрался с указателями этими... памяти они что-то жрут очень много.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вт фев 14, 2017 12:44:00 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Указатель, как правило, имеет размер в одно маш. слово. Т.б. int.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вт фев 14, 2017 21:25:36 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Доброго времени суток. Компилятор HI-TECH Software\PICC\9.71a. Пытаюсь использовать библиотечные функции чтения/записи ЕЕПРОМ.
В функции main есть бесконечный цикл
Спойлер
Код:
   while   (1)
   {
      asm("clrwdt");
      eeprom_read(0);
      eeprom_write(0,1);
   }


Компилятор развернул это в следующее
Спойлер
Код:
27:                   while   (1)
28:                   {
29:                      asm("clrwdt");
   02F    0064     CLRWDT
30:                      eeprom_read(0);
   030    3000     MOVLW 0
   031    2037     CALL 0x37
31:                      eeprom_write(0,1);
   032    018E     CLRF 0xe
// дальше до адреса 038 пустота, куда подевался код функции eeprom_write и возврат я, не знаю....


Добавляю после записи в ЕЕПРОМ один "nop" и получаю
Спойлер
Код:
27:                   while   (1)
28:                   {
29:                      asm("clrwdt");
   02F    0064     CLRWDT
30:                      eeprom_read(0);
   030    3000     MOVLW 0
   031    2038     CALL 0x38
31:                      eeprom_write(0,1);
   032    018E     CLRF 0xe
   033    0A8E     INCF 0xe, F
   034    3000     MOVLW 0
   035    200C     CALL 0xc
32:                      asm("nop");
   036    0000     NOP
//  дальше до адреса 038 пустота

Прощу прощению за такие тупые вопросы, просто в книжке много всяких заумностей, а вот доступного объяснения такого поведения компилятора я не нахожу :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 15, 2017 06:39:32 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Аналогичные функции в ХС8 разворачиваются в точную копию рекомендации из ДШ, лично проверял.
Намек очень толстым получился?
:?

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Ср фев 15, 2017 07:26:58 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21790
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Пока_без_кота писал(а):
Прощу прощению за такие тупые вопросы, просто в книжке много всяких заумностей, а вот доступного объяснения такого поведения компилятора я не нахожу :dont_know:

Вы смотрите дизасм, причем собственного файла. А библиотечные функции находятся В ДРУГОМ. Поэтому нужно смотреть содержимое Program Memory, либо включить симулятор и по шагам зайти ВНУТРЬ библиотечной функции, тогда среда откроет дизасм искомого участка.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн авг 07, 2017 10:29:57 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Подскажите как обработать прерывание MCLR Reset? Контроллер PIC16F1503. Не могу разобраться по даташиту..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн авг 07, 2017 11:02:42 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Reset - это не прерывание. Это сброс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн авг 07, 2017 11:29:11 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
А как тогда его отследить? Питание до 0 микроконтроллера не падает, но сброс происходит. Нужно его отследить и выполнить определенное действие..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн авг 07, 2017 11:39:33 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7214
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
http://ww1.microchip.com/downloads/en/D ... 01607D.pdf <-- страница 56

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн авг 07, 2017 12:54:51 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Спасибо! Почитал и напросился следующий код:
проверяю был ли сброс по питанию, снижению напряжения, или ресет. Но почему то код выполняется один раз.. Правда сброс происходит в очень короткое время примерно раз в пол секунды и вот этого не отслеживается..
Код:
 if ((!PCONbits.nRMCLR)||(!PCONbits.nBOR)||(!PCONbits.nPOR))
        {
            PCONbits.nRMCLR = 1;
            PCONbits.nBOR = 1;
            PCONbits.nPOR = 1;
       }


конфигурация следующая:

#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = ON // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)

Что я делаю не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн авг 07, 2017 14:08:47 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7214
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
#pragma config WDTE = ON // Watchdog Timer Enable (WDT disabled)
Ы?

А по поводу флагов, вы прочитали, какие надо сбрасывать, а какие нет?

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1334 ]     ... , , , 45, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y