#151 2018-07-11 22:11:59

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

Green пише:

Ой, да ладно. Я не вижу особого преимущества перед мега328. АЦП, ЦАП, кол-во ног, всё. Минус внятная документация, неизвестные баги... Какое там ещё DSP!))

LGT8FX8P Series – EFLASH Based MCU Overview v1.0.4

(Страница 60 )

运算加速器(uDSC)
16 位存储模式(LD/ST)
32 位累加器(DX)
单周期 16 位乘法器(MUL)
32 位算术逻辑运算单元(ALU)
16 位饱和运算(SD)
8 周期 32/16 除法器
单周期乘加/乘减运算(MAC/MSC)
概述
数字运算加速器(uDSC)作为 LGT8XM 内核的一个运算协处理模块,配合 LGT8XM 内核
16 位 LD/ST 模式,实现一个 16 位的数字信号处理单元。可以满足大部分控制类数字信号的
处理。
uDSC 功能内部以及功能:
1. 16 位操作数寄存器 DX/DY
2. 32 位累加寄存器 DA
3. 单周期 17 位乘法器(可以实现 16 位有/无符号乘法运算)
4. 32 位 ALU (可以实现 16/32 位的加法,减法以及移位运算)
5. 16 位饱和运算 (用于将运算结果存储到 RAM 空间)
6. 32/16 除法器,8 个周期内完成运算

Вы недооцениваете китайские производства. То, что они вам поиграть отбраковкой дают, за смешные деньги, вовсе не означает, что у них один непотреб. Этот чип, что надо! ATxmega отдыхает.

Неактивний

#152 2018-07-11 22:14:34

LynX
Учасник
Зареєстрований: 2018-04-19
Повідомлень: 71

Re: Помогите запустить WeMos XI

А еще есть китайский клон STM32 - почти совместимые с STM32, но быстрее и памяти больше. И дешевле.
Но видимо "почти" такое что никому не интересно. Китайцы конечно могут дешево сделать, но как всегда в каждой бочке меда будет еще килограмм дегтя, так что не рекомендую.



ATxmega по сравнению со всем отдыхает.

Остання редакція LynX (2018-07-11 22:15:42)

Неактивний

#153 2018-07-11 22:35:31

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

LynX пише:

... ATxmega по сравнению со всем отдыхает.

Смотря с чем сравнивать. У Хмеги отличные технические характеристики и периферия как для 8-ми разрядных микроконтроллеров. И как выражается майкрочиповская реклама "Surprise free!". А это не самое последнее достоинство.

Неактивний

#154 2018-07-12 14:49:51

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Нашел интересную ссылку...

http://www.ocrobot.com/doku.php?id=lear … 2017052301

#define PI 3.1415926535897932384626433832795    //定义常数π
 
void setup() {
 
  pinMode(4, ANALOG);     //配置DAC输出
  analogReference(INTERNAL4V096);   //内部基准源4.096V
}
 
void loop() 
{
 for(float i=0;i<=2;i=i+0.01)    //起始点为0,终止为2π,采样率为0.01
 {
  float rad=PI*i;    
  float Sin=sin(rad);
  long intSin=Sin*300;    //将数据放大300倍,取整数
  byte val=map(intSin,-300,300,0,255);   //映射至8位DAC精度
  analogWrite(4, val);   //DAC输出
  }
}

только не пойму почему byte val=map(intSin,-300,300,0,255);

ведь в описании - 2 ЦАП выхода на 10 бит - ???

Неактивний

#155 2018-07-12 15:01:32

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

А вот еще нашел !!!!!!!!!!!!!!!!  lol

http://www.electrodragon.com/w/File:LGT … slated.pdf

По моему тема частоты на Page 36  ... если кто-то растолкует как, что и куда буду оооочень признателен...

Остання редакція renoshnik (2018-07-12 15:42:38)

Неактивний

#156 2018-07-27 13:53:30

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Выдержка из криво переведенного даташита. Ссылка в предыдущем посте...
на странице 33 есть System clock prescaler control

набросал код и попытался прочитать регистры

#ifndef bit_is_set
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))  // читаем заданый бит
#endif 
 
bool BIT;
 
void setup()  { 
Serial.begin(57600);

//noInterrupts();
Serial.println("  Test - PMCR: 0xF2 = 1111 0010 ");
    BIT = bit_is_set(PMCR, PMCE);  		Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKFS);  	Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKSS);  	Serial.print(BIT);
//    BIT = bit_is_set(PMCR, WCLKS);  	Serial.print(BIT);
	Serial.print("?");
    BIT = bit_is_set(PMCR, OSCKEN);  	Serial.print(BIT);
//    BIT = bit_is_set(PMCR, OSCMEN);	Serial.print(BIT);
	Serial.print("?");
    BIT = bit_is_set(PMCR, RCKEN);  	Serial.print(BIT);
    BIT = bit_is_set(PMCR, RCMEN);  	Serial.println(BIT);

