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

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

А можно подписаться на тему не оставляя комментарий?

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

pittyalex пишет:
А можно подписаться на тему не оставляя комментарий?

А какая тогда от тебя польза в этой теме будет?

NickF
Offline
Зарегистрирован: 11.12.2020

Добрый день, уважаемые! Удалось загрузить скетч из примеров AnalogReadSerial. В мониторе порта вижу такую картинку. И еще вопрос. Почему нет генерации на 8 пине МК, кварц стоит в микрокопусе маркировка AL. Осциллограф DSO5102Р щуп 1/10. 

NickF
Offline
Зарегистрирован: 11.12.2020

Спасибо за помощь всем. Разобралсо сам. В скетче примера изменил строку - 

// initialize serial communication at 57600 bits per second:

  Serial.begin(57600); 

и в мониторе поставил скорость 57600. 

NickF
Offline
Зарегистрирован: 11.12.2020

Плата Wavgat Pro Mini. 16 МГц, 5 В питание. Заработала только в такой конфигурации. Судя по картинке плоттера предыдущего поста, порт USB совсем не годитса для питания платы. Осталса только один вопрос. Работает ли кварц? У Dimax_а вроде мелькало где - то, как вывести OSC на ногу.

NickF
Offline
Зарегистрирован: 11.12.2020

Стала работать и со скоростью 9600. Вывел CLK на В0 и добавил чтение регистров CLKPR и PMCR. 



void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  sysClock(EXT_OSC);  /* работа CLK от внешнего кварца. Регистр PMCR не изменятся, 
  у меня он имеет значение В110111.
  */
  CLKPR = 1<<PMCE;    // разрешить изменение (вместо PMCE можно было просто поставить цифру 7)  
  CLKPR = 1<<5; /* вывод clk на пин В0(вывод 8 платы Wavgat Pro Mini) при этой операции
  очищается бит CLKPR(0), который устанавливает бутдоадер моей платы. В результате чего я получаю 
  Baud rate вдвое меньше устанавливаемого. Т. е. вместо 9600, получается 4800
  */
  Serial.begin(9600);
  /* ниже приведенная конструкция не снимает лишние биты в регистре
  PMCR = PMCR | B10000000;   // установка PMCE в 1, чтобы разрешить дальнейшее изменение PMCR
  PMCR = PMCR | B00000100;   // установка бита 2 
  PMCR = PMCR & B11110100;   // сброс битов 0, 1
  PMCR = PMCR | B10000000;
  PMCR = PMCR | B00100000;   // установка бита 5
  PMCR = PMCR & B00101111;   // сброс бита 6
  */
}

// the loop function runs over and over again forever
void loop() {
  uint8_t BPM = B00000000;
  BPM = BPM | PMCR;
  Serial.print("PMCR ");
  Serial.println(BPM, BIN);
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    if (Serial.available()) {
    uint8_t as = Serial.read();  
    Serial.println(as, HEX);
    /* выведет в порт 31, если отправить 1
     выведет 41, если отправить A (англ.)
     */
    if (as == 0x30) {
      PMCR = PMCR | B10000000;
      PMCR = PMCR & B11111100;
     }
          else if (as == 0x36) {
       PMCR = PMCR | B10000000;
       PMCR = PMCR & B10101111;  
      }
  }
  delay(2000);                       // wait for a 0,5 second
  uint8_t BCL = B00000000;
  BCL = BCL | CLKPR;
  Serial.print("CLKPR ");
  Serial.println(BCL, BIN);
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(2000);                       // wait for a 0,5 second
}

 

PMCR 110111
CLKPR 100000
PMCR 110111
CLKPR 100000
PMCR 110111
30
CLKPR 100000
PMCR 110100
CLKPR 100000
PMCR 110100
CLKPR 100000
PMCR 110100
36
CLKPR 100000
PMCR 100100
CLKPR 10000
 
OK0
Offline
Зарегистрирован: 06.03.2020

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

https://github.com/dbuezas/lgt8fx/commit/a0c187d019fb20b739daa1ea2af746f030a9cfff

"In latest release (v1.0.6) timer3 and interrupt vectors definitions are unfinished. They will be fixed in next release."

https://github.com/dbuezas/lgt8fx-forum/issues/9

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

