Обзор клона меги328 -LGT8F328P

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Logik, подозреваю компилятор шалит. У меня тоже ускоритель как-то перестал считать. Хотя тот же скетч до этого работал. :-\ Потом обозвал всё volatile и заработал. Вот тут в #49 как раз вариант, где всё с volatile.

Logik
Offline
Зарегистрирован: 05.08.2014

//подозреваю компилятор шалит.

Спасибо, dimax за плодотоворную идею. Именно компилятор и оказался! На ИДЕ 1.0.6 не умножает, а на 1.8.3 - все ок, даже без volatile. Неужели уходить с 1.0.6 прийдется :(

Start..
a= 16173  b= 7522
a * b = 121653306
299C385A
 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Решил еще немного потестить производительность на приложении, близком к реальности. В теме http://arduino.ru/forum/programmirovanie/krivye-beze подходящий код есть. Прорисовка векторного шрифта с масштабированием. Там и работа с пинами и математика при расчете линий и указательная арифметика и progmrm. Вобщем реалистично довольно. В каждом замере также делея на 1300мсек, учтем. И время прямо на экране и процесс визуальный. Вывод по i2c ногодрыгом, причем можна выбирать как работать: напрямую через регисры или через pinMode/digitalWrite. Вобщем такое получилось. 

 

Atmega328p 16МГц вывод напрямую через регисры 1560мсек-1300мсек=260мсек
Atmega328p 16МГц  вывод функциями wiring             3130мсек-1300мсек=1830мсек
wavgat         16МГц  вывод через регисры                  1520мсек-1300мсек=220мсек
wavgat         16МГц  вывод функциями wiring              2770мсек-1300мсек=1470мсек
wavgat         32МГц  вывод через регисры    - не завелся экран, слишком быстро, сделал вывод в порт (1520-1300мсек)/2=110мсек
wavgat         32МГц  вывод функциями wiring              (2770-1300)мсек/2=740мсек
 
Для 32МГц делю цифры на 2 т.к. миллис ошибается в 2 раза. Визуально видно что быстрей рисует, а время на экране такоеже ))
 
Выводы:
1. эффект от сокращения времени операции есть, но слабый, до 20%.
2. 32МГц абсолютно честные, ровно в 2 раза быстрей 16МГц.
3. pinMode/digitalWrite - кака.
 
Заодно выяснилось что запитать экран SH1106 напрямую от GPIO у wavgat не получается (у атмеги - запросто), видно току не хватает. Перекинул землю экрана с GPIO на GND - заработало. VCC правда так и остался на GPIO.
 
renoshnik
Онлайн
Зарегистрирован: 11.04.2013

Вопрос по кварцу...

Установил кварц 32МГц изменяю настройку регистров - виснет... Спасает перезаливка загрузчика... Смотрю в даташит ( у меня LGT8F328D ) похоже, что максимальный кварц это 20МГц ...  Кто-то экспериментировал с кварцами ?

 

Вопрос по библиотекам...

Как заставить компилятор использовать "правильные" библиотеки, у меня постоянно грузит родные AVRовские либы. Решаю путем временного удаления библиотек, тогда подтягивает "правильные" ... Пытался размещать библиотеки в разных каталогах - не помогло...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

renoshnik, про версию с буквой D мы вроде обсуждали, это более старая, максимум 20 МГц. Про библиотеки -какие? Можно класть в папку с аддноном, там есть своя папка для библиотек. Либо прописывать реальный путь в инклюдах.

renoshnik
Онлайн
Зарегистрирован: 11.04.2013

dimax пишет:

renoshnik, про версию с буквой D мы вроде обсуждали, это более старая, максимум 20 МГц. Про библиотеки -какие? Можно класть в папку с аддноном, там есть своя папка для библиотек. Либо прописывать реальный путь в инклюдах.

версию с буквой D мы вроде обсуждали, это более старая, максимум 20 МГц

== значит правильно мыслю... найду 20МГц кварц и поэкспериментирую ...  :-)

Можно класть в папку с аддноном, там есть своя папка для библиотек.

