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

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

Logik, ну проверил:

Start..
Test uDSC  288.50  uS
Test Normal  451.00  uS

uDSC вырос на 18,75 мкС, тобишь на 0,1875мкС на один круг круг, что равняется 3м тактам, что точно соответствует 3-м добавленным командам. :) Стало быть ещё раз подтвердилось, что функция работает быстро, получается что основной вычислительный ресурс уходит  куда-то ещё.  60мкС на 100 кругов функции , а оставшиеся  200мкС  на подтягивание  в функцию двух 16-битных данных? Очень не правдоподобно :-/

while(n--) {
data  = uDSC(tcnt2,tcnt3);
}

 

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

ОК. Вот и вопрс решен. )) 

Одна DA = DA + (DX*DY)  - 0,1875мксек, что очень класно.

//равняется 3м тактам

А частота что 16МГц? тогда период 1/16МГц=0,0625мксек. Я думал 32МГц.  Кстати про точност 0,0625*3=0,1875 - просто идеально )))

//получается что основной вычислительный ресурс уходит  куда-то ещё.

Ага. Уходит. Ну и хрен с ним. Ответ на волновавший вопрос о скорости DSC получили. Найти пропажу - оно конечно тоже любопытно по своему. Там нужно код в ассемблере рассматривать. Думаю все найдется.

ПС. А что с нумерацией сообщений творится?! Невозможно ж рабтать в таких условиях ;)

 

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

Запостил предыдущее - терь нормально с нумерацией. Глюк.

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

Прикинул БПФ 16бит 128 точек, 128*7=896 бабочек, по две операции типа DA = DA + (DX*DY),  336мксек. С пересылками и адресацией в пару мсек должно влазить.

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

Что еще нарыл в поиске цельных портов для подключения 8/16 бит дисплеев , и благодаря интересу dimaxа:

Из-за того что мы имеем урезанную версию чипа в 32выводном корпусе вместо 48выводного , у чипа всего 2 порта цельных B и D.

8бит  PortB  01234567   (6,7 биты забрать можно у кварца , один фиг он медленный 12Мгц)

7бит  PortC  0123456     (6 бит забираем у ресета. Благо никаких фьюзов не надо, все перенастраивается в скетче)

8бит  PortD  01234567  

7бит  PortE  0123456   ( 4,5 биты забыли вывести, но можно подпаять) 

и того 30 GPIO          + VCC и GND , вот и очень экономно в 32пин корпусе.

не то что в оригинальной atmega328 продублированы питающие пины.

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

получается даже шина 16 бит реализуема. и еще десяток пинов для художеств.

renoshnik
Offline
Зарегистрирован: 11.04.2013

 bool BIT;
void setup()  { Serial.begin(57600);
Serial.println(F("               Test - PMCR: 0xF2"));
Serial.println(F("               ================="));
Serial.println(F("PMCE CLKFS CLKSS WCLKS OSCKEN OSCMEN RCKEN RCMEN"));
Serial.print(F("  "));
    BIT =(PMCR & (bit(PMCE)));    Serial.print(BIT);  Serial.print(F("    "));
    BIT =(PMCR & (bit(CLKFS)));   Serial.print(BIT);  Serial.print(F("     "));
    BIT =(PMCR & (bit(CLKSS)));   Serial.print(BIT);  Serial.print(F("     "));
    BIT =(PMCR & (bit(WCES)));    Serial.print(BIT);  Serial.print(F("     "));
    BIT =(PMCR & (bit(OSCKEN)));  Serial.print(BIT);  Serial.print(F("      "));
    BIT =(PMCR & (bit(SCMEN)));   Serial.print(BIT);  Serial.print(F("      "));
    BIT =(PMCR & (bit(RCKEN)));   Serial.print(BIT);  Serial.print(F("     "));
    BIT =(PMCR & (bit(RCMEN)));   Serial.println(BIT);
  
Serial.println(F(""));
Serial.println(F("               Test - CLKPR: 0x03"));
Serial.println(F("               =================="));
Serial.println(F("CLKPCE CLKOEN1 CLKOEN0 - CLKPS3 CLKPS2 CLKPS1 CLKPS0"));
Serial.print(F("  "));
    BIT =(CLKPR & (bit(CLKPCE))); Serial.print(BIT);  Serial.print(F("       "));
    BIT =(CLKPR & (bit(CLKOE1))); Serial.print(BIT);  Serial.print(F("       "));
    BIT =(CLKPR & (bit(CLKOE0))); Serial.print(BIT);  Serial.print(F("    "));
                                  Serial.print("-");  Serial.print(F("    "));       
    BIT =(CLKPR & (bit(CLKPS3))); Serial.print(BIT);  Serial.print(F("     "));
    BIT =(CLKPR & (bit(CLKPS2))); Serial.print(BIT);  Serial.print(F("      "));
    BIT =(CLKPR & (bit(CLKPS1))); Serial.print(BIT);  Serial.print(F("      "));
    BIT =(CLKPR & (bit(CLKPS0))); Serial.println(BIT);
  
Serial.println(F(""));
Serial.println(F("               Test - PRR : 0x64"));
Serial.println(F("               =================="));
Serial.println(F("PRTWI PRTIM2 PRTIM0 - PRTIM1 PRSPI PRUSART0 PRADC"));  
Serial.print(F("  "));
    BIT =(PRR & (bit(PRTWI)));    Serial.print(BIT);  Serial.print(F("       "));
    BIT =(PRR & (bit(PRTIM2)));   Serial.print(BIT);  Serial.print(F("    "));
    BIT =(PRR & (bit(PRTIM0)));   Serial.print(BIT);  Serial.print(F("    "));
                                  Serial.print("-");  Serial.print(F("    "));       
    BIT =(PRR & (bit(PRTIM1)));   Serial.print(BIT);  Serial.print(F("     "));
    BIT =(PRR & (bit(PRSPI)));    Serial.print(BIT);  Serial.print(F("      "));
    BIT =(PRR & (bit(PRUSART0))); Serial.print(BIT);  Serial.print(F("      "));
    BIT =(PRR & (bit(PRADC)));    Serial.println(BIT);
   
Serial.println(F(""));
Serial.println(F("               Test - PRR1 : 0x65"));
Serial.println(F("               =================="));
Serial.println(F("  - - PRWDT - - PREFL PRPCI -"));  
Serial.print(F("  "));
                                  Serial.print("-");  Serial.print(F(" "));
                                  Serial.print("-");  Serial.print(F("   "));
    BIT =(PRR1 & (bit(PRWDT)));   Serial.print(BIT);  Serial.print(F("   "));
                                  Serial.print("-");  Serial.print(F(" "));
                                  Serial.print("-");  Serial.print(F("   "));
    BIT =(PRR1 & (bit(PREFL)));   Serial.print(BIT);  Serial.print(F("     "));
    BIT =(PRR1 & (bit(PRPCI)));   Serial.print(BIT);  Serial.print(F("   "));
	} 
 