OK0, ну судя по вашей же квоте -то будет решена в следующем релизе. Причём это не такая уж простая штука -задействовать новые векторы ввиду серьёзной сцепки данного аддона с профилем меги328 из Avr gcc . Не удивлюсь, ежели товарищ david buezas ознакомиться с глубиной проблемы, и откажется от этой затеи :)

OK0
Offline
Зарегистрирован: 06.03.2020

dimax, ок. Я по-видимому неправильно понял (первая ссылка) и решил, что проблема решена и решение будет "формализовано" в следующей версии... но... разве эти будущие  изменения  не описаны (первая ссылка)?

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

Да, судя по вставке  в main.cpp новые векторы уже есть.

// START CHANGE BY JAYZAKK
#if defined(__LGT8F__)
__asm__ (
  "#include <avr/io.h>                \n" \
  ".section .vectors,\"ax\",@progbits \n" \
  ".func  __vectors                   \n" \
  ".weak __vector_26                  \n" \
  "jmp   __vector_26                  \n" \
  ".weak __vector_27                  \n" \
  "jmp   __vector_27                  \n" \
  ".weak __vector_28                  \n" \
  "jmp   __vector_28                  \n" \
  ".weak __vector_29                  \n" \
  "jmp   __vector_29                  \n" \
  ".endfunc                           \n" \
  ".section .text                     \n" );
#endif
// END CHANGE BY JAYZAKK

но работают ли они -это вопрос :)

OK0
Offline
Зарегистрирован: 06.03.2020

Судя по высказыванием некоторых товарищей, - работают...

"Wow, that's amazing! I still don't get how you did it, though. :D"

https://github.com/dbuezas/lgt8fx/issues/39

 

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

OK0, что-то я там не увидел никаких конкретных фактов. Никто не пишет, что  успешно сходил по >26 вектору. Проверьте, думаю всё таки НЕ заработает)

ПивоВодка
Offline
Зарегистрирован: 08.12.2020

dimax, добрый вечер. есть вопрос по wavgadtu. Купил ардуино нано, такой - "wavgat AVGA328p". почитал форум. скачал по вашей ссылке аддон "Larduino_HSP-master". распаковал скопировал как указано в папку (C:\Users\Home\Documents\Arduino) , в программе "arduino 1.8.7"  появились новые платформы 5 штук. но мой вавгад так и не заливает скетч. что то еще упустил?

ПивоВодка
Offline
Зарегистрирован: 08.12.2020

Возможно я не знаю правильную последовательность установки аддонов и скетча? COM4 9600 бод. Загружаю скетч, выбираю плату из списка и даже не проходит проверку. выдает ошибку : exit status 1

Ошибка компиляции для платы LGT8F328P-LQFP48 MiniEVB. Пробовал все 5 из списка

OK0
Offline
Зарегистрирован: 06.03.2020

dimax пишет:

...Никто не пишет, что  успешно сходил по >26 вектору. Проверьте...

Проверил. Заменил 3 файла в папке lgt8f. Сказать, что не работает не могу... обратного тоже сказать не могу.

Вот это мигает примерно один раз в секунду. 

#define kDv  5 // делитель 1024 // только 1,2,3,4,5
volatile uint32_t  cntr = 0;
void setup() {
  pinMode(13, OUTPUT);
  TCCR3B = 1 << WGM32 | kDv; // Режим СТС WGM3[3:0]=4  + делитель = 1...5 (1...1024)
  TIMSK3 |= (1 << OCIE3A);  // включить прерывание по совпадению таймера
  OCR3AH = B10000000;  // байты регистра сравнения
  OCR3AL = B11111111;
}
void loop() {
}
ISR (_VECTOR(29)) {
  cntr++;
  if (cntr > 300000)  {
    cntr = 0;
    digitalWrite(13, !digitalRead(13));
  }
}

На изменение значений регистров (кроме TIMSK3)  не реагирует.

В общем, без взрослых не разобраться...

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

Лень считать точно, но это должно мигать не раз в секунду, а раз в неделю. Но сам тот факт, что мигает -значит по вектору таки проваливается, а дальше , судя по всему, начинается бесовщина. Видимо товарищ Давид сам эти векторы не тестил.  

NickF
Offline
Зарегистрирован: 11.12.2020

ПивоВодка пишет:
Пробовал все 5 из списка