== там они и находятся... c:\Program Files (x86)\Arduino\hardware\wemos\XI\libraries

Либо прописывать реальный путь в инклюдах.

== межете "пнуть" в нужном направлении, ранее не сталкивался... :-(

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

renoshnik,   #include  "путь/файл.h "

renoshnik
Онлайн
Зарегистрирован: 11.04.2013
взял скетч из примеров.
// Wire Master Reader
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Reads data from an I2C/TWI slave device
// Refer to the "Wire Slave Sender" example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include <Wire.h>

void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}

void loop()
{
  Wire.requestFrom(0x08, 6);    // request 6 bytes from slave device #8

  while (Wire.available())   // slave may send less than requested
  {
    char c = Wire.read(); // receive a byte as character
    Serial.print(c);         // print the character
  }

  delay(500);
}

получаю :

ПРЕДУПРЕЖДЕНИЕ: библиотека Wire должна запускаться на архитектурах (avr) и может быть несовместима с вашей платой на архитектуре (XI).
Скетч использует 3762 байт (12%) памяти устройства. Всего доступно 29696 байт.
Глобальные переменные используют 393 байт динамической памяти.
 
 
корректирую скетч :
 
// Wire Master Reader
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Reads data from an I2C/TWI slave device
// Refer to the "Wire Slave Sender" example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include <c:\Program Files (x86)\Arduino\hardware\wemos\XI\libraries\Wire\Wire.h>

void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}

void loop()
{
  Wire.requestFrom(0x08, 6);    // request 6 bytes from slave device #8

  while (Wire.available())   // slave may send less than requested
  {
    char c = Wire.read(); // receive a byte as character
    Serial.print(c);         // print the character
  }

  delay(500);
}

получаю :

 
sketch\master_reader.ino.cpp.o: In function `setup':
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:17: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:17: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:17: undefined reference to `TwoWire::begin()'
 
sketch\master_reader.ino.cpp.o: In function `loop':
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:23: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:23: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:23: undefined reference to `TwoWire::requestFrom(int, int)'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:25: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:25: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:25: undefined reference to `TwoWire::available()'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:27: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:27: undefined reference to `Wire'
 
C:\Temp\arduino_modified_sketch_80574/master_reader.ino:27: undefined reference to `TwoWire::read()'
 
collect2.exe: error: ld returned 1 exit status
 
exit status 1
Ошибка компиляции для платы WEMOS XI (Retired).
 
 
***  пробовал кавычки, результат аналогичный.
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

renoshnik, ну  давайте смотреть. Вот то, что я написал:

#include  "путь/файл.h "

И вот ваша строка:

#include <c:\Program Files (x86)\Arduino\hardware\wemos\XI\libraries\Wire\Wire.h>

Скобки вместо кавычек,  слэши в другую сторону..

renoshnik
Онлайн
Зарегистрирован: 11.04.2013

dimax пишет:

renoshnik, ну  давайте смотреть. Вот то, что я написал:

#include  "путь/файл.h "

И вот ваша строка:

#include <c:\Program Files (x86)\Arduino\hardware\wemos\XI\libraries\Wire\Wire.h>

Скобки вместо кавычек,  слэши в другую сторону..

 

Я это все перепробовал и кавычки и слеши крутил, результат без изменения...

Но похоже тут, что-то другое...

сделал полный вывод при компиляции и вот :

Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\wemos\XI\libraries\Wire\Wire.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\wemos\XI\libraries\Wire\utility\twi.c
ПРЕДУПРЕЖДЕНИЕ: библиотека Wire должна запускаться на архитектурах (avr) и может быть несовместима с вашей платой на архитектуре (XI).
 
похоже, что библиотеку тянет из нужного места но видимо проблема в самой библиотеке ...
хот все качал с гитхаба по инструкции...
renoshnik
Онлайн
Зарегистрирован: 11.04.2013