void loop()  { /* ========================================================= */ }

 

Думаю, что кому-то пригодится для контроля настроек :-)

 

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

Измерил скорость АЦП с делителем клоков на 2.

//ADC speedtest
#include "lgtx8p.h"
void setup() {
Serial.begin(115200);
ADCSRA=1<<ADEN |0<<ADIE | 1<<ADSC | 0<<ADATE | 0<<ADPS2 |0<<ADPS1 |0<<ADPS0; // clk /2 !!!
ADCSRB=0; ADCSRD=0;
ADCSRD=1<<REFS2; VCAL=VCAL3;
ADMUX=0;     // ADC0 , AREF=4096

TCKSR=0; TIMSK1=0; TCCR1A=0; TCCR1B=0; //обнулить лишнее
OCR1A=65535u; OCR1B=65535u;// чтоб удобнее читать регистр флагов

}

void loop() {

if ( (ADCSRA&(1<<ADSC))==0   ){
cli();
TCNT1=0; TIFR1=TIFR1;
TCCR1B=1<<CS10;//подсчёт времени включён
ADCSRA|=1<<ADSC;
while ( ADCSRA&(1<<ADSC)  );
TCCR1B=0; sei();
Serial.print("Test speed ADC  ");
if (TIFR1) {Serial.println("Timer overload");} 
  else Serial.print((float)(TCNT1-2)/16); Serial.print(" uS  "); 
  Serial.print(ADC); Serial.println(" mV"); 

 }
delay(300);
}

Результат при тактовой МК 16МГц:

Test speed ADC  3.31 uS  1247 mV

Что поболее рассчётного ( 0,125 * 15 =1,875µS)  

С делителем /128 -166 µS

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

У Вас ко времени преобразования добавилось время обработки и подготовки. Наступал на эти грабли в это теме и тоже долго не мог понять почему не получалось снять АЦП за заявленные 13.5 тактов. Оказывается, там есть регистр-защелка вых. данных, и после выставления флага/прерывания вполне можно сначала(!) запустить следующий цикл измерений, и уже по его ходу считывать значение предыдущего замера. Только в этом случае получается то, что написано в даташите. А так, на чтение и сохранение значения уходит около 8-10 тактов ЦП (4-5 тактов АЦП при делителе 1:2), даже если его складывать в массив по автоинкременту регистра.

В общем, чтобы добиться 13.5 тактов на замер мне там пришлось нефигово попотеть пока дошло "что тут не так"..

По вашему коду: Запуск таймера перед запуском АЦП .. -2 такта ЦП; выход из цикла -1 такт и останов таймера .. -1 такт ЦП; Итого измеренное время надо уменьшить на время "накладных расходов" в 4 такта ЦП. Нет? :)

P.S. Пересчитал ваши замеры и просмотрел код внимательней. 2 такта Вы и так вычитаете при печати .. всё как-то очень странно.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Прибейте тему гвоздиком вверху - утонет жеж! :)

GarryC
Offline
Зарегистрирован: 08.08.2016

Ну все таки, почему не