Не надо все 5 пробовать. Вот эта нужна LGT8F328P-LQFP32 MiniEVB. Кроме платы есть еще установка кварца и выбор порта. Посмотри как у меня выбрано.

ПивоВодка
Offline
Зарегистрирован: 08.12.2020

Спасибо NickF. Да жалко выкидывать "вавгада" (купил 5 штук) под пресс.  С али долго ждать, 90 дней. кварц на 16 мгц?

NickF
Offline
Зарегистрирован: 11.12.2020

Не выкидывай!!! Положи пока на полку. Когда разберешься, что к чему в ардуино, достанешь. Я тоже был ни уха ни рыла. Тем не менее плату Wavgat Pro Mini запустил. Параллельно запустил шнурок, на PL2303. И счас еще хочу заказать  Wavgat Pro Mini, Ардуино нано и еще один КОМ порт на PL2303. Так они мне понравились. А чтобы прояснение быстрее наступило почитай эти 7 страниц форума. Я два раза читал. У меня кварц стоит на 16 МГц. Такая хреновинка длиной 3 мм и шириной 1 мм, металлического цвета. Никогда бы не подумал, что это кварц. Если умеешь делать микросьемку (через линзу), то сфотай плату. я скажу тебе есть кварц или нет. Вообще то у тебя нано, должно быть 2 кварца и две м/схемы.

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

ПивоВодка пишет:

Возможно я не знаю правильную последовательность установки аддонов и скетча? COM4 9600 бод. Загружаю скетч, выбираю плату из списка и даже не проходит проверку. выдает ошибку : exit status 1

Ошибка компиляции для платы LGT8F328P-LQFP48 MiniEVB. Пробовал все 5 из списка

 

Какой скетч ?

ПивоВодка
Offline
Зарегистрирован: 08.12.2020

NickF пишет:

Не выкидывай!!! Положи пока на полку. Когда разберешься, что к чему в ардуино, достанешь. Я тоже был ни уха ни рыла. Тем не менее плату Wavgat Pro Mini запустил. Параллельно запустил шнурок, на PL2303. И счас еще хочу заказать  Wavgat Pro Mini, Ардуино нано и еще один КОМ порт на PL2303. Так они мне понравились. А чтобы прояснение быстрее наступило почитай эти 7 страниц форума. Я два раза читал. У меня кварц стоит на 16 МГц. Такая хреновинка длиной 3 мм и шириной 1 мм, металлического цвета. Никогда бы не подумал, что это кварц. Если умеешь делать микросьемку (через линзу), то сфотай плату. я скажу тебе есть кварц или нет. Вообще то у тебя нано, должно быть 2 кварца и две м/схемы.

да если бы "димакс" сразу нормально объяснил. а то пишет поставь аддон и все. а про кварц умолчал. я то поверил этому господину с 7 летним стажем, думал аддон там все частоты выравнивает под амегу. а читать не лень. просто как мне помогут 300 страниц фото осцилографа с меандром? для вас эти фотки важные. вы там до самого господа уже врата открыли. новичкам это не помогает. про кварц я знаю, что это такое и как он выглядит. На фото он стоит рядом с микросхемой на которой написано "вавгат" и он там подписан 12 мГц.

А скетч не выкладываю, потому что любой скетч не заливается. Один только и работает Blink. 13 светодиод моргает, но видно, что несовпадушки по времени.

Спасибо еще раз господину NickF у. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ПивоВодка пишет:

про кварц я знаю, что это такое и как он выглядит. На фото он стоит рядом с микросхемой на которой написано "вавгат" и он там подписан 12 мГц.

Это не тот кварц.

ПивоВодка
Offline
Зарегистрирован: 08.12.2020

andriano пишет:

ПивоВодка пишет:

про кварц я знаю, что это такое и как он выглядит. На фото он стоит рядом с микросхемой на которой написано "вавгат" и он там подписан 12 мГц.

Это не тот кварц.

возле чипа - CH340G на другой стороне? хорошо. с миру по нитке голому рубаха

NickF
Offline
Зарегистрирован: 11.12.2020

ПивоВодка пишет:

Один только и работает Blink. 13 светодиод моргает

Ну , а говоришь не заливается. Ищи 2-ой кварц на 16 МГц. Если нет, то ставь internal 16 МГц.

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

ПивоВодка пишет:

NickF пишет:

Не выкидывай!!! Положи пока на полку. Когда разберешься, что к чему в ардуино, достанешь. Я тоже был ни уха ни рыла. Тем не менее плату Wavgat Pro Mini запустил. Параллельно запустил шнурок, на PL2303. И счас еще хочу заказать  Wavgat Pro Mini, Ардуино нано и еще один КОМ порт на PL2303. Так они мне понравились. А чтобы прояснение быстрее наступило почитай эти 7 страниц форума. Я два раза читал. У меня кварц стоит на 16 МГц. Такая хреновинка длиной 3 мм и шириной 1 мм, металлического цвета. Никогда бы не подумал, что это кварц. Если умеешь делать микросьемку (через линзу), то сфотай плату. я скажу тебе есть кварц или нет. Вообще то у тебя нано, должно быть 2 кварца и две м/схемы.

да если бы "димакс" сразу нормально объяснил. а то пишет поставь аддон и все. а про кварц умолчал. я то поверил этому господину с 7 летним стажем, думал аддон там все частоты выравнивает под амегу. а читать не лень. просто как мне помогут 300 страниц фото осцилографа с меандром? для вас эти фотки важные. вы там до самого господа уже врата открыли. новичкам это не помогает. про кварц я знаю, что это такое и как он выглядит. На фото он стоит рядом с микросхемой на которой написано "вавгат" и он там подписан 12 мГц.

А скетч не выкладываю, потому что любой скетч не заливается. Один только и работает Blink. 13 светодиод моргает, но видно, что несовпадушки по времени.

Спасибо еще раз господину NickF у. 

Если в скетче библиотеки (ардуиновские) то с БООООльшой вероятностью они НЕ будут работать с этой платой ... 

OK0
Offline
Зарегистрирован: 06.03.2020

dimax пишет:

а дальше , судя по всему, начинается бесовщина. Видимо товарищ Давид... 

Забавно, проверил этот код на LGTSDK - тот же результат! Мыргает раз в секунду, а не раз в неделю...

Так что в каком то смысле работает идеально...

//===================================================
// Auto generated file : 30.12.2020 17:29:44
//===================================================

#include "allinone.h"
// extern void init_modules(void);

int main(void)
{
    DDRB = 0xFF;
    PORTB = 0b11111111;
 
  TCCR1A = 0;
  TCCR1B = 1 << WGM12 | 3; // Режим СТС WGM3[3:0]=4  + делитель = 1...5 (1...1024)
  OCR1AH = 0b00111111;  // байты регистра сравнения
  OCR1AL = 0b11111111;
  TIMSK1 |= (1 << OCIE1A);  // включить прерывание по совпадению таймера
  
  TCCR3A = 0;
  TCCR3B = 1 << WGM32 | 2; // Режим СТС WGM3[3:0]=4  + делитель = 1...5 (1...1024)
  OCR3AH =  0b00111111;  // байты регистра сравнения
  OCR3AL = 0b11111111;
  TIMSK3 |= (1 << OCIE3A);  // включить прерывание по совпадению таймера

  SEI();
	
	while(1) {
	}
	return 0;
}

LGT_VECTOR(_VECTOR(11)) {
 // PORTB ^=(1<< PB5);
  }

LGT_VECTOR(_VECTOR(29)) {
 static unsigned int long s;
 s++;
 if (s > 100000) {
 s = 0;
 PORTB ^=(1<< PB5);
 }
}

 

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

OK0, значит в скетче дело. Видимо поскольку на все события 3-го таймера одно прерывание тут сделали как у STM-ок, т.е. регистр флагов  прерывания не отчищается автоматом, и получается, что когда прерывание честно отработало, то контроллер видит флаг прерывания,  и опять отправляется в прерывание , т.е. прерывания строчат как из пулемёта.  Значит надо вручную снимать флаг, т.е. первой командой в прерывании должна быть команда.  TIFR3|=1<<OCF3A;  либо  TIFR3=TIFR3; 

OK0
Offline
Зарегистрирован: 06.03.2020

dimax, браво! В SDK заработало.

PS Красными же буквами написано

OK0
Offline
Зарегистрирован: 06.03.2020

В Arduino IDE c модифицированным ядром от  dbuezas (именуемый выше  и ниже Давид) тоже работает.