Проблема решена - обновил библиотеки.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Подскажите, а как сюда загрузчик записать в голый чип?
Программатор нужен или можно тоже на каленках из ардуино собрать как с Atmega и Attiny от Atmel ?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sav13, вся известная информация о прошивке в сообщении #1

renoshnik
Онлайн
Зарегистрирован: 11.04.2013

sav13 пишет:

Подскажите, а как сюда загрузчик записать в голый чип?
Программатор нужен или можно тоже на каленках из ардуино собрать как с Atmega и Attiny от Atmel ?

https://www.drive2.ru/b/508852882896847017/

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

dimax пишет:

sav13, вся известная информация о прошивке в сообщении #1

Да. Читал. Просто вдруг кто-то продвинулся дальше. Китайцы как то в чистый чип загрузчик зашивают

Это про LGT8F328D чип

renoshnik
Онлайн
Зарегистрирован: 11.04.2013

sav13 пишет:

Это про LGT8F328D чип

 

при заливке выбираете свой тип контроллера, а последовательность действий аналогичная.

я в Р тоже заливал, только первый раз выдало ошибку, а со второго раза записалось.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sav13, я изучил сполна, ничего нового. Китайцы разумеется  программатором шьют. Их 2 вида есть под этот чип.  Вот такой полноценнный ,

И огрызок:

Есть даже мануал по прошивке лоадера для чайников  )

 

renoshnik
Онлайн
Зарегистрирован: 11.04.2013

unsigned long m, n, d, j;

void setup() {
  Serial.begin(57600);
  pinMode(LED_BUILTIN, OUTPUT);
	}


void loop() {
	m = millis();
	for (j=0; j<1000000; j++) {
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(LED_BUILTIN, LOW); }
	n = millis();
	d = (n - m);
Serial.print (d); Serial.println (F(" us"));
	delay(1000); 
	}

почему такое расхождение ?

+++++++++++++

дополнено через 15 минут ....

получается. что "виринг" совсем НЕ для этих МК ...

 

 

 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Ну незнаю что там у Вас, но у меня первый код стабильно дает

8412 us
8413 us
8413 us
8413 us
8413 us
8413 us
8412 us
8413 us
 
//получается. что "виринг" совсем НЕ для этих МК ...
с чего вобще такой вывод?
renoshnik
Онлайн
Зарегистрирован: 11.04.2013

Logik пишет:

Ну незнаю что там у Вас, но у меня первый код стабильно дает

8412 us
8413 us
8413 us
8413 us
8413 us
8413 us
8412 us
8413 us
 
//получается. что "виринг" совсем НЕ для этих МК ...
с чего вобще такой вывод?

