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

Green
Онлайн
Зарегистрирован: 01.10.2015

Херовая, что бы не сказать большего.)

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

12val12, подавай на него вольт 40-50 и заводи сразу на 1920х1080.

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

не увидел на плате стабилизатора на 3.3 вольта, как так?

Sinclair
Offline
Зарегистрирован: 12.11.2011

а если на это китайской Uno WAVGAT перекинуть МК на атмега328, запустится?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Sinclair пишет:

а если на это китайской Uno WAVGAT перекинуть МК на атмега328, запустится?

Для начала нужно смотреть распиновку в даташитах на оба МК.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

 

 

Atmega328P:

bizzon
Offline
Зарегистрирован: 29.03.2016

Попала в руки такая же нана. Блинк моргает нормально(аддон установил). А вот попробовал из примеров 1602 подключить- ни в какую про мир писать не хочет. Я так понимаю, без бубна всякие библиотеки для 328 меги работать не захотят?

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

bizzon пишет:

Попала в руки такая же нана. Блинк моргает нормально(аддон установил). А вот попробовал из примеров 1602 подключить- ни в какую про мир писать не хочет. Я так понимаю, без бубна всякие библиотеки для 328 меги работать не захотят?

у меня без бубнов   https://www.drive2.ru/b/519300717261882578/

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

bizzon пишет:

Попала в руки такая же нана. Блинк моргает нормально(аддон установил). А вот попробовал из примеров 1602 подключить- ни в какую про мир писать не хочет. Я так понимаю, без бубна всякие библиотеки для 328 меги работать не захотят?

недавно только подключал i2c 1602, имено нано вавгат, никаких проблем. библа - LiquidCrystal.

 

bizzon
Offline
Зарегистрирован: 29.03.2016

Ну так я без i2c подключал. Шестью проводочками. Буду дома, попробую по шине.

indman
Offline
Зарегистрирован: 04.06.2016

ua6em пишет:

не увидел на плате стабилизатора на 3.3 вольта, как так?

U4 на плате Arduino Uno Wawgat - XC6206P332MR (662K), стабилизатор напряжения, 3.3В 200мА, SOT23

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

 

 

 

bizzon
Offline
Зарегистрирован: 29.03.2016

bizzon пишет:

Ну так я без i2c подключал. Шестью проводочками. Буду дома, попробую по шине.

Докладываю. Достал осцилограф, прошёлся по ногам. Везде прямоугольнички, на D4 кракозябры. Поднял ногу у контроллера- всё равно кракозябры. Переназначил на D7 - УРА! заработало. Потестил остальные порты- фигня только с D4. Тестером звонится одинаково с остальными.

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

Вопрос, можно ли встроенными средствами выставить частоту тактирования 28  мегагерц

mataor
Offline
Зарегистрирован: 30.01.2014

ua6em пишет:

Вопрос, можно ли встроенными средствами выставить частоту тактирования 28  мегагерц

легко и просто - поменяй кварц на 14 МГц

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

DIMAX подскажи, как ты затактировался от внешнего генератора?
 

#include "lgtx8p.h"
int main(){
PMCR=1<<PMCE; //разрешить выбор источника тактирования
PMCR= 1<<2 | 1<<5; //External high frequency crystal 
PMX2= 1<<WCE;//разрешить изменения
PMX2= 1<<XIEN;//разрешить вход тактовой частоты от кварц. генератора
CLKPR = 1<<PMCE;//разрешить изменение
CLKPR = 1<<5; //делитель =1 и вывод clk
}

 

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

mataor пишет:

ua6em пишет:

Вопрос, можно ли встроенными средствами выставить частоту тактирования 28  мегагерц

легко и просто - поменяй кварц на 14 МГц

что-то сомневаюсь, у меня кварц на плате 12 мегагерц, залил скетч от nano дающий на 9 пине 8 мегагерц, переключаюсь на этой плате на кварц и, на 8 пине около 6 мегагерц, то-есть удвоителя там нет выходит

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

ua6em пишет:

DIMAX подскажи, как ты затактировался от внешнего генератора?

Я отпаял кварц, и подал на вход XI (PB7 кажется) сигнал с кварцевого генератора.

ua6em пишет:

что-то сомневаюсь, у меня кварц на плате 12 мегагерц, залил скетч от nano дающий на 9 пине 8 мегагерц, переключаюсь на этой плате на кварц и, на 8 пине около 6 мегагерц, то-есть удвоителя там нет выходит

Там x2 только для  тактовой таймера. И то, по моему, только если тактироваться от встроенного генератора. Для тактовой 28 MHz нужен кварц или генератор на 28 MHz

tishkoff
Offline
Зарегистрирован: 26.05.2019

Добрый день знатокам. Сразу признаюсь что я дуб во всех этих делах, за что и прошу прощения. ситуация моя в следующем: Были куплены UNO на AtMega 328P и Ethernet Sheild на w5100 под корпус UNO. Пробовал разные скетчи с библиотекой Ethernet.h - всё работало. На днях пришла Wavgat UNO R3 на AVGA328P, как и большинство из нас я просто просмотрел инфу о железе. По итогу не компилируется скетч с библиотекой Ethernet.h . Пробовал использовать скетчи из примеров на Ethernet2.h - компилируется и грузится, но mac присваивается нулевой и IP=255.255.255.255 Может есть рабочее решение работы сабжа с w5100 ?

/home/home/arduino-1.8.9/libraries/Ethernet/src/Ethernet.cpp: In static member function 'static void EthernetClass::begin(uint8_t*, IPAddress, IPAddress, IPAddress, IPAddress)':
/home/home/arduino-1.8.9/libraries/Ethernet/src/Ethernet.cpp:87:33: error: request for member 'bytes' in 'ip.IPAddress::_address', which is of non-class type 'uint8_t [4] {aka unsigned char [4]}'
  W5100.setIPAddress(ip._address.bytes);
                                 ^
/home/home/arduino-1.8.9/libraries/Ethernet/src/Ethernet.cpp:88:38: error: request for member 'bytes' in 'gateway.IPAddress::_address', which is of non-class type 'uint8_t [4] {aka unsigned char [4]}'
  W5100.setGatewayIp(gateway._address.bytes);
                                      ^
/home/home/arduino-1.8.9/libraries/Ethernet/src/Ethernet.cpp:89:38: error: request for member 'bytes' in 'subnet.IPAddress::_address', which is of non-class type 'uint8_t [4] {aka unsigned char [4]}'
  W5100.setSubnetMask(subnet._address.bytes);

 

kostyamat
Offline
Зарегистрирован: 16.11.2017

Ребята, прошу помощи. Поставил это плагин https://github.com/LGTMCU/LarduinoISP/blob/master/LarduinoISP.ino вроде именно его рекомендовали в начале темы. Развернул его в C:\Program Files (x86)\Arduino\hardware\LGT\avr\

Вибрал в менеджере плат (ардуино иде перезапускал) LGT8F328P LQFP32 MiniEBV

Закинул простенький скетч, типа светодиодом мигнуть, что-то в сериал принтануть, в пять строк буквально, ИДЕ начинает собирать и линковать кор и... валится куча таких ошибок

 

Compiling core...
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -x assembler-with-cpp -flto -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\wiring_pulse.S" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\wiring_pulse.S.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\hooks.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\hooks.c.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\WInterrupts.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\WInterrupts.c.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\wiring_digital.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\wiring_digital.c.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\wiring_analog.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\wiring_analog.c.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\wiring.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\wiring.c.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\wiring_pulse.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\wiring_pulse.c.o"
"C:\\Users\\Konstyantyn\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f" "-IC:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\variants\\lgt8fx8e" "C:\\Program Files (x86)\\Arduino\\hardware\\LGT\\avr\\cores\\lgt8f\\wiring_shift.c" -o "C:\\Users\\KONSTY~1\\AppData\\Local\\Temp\\arduino_build_425599\\core\\wiring_shift.c.o"
cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

exit status 1
Ошибка компиляции для платы Larduino w/ LGT8F328D.
 

Куда копать?

Update: установил аддон от Вавганд, все скомпилировалось. Уже легче.
Но вижу такую картину 29кБайт флеша доступно. Соответственно 2к откусили на эмуляцию ЕЕПРОМ.
Вопрос к гуру, как отказаться от ЕЕПРОМ вообще, у меня в проекте внешняя 24С512, но вернуть эти 2к "на родину"? В даташите вроде говорят, что это можно настраивать программно, но как? Ума не приложу, так досконально я ещё в даташитах не разбираюсь. Может полскажет кто?