inline void guid(uint32_t *guid) {
*((uint8_t *)guid)+0)=GUID0;
*((uint8_t *)guid)+1)=GUID1;
*((uint8_t *)guid)+2)=GUID2;
*((uint8_t *)guid)+3)=GUID3;
};

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

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

Приехал с https://ru.aliexpress.com/item/WAVGAT-Nano-Mini-USB-Nano-3-0/32868170637.html?spm=a2g0s.9042311.0.0.512b33edV45Rza Пока он ехал, я забыл че хотел ;)

Фото с старшим братом. Похожи.

Тыкаю как есть в USB. Заморгал продвинутым блинком, по несколько вспышек подряд. Заливаю стандартный блинк. Успешно, но моргает в 4 раза медленей обычного. Знчить завелся на 4МГц.. Ах да аддон, выбор платы. Тяну по ссылке в начале темы папку update, из неё копирую hardware в ...\Documents\Arduino\hardware, либы пока не спешу копировать, там имена частично перекрываются с стандартными. После рестарта ИДЕ имею 3 новые платы WAVGAT: UNO, NANO и ProMini. Первые две пробовал - разницы не заметил.

Теперь блинк честно моргает с периодом 2 сек, значить 16МГц есть. Дописываем пару строк, получаем

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
  
 CLKPR = 1<<PMCE;//разрешить изменение
 CLKPR = B00000000;


}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

и моргает в 2 раза быстрей. Значить на 32МГц перешли.

Иду далее.

void setup(){
Serial.begin(115200);
Serial.println ("Start..");
uint16_t a=16173, b=7522;
uint32_t data  = uDSC(a,b, 0x44);
Serial.print("a= "); Serial.print(a);
Serial.print("  b= "); Serial.println(b);
Serial.print("a * b = "); Serial.println (data); 
uint32_t guid= *(uint32_t*)&GUID0 ;
Serial.println(guid,HEX); 
}

uint32_t uDSC(uint16_t dx, uint16_t dy, uint8_t opcode){
asm volatile(  
"ldi r18, 0x80;"     "\n\t" // byte  for DSUEN
"out 0x00, r18;"     "\n\t" // DCSR= 1<<DSUEN
"out 0x10, %[dsdx];" "\n\t" // DSDX = dx 
"out 0x11, %[dsdy];" "\n\t" // DSDY = dy 
"out 0x01, %[opc];"  "\n\t" // DSIR= operation code
"in r22, 0x38;"      "\n\t" // DSAL return 
"in r24, 0x39;"      "\n\t" // DSAH return
: : [dsdx] "r" (dx), [dsdy] "r" (dy), [opc] "r" (opcode)
) ; }

void loop(){}

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

Хмм... Умножалка не работает, а UID дает. Пробую перевести на 32МГц, добавив 2 строки аналогично блинку. Посыпался обменн.. Ну понятно, меняю скорость в скетче на 57600, а в мониторе остается 115200.

EÉѹ.
a= 16173  b= 7522
a * b = 0
299C385A
 

Хмм... Ну допустим. Но чего умножалка не пашет?

скетч из #57 дает

                Test - PMCR: 0xF2
               =================
PMCE CLKFS CLKSS WCLKS OSCKEN OSCMEN RCKEN RCMEN
  0    0     0     1     0      0      1     1

               Test - CLKPR: 0x03
               ==================
CLKPCE CLKOEN1 CLKOEN0 - CLKPS3 CLKPS2 CLKPS1 CLKPS0
  0       0       0    -    0     0      0      1

               Test - PRR : 0x64
               ==================
PRTWI PRTIM2 PRTIM0 - PRTIM1 PRSPI PRUSART0 PRADC
  0       0    0    -    0     0      0      0

               Test - PRR1 : 0x65
               ==================
  - - PRWDT - - PREFL PRPCI -
  - -   0   - -   1     0 

Из #58 тест ацп подтверждается

Test speed ADC  3.31 uS  1151 mV
Test speed ADC  3.31 uS  1151 mV
Test speed ADC  3.31 uS  1151 mV
Test speed ADC  3.31 uS  1151 mV
Test speed ADC  3.31 uS  1087 mV
Test speed ADC  3.31 uS  1203 mV
Test speed ADC  3.31 uS  1151 mV
 

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
Offline
Зарегистрирован: 11.04.2013

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

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

 

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

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

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

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

renoshnik
Offline
Зарегистрирован: 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
Offline
Зарегистрирован: 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
Offline
Зарегистрирован: 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
Offline
Зарегистрирован: 11.04.2013

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

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

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

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

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

renoshnik
Offline
Зарегистрирован: 11.04.2013

sav13 пишет:

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

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

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

dimax пишет:

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

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

Это про LGT8F328D чип

renoshnik
Offline
Зарегистрирован: 11.04.2013

sav13 пишет:

Это про LGT8F328D чип

 

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

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

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

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

И огрызок:

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

 

renoshnik
Offline
Зарегистрирован: 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
Offline
Зарегистрирован: 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 может их отлаживать?