не знаю, у меня получается, то что на скринах :-(

Вот из-за таких (моих) результатов и выводы такие.

Logik
Offline
Зарегистрирован: 05.08.2014

В самом низу скрина таки заметил различия Atmeta328p, WEMOS и LGT. Вы решили развлечь форум картинками "найди различия"? Да, разные платформы имеют разную скорость работы. Вы пять лет на форуме. Вроде. Должны бы уже знать.

grafalex
Offline
Зарегистрирован: 18.11.2018

Всем привет,

Купил недавно десяток ардуин нано на чипе WAGVAT. Теперь нужно научиться их готовить. Помогите, пожалуйста, победить сие чудо китайского микроконтроллерной промышленности.

По програмной части вопросов нет. А вот аппаратная чудит. Есть у меня пара выводов, к которым подключены кнопки, подключены весьма длинными проводами ок 25см. Выводы подтянуты вверх внутри, кнопки замыкают на землю. Кнопки подключены к контактам A0 и A1, сконфигурированы как цифровые входы с подтяжкой.

Теперь подключаем в схему реле. Обычное однобаксовое 10А реле. Подключаем пока только питание. Управляю релюхой пока замыкая пинцетом вход на землю. 

Так вот когда реле замкнуто начинают случайным образом срабатывать кнопки. Визуально осциллографом не видно, что напряжение как либо проседает, но при чтении A0 и A1 явно проскакивают нули.

Есть идеи как с этим бороться?

b707
Offline
Зарегистрирован: 26.05.2017

grafalex пишет:

Есть идеи как с этим бороться?

ВАВГАТ-то тут причем? Обычные импульсные помехи из-за включения реле. Подключите реле к ардуине на Атмеловском чипе - будет тоже самое

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

grafalex пишет:

Всем привет,

Купил недавно десяток ардуин нано на чипе WAGVAT. Теперь нужно научиться их готовить. Помогите, пожалуйста, победить сие чудо китайского микроконтроллерной промышленности.

По програмной части вопросов нет. А вот аппаратная чудит. Есть у меня пара выводов, к которым подключены кнопки, подключены весьма длинными проводами ок 25см. Выводы подтянуты вверх внутри, кнопки замыкают на землю. Кнопки подключены к контактам A0 и A1, сконфигурированы как цифровые входы с подтяжкой.

Теперь подключаем в схему реле. Обычное однобаксовое 10А реле. Подключаем пока только питание. Управляю релюхой пока замыкая пинцетом вход на землю. 

Так вот когда реле замкнуто начинают случайным образом срабатывать кнопки. Визуально осциллографом не видно, что напряжение как либо проседает, но при чтении A0 и A1 явно проскакивают нули.

Есть идеи как с этим бороться?

Вот тут делал кнопку с длинным проводом

http://samopal.pro/fancontroller3/

Пока эту схему не реализовал, тоже включалось от чего угодно

 

axill
Offline
Зарегистрирован: 05.09.2011

dimax спасибо за хороший, интересный обзор

не понял какое отношение форма сигнала на пине имеет к качеству генерации? у пина обычно на выходе push-pull драйвер, а генератор туда не напрямую подценпляется а через цепочку всяких цифровых мультиплексоров.

форма сигнала на выходе исключительно относится к работе выходного push-pull драйвера

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

axill, не понял об чём вы? В начале темы я про джиттер тактового генератора писал, с формой там вроде нет проблем..

slider
Offline
Зарегистрирован: 17.06.2014

вот здесь парень в попытке подключить к видеокамере OV7670 , разобрался как запустить дисплей SPI на Wavgat  

https://youtu.be/e5_wGenyRVU

 

вопрос какие могут быть отличия по прерываниям, чтоб заставить либу камеры работать с wavgat .  Интересно во сколько раз вырастит FPS передачи с камеры на дисплей , в отличии от atmega328 https://youtu.be/TqSY6FETuos 
сборка https://youtu.be/Dp3RMb0e1eA

AS31979
Offline
Зарегистрирован: 22.12.2015

Тема несомненно интересная, лично мне быстрый АЦП, да еще с усилителем, но думаю что было бы ОЧЕНЬ хорошо если бы в первом соощении автор нормально расписал как подружить Arduino и WAVGAT.

Я вроде не полный баран в части винды, по убил почти час пока не залил блинк и все равно ругается при компиляции.

Каково новичкам прочитавшим инструкцию на сайте производителя мне и представить страшно!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AS31979, так обзор не для новичков был, я думал по примерам это понятно :)  Я даже не советывал бы начинающим покупать эту плату. Проблемы с установкой аддона ещё самое страшное, совместимость с библиотеками более серьёзное препятствие..

Logik
Offline
Зарегистрирован: 05.08.2014

AS31979 пишет:

Тема несомненно интересная, лично мне быстрый АЦП, да еще с усилителем, но думаю что было бы ОЧЕНЬ хорошо если бы в первом соощении автор нормально расписал как подружить Arduino и WAVGAT.

Я вроде не полный баран в части винды, по убил почти час пока не залил блинк и все равно ругается при компиляции.

Каково новичкам прочитавшим инструкцию на сайте производителя мне и представить страшно!

А кроме первого сообщения тему не читали?

В #62 я, с картинками и путями, спецом все расписал. Или думаете я себе на память тут скрины и картинки делаю?

gorar
Offline
Зарегистрирован: 11.12.2018

dimax

Если Вам не трудно подскажите как заставить данную плату подключить внутреннее опорное напряжение?