Кот Матроскин
Кот Матроскин аватар
Offline
Зарегистрирован: 09.05.2019

Всем здравствуйте, взял вот пару таких клонов от клонов LGT8F328P: https://ru.aliexpress.com/item/LGT8F328P-LQFP32-minievb-Arduino-Nano-V3-...

И вообще не могу найти драйвера для USB TO UART BRIDGE (vid_04d9 pid_b534) под винду для этой платы. Где их взять? Кто-нибудь вообще подключал это чудо к усб без использования всяких отдельных адаптеров?

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

Кот Матроскин, дрова на сайте холтэка.

Кот Матроскин
Кот Матроскин аватар
Offline
Зарегистрирован: 09.05.2019

Спасибо, нашел!

kostyamat
Offline
Зарегистрирован: 16.11.2017

Пока это бесполезная балалайка. (( Кор для нее сырой сильно, ни один мало мальски большей скетч под нее так и не скомпилировался. При этом, компилятор делает очень объемный бинарник. То, что таки удалось скомпилировать под нее, на Уно занимает к примеру 40% флеша, а под эту 90%. Как -то так. ((

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

А версии компилятора пользовали одинаковые? На крайних  есть проблемы. На 1.8.3 я не заметил сильных различий размера например 13484 байт супротив 12228 для наны. И скетч не самый простой - работа с графикой на экране по i2c. Проблемы компиляции вероятно из-за сторонних либ, там кривописцы затачиваются под конкретную плату и понятно что это не проходит. Повозитесь с условной компиляцией, чтоб все собиралось как под Уно, например.

kostyamat
Offline
Зарегистрирован: 16.11.2017

ИДЕ 1.8.9 , просто поставил аддон, как у них в readme написано, https://github.com/LGTMCU/Larduino_HSP - вообще нифига не компиляется, даже встроенные примеры для платы, ошибка типа

"C:\Users\Konstyantyn\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_LARDU_328E -DARDUINO_ARCH_AVR "-ID:\Konstyantyn\Documents\Arduino\hardware\LGT\avr\cores\lgt8f" "-ID:\Konstyantyn\Documents\Arduino\hardware\LGT\avr\variants\lgt8fx8p" "D:\Konstyantyn\Documents\Arduino\hardware\LGT\avr\cores\lgt8f\wiring_pulse.c" -o "C:\Users\KONSTY~1\AppData\Local\Temp\arduino_build_105324\core\wiring_pulse.c.o"
cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

cc1.exe: error: -fno-fat-lto-objects are supported only with linker plugin.

так и не решил проблему, я не большой спец иде настраивать, поставил плагин от wawgang  https://drive.google.com/file/d/10gwrG9uTDwaEO-7EudsmBkfgdcyrcABI/view - вообще - треш, угар и содомия! Библы типа SoftwareSerial,  Wire и т.п. сыпят ошибками, макросы F("hjhjhjh") не поддерживаются, String сыпет ошибками. Караул короче. Плюнул, бросил платки в коробочку. На github открыл issue  https://github.com/LGTMCU/Larduino_HSP/issues/3 -  китайса хрень несет, мол обновите ИДЕ. Куда уж новее то?

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

Обновите в сторону более старой ;) Новые ИДЕ не гуд. На 1.8.3 без замечаний. Аддон я из первого поста брал.

kostyamat
Offline
Зарегистрирован: 16.11.2017

Хм... Запустил, не устанавливая, версию ИДЕ 1.8.5 мои проекты начали компилятся.

Вот только незадача, не влезают во флеш.

Вопрос: как отказаться от эмуляции ЕЕПРОМ на флеше?

В моих проектах он не используется, а вот флеш нужна вся, тем более такой ценой - для эмуляции 1кБ ЕЕПРОМ откусывают 2кБ флеш. Где-то можно подправить? Вроде чины говорили, что это настраиваемый параметр. Кстати, код все равно больше после компиляции, приблизительно на 1кБ с копейками. Но хоть компилится. Ок, смогу куда нибудь пристроить платы.

Лоджик, спасибо большое за подсказку.

ПС. Вписал в boards.txt

lardu_328p.name= LGT8F328P-LQFP32 MiniEVB w/o EEPROM
lardu_328p.upload.tool=avrdude
lardu_328p.upload.protocol=arduino
lardu_328p.upload.maximum_size=31744  //вот тут тупо приплюсовал 2048, не знаю на сколько это правильно
lardu_328p.upload.speed=57600
lardu_328p.bootloader.tool=avrdude
lardu_328p.bootloader.high_fuses=0xff
lardu_328p.bootloader.low_fuses=0xff
lardu_328p.bootloader.extended_fuses=0x07
lardu_328p.bootloader.path=lgt8fx8p
lardu_328p.bootloader.file=lgt8fx8p/optiboot_lgt8f328p.hex
lardu_328p.bootloader.unlock_bits=0x3f
lardu_328p.bootloader.lock_bits=0x3f
lardu_328p.build.mcu=atmega328p
lardu_328p.build.f_cpu=16000000L
lardu_328p.build.core=lgt8f
lardu_328p.build.variant=lgt8fx8p
lardu_328p.build.board=AVR_LARDU_328E

 

на днях попробую чем то большим плату занять, посмотрим что получится, влезет ли?

Еще хотелось бы воспользоваться прелестями 32мГц. Кто-то знает как включить 32мГц?

Эх, они бы лучше вот все это тоже самое, но флеша 48к - 64 и озу 4к+ - цены бы камню небыло б.

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

kostyamat пишет:

lardu_328p.upload.maximum_size=31744  //вот тут тупо приплюсовал 2048, не знаю на сколько это правильно

Бутлоадер у LGT занимает один килобайт, но прикол в том, что он сидит по смещению 0x7400 (29696), т.е.  под него зарезервировано аж 3кБ. Нафига? -не ясно, возможно это резерв места под вирутальный EEPROM. Одно очевидно -если с таким "фиксом" вы зальёте прошивку более 29696 байт, то плата окирпичится, и без специального программатора оживить её будет невозможно.

kostyamat пишет:

Еще хотелось бы воспользоваться прелестями 32мГц. Кто-то знает как включить 32мГц?

Может в начале темы почитать? :)

yach_1250
Offline
Зарегистрирован: 24.06.2019

Здравствуйте. Пытаюсь подружить WAVGAT UNO R3 с LoRa модемом HopeRF95W при помощи библиотеки IBM LMIC. Сразу оговорюсь, что на уне с мегой на борту все отлично работает через преобразователь лог. уровней. WAVGAT виснет при выполнении функций из LMIC.

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

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

yach_1250 пишет:

Здравствуйте. Пытаюсь подружить WAVGAT UNO R3 с LoRa модемом HopeRF95W при помощи библиотеки IBM LMIC. Сразу оговорюсь, что на уне с мегой на борту все отлично работает через преобразователь лог. уровней. WAVGAT виснет при выполнении функций из LMIC.

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

пины разделяемы с таймером и на передающем большая подпора, порядка 1.5 вольта, а это за гранью добра, может в этом проблема?

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

Блинк на третьем таймере:
Скетч:

// Пример использования Таймера 3  (Блинк на таймере) для платы WAVGAT
// (с) UA6EM на основе заимствований на arduino.ru у DIMAX и ЕвгенийП
// используется библиотека ЕвгенийП  "ConstTimers.h"

#include "lgtx8p.h"

#ifndef CONSTANTS
  #include "ConstTimers.h"
  // Параметры для работы таймера/счётчика №3 на частоте 1Гц
  //
  constexpr uint8_t timerBits3 = getPrescalerBits(1, 1);
  constexpr uint16_t timerTicks3 = getTimerTicks(1, 1);
  //
#endif

void setup() {

   #ifdef CONSTANTS
    TCCR3B = 4;
    OCR3A = 62500; 
   #else
    TCCR3B =1<<WGM32 |timerBits3; // Режим СТС WGM3[3:0]=4 или 12
    
    if(timerTicks3 > 255){
    uint8_t r3ah = timerTicks3 / 256; 
    OCR3AH = r3ah;
    uint8_t r3al = timerTicks3 % 256;
    OCR3AL = r3al;
    }else{
    OCR3AH = 0x00;
    uint8_t al = timerTicks3;
    OCR3AL = al;
    }   
  #endif
 DDRF = 1<<2 | 1<<1;   // Разрешаем вывод в порты D1 и D2 
 TCCR3A=1<<COM3A0 | 1<<COM3B0;  // ПИН D2 + TXI

 pinMode(13,OUTPUT);
 //Serial.begin(115200);
 
 }// end-Setup

void loop(){
  digitalWrite(13,!digitalRead(2));
//  Serial.println(timerBits3);
   } // END

Библиотека:

#ifndef  CONSTTIMERS_H
#define CONSTTIMERS_H

///////////////////////////////////////////////////////////////////////////////
//
//  Недобиблиотека вычисления битов конфигурации делителя частоты и 
//  количества тиков таймера по заданной частоте.
//
//  Предназначена для использования с микроконтроллером ATmega328P 
//  (например, в Ардуино или в AVR-студии). Модификация для других 
//  микроконтроллеров возможна и несложна, как будет показано ниже.
//
//  Основная особенность: ВСЕ ВЫЧИСЛЕНИЯ ПРОИСХОДЯТ ВО ВРЕМЯ КОМПИЛЯЦИИ. 
//  В РЕЗУЛЬТИРУЮЩИЙ КОД НЕ ПОПАДАЕТ НИ ОДНОГО БАЙТА НИ КОДА, НИ ДАННЫХ.
//
//    замечание о точности: 
//      гарантировать точность произвольной частоты невозможно, т.к. требуемый период 
//      может элементарно не являться делителем тактовой частоты микроконтроллера или 
//      его, может быть, невозможно подобрать имеющимися делителями частоты. 
//      Недобиблиотека ВСЕГДА выдаёт наилучший из возможных результатов для заданной частоты
//      на заданном таймере. Но при этом нет никакой возможности узнать насколько хорош
//      результат и какова погрешность. Если требуется инструмент для «зрячего» выбора
//      частот, следует взять «калькулятор таймеров» (их много, например, есть и у автора).
//    конец замечания о точности.
//
//  ИСПОЛЬЗОВАНИЕ
//
//  Для использования необходимо включить файл «ConstTimers.h» и определить константы с 
//  модификатором constexpr для нужных конфигурационных битов и количества тиков, которым 
//  присвоить значения, возвращаемые функциям getPrescalerBits и getTimerTicks соответсвенно. 
//  Обе функции принимают два параметра – номер таймера и требуемую частоту. Функция 
//  getPrescalerBits возвращает результат типа uint8_t. Функция getTimerTicks возвращает результат 
//  типа uint16_t, т.к. таймер может быть 16-битным, для 8-битных таймеров значение не превышает 255.
//
//  Например:
//
//    #include <ConstTimers.h>
//    //
//    // Параметры для работы таймера/счётчика №2 на частоте 1кГц
//    //
//    constexpr uint8_t timerBits2 = getPrescalerBits(2, 1000);
//    constexpr uint8_t timerTicks2 = getTimerTicks(2, 1000);
//    //
//    // Параметры для работы таймера/счётчика №1 на частоте 500Гц
//    //
//    constexpr uint8_t timerBits1 = getPrescalerBits(1, 500);
//     constexpr uint16_t timerTicks1 = getTimerTicks(1, 500);
//    .............
//    //
//    // Конфигурация таймеров
//    // таймер №2
//    TCCR2B = timerBits2;
//    OCR2A = timerTicks2;
//    // таймер №1
//    TCCR1B = timerBits1;
//    OCR1B = timerTicks1;
//
//Результат работы будет точно такой же, как если написать константы вместо вызовов функций:
//
//  TCCR2B = 4;
//  OCR2A = 250;
//  TCCR1B = 1;
//  OCR1B = 32000;
//
// Ни на один байт код не изменится.
//
//  КОФИГУРАЦИЯ:
//
//  1. расчёт производится для текущей тактовой частоты микроконтроллера. Если нужно 
//    считать для какой-то другой частоты, измените константу ниже:
//
#define FCPU  F_CPU
//
//  2. ниже приведён массив конфигурации таймеров. Количество элементов массива 
//    соответсвует количеству таймеров. Нулевой элемент описывает нулевой таймер, 
//    первый элемент – первый таймер и т.д. Если требуется расширить недобиблиотеку для других 
//    микроконтроллеров, нужно изменить именно этот массив и больше изменять ничего не надо.
//
//  В массиве для каждого таймера указано:
//    1) разрядность таймера в виде максимально возможного значения количества тиков 
//      (для 8-разрадных таймеров – 0xFF, для 16-разрядных – 0xFFFF.
//    2) указатель на массив делителей частоты. Делители начинаются с 1 (делитель 0 писать не нужно)
//    3) количество делителей частоты у данного таймера.
//
struct STimerParameters {
  const uint32_t maxValue;
  const int * prescalers;
  const uint8_t totalPrescalers;
};

constexpr  int prescalers01[] = {1, 8, 64, 256, 1024 };
constexpr  int  prescalers2[] = {1, 8, 32, 64, 128, 256, 1024 };

constexpr STimerParameters timerParameters[3] = {
  {0x000000FFul, prescalers01, sizeof(prescalers01) / sizeof(prescalers01[0])},
  {0x0000FFFFul, prescalers01, sizeof(prescalers01) / sizeof(prescalers01[0])},
  {0x000000FFul, prescalers2, sizeof(prescalers2) / sizeof(prescalers2[0])},
};
constexpr int8_t totalTimers = sizeof(timerParameters) / sizeof(timerParameters[0]);
//
//
// ЛИЦЕНЗИЯ
//
// Данный код поставляется по лицензии ПНХ.
//
// 1. Вы можете свободно использовать или не использовать его в коммерческих, 
//    некоммерческих, и любых иных, не запрещённых законом, целях.
//
// 2. Автор не несёт решительно никакой ответственности за любые положительные
//    или отрицательные результаты использования или неиспользования данного кода.
//
// 3. Если Вам таки хочется сделать автору предъяву, то Вы знаете, куда
//    Вам следует обратиться. А если не знаете, то см. название лицензии.
//
// 4. Если данный код вдруг Вам пригодился (как учебник или ещё как что) и Вам
//    почему-либо (ну, приболели, может) захотелось отблагодарить автора рублём,
//    то это всегда пожалуйста – WebMoney, кошелёк № R626206676373
//
// 5. Возникновение или невозникновение у Вас желаний, обозначенных в п.4 
//     настоящей лицензии никак не связано с п.1, который действует безусловно 
//     и независимо от п.4.
//
// 6. Если данный код нужен Вам с какой-либо другой лицензией, например, с
//     сопровождением или Вы нуждаетесь во внесении изменений, свяжитесь с автором
//     на предмет заключения договора гражданско-правового характера.
//
///////////////////////////////////////////////////////////////////////////////

constexpr uint32_t getPeriod(const uint32_t frequency) {
  return (FCPU + frequency / 2) / frequency;
}

constexpr uint16_t prValue(const int8_t prescalerId, const int8_t nTimer) {
  return timerParameters[nTimer].prescalers[prescalerId];
}

constexpr uint32_t getDesiredTicks(const uint32_t frequency, const int8_t prescalerId, const int8_t nTimer) {
  return (getPeriod(frequency) + prValue(prescalerId, nTimer) / 2) / prValue(prescalerId, nTimer);
}

constexpr uint32_t correctTicks(uint32_t dTicks, const uint32_t maxValue) {
  return dTicks > maxValue ? maxValue : dTicks;
}

constexpr uint32_t getTicks(const uint32_t frequency, const int8_t prescalerId, const int8_t nTimer) {
  return prescalerId >= timerParameters[nTimer].totalPrescalers ? 0x1FFFFFFF :
  correctTicks(getDesiredTicks(frequency, prescalerId, nTimer), timerParameters[nTimer].maxValue);
}

constexpr uint32_t getBits(const int8_t prescalerId, const int8_t nTimer) {
  return prescalerId >= timerParameters[nTimer].totalPrescalers ? timerParameters[nTimer].totalPrescalers : prescalerId + 1;
}


constexpr int32_t absError(const uint32_t frequency, const int8_t prescalerId, const int8_t nTimer) {
  return abs(prescalerId >= timerParameters[nTimer].totalPrescalers ? 0x1FFFFFFF :
    static_cast<int32_t>(getTicks(frequency, prescalerId, nTimer) * prValue(prescalerId, nTimer)) -
    static_cast<int32_t>(getPeriod(frequency)));
}

constexpr uint8_t getPrescalerId(const uint32_t error, const uint32_t newError, const uint8_t prId, const uint8_t candidate, const uint32_t frequency, const int8_t nTimer) {
  return
  (prId >= timerParameters[nTimer].totalPrescalers) ? candidate
  : getPrescalerId(newError, absError(frequency, prId+1, nTimer), prId+1, (error <= newError) ? candidate : prId, frequency, nTimer);
}

constexpr uint16_t getTimerTicks(const int8_t nTimer, const uint32_t freq) {
  return getTicks(freq, getPrescalerId(0x1FFFFFul, absError(freq, 0, nTimer), 0, 0, freq, nTimer), nTimer);
}

constexpr uint8_t getPrescalerBits(const int8_t nTimer, const uint32_t freq) {
  return getBits(getPrescalerId(0x1FFFFFul, absError(freq, 0, nTimer), 0, 0, freq, nTimer), nTimer);
}

#endif  //  CONSTTIMERS_H

 

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

Без маразма проще

#include "lgtx8p.h"
void setup() {
    TCCR3B = 4;
    OCR3A = 62500; 
 DDRF = 1<<2 | 1<<1;   // Разрешаем вывод в порты D1 и D2 
 TCCR3A=1<<COM3A0 | 1<<COM3B0;  // ПИН D2 + TXI

 pinMode(13,OUTPUT);

 
 }// end-Setup

void loop(){
  digitalWrite(13,!digitalRead(2));
   } // END

 

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

Logik пишет:

Без маразма проще

#include "lgtx8p.h"
void setup() {
    TCCR3B = 4;
    OCR3A = 62500; 
 DDRF = 1<<2 | 1<<1;   // Разрешаем вывод в порты D1 и D2 
 TCCR3A=1<<COM3A0 | 1<<COM3B0;  // ПИН D2 + TXI

 pinMode(13,OUTPUT);

 
 }// end-Setup

void loop(){
  digitalWrite(13,!digitalRead(2));
   } // END

так весь цимес в автоподборе коэффициентов )))