dimax, спасибо большое, и присоединяюсь к Давиду, выражая благодарность автору.

"Really nice jayzakk! I actually needed to use the timer 3 interrupt some time ago and gave up, thanks for this!" dbuezas 

OK0
Offline
Зарегистрирован: 06.03.2020

Таймер3 может вызывать прерывания и через... э... ногу, так сказать. За счет того, что пины физически совмещены на платах. Выход Таймера3 PF2 вызывает прерывание на совмещенном с ним PD2.

//Прерывание PCINT2 вызванное таймером 3
// PF2 на плате с QFP32L физически сомещен с PD2 
#define LEDPIN 13
#define KDV  5 // делитель 1024 // только 1,2,3,4,5
static bool volatile bFlag;
//-------------------------------------
void setup() {
  cli();
  pinMode(LEDPIN, OUTPUT);
  digitalWrite(LEDPIN, HIGH);
  //=================================================
  PCIFR &= (0b11111000); // ? на всякий случай сбрасываем флаги запросов прерываний
  PCICR |= (1 << PCIE2); //разрешает обработку прерываний группы PCINT2.
  PCMSK2 |= (1 << PCINT18); // разрешает генерировать запрос прерывания PD2
  //=================================================
  // PF2 на плате QFP32L физически сомещен с PD2 , если настроен PF2, PD2 настраивать нельзя
  TCCR3B = 1 << WGM32 | KDV; // Режим СТС WGM3[3:0]=4  + делитель = 1...5 (1...1024)
  DDRF |= (1 << PF2) ; // Разрешаем вывод в  PF2
  TCCR3A = 1 << COM3B0; // включаем режим "смена уровня" на пине выхода "B" таймера3 PF2
  OCR3AH = 0b01111111; // регистры для сравнения  
  OCR3AL = 0b11111111;
  sei();
}
//=========================================================================================
void loop() {
  digitalWrite(LEDPIN, bFlag);
}
//-------------------------------------
ISR (_VECTOR(5)) { // Обработчик запросов прерывания PCINT от пинов порта D
  bFlag = !bFlag;
}

Проверил прерывание 27

// Использовано модифицированое ядро давида буэноза с включенными пррываниями 26...29
#define LEDPIN 13
#define KDV  5 // делитель 1024 // только 1,2,3,4,5
static bool volatile bFlag;
//-------------------------------------
void setup() {
  cli();
  pinMode(LEDPIN, OUTPUT);
  digitalWrite(LEDPIN, HIGH);
  //=================================================
  PCIFR &= (0b11100000); // ? на всякий случай сбрасываем флаги запросов прерываний
  PCICR |= (1 << PCIE3); //разрешает обработку прерываний группы PCINT3.
  PCMSK3 |= (1 << PCINT25); // разрешает генерировать запрос прерывания PE1
  //=================================================
  DDRE |= (1 << PE1); //|= 0b10;// Разрешаем вывод в  PE1
  sei();
}
//=========================================================================================
void loop() {
  PORTE |= (1 << PE1);
  delay(500);
  PORTE &= ~(1 << PE1);
  delay(500);
}
//-------------------------------------
ISR (_VECTOR(27)) { // Обработчик запросов прерывания PCINT от пинов порта E
  bFlag = !bFlag;
  digitalWrite(13, bFlag);
}

и прерывание 28

// Использовано модифицированое ядро давида буэноза с включенными пррываниями 26...29
#define LEDPIN 13
#define KDV  5 // делитель 1024 // только 1,2,3,4,5
static bool volatile bFlag;
//-------------------------------------
void setup() {
  cli();
  pinMode(LEDPIN, OUTPUT);
  digitalWrite(LEDPIN, HIGH);
  //=================================================
  //PCIFR &= (0b11100000); // ? на всякий случай сбрасываем флаги запросов прерываний
  PCICR |= (1 << PCIE4); //разрешает обработку прерываний группы PCINT4.
  PCMSK4 |= (1 << PCINT34); // разрешает генерировать запрос прерывания PF2
  //=================================================
  // PF2 на плате QFP32L физически сомещен с PD2 , если настроен PF2, PD2 настраивать нельзя
  TCCR3B = 1 << WGM32 | KDV; // Режим СТС WGM3[3:0]=4  + делитель = 1...5 (1...1024)
  DDRF |= (1 << PF2) ; // Разрешаем вывод в  PF2
  TCCR3A = 1 << COM3B0; // включаем режим "смена уровня" на пине выхода "B" таймера3
  OCR3AH = 0b00011111; // регистры для сравнения
  OCR3AL = 0b11111111;
  sei();
}
//=========================================================================================
void loop() {
  digitalWrite(LEDPIN, bFlag);
}
//-------------------------------------
ISR (_VECTOR(28)) { // Обработчик запросов прерывания PCINT от пинов порта F
  bFlag = !bFlag;
}

