Yurkin2015

Members
  • Публикации

    1 329
  • Зарегистрирован

  • Посещение

Репутация

336 Хороший

2 подписчика

О Yurkin2015

  • Звание
    Живу я тут

Информация

  • Пол
    Мужчина

Электроника

  • Стаж в электронике
    Более 20 лет

Посетители профиля

3 600 просмотров профиля
  1. Склейка переменных типа int в си в CodevisionAVR

    Тысяча чертей! Что означает эта странная фраза? Я ни хрена не понял!
  2. Склейка переменных типа int в си в CodevisionAVR

    Я же говорю, что переменная temp_temp - не нужна. Выбросите каку ! Сделайте вот так if (temp_nav==1) { delay_ms(10); set_temp = res_p + 10 * set_temp; sprintf(lcd_buffer1,"%d ",set_temp); } Ну, нету тут переменной temp_temp.
  3. Склейка переменных типа int в си в CodevisionAVR

    Обратите внимание, что в этой строке set_temp = res_p + 10 * set_temp; два раза используется переменная set_temp, а переменная temp_temp вообще не используется.
  4. Склейка переменных типа int в си в CodevisionAVR

    Как обычно - сначала умножение, потом сложение, все по правилам арифметики. Делаем просто - при нажатии на клавиатуру старое значение умножаем на 10 и добавляем новое число с клавиатуры. Переменную temp_temp выкидываем в мусорную корзину. set_temp = res_p + 10 * set_temp; sprintf(lcd_buffer1,"%d ",set_temp);
  5. Склейка переменных типа int в си в CodevisionAVR

    set_temp = res_button +10 * tmp_temp;
  6. Вот тут интересные измерения реального тока потребления ESP8266 во времени. Там на графике есть около 40мсек охрененного тока. Получается, что нужно ставить 20000мкФ конденсатор в питание для допустимой просадки напряжения с 3.6В до 3.0В за время соединения ESP8266 с сетью WiFi.
  7. У этой батарейки маленький ток отдачи, на 200мА она не рассчитана. Вот такую надо брать. https://gtest.com.ua/fanso-er14505m.html Чуть дороже, зато ток нужный выдаст.
  8. Что делать с избыточной энергией

    Как Вы так посчитали? Представляете, что такое 20кВт? Это 2 тонны воды в СЕКУНДУ падают с высоты 1 метр. С Вашим расходом, если соорудите двухметровую плотину, максимум получите 100Вт, то есть хватит только на пару лампочек. Никаких излишков энергии или обогреть дом не получится.
  9. Нужна помощь в программировании

    Попробуйте использовать GPIO0 и GPIO1 вместо GP0 и GP1.
  10. Униполярный сигнал в биполярный

    Чтобы избежать инверсии сигнала, надо включить полевик по схеме с общим затвором.
  11. Возьмите конденсатор на парочку фарад, зарядите до 3В и запитайте девайс от этого конденсатора. Через час измерьте напряжение на конденсаторе. Количество потреблённой энергии будет равно E = C * (U0 * U0 - U1 * U1) / 2, где С - ёмкость конденсатора, U0 - начальное напряжение, U1 - конечное напряжение на конденсаторе.
  12. Atmega64a максимальная частота программного шим

    Это что ж, Вы собираетесь слать пакеты на каждый бит ШИМа? Тогда понятно, почему Вы так упираетесь ... Нет, дело в том, что у МК есть внутренняя память, вот в неё и записывается принятый пакет с установками ШИМа по каждому из каналов. После этого процедура обработки ШИМа периодически извлекает эти данные уже из памяти МК, ей не нужно ждать нового пакета по UART, программа использует уже принятые ранее данные.
  13. Чем отличается LT3518EUF от LT3518IUF

    Рабочим температурным диапазоном. На стр.4 даташита написано
  14. Atmega64a максимальная частота программного шим

    Да легко ! Ну, например, в прерывании от таймера можно написать что-нибудь типа такого, в pwm[] лежат значения для ШИМа каждого канала: timer_interrupt() { byte tmp; cnt++; tmp = 0xff; if(cnt>pwm[0]) tmp &= 0xfe; if(cnt>pwm[1]) tmp &= 0xfd; if(cnt>pwm[2]) tmp &= 0xfb; if(cnt>pwm[3]) tmp &= 0xf7; if(cnt>pwm[4]) tmp &= 0xef; if(cnt>pwm[5]) tmp &= 0xdf; if(cnt>pwm[6]) tmp &= 0xbf; if(cnt>pwm[7]) tmp &= 0x7f; PORTA = tmp; tmp = 0xff; и так далее для остальных портов } Здесь нет никаких циклов, вычислений адреса или значений переменных. В строке условия для какого-либо канала имеем 4 команды: чтение из памяти в регистр - 2 клока, сравнение регистров - 1 клок, переход по условию - 2 клока, или не переход и операция AND регистра с константой - 2 клока То есть на проверку канала ушло всего 5 клоков. На 40 каналов - 200 клоков. Плюс пять раз вывести регистр в порт (1 клок), пять раз записать в tmp=0xff (1 клок), ну, и счётчик cnt++ ШИМа: чтение-инкремент-запись в память ещё 5 тиков. То есть всего 215 клоков плюс вход-выход из прерывания. Таким образом, при 200Гц ШИМа в таком примере 2/3 процессорного времени будет уходить обработку ШИМа.
  15. Atmega64a максимальная частота программного шим

    Ну, предположим, хочется ШИМ с частотой 200Гц и глубиной 8 бит. Тогда частота дискретизации равна 200* 256 = 51200. Ну , пусть кругло 50кГц. Запускаем таймер с прерыванием каждые 20 мкс - при 16МГц это 320 команд в один такт, или 8 для каждого канала ШИМ. Можно, конечно, втиснуть проверку и установку для канала в эти 8 команд. Но можно пойти и другим путём. Вот, 8-битный ШИМ бегает по кругу 0-255 и управляет каналами. Но у нас только 40 каналов. Значит только максимум 40 раз за круг что-то надо сделать, а всё остальное время 216 раз - пустая проверка условия. То есть большую часть времени мы зря прервались и потеряли некоторое время. А, вот, ежели взять один массив из 40 байтов и заранее положить в него точки по времени, когда что-то надо сделать, и второй массив из 40 байтов с номерами каналов, то жизнь может значительно облегчиться. К примеру, необходимо раскидать по каналам какой-то рисунок ШИМа. Счётчик ШИМа от 0 до 255. При 0 все каналы включаем. Затем при =10 выключаем 1-ый канал, при =14 выключаем 7-ой канал, при =25 выключаем 38-ой канал и т.д. То есть заполняем массив дельта времени [10], [4], [11] ... и массив каналов [1], [7], [38] ... Далее, делаем переменный шаг прерываний таймера. То есть при первом прерывании таймера мы тут же извлекаем время следующего прерывания [10], изменяем регистр ТОР таймера и выходим. Следующее прерывание наступит уже через 10*20мкс = 200 мкс. При втором прерывании таймера выключаем только 1-ый канал, устанавливаем новое время прерывания [4] и выходим, ничего более не делая. Следующее прерывание наступит уже через 4*20мкс = 80 мкс. При третьем прерывании - выключаем 7-ой канал, новое время [11], выход. И так далее. В результате количество прерываний значительно уменьшилось. И в самом прерывании мы уже точно знаем, что надо делать, никаких проверок и переборов каналов нету. Поэтому сама процедура очень короткая. Ну, придётся попыхтеть немного, если захотите по ходу пьесы изменять ШИМ по каналам. Всякий раз придётся пересчитывать массивы времени и номеров каналов. Но это будет происходить не так часто, так шта ресурсы МК не пострадают.