Serial.println("  Test - CLKPR: 0x61 = 0110 0001 ");
//    BIT = bit_is_set(CLKPR, WCE);  	Serial.print(BIT);
	Serial.print("?");
//    BIT = bit_is_set(CLKPR, CKOEN1);  Serial.print(BIT);
	Serial.print("?");
//    BIT = bit_is_set(CLKPR, CKOEN0);  Serial.print(BIT);
	Serial.print("?");
	Serial.print("-");
    BIT = bit_is_set(CLKPR, CLKPS3);  	Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2); 	Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);  	Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);  	Serial.println(BIT);
//interrupts();
  } 
 
void loop()  {
  //=========================================================     
  }

получаю такой результат

  Test - PMCR: 0xF2 = 1111 0010
000?0?11
  Test - CLKPR: 0x61 = 0110 0001
???-0001

знаками ? заменил строки на которые ругается компилятор...

Arduino: 1.8.5 (Windows 7), Плата:"WEMOS XI (Retired)"

In file included from c:\users\admin\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5\avr\include\avr\io.h:99:0,

                 from c:\users\admin\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5\avr\include\avr\pgmspace.h:88,

                 from C:\Program Files (x86)\Arduino\hardware\wemos\XI\cores\lgt8f/Arduino.h:28,

                 from sketch\sketch_jul27a.ino.cpp:1:

C:\Temp\arduino_modified_sketch_552636\sketch_jul27a.ino: In function 'void setup()':

sketch_jul27a:28: error: 'CKOEN0' was not declared in this scope

    BIT = bit_is_set(CLKPR, CKOEN0);  Serial.print(BIT);

                            ^

exit status 1
'CKOEN0' was not declared in this scope

Этот отчёт будет иметь больше информации свключенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Неактивний

#157 2018-07-27 20:46:43

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

Вы попробуйте управление без их регистровых констант, по адресам из даташита. Или попроверяйте их определение. У нас, еще на заре AVR, была проблема из-за ошибки в фирменных заголовочных файлах констант.

Неактивний

#158 2018-07-29 13:40:09

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Вячеслав Азаров пише:

Вы попробуйте управление без их регистровых констант, по адресам из даташита. Или попроверяйте их определение. У нас, еще на заре AVR, была проблема из-за ошибки в фирменных заголовочных файлах констант.

Выбрал в настройках "доску" LGT Nano - прочиталось немного больше информации...

#ifndef bit_is_set
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))  // читаем заданый бит
#endif 
 
bool BIT;
 
void setup()  { 
Serial.begin(57600);

noInterrupts();
Serial.println("  Test - PMCR: 0x01  default - 0000 0001 ");
    BIT = bit_is_set(PMCR, PMCE);      Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKFS);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKSS);    Serial.print(BIT);
//    BIT = bit_is_set(PMCR, WCLKS);    Serial.print(BIT);
  Serial.print("?");
  Serial.print(" ");  
    BIT = bit_is_set(PMCR, OSCKEN);   Serial.print(BIT);
//    BIT = bit_is_set(PMCR, OSCMEN); Serial.print(BIT);
  Serial.print("?");
    BIT = bit_is_set(PMCR, RCKEN);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, RCMEN);    Serial.println(BIT);

Serial.println("  Test - CLKPR: 0x03  default - 0000 0011 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);  	Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);
interrupts();
  } 
 
void loop()  {
  //=========================================================     
  }

Получил :

  Test - PMCR: 0x01  default - 0000 0001
0001 0011
  Test - CLKPR: 0x03  default - 0000 0011
0??- 0001



Попробовал перевести :

Регистр управления синхронизацией часов - PMCR
PMCR - регистр управления источником синхронизации
PMCR: 0xF2         Значение по умолчанию: 0x01

PMCR     PMCE     CLKFS / CLKSS     WCLKS         OSCKEN     OSCMEN     RCKEN         RCMEN
R / W     R / W     R / W        R / W         R / W         R / W         R / W         R / W
    0    0/0        0        0        0        0        1

Определение бит
[0]     RCMEN     Внутреннее 32-мегагерцовое управление мощностью генератора RC, 1 включено, 0 отключено
[1]     RCKEN         Внутреннее 32KHz RC-управление генератором, 1 включено, 0 отключено
[2]     OSCMEN     Внешнее управление частотой высокочастотного кристалла, 1 включено, 0 отключено
[3]     OSCKEN     Внешнее управление частотой низкочастотного кристалла разрешено, 1 включено, 0 отключено
[4]     WCLKS        Выбор источника сигнала WDT,
0 - выбор внутреннего 1 МГц / RC,
1 - внутренний 32 кГц
[5]     CLKSS         Выбор основного источника тактового сигнала, выберите тип источника синхронизации, обратитесь к блоку выбора источника синхронизации минут
[6]     CLKFS         Регулятор частоты основного источника синхронизации, выберите тип тактовой частоты, пожалуйста, обратитесь к выбору источника синхронизации раздел
[7]     PMCE        Контрольный бит разрешения изменения регистра PMCR.
Этот бит должен быть установлен первым, а затем в четыре цикла, прежде чем изменять другие местоположения PMCR
Установите значение других бит.