и, кстати, вход Таймера3 - это четвертый пин на котором можно организовывать прерывание по фронту

// Использовано модифицированое ядро давида буэноза с включенными пррываниями 26...29
// 29 - номер вектора прерывания от всех событий таймера3
#define KDV  2 // делитель 1024 // только 1,2,3,4,5
#define LEDPIN 13
#define PINCP 10 // pin захвата таймера3 PF4 физически соединен  с PB2
volatile bool  flag_29 = 0; // флаг изменеия состояния для LED
//-------------------------------------
void setup() {
  pinMode(PINCP, OUTPUT); // будем изменять состояние 
  pinMode(LEDPIN, OUTPUT);
  digitalWrite(LEDPIN, LOW);
  digitalWrite(PINCP, HIGH);
  //==============================
  cli();
  TCCR3A = 0; // на всякий случай обнуляем регисры настройки таймера3
  TCCR3B = 0;
  // настраиваем таймер3
  // Режим Normal WGM3[3:0]= 0  + делитель = 1...5 (1...1024)+ подавление помех ICNC3 (1 - подавление)
  // + ICES3 - активный фронт (1-нарастающий, 0 -ниспадающий)
  TCCR3B |=  (KDV) | (1 << ICNC3) | (1 << ICES3);
  TIMSK3 |= (1 << ICIE3);   // включить прерывание по захвату PF4 физически соединен PB2
  sei();
}

//-------------------------------------
void loop() {
  TCCR3B = 0; // обновим регистр (без этого почему-то не работает)
  TCCR3B |=   ((1 << ICNC3) | (1 << ICES3)) ;
  digitalWrite(PINCP, HIGH); // нарастающий фронт должен вызвать прерывание
  digitalWrite(PINCP, LOW); // ниспадающий фронт НЕ должен вызвать прерывание
  delay(1000);
  digitalWrite(LEDPIN, flag_29);
}
//-------------------------------------
ISR (_VECTOR(29)) {
  TIFR3 = (1 << ICF3); //вручную сбрасываем флаг прерывания
  flag_29 = !flag_29;
}

 

NickF
Offline
Зарегистрирован: 11.12.2020

indman пишет:

От 3,3В питание идёт на 4(VCC)процессора.Кто нибудь пробовал запитать от +5В?

У меня стоит 5 - ногая м/схема. Выход 5 В.

OK0
Offline
Зарегистрирован: 06.03.2020

Вопрос про изменение внутреннего источника опорного напряжения. Измеряю напряжение (RMS) в бытовой электросети (220/380). Точнее, измеряю изменения напряжения.

300 измерений за полупериод (10мс). Вот пришло в голову, после завершения преобразования изменять (или не изменять) внутренний ИОН в соответствии с ожидаемым уровнем напряжения. Должно ощутимо повысить точность. Пока не пробовал, решил спросить. Не фигня ли это полная? 

nik182
Offline
Зарегистрирован: 04.05.2015

Сильно зависит от максимума входного измеряемого напряжения на ноге процессора. RMS для этого процессора очень затратная операция. Для измерения напряжения сети достаточно измерить точек 5 вокруг максимума с максимальной скоростью и усреднить. Мой опыт говорить, что таким образом мы имеем точность около 1 вольта. По крайней мере реле напряжения на таком алгоритме срабатывает именно с такой точностью.    

OK0
Offline
Зарегистрирован: 06.03.2020

nik182, вы меня наверно не совсем поняли... Я, в силу своей малограмотности, не могу оценить существенно ли повысится точность, если использовать переключение внутренних ИОНов почти "на ходу". И нет ли каких-либо противопоказаний для такого частого переключения. Разумеется "максимум входного измеряемого напряжения на ноге" в каждом из четырех диапазонов равен опорному напряжению для этого диапазона (в идеале). Ну а  затратность, несимметричность и несинусоидальность, по-видимому, не стоит в этой теме обсуждать... Во всяком случае, мне.

