Search
Write a publication
Pull to refresh
1
0

Пользователь

Send message
Мне кажется тест необходимо было поделить по функциям (чтение дискретных сигналов и регистров).
Или я совсем не в теме, или автор меня запутал. Есть протокол modbus rtu который работает через последовательный порт, и есть modbus tcp который работает через ethernet.
А в конце статьи оказывается nmodbus это не протокол, а библиотека на C# которая реализует протокол modbus.
static const uint16_t AT[] PROGMEM ={4,8,20,40,80,120,240,480};
TM=AT[((PINB & 0x1C)>>2)];
const uint16_t AT[] PROGMEM ={4,8,20,40,80,120,240,480};
TM=AT[i];
Program Memory Usage: 320 bytes 31,3 % Full
Data Memory Usage: 18 bytes 28,1 % Full

static const uint16_t AT[] PROGMEM ={4,8,20,40,80,120,240,480};
TM=AT[i];

Program Memory Usage: 266 bytes 26,0 % Full
Data Memory Usage: 2 bytes 3,1 % Full
Предложу свой вариант программы
#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

volatile uint16_t pb1_count;

// Оброботчик прерывания по таймеру TIMER0
ISR(TIM0_OVF_vect){
   pb1_count++;  
}

int main() {
// Устанавливаем выход PB0 и вход PB1 PB2 PB3 PB4 с подтягиванием 
  DDRB = (1 << PB0)| (~(1 << PB1)) | (~(1 << PB2)) | (~(1 << PB4));
  PORTB = ~(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4);
  
// Определяам время срабатывание таймера по входам PB2,PB3,PB4 (перемычки подтягивают к земле) (период, сек = TM/4 )
  byte i=0;
  if( PINB & (1 << PINB2) ) i+=1;
  if( PINB & (1 << PINB3) ) i+=2;
  if( PINB & (1 << PINB4) ) i+=4;
  uint16_t TM;
  switch (i){
    case 0: TM=4; break;
    case 1: TM=8; break;
    case 2: TM=20; break;
    case 3: TM=40; break;
    case 4: TM=80; break;
    case 5: TM=120; break;
    case 6: TM=240; break;
    default: TM=480;
  }
  
   pb1_count = 0;
   boolean pb1_state = false;
// Отключаем ADC
   PRR = (1<<PRADC); // shut down ADC
// Настраиваем таймер
   TIMSK0 = (1<<TOIE0);  // Включаем таймер TIMER0
   TCCR0B = (1<<CS02) | (1<<CS00); // Пределитель таймера на 1/1024
// Задаем режим сна
   MCUCR &= ~(1<<SM1); // idle mode
   MCUCR &= ~(1<<SM0); // idle mode
   MCUCR |= (1<<SE);
   sei();
   while(1) {
// Зпсываем до прерывания по таймеру    
     asm("sleep");
// Таймер сработал 
// Считываем состояние PB1
    bool pb1 = false;
    if( PINB & (1 << PINB1) )pb1 = true;  
// Если состояние входа инвертировалось, сбрасываем время
    if( pb1 != pb1_state )pb1_count = 0;
    pb1_state = pb1;
// Если превышено время установки таймера
    if( pb1_count >= TM ){
       PORTB |= (1 << PB0);    // digitalWrite(PB0, HIGH);}
       pb1_count = 0;
       //_delay_ms(1000);        // Ждем секунду
       while (pb1_count<4){};
       PORTB &= ~(1 << PB0);   // digitalWrite(PB0, LOW);}
       pb1_count = 0;          // Сбрасываем счетчик
    }
  }      
}


Вот чего я не ожидал.
  byte i=0;
  if( PINB & (1 << PINB2) ) i+=1;
  if( PINB & (1 << PINB3) ) i+=2;
  if( PINB & (1 << PINB4) ) i+=4;
  const PROGMEM uint16_t AT[]={4,8,20,40,80,120,240,480};
  uint16_t TM=AT[i];
Этот код на 40 байт кода и на 8 байт озу больше.
Штрафы в Казахстане исчисляются в месячных расчетных показателях МРП
1 МРП ~ 400р
Градация штрафов 1, 3, 5, 10, 15, 20, 30, 50 МРП
По скоростному режиму В Казахстане очень сильно отличается от России
  • Превышение установленной скорости от 10 до 20 километров в час 5 МРП (12625тг.) 2000р
  • Превышение установленной скорости от 20 до 40 километров в час 10 МРП (25250тг.) 4000р
  • Превышение установленной скорости более 40 километров в час 20 МРП (50500тг.) 8000р
  • Превышение установленной скорости повторно в течение года после наложения административного взыскания 30 МРП (75750тг.) 12000

За езду состоянии опьянения лишение прав от 3 до 5 лет
За управление ТС лицом лишенным правом управления арест на 20 — 30 суток.
А повторно в течении года после истечения административного взыскания арест 15/30 и лишение прав на 6/10 лет (за второе и третье нарушение соответственно)
За пешехода 10 МРП (25250тг.) 4000р
повторно 15 МРП 6000р