И таки да вы не умеете готовить 16 битный таймер, OCR3A = для WAVGAT не работает

yach_1250
Offline
Зарегистрирован: 24.06.2019

ua6em пишет:

пины разделяемы с таймером и на передающем большая подпора, порядка 1.5 вольта, а это за гранью добра, может в этом проблема?

По поводу пинов и таймера - простите, не совсем понимаю, что вы имеете в виду. Частота же по умолчанию такая же, как на меге - 16МГц, или ее обязательно надо явно предустанавливать?

Для согласования уровней напряжения использую платку на базе TXB0108, с мегой 328 отлично работает.

Кстати, ради интереса написал продавану с алиэкспресса, тот мне скинул обновленный аддон WAVGAT для IDE, в нем сподобились поправить модель МК для уны на правильную (LGT8F328P, а был, если мне память не изменяет, LGT8F328D).

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

yach_1250 пишет:

По поводу пинов и таймера - простите, не совсем понимаю, что вы имеете в виду. Частота же по умолчанию такая же, как на меге - 16МГц, или ее обязательно надо явно предустанавливать?

я не о частоте иду речь, посмотрите осциллограмку здесь но постами ниже #117
Пример таймера, так вот при использовании таймера на пинах серийного порта (они разделяемые) на осциллограмме видна подпорка в шине 1.5 вольта на пине TXI.
Нормируемый уровень логической единицы для 5 вольтовой логики от 2.4 до 5.0 вольта, логического нуля от 0 до 0.9 вольта, 1.5 вольта это как бы и не нуль и не единица, при преобразовании в другие логические уровни можем получить неустойчивые состояния. Может это как раз ваш случай?