PS Выделил жирным два слова, дабы, не изменяя, сделать более контрастной смысловую нагрузку трех следующих за этим сообщением комментариев.

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

Так на форуме пишут что  RMS - круто, вот и химичат безпонятливые. А реально да, для большинства случаев и амплитуды предостаточно. И пяток точек у максимума оно конечно хорошо, только как же узнать, когда его мерить. Я обычно так делаю. Как есть свободные 20мс начинаю максимально часто вводить напряжение, ограничиваю верхним пределом (например 350В для ввода максимума при 220) на лету слегонца фильтрую, это чтоб 'иголки' задавить и ловлю максимум за эти 20мс. Эти максимумы, периодически определяемые по ходу работы снова фильтром сглаживаю. То, что получилось и есть амплитуда напряжения. Ток с трансформатора аналогично. Да, и ввожу только пол волны, вторая нафиг, она такаяже.

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

Око, а какую точность ты ищеш? Зачем? Не хватает для че? Ардуиновский АЦП не точностью известен. 

nik182
Offline
Зарегистрирован: 04.05.2015

Я через мегом подаю 220 на ногу, на вторую через делитель из мегома и подстроичника 20к. По первой ноге по прерыванию начинаю отсчёт 4 мс. По истечение 4 мс делаю 5замеров на второй. Попадаю точно чуть до и после максимума. Все на тине25. 

OK0
Offline
Зарегистрирован: 06.03.2020

В QFP48 есть выводы AGND и AVCC. "Прозвонка" показала, что они физически соединены в корпусе микросхемы с выводами GND  и VCC соответственно. Так должно быть?

И еще один вопрос, на схеме обвязки, на сайте производителя, предлагается соединить эти выводы через R1  и R2 номиналом 0 ом.

Что имеется ввиду? Полигоны?

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

OK0 пишет:

В QFP48 есть выводы AGND и AVCC. "Прозвонка" показала, что они физически соединены в корпусе микросхемы с выводами GND  и VCC соответственно. Так должно быть?

Бывает по-всякому. КЗ думаю не должно быть, обычно либо полный разрыв цепей (мегомы) либо есть небольшое сопротивление (единицы Ом). Главная задача, что б "цифровые токи" не гуляли по аналоговым цепям. Так что если АЦП используется, и надо из него  выжать максимум,  то лучше делать всё по-уму.

Домосед
Домосед аватар
Offline
Зарегистрирован: 18.09.2019

Вот мой пост удалили зачем?
Все же написал, что я думаю по этому поводу. Ну да ладно..

OK0 пишет:
В QFP48 есть выводы AGND и AVCC. "Прозвонка" показала, что они физически соединены в корпусе микросхемы с выводами GND  и VCC соответственно. Так должно быть?

Быть так не должно в нормальных MCU. Но читаем это, где  Warning!!! Что уж тут говорить о LGT. 
OK0 пишет:
И еще один вопрос, на схеме обвязки, на сайте производителя, предлагается соединить эти выводы через R1  и R2 номиналом 0 ом.

Будьте любезны, приведите ссылку.

 

 

 

OK0
Offline
Зарегистрирован: 06.03.2020

dimax, ок. Вопрос был отчасти риторический ("Ну не должно же быть так, не так ли?"). Увы, на обеих микросхемах мой прибор показывает одинаковое сопротивление, близкое к нолю, AVCC-VCC, GND-GND  и AGND-GND. Очень жаль... ("А пацаны-то не знают"). Впрочем, учитывая что я, по-видимому, являюсь единственным в мире розничным приобретателем QFP48, разделить мое горе не с кем...

Домосед, http://www.lgtic.com/upload/lgt8fx8p/SN0244_LGT8F328P_LQFP48_MINI_V1_20170225.pdf

PS Домосед, по поводу "вырубки лесов" (из удаленного сообщения) и  R1 = R2 = 0, представляется мне, что что авторы обращают внимание, что аналоговые и цифровые должны быть соединены не абы как, а должным образом. В документации на ATmega328 это "должным образом" отчасти представлено на рисунке с надписью "analog ground plane" (полигон?). Не так ли?

Strangeman
Offline
Зарегистрирован: 28.11.2014