Ситуация такая: Ваши скетчи работают четко (на вывод уровня напряжения питания и вывод опорных напряжений). Мой работает только на внешнем опорном. А в этом варианте верхняя точка около 1в


int s=0;
float m=0;
void setup(){                                               
    Serial.begin(9600);                                     
  pinMode(A0, INPUT);
  analogReference(INTERNAL4V096);

}

void loop() {

if (millis() % 1000 == 0) {
  s= analogRead(A0);
  m=s*4.096/4095;
  Serial.println(s);
Serial.println(m);
}
}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

gorar, Поставьте родной аддон от производителя чипа. Должно помочь.

gorar
Offline
Зарегистрирован: 11.12.2018

dimax пишет:

gorar, Поставьте родной аддон от производителя чипа. Должно помочь.

 

Да! Этот аддон помог с АЦП все пошло, и компилится быстрее и места меньше занимает в памяти. А то подкидал и с сайта продавана (wavgat) и с первого сообщения темы - все никак - что-то меняется но не так как нужно.

Спасибо!

п.с. может в шапке поменять или добавить еще эту ссылку!? 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

gorar, добавил ссылку после документации.

pmaster
Offline
Зарегистрирован: 23.05.2011

А библиотеки SPI, и все что с ним связано должно нормально работать? В частноcти интересует библиотека RF24

pittyalex
Offline
Зарегистрирован: 09.11.2016

Подскажите, нормальный программатор так и не появился? Может можно как-то AVR-ISP приспособить? Врядли они уж совсем новый протокол разрабатывали, навернякак какая-то вариация STK-500

Хотя, получить отладку было бы вообще верхом мечтаний. Так-то камень очень вкусный. Особливо аппаратный недо-DSP и аналоговый тракт.

И ещё, кстати, почему в ногодрыге не используете конструкцию типа

 

PINxN = 1;

RJMP $-1;

Позволяет избежать джиттера на выводимом сигнале. Правда частота получается поменьше. Можно сделать так: повторить строчку 

PINxN = 1;

желаемое количество раз.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

pittyalex пишет:

Подскажите, нормальный программатор так и не появился? Может можно как-то AVR-ISP приспособить? Врядли они уж совсем новый протокол разрабатывали, навернякак какая-то вариация STK-500

МК шьтся через Serial Wire Debug, этот протокол относится к классу JTAG программаторов/дебаггеров. Так что чисто аппаратно подойдёт любой программатор Jtag, проблема в поддержке данного МК софтом для программирования.

pittyalex пишет:

И ещё, кстати, почему в ногодрыге не используете конструкцию типа. Позволяет избежать джиттера на выводимом сигнале. Правда частота получается поменьше.

PINxN = 1;

Именно эта команда и используется, посмотрите внимательнее. К джиттеру тип ногодрыга  не имеет отношения, это проблема тактового генератора и прерываний.

pittyalex
Offline
Зарегистрирован: 09.11.2016

Да, посмотрел в первом посте - действительно пин используется. Просто некоторые тут используют запись в порт. Частота выводимого сигнала почти в 2 раза повышается, но появляется джиттер на команду перехода. Кстати, а если попробовать таймер использовать с удовольствием удвоением частоты, какую максимальную частоту можно получить на выходе?
И ещё: для использования "секретного вольтметра" (хорошая идея, у Вас посмотрел, теперь на стм8 использую для контроля напряжения батарейки. Но там опоры нет, пришлось повыпендриваться). Так вот, теперь можно использовать встроенный делитель направления. И, кстати, у этого АЦП есть полезная фича в виде автоматической коррекции смещения АЦП. Аппаратно, типа калибровки. В общем, прикольная штука, жаль мало отзывов о надёжности.
И насчёт отладки я так и не понял: вот есть у меня свисток swd от st-link, можно даже J-link запилить, это чем нибудь поможет? AVR studio может их отлаживать?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