yach_1250
Offline
Зарегистрирован: 24.06.2019

О как. Спасибо, не обратил внимания. HopeRF подключяется через SPI, если там такая же беда - причина вполне может быть в этом.

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

yach_1250 пишет:

О как. Спасибо, не обратил внимания. HopeRF подключяется через SPI, если там такая же беда - причина вполне может быть в этом.

схему я не видел, но что-то это подпорку образует )))
Это надо исследовать.

Пришлите пожалуйста ваш новый аддон  (мой ник на яндексе), посмотрю, что за вещь

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

Помогите разобраться !!!

Использую дисплей L2F50  библиотека отсюда http://compcar.ru/forum/showthread.php?t=7237

С платой Wemos XI в которой стоит lgt8f328все работает нормально. Если программу заливаю в "зеленую" плату с lgt8f328P изображение пропадает идут вертикальные полосы с шумом.

Платы рабочие, проверил на вывод информации в "сериал" все проходит корректно. 

kostyamat
Offline
Зарегистрирован: 16.11.2017

Привет. Я откомпилировал скетч, который прекрасно работал на оригинальной Атмега328. И что я вижу?

Я вижу, что функция delay() не работает вообще, а millis() ведет себя очень странно, вместо интервала в 15 секунд, я получаю около 30.

Ребята, как я могу правильно настроить таменги?