Рекордер главного генератора часов - CLKPR
CLKPR - регистр предварительного делителя часов
CLKPR: 0x61         По умолчанию: 0x03

CLKPR     CLKPCE     CLKOEN1     CLKOEN0    -     CLKPS3    CLKPS2    CLKPS1    CLKPS0
R / W     R / W         R / W         R / W         -     R / W        R / W           R / W       R / W
    0        0        0        -    0       0          1             1

Определение бит
[3: 0]     CLKPS
Бит предварительного делителя частоты
CLKPS3     CLKPS2 CLKPS1 CLKPS0        Параметры частотного разделения
0     0     0     0         1
0     0     0     1         2
0     0     1     0         4
0     0     1    1         8 (настройка по умолчанию)
0     1     0    0         16
0     1    0     1         32
0     1     1     0         64
0    1     1    1         128
1    0    0    0         256
Другие значения        зарезервированный
[4]     -         Не использовать
[5]     CLKOEN0     Установите, будут ли системные часы выводиться на вывод PB0
[6]     CLKOEN1     Установите, будут ли системные часы выводиться на вывод PE5
[7]     CLKPCE        Управление часами с предварительным делителем часов
Перед изменением других битов регистра CLKPR вы должны сначала установить CLKPCE в 1, соответственно. Затем установите остальные биты для следующих четырех системных циклов. После окончания четырех циклов, CLKPCE автоматически очищается.

++++++++++

Получается, что МК настроен на 32 МГц (внутренний) и делитель на ДВА ...

Если делитель изменит на ЕДИНИЦУ, то частота работы МК должна увеличиться - я правильно понимаю ?
Достаточно ли откорректировать CLKPS3, CLKPS2, CLKPS1, CLKPS0 или нужно еще где-то, что-то править ?

Остання редакція renoshnik (2018-07-29 13:43:04)

Неактивний

#159 2018-07-29 13:59:57

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

renoshnik пише:

... Получается, что МК настроен на 32 МГц (внутренний) и делитель на ДВА ...
Если делитель изменит на ЕДИНИЦУ, то частота работы МК должна увеличиться - я правильно понимаю ?
Достаточно ли откорректировать CLKPS3, CLKPS2, CLKPS1, CLKPS0 или нужно еще где-то, что-то править ?

У вас в PMCR настройка синхронизации на внутренний RC генератор - 32МГц и вочдог от внутреннего RC - 32 кГц. А в CLKPS, прескаллере процессора, деление частоты на 2. Т.е. частота процессора 16 МГц, как в Ардуино. Все правильно понимаете. Запишите в CLKPS ноль, и частота процессора станет 32 Мгц. Гугл сносно прерводит с китайского.

Неактивний

#160 2018-07-29 15:43:32

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Вячеслав Азаров пише:
renoshnik пише:

... Получается, что МК настроен на 32 МГц (внутренний) и делитель на ДВА ...
Если делитель изменит на ЕДИНИЦУ, то частота работы МК должна увеличиться - я правильно понимаю ?
Достаточно ли откорректировать CLKPS3, CLKPS2, CLKPS1, CLKPS0 или нужно еще где-то, что-то править ?

У вас в PMCR настройка синхронизации на внутренний RC генератор - 32МГц и вочдог от внутреннего RC - 32 кГц. А в CLKPS, прескаллере процессора, деление частоты на 2. Т.е. частота процессора 16 МГц, как в Ардуино. Все правильно понимаете. Запишите в CLKPS ноль, и частота процессора станет 32 Мгц. Гугл сносно прерводит с китайского.

Вот уже прогресс  smile

А есть какой-нибудь тестовый скетч, чтобы в реале проверить изменения в скорости работы ?

Неактивний

#161 2018-07-29 16:14:15

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

renoshnik пише:

... А есть какой-нибудь тестовый скетч, чтобы в реале проверить изменения в скорости работы ?

Может и есть, но у меня нет. Нужно сравить частоту выполения операций с известным эталоном, напрмер с RC- 32 кГц или вывести сигнал в порт и посмотреть анализатором (толко не через digitalWrite). Лучше всего написать тест на ассемблере с напосредственной записью в порт или управлением измерительным таймером.

Неактивний

#162 2018-07-29 16:19:25

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите запустить WeMos XI

Результат по выводу в сериал.

Неактивний

#163 2018-07-29 16:26:41

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