pittyalex, таймер можно затактировать от pll 64МГц, соответссно максимальная частота с выхода таймера 32МГц. Про отладку не знаю, за неимением программатора я не угублялся в эту тему. По идее под их программатор есть USB драйвер, который виден из под студии.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Сегодня получил платку и попытал, а как у неё с Таймерами? Очень достойно!

Отклонение от расчетных данных по нулям, скетч и осциллограмма ниже:
 

/*
 * 
 * 
Results for frequency: 2250.00Hz
(1) Prescaler: 1; MaxValue: 3555; Frequency: 2249.72Hz; Diff: 0.28Hz
(1) Prescaler: 8; MaxValue: 443; Frequency: 2252.25Hz; Diff: 2.25Hz
(2) Prescaler: 32; MaxValue: 110; Frequency: 2252.25Hz; Diff: 2.25Hz
(0,1,2) Prescaler: 64; MaxValue: 55; Frequency: 2232.14Hz; Diff: 17.86Hz
(2) Prescaler: 128; MaxValue: 27; Frequency: 2232.14Hz; Diff: 17.86Hz
(0,1,2) Prescaler: 256; MaxValue: 13; Frequency: 2232.14Hz; Diff: 17.86Hz
(0,1,2) Prescaler: 1024; MaxValue: 2; Frequency: 2604.17Hz; Diff: 354.17Hz


Results for frequency: 1800.00Hz
(1) Prescaler: 1; MaxValue: 4443; Frequency: 1800.18Hz; Diff: 0.18Hz
(1) Prescaler: 8; MaxValue: 555; Frequency: 1798.56Hz; Diff: 1.44Hz
(2) Prescaler: 32; MaxValue: 138; Frequency: 1798.56Hz; Diff: 1.44Hz
(0,1,2) Prescaler: 64; MaxValue: 68; Frequency: 1811.59Hz; Diff: 11.59Hz
(2) Prescaler: 128; MaxValue: 34; Frequency: 1785.71Hz; Diff: 14.29Hz
(0,1,2) Prescaler: 256; MaxValue: 16; Frequency: 1838.24Hz; Diff: 38.24Hz
(0,1,2) Prescaler: 1024; MaxValue: 3; Frequency: 1953.13Hz; Diff: 153.13Hz



Results for frequency: 225.00Hz
(1) Prescaler: 1; MaxValue: 35555; Frequency: 225.00Hz; Diff: 0.00Hz
(1) Prescaler: 8; MaxValue: 4443; Frequency: 225.02Hz; Diff: 0.02Hz
(1) Prescaler: 64; MaxValue: 555; Frequency: 224.82Hz; Diff: 0.18Hz
(0,1,2) Prescaler: 256; MaxValue: 138; Frequency: 224.82Hz; Diff: 0.18Hz
(0,1,2) Prescaler: 1024; MaxValue: 34; Frequency: 223.21Hz; Diff: 1.79Hz
Prescaler: 128 - Not possible
Prescaler: 32 - Not possible


 * 
 */


enum Prescalers {
   PRESCALER_STOP = 0,
   PRESCALER_1 = 1, 
   PRESCALER_8 = 2, 
   PRESCALER_32 = 3, 
   PRESCALER_64 = 4, 
   PRESCALER_128 = 5, 
   PRESCALER_256 = 6, 
   PRESCALER_1024 = 7
};

// Таймера|   Делитель    |    Счетчик   |           Частоты |  Отклонение 
//      (2) Prescaler: 32; MaxValue: 138; Frequency: 1798.56Hz; Diff: 1.44Hz
//      (2) Prescaler: 32; MaxValue: 110; Frequency: 2252.25Hz; Diff: 2.25Hz
//  (0,1,2) Prescaler: 256; MaxValue: 138; Frequency: 224.82Hz; Diff: 0.18Hz


void setup() {
   uint8_t prescaler = PRESCALER_32;
   uint16_t topValue = 110;
   pinMode(11, OUTPUT);
   TCCR2A = 0x42;              // Инвертирование пина 11 по сравнению и режим CTC то OCR2A
   TCCR2B = 0x00 | prescaler;  // Установить СТС режим и делитель частоты
   OCR2A = topValue;           // установить TOP равным topValue
}