Уважаемые Геру, пожалуста, не отсылате к экспериментам на первой странице. Лучше соберите все в один пост кудато, типа - "вот так включать 32Мгц", а вот так "правильные таминги и правильные таймеры при 16, а так при 32-х".

Аддон использовал этот https://github.com/LGTMCU/Larduino_HSP

вот иссуе открыл https://github.com/LGTMCU/Larduino_HSP/issues/4

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

kostyamat пишет:

Ребята, как я могу правильно настроить таменги?

Например тему почитать, все это уже описывалось.

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

Logik пишет:

kostyamat пишет:

Ребята, как я могу правильно настроить таменги?

Например тему почитать, все это уже описывалось.


ты не понял, чел хочет, чтобы ему всё в одну тему вложили )))

kostyamat
Offline
Зарегистрирован: 16.11.2017

ua6em пишет:

Logik пишет:

kostyamat пишет:

Ребята, как я могу правильно настроить таменги?

Например тему почитать, все это уже описывалось.


ты не понял, чел хочет, чтобы ему всё в одну тему вложили )))


,Ну, и что в этом плохого?

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

kostyamat пишет:
ua6em пишет:

Logik пишет:

kostyamat пишет:

Ребята, как я могу правильно настроить таменги?

Например тему почитать, все это уже описывалось.