#ifndef bit_is_set
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))  // читаем заданый бит
#endif 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  // присваиваем НОЛЬ
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))  // присваиваем ЕДИНИЦУ
#endif 

bool BIT;
 
void setup()  { 
Serial.begin(57600);


Serial.println("  Test - PMCR: 0x01  default - 0000 0001 ");
    BIT = bit_is_set(PMCR, PMCE);      Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKFS);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKSS);    Serial.print(BIT);
//    BIT = bit_is_set(PMCR, WCLKS);    Serial.print(BIT);
  Serial.print("?");
  Serial.print(" ");  
    BIT = bit_is_set(PMCR, OSCKEN);   Serial.print(BIT);
//    BIT = bit_is_set(PMCR, OSCMEN); Serial.print(BIT);
  Serial.print("?");
    BIT = bit_is_set(PMCR, RCKEN);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, RCMEN);    Serial.println(BIT);

Serial.println("  Test - CLKPR: 0x03  default - 0000 0011 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);
  } 
 
void loop()  {
	
  sbi(CLKPR, CLKPCE); 
cli();         //  Disable global interrupts
  cbi(CLKPR, CLKPS3); 
  cbi(CLKPR, CLKPS2);
  cbi(CLKPR, CLKPS1);
  cbi(CLKPR, CLKPS0); 
sei();         //  Enable global interrupts  
  cbi(CLKPR, CLKPCE);

Serial.println("  Test - CLKPR: korrect CLKPS* 0x00 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);
	
	
delay (99999999);	
	
  //=========================================================     
  }

  Test - PMCR: 0x01  default - 0000 0001
000? 0?11
  Test - CLKPR: 0x03  default - 0000 0011
0??- 0001
  Test - CLKPR: korrect CLKPS* 0x00
0??- 0001


Где-то косячу !!!   Но где ???  sad


Управление преселлером системных часов

LGT8FX8P имеет встроенный системный генератор тактовых импульсов, который может управляться регистром предварительного делителя часов (CLKPR).
Эта функция может использоваться для снижения энергопотребления системы, когда система не требует очень высокой вычислительной мощности. Предустановленные параметры для поддержки системы
Источник синхронизации действителен. Предсекатор часов может влиять на часы выполнения ядра и, следовательно, на периферийные устройства синхронизации.
При переключении между различными настройками предварительного делителя часов предварительная шкала системы обеспечивает отсутствие образования волос во время процесса переключения
Thorns, но будет гарантировать, что не будет высокой частоты среднего состояния. Переключение частоты выполняется немедленно, и когда изменение регистра вступает в силу,
До 2 - 3 текущих тактовых циклов системы, системные часы переключаются на новые часы деления.
Чтобы избежать ошибочной работы в регистре делителей тактовых импульсов, модификация CLKPR должна также следовать специальному временному потокуCheng: ● Установите бит разрешения изменения предварительного делителя часов (CLKPCE) на 1, другой бит CLKPR равен 0● Напишите значение CLKPS в течение четырех циклов, а CLKPCE записывается в 0Прежде чем изменять регистр предварительного делителя часов, необходимо отключить функцию прерывания, чтобы гарантировать, что время записи может быть выполнено без изменений.
Обратитесь к разделу «Описание регистра» этого раздела для подробного определения основного регистра часового генератора CLKPR.

Остання редакція renoshnik (2018-07-29 16:27:08)

Неактивний

#164 2018-07-29 17:02:55

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

Возможно не успевает записать по битам. Попробуйте:
_SFR_BYTE(CLKPR) &= ~(_BV(CLKPS0)|_BV(CLKPS1)|_BV(CLKPS2)|_BV(CLKPS3));

Неактивний

#165 2018-07-29 17:37:51

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Вячеслав Азаров пише:

Возможно не успевает записать по битам. Попробуйте:
_SFR_BYTE(CLKPR) &= ~(_BV(CLKPS0)|_BV(CLKPS1)|_BV(CLKPS2)|_BV(CLKPS3));


Пробовал разные варианты :

CLKPR = 0b10000000;
/*
  cbi(CLKPR, CLKPS3);
  cbi(CLKPR, CLKPS2);
  cbi(CLKPR, CLKPS1);
  cbi(CLKPR, CLKPS0); 
*/
CLKPR &= ~(bit(CLKPS0) | bit(CLKPS1) | bit(CLKPS2) | bit(CLKPS3));

Вы правы видимо действительно времени не хватало...

Вот такой код загрузил !!!


#ifndef bit_is_set
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))  // читаем заданый бит
#endif 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  // присваиваем НОЛЬ
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))  // присваиваем ЕДИНИЦУ
#endif 

bool BIT;
 
void setup()  { 
Serial.begin(57600);

Serial.println("  Test - PMCR: 0x01  default - 0000 0001 ");
    BIT = bit_is_set(PMCR, PMCE);      Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKFS);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKSS);    Serial.print(BIT);