void loop() {
  delay(20000);
  uint8_t prescaler = PRESCALER_STOP;
  TCCR2B = 0x00 | prescaler;
}

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А вот меандр, при переводе тактовой на 32Mhz совсем не меандр )))
 

enum Prescalers {
   PRESCALER_STOP = 0,
   PRESCALER_1 = 1, 
   PRESCALER_8 = 2, 
   PRESCALER_32 = 3, 
   PRESCALER_64 = 4, 
   PRESCALER_128 = 5, 
   PRESCALER_256 = 6, 
   PRESCALER_1024 = 7
};

// Таймера|   Делитель    |    Счетчик   |           Частоты |  Отклонение 
//      (2) Prescaler: 32; MaxValue: 138; Frequency: 1798.56Hz; Diff: 1.44Hz
//      (2) Prescaler: 32; MaxValue: 110; Frequency: 2252.25Hz; Diff: 2.25Hz
//  (0,1,2) Prescaler: 256; MaxValue: 138; Frequency: 224.82Hz; Diff: 0.18Hz


void setup() {
   delay(10000);
   CLKPR = 1<<PMCE;//разрешить изменение частоты кварца
   CLKPR = B00000000;

   uint8_t prescaler = PRESCALER_1;
   uint16_t topValue = 0;
   pinMode(11, OUTPUT);
   TCCR2A = 0x42;              // Инвертирование пина 11 по сравнению и режим CTC то OCR2A
   TCCR2B = 0x00 | prescaler;  // Установить СТС режим и делитель частоты
   OCR2A = topValue;           // установить TOP равным topValue
}

void loop() {
  delay(20000);
  uint8_t prescaler = PRESCALER_STOP;
  TCCR2B = 0x00 | prescaler;
}

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ua6em пишет:

А вот меандр, при переводе тактовой на 32Mhz совсем не меандр )))

А какой у вас осцил? Может просто не тянет. Или щупы хреновые.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

HANTEK-6022BE
Эти щупы и для 200Mhz осциллографов предлагают, может и не тянет, правда частота всего 16 мегагерц, не 160, не 1600 )))

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Нормальные пробы на 300MHz стоят дороже чем весь HANTEK-6022BE вместе взятый - https://www.mouser.com/Test-Measurement/Test-Equipment-Accessories/Test-Probes/_/N-7uqd9?P=1z0w6tm

А то, что на Ali или eBay продают под видом 300Mhz проб за 10$ - полный отстой. У нас на работе брали в рент скоп на 4ГГц, так я поигрался с пробами немного. 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Достал из загашника платку с этим 8F328P

У меня, правда, немного другая, без кварца - https://ru.aliexpress.com/item/TTGO-XI-8F328P-U-arduino-nano-V3-0-promini/32947390528.html

Так вот, нормальный там меандр на 16и МГц. Это у вас скоп или/щупы 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это тот скетч, что я привел? И что за модель осциллографа, явно выше 100 мгц )))

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Да скетч из поста N103. А скоп, как раз, на 100МГц - Hantek DSO5102P

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

Да скетч из поста N103. А скоп, как раз, на 100МГц - Hantek DSO5102P

То что 100 по осциллограмме видно ))) (затухающие колебания на нижней ступеньке как раз в районе 100 Mhz)

slider
Offline
Зарегистрирован: 17.06.2014

ua6em , переключите на щупе  делитель на 10  . на первой странице же об этом предупреждал.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

slider пишет:

ua6em , переключите на щупе  делитель на 10  . на первой странице же об этом предупреждал.

У меня шупы плохие, продавану я весь мозг за них вынес, но спор так и не выиграл )))
Откалибровал, так что работают что при делителе 1, что 10 одинаково, за исключением шумов, с делителем 10 - лезут

Второе, а почему при использовании таймеров такой огромный джиттер, когда программно реализую через микрос() - понятно, точность попадания как минимум 4 микросекунды, ну а через таймеры??? в чем засада?