Так что в итоге? АЦП совершенно негодный и существенно уступает 10 битам Меги? Выше было сравнение и оно сильно не в пользу LGT8F328P. Или дело в референсе?

OK0
Offline
Зарегистрирован: 06.03.2020

Strangeman, АЦП вполне годный, и, на мой взгляд, существенно превосходит АЦП Atmega 328. Сравнений "не в пользу" не встречал, в том числе и "выше". Речь шла о попытке исправить неидеальное подключение  питания АЦП, которое практикуется на всех ардуино и ардуинообразных платах, и "выжать максимум" из АЦП. 

 

Strangeman
Offline
Зарегистрирован: 28.11.2014

OK0 пишет:

Strangeman, АЦП вполне годный, и, на мой взгляд, существенно превосходит АЦП Atmega 328. Сравнений "не в пользу" не встречал, в том числе и "выше". Речь шла о попытке исправить неидеальное подключение  питания АЦП, которое практикуется на всех ардуино и ардуинообразных платах, и "выжать максимум" из АЦП. 

Я ориентировался на графики из вот этого сообщения. http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p?page=2#comment-433017

На плоттере выглядит довольно скверно по сравнению с мегой.

Ну и в первом сообщении "АЦП этот бегло протестировал,".

Так что, стоит брать пробовать? Реально 12 бит и неплохая стабильность? Изначальная точность меня мало волнует - откалибрую, важна стабильность.

Что же касается адуинообразных плат и питания - я это давно заметил и абсолютно не понимаю такого подхода. Экономия на 1 дросселе и 1 конденсаторе? Это уже за пределами добра и зла.

OK0
Offline
Зарегистрирован: 06.03.2020

Strangeman пишет:

 

Я ориентировался на графики из вот этого сообщения. http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p?page=2#comment-433017

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

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

PS Что-то неудачно картинка разместилась. Если на словах: Atmega328 - реально только 8 разрядов (до 200 кГц). LGT  328P- реально 12 разрядов - до 3000 кГц. 

А вот мой тест не про АЦП

Strangeman
Offline
Зарегистрирован: 28.11.2014

OK0 пишет:

Если на словах: Atmega328 - реально только 8 разрядов (до 200 кГц). LGT  328P- реально 12 разрядов - до 3000 кГц. 

А вот мой тест не про АЦП

Понял, спасибо. Заказал пару плат и нашел отдельно контроллеры в QFP48, тоже заказал пяток, буду посмотреть.

Чтобы долго не искать, что у них с заголовочными файлами?

OK0
Offline
Зарегистрирован: 06.03.2020

Strangeman, хотел еще добавить, что я совсем любитель-начинающий, и могу ошибаться в самых простых вещах...

Что такое "заголовочный файл"?

Strangeman
Offline
Зарегистрирован: 28.11.2014

OK0 пишет:

Strangeman, хотел еще добавить, что я совсем любитель-начинающий, и могу ошибаться в самых простых вещах...

Что такое "заголовочный файл"?

Это файл с дефайнами для регистров и битов.

Посмотрю, что там есть в SDK.

wiktor
Offline
Зарегистрирован: 16.02.2021

Народ, банальный вопрос, пришла плата, та, что без кварцев, на USB чипе HT42B534-1. Подключаю к Пк, ОС WIN-7 ее не видит, т.е. не создакт вирт. Сом порт, пытаюсь найти драйвера, найденные не как не решают проблемы, На долбаный "Holtek" нет ничего. Но с другой стороны народ на форуме пишет что для данной микрухи внешние дрова и не нужны, типа, цепляй как мышку, сама в систему встанет, где истина. Если нужны дрова, то где их взять? Первый раз с такой проблемой столкнулся. Устойчиво бъется мысль-микруха USB дохлая. Проверено на 3 ПК с  WIN-7. На ХР не проверял. Уже думаю удалить ее нахрен, и подцепить внешний, так сказать, проверенный.

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

wiktor, ссылка на дрова есть в этой же теме. #171. Тут надо вот что понимать - винда "видит" любое usb-устройство, т.к. те передают своё название и идентификатор. Поэтому если в устройствах совсем ничего нет -то драйвера не помогут. Это аппаратная неисправность. Если видит, но устройство определилось с какими-то проблемами  -тогда другой разговор.