//    BIT = bit_is_set(PMCR, WCLKS);    Serial.print(BIT);
  Serial.print("?");
  Serial.print(" ");  
    BIT = bit_is_set(PMCR, OSCKEN);   Serial.print(BIT);
//    BIT = bit_is_set(PMCR, OSCMEN); Serial.print(BIT);
  Serial.print("?");
    BIT = bit_is_set(PMCR, RCKEN);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, RCMEN);    Serial.println(BIT);

 
Serial.println("  Test - CLKPR: 0x03  default - 0000 0011 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);
	
  sbi(CLKPR, CLKPCE); 
cli();         //  Disable global interrupts

 CLKPR = 0b10000000;

/*
  cbi(CLKPR, CLKPS3); 
  cbi(CLKPR, CLKPS2);
  cbi(CLKPR, CLKPS1);
  cbi(CLKPR, CLKPS0);  
*/
  
// CLKPR &= ~(bit(CLKPS0) | bit(CLKPS1) | bit(CLKPS2) | bit(CLKPS3));  

// _SFR_BYTE(CLKPR) &= ~(_BV(CLKPS0)|_BV(CLKPS1)|_BV(CLKPS2)|_BV(CLKPS3));

sei();         //  Enable global interrupts  
  cbi(CLKPR, CLKPCE);

  } 
 
void loop()  {
	

Serial.println("  Test - CLKPR: korrect CLKPS* 0x00 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);	
	
	
delay (25000);	
  //=========================================================     
  }

Получил в терминале :

  Test - PMCR: 0x01  default - 0000 0001
0⸮⸮⸮w8⸮⸮⸮
⸮Z⸮⸮⸮8HJ
J⸮⸮z⸮⸮!⸮⸮
⸮g⸮⸮⸮⸮J8H⸮⸮⸮⸮!⸮⸮
⸮g⸮⸮⸮⸮J8H⸮⸮⸮⸮!⸮⸮
⸮g⸮⸮⸮⸮J8H⸮⸮⸮⸮!⸮⸮
⸮g⸮⸮⸮⸮J8H⸮⸮⸮


Потом изменил скорость в терминале (в скетче НЕ менял) на 115200

http://i.piccy.info/i9/6226d485765b01079c311e72202a0c0d/1532874819/128168/1260586/2018_07_29_173157.jpg


Если вставить :

  sbi(CLKPR, CLKPCE); 
cli();         //  Disable global interrupts

 CLKPR = 0b10000000;

/*
  cbi(CLKPR, CLKPS3); 
  cbi(CLKPR, CLKPS2);
  cbi(CLKPR, CLKPS1);
  cbi(CLKPR, CLKPS0);  
*/
  
// CLKPR &= ~(bit(CLKPS0) | bit(CLKPS1) | bit(CLKPS2) | bit(CLKPS3));  

// _SFR_BYTE(CLKPR) &= ~(_BV(CLKPS0)|_BV(CLKPS1)|_BV(CLKPS2)|_BV(CLKPS3));

sei();         //  Enable global interrupts  
  cbi(CLKPR, CLKPCE);

в стандартный "блинк" соответственно СД мигает вдвое чаще  smile

Неактивний

#166 2018-07-29 17:46:33

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

renoshnik пише:

... Вы правы видимо действительно времени не хватало...

Не за что. У вас в цитате это синим написано.  smile

Неактивний

#167 2018-07-30 07:40:55

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Сделал тест :

#include <avr/boot.h>
#include <Wire.h>

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  // присваиваем НОЛЬ
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))  // присваиваем ЕДИНИЦУ
#endif 

void setup() 
{
  // The system led is present on most Arduino boards.
  pinMode(13,OUTPUT);

  Serial.begin(57600);

#if defined (__AVR_ATmega32U4__)
  while(!Serial);        // For Leonardo, wait for serial port
#endif
//	**************************************************************	
//	**************************************************************
  sbi(CLKPR, CLKPCE); 
cli();         //  Disable global interrupts
CLKPR = 0b10000000;
CLKPR &= ~(bit(CLKPS0) | bit(CLKPS1) | bit(CLKPS2) | bit(CLKPS3));  
sei();         //  Enable global interrupts  
  cbi(CLKPR, CLKPCE);
//	**************************************************************
//	**************************************************************
  Serial.println(F("Arduino ShowInfo"));
  Serial.println(F("Show what the Arduino has to tell you."));

  SpeedTest();
}


void loop() {      }