По зарплатам от 10 до 40 т.р. в основном. Есть кто и по 80 получает но таких не много.
В утверждении «Утащить внутрь функции main глобальные переменные — каждая глобальная переменная в С — примерно +50 байт требуемого ROM… „ есть вопросы к слову каждая
Скорее “Утащить внутрь функции main глобальные переменные — использование глобальных переменных в С — примерно +50 байт требуемого ROM… „
Get-ChildItem -filter *.log | Where-Object Name -notlike 'result.log'| Get-Content |Out-File result.log
for (;;)
{
    /* Find the smallest nonzero frequency, set c1 = its symbol */
    /* In case of ties, take the larger symbol number */
    //c1 = -1;
    //v = 1000000000L;
	c1=256;
	for (i=0;i<=256;i++){
		if(freq[i]>0){
			c1=i;
			v=freq[i];
			break;
		}
	}
    for (i = c1+1; i <= 256; i++)
    {
	if (freq[i] != 0 && freq[i] <= v)
        {
            v = freq[i];
            c1 = i;
        }
    }

    /* Find the next smallest nonzero frequency, set c2 = its symbol */
    /* In case of ties, take the larger symbol number */
    //c2 = -1;
    //v = 1000000000L;
	c2=256;
	for (i=0;i<=256;i++){
		if(freq[i]>0){
                    c2=i;
                    v=freq[i];
                    break;
		}
	}
    for (i = c2; i <= 256; i++)
    {
        //if (freq[i] != 0 && freq[i] <= v && i != c1)
	if (freq[i] != 0 && freq[i] <= v && i)
        {
            v = freq[i];
            c2 = i;
        }
    }

    /* Done if we've merged everything into one frequency */
    //if (c2 < 0)
if (c1==c2)
    break;

	/* Else merge the two counts/trees */
    freq[c1] += freq[c2];
    freq[c2] = 0;

    /* Increment the codesize of everything in c1's tree branch */
    codesize[c1]++;
    while (others[c1] >= 0)
    {
        c1 = others[c1];
        codesize[c1]++;
    }

    others[c1] = c2;        /* chain c2 onto c1's tree branch */

    /* Increment the codesize of everything in c2's tree branch */
    codesize[c2]++;
    while (others[c2] >= 0)
    {
        c2 = others[c2];
        codesize[c2]++;
    }
}
Почему бы тогда не написать
freq[256] = 1;
// ....
c1 = 256;
// ....
freq[c1] += freq[c2];
На кухне горизонтальный участок такой утеплитель обшил остатками дерматина от стульев. Получился прямо подлокотник. Можно и обоями оклеить чтобы менее заметно было.
Температурный график регламентирует температуру теплоносителя для дома в целом. О температуре батарей там ни слова.
Если открыть приведенный в начале СанПин читаем:
4.4. Нагревательные приборы должны быть легко доступны для уборки. При водяном отоплении температура поверхности нагревательных приборов не должна превышать 90 'С. Для приборов с температурой нагревательной поверхности более 75 'С необходимо предусматривать защитные ограждения.

Температура батареи не должна превышать 90С.
Для выполнения данного требования устанавливают или элеваторный узел или автоматику. Об этом выше уже писали.
Как быть если домена нет? Есть около 20 серверов и 30 рабочих станций. Сколько не пытался ни как не получалось через powershell выполнить команды на другом ПК.
Можно ли совместить HID и CDC? Так можно и I2C и SPI вывести. Надо бы обдумать на досуге.
Ссылка на статью битая.
--pagesize — размер страницы памяти — 0x400 (256 байт)
0x400 =1024
256=0x100
какой размер страницы?
У меня у одного такое чувство, что меня не правильно учили ездить на велосипеде?
А собственно почему 1 мощный автомат ставить нельзя?
потому что от автомата по квартире может разводка относительно тонким поводом. В случае КЗ ток через повод к розетке будет не бесконечно большим, а ограничиться сопротивлением провода до резетки. Если ток достигнет номинального тока автомата, мгновенного отключения не будет, провод будет греется как печка.
отсюда вытекает ещё одно ограничение, сечение провода при КЗ должно обеспечивать мгновенное отключение по импульсному току.
Формула Q=G*C*dT тоже не совсем верна, В инструкции на тепловычислитель ТВ3 да и Взлет нигде нет температуры в формулах. В расчетах используется энтальпия h.
Данный вопрос мне кажется разрешим только в современных домах с соответствующими коммуникациями. Поставить по счетчику на батарею технически можно, но что он там насчитает с учетом погрешности 2х термометров и расходомера?
Если к Вам в квартиру приходит только 4 трубы хол. гор. вода и подача обратка отопления. То тут понятно на сколько градусов остынет вода столько и потребили. И платить будем как минимум за свое отопление, если зимой форточку не закрывали. Можно и батареи прикрыть чтобы не 30+ дома было а градусов 24 на этом будем экономить.
Обще домовой счетчик поставили. Дом 5ти этажка.
В одной комнате стояк подачи, а в соседней стояк обратки. Греет только стояк, на батареи оба крана закрыты. Проветриваем и температура под 30. А этажом выше еле еле 20 градусов. Потребление разное. а платить будем одинакого. Просто у одних все щели заделаны и тепло потерь нет, а у других форточку открывать не нужно и так сквозняк гуляет. Вот за этот сквозняк весь дом платит.
Для экономии тепла необходимо снизить тепло потери дома в целом. Если просто снижать расход или температуру подачи, начнет снижаться температура в квартирах.
Можно в мороз пройтись посмотреть тепловизором кто греет улицу, если пустят домой посмотреть куда уходит тепло. Но дальше посмотреть дела не сдвинутся. Кто хотел уже и так утеплился, а другие скажут денег нет. А изменить схему отопления я вообще молчу.
Получается хочешь тепло счетчик меняй квартиру.
Как я их понимаю. У меня машина цвета теннисного мяча. Во всяком случае того, который был у меня в детстве. Я считаю его зеленым. Название цвета машины Lemon Grass. Та же модель в желтом Honey Bee сомнений не вызывает. За время владения машиной, я уже выяснил, что половина людей считают ее желтой.
Где же эта объективная грань между желтым и зеленым?
1

Information

Rating
Does not participate
Location
Казахстан
Date of birth
Registered
Activity