ты не понял, чел хочет, чтобы ему всё в одну тему вложили )))

,Ну, и что в этом плохого?

даже наоборот, только если бы это вы сами перелопатили весь форум и собрали, даже больше, спасибо народ скажет...
а у меня к примеру всё работает правильно, мне в принципе это даже и не надо

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

ua6em пишет:

а у меня к примеру всё работает правильно, мне в принципе это даже и не надо

Может подскажете по п.200 ?

 http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p?page=3#comment-463387

 

 

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

renoshnik, а что за "зелёная" плата? Платой по-умолчанию в данной теме можно считать плату wavgat nano из топика, по всем остальным нужно писать конкретнее. Модель, производитель, ссылка на продавца итд итп

kostyamat
Offline
Зарегистрирован: 16.11.2017

Если бы я чувствовал в себе скил сделать это, я бы так и сделал. А не просил бы помощи.

Кстати, получил ответ на гитхабе, мантейнер говорит, что версия не до конца совместима. Потому как первый таймер управляет ШИМ, а не так как в оригинальной атмега. Если ШИМ не нужен, предлагает поправленную версию (мне то как раз нужен).
И вы заявляете, что у вас все корректно? Как? Каким аддоном пользуетесь?

Ладно, delay() я могу и свой написать. Как тайминги корректно выставить для millis(), или тупо на два делить прикажите?

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

у меня плата из поста 0

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

dimax пишет:

renoshnik, а что за "зелёная" плата? Платой по-умолчанию в данной теме можно считать плату wavgat nano из топика, по всем остальным нужно писать конкретнее. Модель, производитель, ссылка на продавца итд итп

Понял.

1 - "красная" Wemos XI у продавца ссылка уже не активна, но вот есть обзор

https://arduinoplus.ru/wemos-xi/

2 - "зеленая" XI (LGT) NANO ссылка на продавца

https://ru.aliexpress.com/item/32764817280.html?spm=a2g0s.9042311.0.0.274233edZX9pJ4

Как я понимаю они отличаются только контроллерами в первой LGT8F328D а во второй LGT8F328P 

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

и что ты хочешь? да, на второй плате процессор правильный, а где кварц?

kostyamat
Offline
Зарегистрирован: 16.11.2017

У меня такая плата, и тоже без кварца.
€ 0,72 6%OFF | LGT8F328P-LQFP32 MiniEVB Alternative Arduino Nano V3.0 ATMeag328P HT42B534-1 SOP16 USB Driver Good Quality and Cheap Price
https://s.click.aliexpress.com/e/30GLxZQ1N