void SpeedTest(void)
{
  register int i,j;
  volatile unsigned char c1,c2;
  volatile int v;
  volatile long l1,l2;
  volatile float f1,f2;
  int p,q,r;
  unsigned long m,n;
  float d, overhead;
  char buffer[30];

  Serial.println(F(""));
  Serial.println(F("Speed test"));
  Serial.println(F("----------"));

  Serial.print(F("F_CPU = "));
  Serial.print(F_CPU,DEC);
  Serial.println(F(" Hz"));
  Serial.print(F("1/F_CPU = "));
  Serial.print((1000000.0/(float)F_CPU),4);
  Serial.println(F(" us"));

#if !defined (__AVR_ATmega32U4__)
  Serial.println(F("The next tests are runtime compensated for overhead"));
  Serial.println(F("Interrupts are still enabled, because millis() is used for timing"));
#endif  
  delay(800);    // Allow the Serial text to be transmitted

  Serial.print(F("  nop                       : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<100; i++)
  {
    for (j=0; j<10000; j++)
    {
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
      asm volatile ("nop");
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;           // in micro seconds
  // Calculate overhead with 'nop' instruction per loop in microseconds
  overhead = d - (20.0 * (1000000.0/(float)F_CPU));
  d -= overhead;
  d /= 20.0;             // per instruction
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  avr gcc I/O               : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<50; i++)
  {
    for (j=0; j<10000; j++)
    {
      // Use system led
      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);

      PORTB |= _BV(PORTB5);
      PORTB &= ~_BV(PORTB5);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  Arduino digitalRead       : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<10000; j++)
    {
      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       

      digitalRead(13);       
      digitalRead(13);       
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  Arduino digitalWrite      : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<10000; j++)
    {
      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       

      digitalWrite(13, HIGH);       
      digitalWrite(13, LOW);       
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  pinMode                   : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<10000; j++)
    {
      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       

      pinMode(13, INPUT);       
      pinMode(13, OUTPUT);       
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  multiply byte             : "));
  c1 = 2;
  c2 = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<20; i++)
  {
    for (j=0; j<10000; j++)
    {
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
      c1 *= c2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  divide byte               : "));
  c1 = 253;
  c2 = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<10000; j++)
    {
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
      c1 /= c2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  add byte                  : "));
  c1 = 1;
  c2 = 2;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<20; i++)
  {
    for (j=0; j<10000; j++)
    {
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
      c1 += c2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  multiply integer          : "));
  volatile int x,y;
  x = 2;
  y = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<10; i++)
  {
    for (j=0; j<10000; j++)
    {
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
      x *= y;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  divide integer            : "));
  x = 31415;
  y = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<10000; j++)
    {
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
      x /= y;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  add integer               : "));
  x = 1;
  y = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<10; i++)
  {
    for (j=0; j<10000; j++)
    {
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
      x += y;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  multiply long             : "));
  l1 = 2;
  l2 = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<10000; j++)
    {
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
      l1 *= l2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  divide long               : "));
  l1 = 2000000000L;
  l2 = 3;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<2000; j++)
    {
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
      l1 /= l2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  add long                  : "));
  l1 = 500000000L;
  l2 = 123;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<4; i++)
  {
    for (j=0; j<10000; j++)
    {
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
      l1 += l2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  multiply float            : "));
  f1 = 3.24;
  f2 = 1.25;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<10000; j++)
    {
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
      f1 *= f2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  divide float              : "));
  f1 = 312645.24;
  f2 = 1.21;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<2000; j++)
    {
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
      f1 /= f2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  add float                 : "));
  f1 = 9876.54;
  f2 = 1.23;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<10000; j++)
    {
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
      f1 += f2;
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  itoa()                    : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<10000; j++)
    {
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
      itoa(i,buffer,10);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  long int l = 314159L;
  Serial.print(F("  ltoa()                    : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<500; j++)
    {
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
      ltoa(l,buffer,10);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  dtostrf()                 : "));
  float d3;
  d3 = 3.14159265;
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<1000; j++)
    {
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
      dtostrf (d3, 6, 2, buffer);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  random()                  : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<2; i++)
  {
    for (j=0; j<1000; j++)
    {
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
      r=random();
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  y |= (1<<x)               : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<20; i++)
  {
    for (j=0; j<10000; j++)
    {
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
      v |= _BV(12);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  bitSet()                  : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<20; i++)
  {
    for (j=0; j<10000; j++)
    {
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
      bitSet (v, 12);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));


// #define ENABLE_ANALOGREFERENCE_TIMING
#ifdef ENABLE_ANALOGREFERENCE_TIMING
  Serial.print(F("  analogReference()         : "));
#if defined (__AVR_ATmega1280__) || defined (__AVR_ATmega2560__)
  #define _NOT_DEFAULT_ INTERNAL1V1
#else
  #define _NOT_DEFAULT_ INTERNAL
#endif
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<20; i++)
  {
    for (j=0; j<10000; j++)
    {
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
      analogReference (_NOT_DEFAULT_);
      analogReference (DEFAULT);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));
#endif


  Serial.print(F("  analogRead()              : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<1000; j++)
    {
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
      analogRead (0);
      analogRead (1);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  analogWrite() PWM         : "));
  // Using pin 13 (system led) for output.
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<10000; j++)
    {
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
      analogWrite (13, 100);
      analogWrite (13, 200);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  delay(1)                  : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<100; j++)
    {
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
      delay(1);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  delay(100)                : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<2; j++)
    {
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
      delay(100);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  delayMicroseconds(2)      : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<20; i++)
  {
    for (j=0; j<10000; j++)
    {
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
      delayMicroseconds(2);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  delayMicroseconds(5)      : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<5; i++)
  {
    for (j=0; j<10000; j++)
    {
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
      delayMicroseconds(5);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));



  Serial.print(F("  delayMicroseconds(100)    : "));
  delay(70);     // Allow the Serial text to be transmitted
  m=millis();
  for (i=0; i<1; i++)
  {
    for (j=0; j<1000; j++)
    {
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
      delayMicroseconds(100);
    }
  }
  n=millis();
  d = ((float)n - (float)m) / ((float)i * (float)j);
  d *= 1000.0;
  d -= overhead;
  d /= 20.0;
  Serial.print (d,3);
  Serial.println (F(" us"));


  Serial.println(F("-----------"));
}

но в обоих случаях результат одинаковый  sad


Arduino ShowInfo
Show what the Arduino has to tell you.

Speed test
----------
F_CPU = 16000000 Hz
1/F_CPU = 0.0625 us
The next tests are runtime compensated for overhead
Interrupts are still enabled, because millis() is used for timing
  nop                       : 0.063 us
  avr gcc I/O               : 0.063 us
  Arduino digitalRead       : 3.015 us
  Arduino digitalWrite      : 3.708 us
  pinMode                   : 4.335 us
  multiply byte             : 0.376 us
  divide byte               : 4.900 us
  add byte                  : 0.376 us
  multiply integer          : 0.816 us
  divide integer            : 13.315 us
  add integer               : 0.506 us
  multiply long             : 3.703 us
  divide long               : 37.315 us
  add long                  : 1.007 us
  multiply float            : 4.968 us
  divide float              : 72.040 us
  add float                 : 7.530 us
  itoa()                    : 12.620 us
  ltoa()                    : 124.290 us
  dtostrf()                 : 70.090 us
  random()                  : 46.390 us
  y |= (1<<x)               : 0.314 us
  bitSet()                  : 0.314 us
  analogRead()              : 335.990 us
  analogWrite() PWM         : 10.545 us
  delay(1)                  : 1006.490 us
  delay(100)                : 99999.984 us
  delayMicroseconds(2)      : 1.384 us
  delayMicroseconds(5)      : 3.643 us
  delayMicroseconds(100)    : 75.240 us
-----------

Неактивний

#168 2018-07-30 08:04:29

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите запустить WeMos XI

renoshnik пише:

Сделал тест : ... но в обоих случаях результат одинаковый  sad  ... , because millis() is used for timing

Функции millis, delay и delayMicroseconds, в Ардуино, зависят от частоты тактирования процессора, т.е. базируются на ней. Системное время то в два раза быстрее стало. Естественно, что у вас ничего не вышло. Ваш эксперимент с блинком куда коректнее. Я же писал, что для замера MIPS, в Ардуино, нужен заранее известный, незавивимый от частоты синхронизации системы, эталон времени, и это не должен быть millis. Бывает.  smile

Остання редакція Вячеслав Азаров (2018-07-30 08:07:48)

Неактивний

#169 2018-07-30 08:31:08

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите запустить WeMos XI

Ещё раз. Вывод в сериал на какой скорости?

Неактивний

#170 2018-07-30 09:36:09

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Вячеслав Азаров пише:
renoshnik пише:

Сделал тест : ... но в обоих случаях результат одинаковый  sad  ... , because millis() is used for timing

Функции millis, delay и delayMicroseconds, в Ардуино, зависят от частоты тактирования процессора, т.е. базируются на ней. Системное время то в два раза быстрее стало. Естественно, что у вас ничего не вышло. Ваш эксперимент с блинком куда коректнее. Я же писал, что для замера MIPS, в Ардуино, нужен заранее известный, незавивимый от частоты синхронизации системы, эталон времени, и это не должен быть millis. Бывает.  smile

Тоже про это подумал но позже...  smile   Просто утром тестировал, видимо не проснулся...  big_smile

Неактивний

#171 2018-07-30 09:37:57

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Green пише:

Ещё раз. Вывод в сериал на какой скорости?

в скетче 57600 установлено.

но в терминале нужно ставить 115200 ...


http://forum.arduino.ua/viewtopic.php?pid=26359#p26359

Остання редакція renoshnik (2018-07-30 09:38:50)

Неактивний

#172 2018-07-30 09:44:54

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите запустить WeMos XI

Тогда частота 32 и все длительности делите на 2.

Неактивний

#173 2018-07-30 09:47:51

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Green пише:

Тогда частота 32 и все длительности делите на 2.

Уже понял, просто еще сонный был ...  big_smile

Неактивний

#174 2018-07-30 11:55:27

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите запустить WeMos XI

А лучше измените build.f_cpu.

Неактивний

#175 2018-08-02 12:54:51

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите запустить WeMos XI

Вячеслав Азаров пише:

Вы попробуйте управление без их регистровых констант, по адресам из даташита. Или попроверяйте их определение. У нас, еще на заре AVR, была проблема из-за ошибки в фирменных заголовочных файлах констант.

Немного запутался...
Помогите, как прочитать / записать бит из/в известный адрес ???

В мануале указано, что PMCR: 0xF2

Хочу настроить плату на внешний кварц, а константа OSCMEN не определяется...  sad

#ifndef bit_is_set
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))  // читаем заданый бит
#endif 

bool BIT;
 
void setup()  { 
Serial.begin(57600);

Serial.println("  Test - PMCR: 0x01  default - 0000 0001 ");
    BIT = bit_is_set(PMCR, PMCE);      Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKFS);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKSS);    Serial.print(BIT);
//    BIT = bit_is_set(PMCR, WCLKS);    Serial.print(BIT);
  Serial.print("?");
  Serial.print(" ");  
    BIT = bit_is_set(PMCR, OSCKEN);   Serial.print(BIT);
//    BIT = bit_is_set(PMCR, OSCMEN); Serial.print(BIT);
  Serial.print("?");
    BIT = bit_is_set(PMCR, RCKEN);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, RCMEN);    Serial.println(BIT);

 
Serial.println("  Test - CLKPR: 0x03  default - 0000 0011 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);
	


PMCR |= (bit(PMCE));
PMCR &= ~(bit(RCMEN));
PMCR |= (bit(OSCMEN) | bit(OSCMEN) | bit(OSCMEN) | bit(OSCMEN) | bit(OSCMEN) | bit(OSCMEN)); 
nop();	nop();
PMCR |= (bit(PMCE));
PMCR &= ~(bit(CLKFS));	PMCR |= (bit(CLKSS));		PMCR &= ~(bit(CLKFS));	PMCR |= (bit(CLKSS));
PMCR &= ~(bit(CLKFS));	PMCR |= (bit(CLKSS));		PMCR &= ~(bit(CLKFS));	PMCR |= (bit(CLKSS));
PMCR &= ~(bit(CLKFS));	PMCR |= (bit(CLKSS));		PMCR &= ~(bit(CLKFS));	PMCR |= (bit(CLKSS));
nop();	nop();	nop();	nop();

  
CLKPR |= (bit(CLKPCE));  
cli();         //  Disable global interrupts
//  CLKPR = 0b10000000;
	CLKPR &= ~(bit(CLKPS0) | bit(CLKPS1) | bit(CLKPS2) | bit(CLKPS3));  // прескаллер равен 1
// _SFR_BYTE(CLKPR) &= ~(_BV(CLKPS0)|_BV(CLKPS1)|_BV(CLKPS2)|_BV(CLKPS3));
sei();         //  Enable global interrupts  
CLKPR &= ~(bit(CLKPCE));

    
Serial.println("  Test_2 - PMCR: korrect OSCKEN* 0x01 ");
    BIT = bit_is_set(PMCR, PMCE);      Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKFS);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, CLKSS);    Serial.print(BIT);
//    BIT = bit_is_set(PMCR, WCLKS);    Serial.print(BIT);
  Serial.print("?");
  Serial.print(" ");  
    BIT = bit_is_set(PMCR, OSCKEN);   Serial.print(BIT);
//    BIT = bit_is_set(PMCR, OSCMEN); Serial.print(BIT);
  Serial.print("?");
    BIT = bit_is_set(PMCR, RCKEN);    Serial.print(BIT);
    BIT = bit_is_set(PMCR, RCMEN);    Serial.println(BIT);

Serial.println("  Test_2 - CLKPR: korrect CLKPS* 0x00 ");
    BIT = bit_is_set(CLKPR, CLKPCE);    Serial.print(BIT);
//  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN1);  Serial.print(BIT);
  Serial.print("?");
//    BIT = bit_is_set(CLKPR, CLKOEN0);  Serial.print(BIT);
  Serial.print("?");
  Serial.print("- ");
    BIT = bit_is_set(CLKPR, CLKPS3);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS2);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS1);    Serial.print(BIT);
    BIT = bit_is_set(CLKPR, CLKPS0);    Serial.println(BIT);

  } 
 
void loop()  {
delay (5000);	
  //=========================================================     
  }

Остання редакція renoshnik (2018-08-02 12:59:58)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму