Jump to content

    

Meinframe

Участник
  • Content Count

    42
  • Joined

  • Last visited

Posts posted by Meinframe


  1. Здравствуйте. Сталкивался ли кто-нибудь с проблемой размещения антенны flex PCB на металлической поверхности? А именно ухудшается ли сигнал? или есть какие-то ещё проблемы?

     

    P.S. антенны планируется применять различного диапазона.

  2. Продаю за половину текущей рыночной стоимости, при покупке всех источников сразу будет скидка 50% т.е. всё за 2550 руб.

     

    1 x HGPOWER LA60P-1400 = 1600 руб. (1* 1600 = 1600 руб.)

    4 x MEAN WELL LPC-60-1400 = 800 руб. (4 * 800 = 3200 руб.)

    1 x QLT ИПТ-220ТО35С110К07 = 300 руб. (1 * 300 = 300 руб.)

     

    Доставка почтой по РФ и странам СНГ, за Ваш счёт. Связь через ЛС или почта

    ai_robot@mail.ru

  3. Так это совсем другая постановка вопроса. То, что Вам нужно, к ЛЭП, вообще говоря, никакого отношения не имеет (под ЛЭП у нас обычно понимают линии электропередач напряжением от 6кВ ). Вам же нужно передавать инфу по питающей сети 220В. Такое оборудование есть, но гарантированно работать такая система будет лишь при условии, что все те объекты, которые Вам нужно связать, "висят" на одной и той же фазе одного и того же трансформатора. Посмотрите, тут например, http://www.electrik.info/main/news/194-per...ti-220380v.html

    Извините, за то что некорректно сформулировал вопрос.

    Кто нибудь знает что это за штучка? Довольно старая, но меня устраивает :rolleyes:

     

    Х10 - наиболее старая технология (1978г) ориентирована на управление бытовыми приборами.

     

    Основные недостатки – это низкая скорость и малое адресное пространство, т.е. вы дистанционно включили свет у себя в доме, а включился еще и в соседском… По этой технологии передача данных осуществляется частотными посылками (120кГц) в момент перехода переменного напряжения 220В через ноль. Двоичная единица – наличие частотной посылки, ноль – ее отсутствие. Для увеличения помехоустойчивости вводятся повторы, квитирование и т.д. Максимальная скорость передачи 60 бит/с (60 бод). Полная команда передается около 0.8с.

     

    Контроллеры и оконечные устройства Х-10 приятно радуют невысокой ценой от 8$ за пассивный приемник, до 100$ за многофункциональное активное устройство.

  4. Странно, есть же готовые модемы для связи по ЛЭП:

    http://www.radis.ru/avc.htm

    http://www.zelax.ru/products/catalog/modems/prod_104

     

    Спросите у Google: "модемы для связи по ЛЭП" ...

     

    Всё дело в цене данных модулей, а также была поставлена задача время отклика не более 0,1 сек, расстояние 200-300м, скорость передачи данных думаю порядка 48 кбит/с.

     

    http://www.zelax.ru/products/catalog/modems/prod_104

     

    Данная фирма работает только с высоковольтными ЛЭП, а мне нужно просто принять сигнал 220 (6 проводов) передать сигнал по 2 проводам и опять разделить на к примеру 6 проводов.

     

    Также интересует соединение типа звезда, когда есть один PLC модем главный а остальные зависят от него, ещё чтобы между ними была обратная связь, что то типа режима дуплекс.

     

    Такое вообще есть?

  5. Кто нибудь сталкивался с проблемой, когда нужно не интернет по ЛЭП, а управлять чем либо к примеру модем с обеих сторон ЛЭП через "Блок сопряжения" передаёт управляющие сигналы. Есть какие догадки, мысли, ссылки в интернете? Просто я гуглил но ничего в рунете не нашёл по управлению, везде лишь только интернет.

  6. bogaev_roman Вы не могли сделать так сказать ГАЙД по тому как Вы проводили симуляцию с тестом, я думаю многим начинающим таким как я это будет полезно. Само собой когда у Вас будет свободное время.
  7. Сдается мне алгоритм работает не так как Вы задумали.

    // 8'hFF - P = ~0.5 при этом на вход подается постоянно 'd127 -> вероятность появления errorEvent = lfsr < {1'b0, ierRate};

    в данном случае будет 1/4. Т.е. чтоб реально получить вероятность близкую к 0.5 требуется подать 'd255 и смотреть не 10 тактов, а больше гораздо.

     

    Это всего лишь вероятность "порчи" бита, мне не нужно регулировать её, пускай будет 1/4 или 1/2 это как мне кажется не влияет на то, что счётчик по каким-то неведомым причинам не может посчитать случившиеся ошибки, я просто не могу понять вроде бы не такая уж и сложная задача посчитать изменения выходного сигнала относительно входного, но БЛИИИН я просто непонимаю где ошибка...))) :maniac:

  8. при таком коде:

    module channel (
    input		irst, iclk, ien,
    input [7:0] ierRate,		 // Входная вероятность ошибки
    							 // 8'h00 - P =  0	- ошибки отсутствуют
    							 // 8'hFF - P = ~0.5
    input			 iserial, 	 // Входные данные (код NRZ)
    output			 oserial,	 // Выходные данные
    output	[7:0]  oerserial,   // Выходные данные, кол-во ошибок
    output	reg	prom1
    				);
    
    // Регистр генератора ПСП, инициализируется
    // всеми единицами при включении ПЛИС
    reg	  [8:0]	lfsr = {9{1'b1}};
    // Выходной буферный регистр
    reg			serial_ff;
    //Счётчик
    reg	[7:0] err_ctr;
    
    // Событие "ошибка" случается, если значение в регистре ПСП
    // менее заданного параметра
    wire		 errorEvent = lfsr < {1'b0, ierRate};
    
    reg iserial_r;
    
    assign prom1 = errorEvent; //Промежуточный сигнал события ошибка
    
    always @(posedge iclk)
      if (irst) iserial_r<=1'b0;
      else iserial_r<=iserial;
    
    always @(posedge iclk)
     if (irst) err_ctr<=0;
    else if (iserial_r!=oserial) err_ctr<=err_ctr+1'b1;
    		 else err_ctr<=err_ctr;
    
    assign oerserial = err_ctr;
    
    // Описание сдвигового регистра с обратными связями (генератора ПСП)
    always @ (posedge iclk)
    if (irst)
    	lfsr <= {9{1'b1}};	// По сигналу сброс синхронно (т.е. по фронту iclk)
    						// загружаем в регистр все единицы
    else if (ien)			// По сигналу 
    	lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
    	// Стандартный полином для генератора 9-й степени
    	// g(x) = x^9 + x^5 + 1
    
    // По переднему фронту сигнала iclk при активном разрешительном сигнале ien
    // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
    // между исходным (входным) потоком данных и потоком ошибок.
    always @ (posedge iclk)
    if (ien)
    	serial_ff <= iserial ^ errorEvent;
    
    assign		oserial = serial_ff;
    
    endmodule

     

    Скрин симуляции:

    2225930.png

     

    Что-то не работает...хотя Вы вроде правильно написали

  9. При таком коде (жаль не могу под спойлер закинуть)

    module channel (
    input		irst, iclk, ien,
    input [7:0] ierRate,		 // Входная вероятность ошибки
    							 // 8'h00 - P =  0	- ошибки отсутствуют
    							 // 8'hFF - P = ~0.5
    input			 iserial, 	 // Входные данные (код NRZ)
    output			 oserial,	 // Выходные данные
    output	[7:0]  oerserial   // Выходные данные, кол-во ошибок
    				);
    
    // Регистр генератора ПСП, инициализируется
    // всеми единицами при включении ПЛИС
    reg	  [8:0]	lfsr = {9{1'b1}};
    // Выходной буферный регистр
    reg			serial_ff;
    //Счётчик
    reg	[7:0] err_ctr;
    
    // Событие "ошибка" случается, если значение в регистре ПСП
    // менее заданного параметра
    wire		 errorEvent = lfsr < {1'b0, ierRate};
    
    always @(posedge iclk)
     if (irst) err_ctr<=0;
    else if (iserial!=oserial) err_ctr<=err_ctr+1'b1;
    		 else err_ctr<=err_ctr;
    
    	 assign oerserial = err_ctr;
    
    // Описание сдвигового регистра с обратными связями (генератора ПСП)
    always @ (posedge iclk)
    if (irst)
    	lfsr <= {9{1'b1}};	// По сигналу сброс синхронно (т.е. по фронту iclk)
    						// загружаем в регистр все единицы
    else if (ien)			// По сигналу 
    	lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
    	// Стандартный полином для генератора 9-й степени
    	// g(x) = x^9 + x^5 + 1
    
    // По переднему фронту сигнала iclk при активном разрешительном сигнале ien
    // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
    // между исходным (входным) потоком данных и потоком ошибок.
    always @ (posedge iclk)
    if (ien)
    	serial_ff <= iserial ^ errorEvent;
    
    assign		oserial = serial_ff;
    
    endmodule

     

    вот такая симуляция

    2226164.png

  10. Может вот так доказать статистическую вероятность изменения бита?

     

    module channel (
    input		irst, iclk, ien,
    input [7:0] ierRate,		 // Входная вероятность ошибки
    							 // 8'h00 - P =  0	- ошибки отсутствуют
    							 // 8'hFF - P = ~0.5
    input			 iserial, 	 // Входные данные (код NRZ)
    output			 oserial,	 // Выходные данные
    output	[7:0]  oerserial   // Выходные данные, кол-во ошибок
    				);
    
    // Регистр генератора ПСП, инициализируется
    // всеми единицами при включении ПЛИС
    reg	  [8:0]	lfsr = {9{1'b1}};
    // Выходной буферный регистр
    reg			serial_ff;
    //Счётчик
    reg	[7:0] err_ctr;
    
    // Событие "ошибка" случается, если значение в регистре ПСП
    // менее заданного параметра
    wire		 errorEvent = lfsr < {1'b0, ierRate};
    
    //Счетчик будет считать каждый раз, когда наш генератор генерирует ошибку
    always @ (posedge iclk)
     if (oserial) err_ctr <= err_ctr + 1'b1;
    assign   oerserial = err_ctr;
    
    
    // Описание сдвигового регистра с обратными связями (генератора ПСП)
    always @ (posedge iclk)
    if (irst)
    	lfsr <= {9{1'b1}};	// По сигналу сброс синхронно (т.е. по фронту iclk)
    						// загружаем в регистр все единицы
    else if (ien)			// По сигналу 
    	lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
    	// Стандартный полином для генератора 9-й степени
    	// g(x) = x^9 + x^5 + 1
    
    // По переднему фронту сигнала iclk при активном разрешительном сигнале ien
    // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
    // между исходным (входным) потоком данных и потоком ошибок.
    always @ (posedge iclk)
    if (ien)
    	serial_ff <= iserial ^ errorEvent;
    
    assign		oserial = serial_ff;
    
    endmodule

     

    Не подскажите мне как сделать так чтобы просто был счётчик который считает кол-во раз изменившегося бита между входной и выходной последовательностью. :wacko:

  11. 1)

    И какая получилась результирующая строка?

     

    При компиляции выдаёт Warning: Внимание: Выходные контакты застряли на VCC или GND

     

    А вот что при симуляции:

    2182202m.png

     

    2)

    bogaev_roman у меня не получается откомпилировать Ваш тест-код.

     

    Error: Node instance "uut" instantiates undefined entity "channel"

    Предупреждение (10755): Verilog HDL предупреждение в uut.v (29): сигнал iclk создаёт комбинационную петлю

  12. assign cycle = lfsr == 9'hFF

    Поправил на &lfsr...но ничего не изменилось.

     

    теперь выведите на врямянку сигналы lfsr и errorEvent

     

    Времянка какя-то странная получается, щас времени нет, вечером приду выложу скрины.

  13. Мне кажется ошибка в логике 34 и 39 строка, но точно понять никак не могу. Ещё не пойму как частота может повлиять на то будет ли у меня сигнал или нет.

    А ещё какой Вы просите выложить тест? А ещё я не привык к тому что программа компилируется и видимых ошибок нет, а на выход ничего не идёт. поэтому мой мозК просто рвётся на части, прям уже незнаю что делать, все эти дни потратил на поиск в книжках различных ситуаций но мне кажется ошибка моя проще чем кажется но только я её не вижу. Где же прячется ошибка?

     

    Вот последняя версия кода

    channel.v

     

    Эти тесты просили?

    2217313m.png

    2207073m.png

     

    И ещё вопрос как сделать инкрементную компиляцию и что это вообще такое...или по шагам как нибудь?

    ЗЫ сорри за такие вопросы буду по 300 раз спрашивать глупости, просто я забываю быстро и поэтому приходится повторять.

    ЗЗЫ если надо выложу весь проект целиком.

     

    я уверен что lfsr работает, но не уверен что cycle выставляется хотя бы раз, и уверен что errorEvent работает. Помогите понять почему cycle не работает.

  14. Добавил

    output [8:0] oerserial

     

    else if (ien & errorEvent) err_ctr <= err_ctr + 1;

    Warning (10230): Verilog HDL assignment warning at channel.v(36): truncated value with size 32 to match size of target (9)

     

     

    Делаю симуляцию, oerserial обозначаю как B 000000000...и после симуляции опять ничего...

     

  15. Ага ! Не ждали :1111493779:

    Просидел 2 дня толку 0. Вот что нагородил:

    module channel (
        input        irst, iclk, ien,
        input [7:0] ierRate,    // Входная вероятность ошибки
                                // 8'h00 - P =  0    - ошибки отсутствуют
                                // 8'hFF - P = ~0.5
        input        iserial,     // Входные данные (код NRZ)
        output        oserial, oerserial        // Выходные данные
                    );
        
        // Регистр генератора ПСП, инициализируется
        // всеми единицами при включении ПЛИС
        reg      [8:0]    lfsr = {9{1'b1}};
        // Выходной буферный регистр
        reg            serial_ff;
        
        // Событие "ошибка" случается, если значение в регистре ПСП
        // менее заданного параметра
        wire        errorEvent = lfsr < {1'b0, ierRate};
      
        //Ошибки
        reg   [8:0] result;
       
        //Счётчик
        reg   [8:0] err_ctr;
         
        reg   [8:0] cycle;
        
    //Регистр один раз за цикл пробегает любое выбранное нами значение.
    //Формируем сигнал конца цикла
    assign cycle = lfsr == 9'hFF;
        
    //Счетчик будет считать каждый раз, когда наш генератор генерирует ошибку
    always_ff @ (posedge iclk)
        if (irst | cycle)  err_ctr <= 8'h0;
        else if (ien & errorEvent) err_ctr <= err_ctr + 1;
    
    //Посчитанный результат сохраняем в регистр до конца цикла измерения
    always_ff @ (posedge iclk)
         if (irst) result <= 8'h0;
             else if (ien & cycle) result <= err_ctr;
    
         assign oerserial = result;
    
    
    // Описание сдвигового регистра с обратными связями (генератора ПСП)
    always @ (posedge iclk)
        if (irst)
            lfsr <= {9{1'b1}};    // По сигналу сброс синхронно (т.е. по фронту iclk)
                                // загружаем в регистр все единицы
        else if (ien)            // По сигналу 
            lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
            // Стандартный полином для генератора 9-й степени
            // g(x) = x^9 + x^5 + 1
    
    // По переднему фронту сигнала iclk при активном разрешительном сигнале ien
    // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
    // между исходным (входным) потоком данных и потоком ошибок.
    always @ (posedge iclk)
        if (ien)
            serial_ff <= iserial ^ errorEvent;
    
        assign        oserial = serial_ff;
        
    
    endmodule

     

    И всё равно почему-то при функциональной симуляции на oerserial ничего нет...прям ваще незнаю что делать :crying:

  16. Тут много кто может вставить эти строки в код правильно и провести функциональную симуляцию - это вполне решаемая задача.

    А почему же никто не поможет? Ведь это дело 10 минут(возможно даже меньше)

    Просто я люблю учится на примерах готовых, а не на воздухе в котором ветает то что мне нужно и которое я смогу поймать только через 1-2 месяца...

    Ну помогите же мне :rolleyes:. А то тут сообщество принципиальных людей, которые привыкли жить как [волки в "стаде"].

  17. Имеется код.

    module channel (
        input        irst, iclk, ien,
        input [7:0] ierRate,    // Входная вероятность ошибки
                                // 8'h00 - P =  0    - ошибки отсутствуют
                                // 8'hFF - P = ~0.5
        input        iserial,    // Входные данные (код NRZ)
        output        oserial        // Выходные данные
                    );
        
        // Регистр генератора ПСП, инициализируется
        // всеми единицами при включении ПЛИС
        reg      [8:0]    lfsr = {9{1'b1}};
        // Выходной буферный регистр
        reg            serial_ff;
    
        // Событие "ошибка" случается, если значение в регистре ПСП
        // менее заданного параметра
        wire        errorEvent = lfsr < {1'b0, ierRate};
    
    
    // Описание сдвигового регистра с обратными связями (генератора ПСП)
    always @ (posedge iclk)
        if (irst)
            lfsr <= {9{1'b1}};    // По сигналу сброс синхронно (т.е. по фронту iclk)
                                // загружаем в регистр все единицы
        else if (ien)            // По сигналу 
            lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
            // Стандартный полином для генератора 9-й степени
            // g(x) = x^9 + x^5 + 1
    
    // По переднему фронту сигнала iclk при активном разрешительном сигнале ien
    // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
    // между исходным (входным) потоком данных и потоком ошибок.
    always @ (posedge iclk)
        if (ien)
            serial_ff <= iserial ^ errorEvent;
    
        assign        oserial = serial_ff;
        
    
    endmodule

     

     

    Имеется дополнениек этому коду:

    //ошибки за период счетчика LFSR.
    
    //Регистр один раз за цикл пробегает любое выбранное нами значение.
    //Формируем сигнал конца цикла
    assign cycle = lfsr == 9'hFF;
    
    //Cчетчик будет считать каждый раз, когда наш генератор генерирует ошибку
    always_ff @ (posedge iclk)
        if (irst | cycle)  err_ctr <= 8'h0;
        else if (ien & errorEvent) err_ctr <= err_ctr + 1;
    
    //Посчитанный результат сохраняем в регистр до конца цикла измерения
    always_ff @ (posedge iclk)
         if (irst) result <= 8'h0;
         else if (ien & cycle) result <= err_ctr;

     

    Эти строки нужно просто вставить в проект в любом месте, определив, конечно, используемые регистры. Я вставлял эти строки, объявлял регистры. Но когда делал функциональную симуляцию, то ничего не получалось. Кто нибудь может вставить эти строки в код правильно и провести функциональную симуляцию?

  18. module channel (
        input        irst, iclk, ien,
        input [7:0] ierRate,    // Входная вероятность ошибки
                                // 8'h00 - P =  0    - ошибки отсутствуют
                                // 8'hFF - P = ~0.5
        input        iserial,    // Входные данные (код NRZ)
        output        oserial        // Выходные данные
                    );
        
        // Регистр генератора ПСП, инициализируется
        // всеми единицами при включении ПЛИС
        reg      [8:0]    lfsr = {9{1'b1}};
        // Выходной буферный регистр
        reg            serial_ff;
        //Счётчик
        reg   [7:0] err_ctr;
        //Результат ошибок
        reg         result;
       
        // Событие "ошибка" случается, если значение в регистре ПСП
        // менее заданного параметра
        wire        errorEvent = lfsr < {1'b0, ierRate};
        wire        cycle;
        
    //Счетчик будет считать каждый раз, когда наш генератор генерирует ошибку
    always @ (posedge iclk)
        if (irst | cycle)  err_ctr <= 8'h0;
        else if (ien & errorEvent) err_ctr <= err_ctr + 1;
    
    //Посчитанный результат сохраняем в регистр до конца цикла измерения
    always @ (posedge iclk)
         if (irst) result <= 8'h0;
         else if (ien & cycle) result <= err_ctr;
    
    
    // Описание сдвигового регистра с обратными связями (генератора ПСП)
    always @ (posedge iclk)
        if (irst)
            lfsr <= {9{1'b1}};    // По сигналу сброс синхронно (т.е. по фронту iclk)
                                // загружаем в регистр все единицы
        else if (ien)            // По сигналу 
            lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
            // Стандартный полином для генератора 9-й степени
            // g(x) = x^9 + x^5 + 1
    
    //Регистр один раз за цикл пробегает любое выбранное нами значение.
    //Формируем сигнал конца цикла
        assign cycle = lfsr == 9'hFF;
    
    
    // По переднему фронту сигнала iclk при активном разрешительном сигнале ien
    // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
    // между исходным (входным) потоком данных и потоком ошибок.
    always @ (posedge iclk)
        if (ien)
            serial_ff <= iserial ^ errorEvent;
    
        assign        oserial = serial_ff;
        
    
    endmodule

     

    а как посмотреть result ? ну или кол-во ошибок.

  19. always_ff @(posedge iclk)
        if (irst | cycle)  err_ctr <= 8'h0;
        else if (ien & erEvent) err_ctr <= err_ctr + 1;

     

    Error (10170): Verilog HDL syntax error at channel.v(25) near text "@"; expecting ".", or an identifier, or "(", or "" <-----что сие за бред? я целый день просидел так и не смог исправить...