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

DeniskaAB
Offline
Зарегистрирован: 19.01.2019

Думаю что не стоит. А те кто разбираются сразу видят что различно и могут помочь. Какая ардуно я написал что такая как описано на старте темы.

asam
Онлайн
Зарегистрирован: 12.12.2018

DeniskaAB пишет:

Думаю что не стоит. А те кто разбираются сразу видят что различно и могут помочь. Какая ардуно я написал что такая как описано на старте темы.

Во первых: "На старте темы" написано - "Обзор клона меги328 -LGT8F328P". И на этом клоне только у меня дома есть 2 довольно отличные друг от друга ардуины. А сколько может их еще существовать?

Во вторых "На старте темы" написано - "Обзор клона меги328 -LGT8F328P", а не "Как мне программировать флеш используя плату на базе LGT8F328P". Так что не стоит засорять этот топик посторонними вопросами.

В третьих гадание на кофейной гуще это в другие форумы. Хотите помощи - давайте подробную информацию о вашей проблеме.

 

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

DeniskaAB пишет:

...те кто разбираются сразу видят что различно и могут помочь.

А оно им надо?

Типичное заблуждение новичка - думать, что другим интересно решать ваши проблемы.

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

progrik пишет:

а как же char far *? до любого адреса дотягивается ведь (в пределах базовых 640КБ точно) и содержит полный 32бит адрес памяти, включая сегмент, а не только кусок в каком-то там сегменте. ...от темы я всех увел)

Не дотягивается, а может дотянутся, если не помешают. Но помешают. При попытке выйти за границу своего сегмента даст ошибку сегментации. Но это не совсем о том. Речь о компиляции. Сразу сущности присутствующие в коде разделяются по секциям. Встретился исполняемый код - помещается машинный код в свою секцию, обявлены новые данные - в свою и т.д. Адресация в каждой секции идет своя, независимая от других, после добавления очередно "порции" адрес соответственно подростает на размер "порции". Вот собственно отчего возникает то различие между указателями на функции и на данные. Таких секций обычно довольно много, даже коменты в свою могут собиратся перед тем как игнорится :) Затем по настройкам линкера эти секции в некотором порядке собираются вместе в сегменты. Для ПК это код и переменные, оба в ОЗУ, понятное дело, но с разными атрибутами, чтоб не исполнять даенные как код и не обращатся к коду как к данным, защита вобщем, но методы находятся;)  Ну а для МК - код в флеш и константы PROGMEM тудаже. А переменные в ОЗУ.  Полезно иногда в файле map посмотреть для общего развития.

hungdk
Offline
Зарегистрирован: 24.03.2018

hi Dimax! I saw you introduce LGT8F328P, I found it to be the same as the nano mode, I asked about the code, if the code is on this device, can I use it with the Arduino? thank you

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

hungdk пишет:
hi Dimax! I saw you introduce LGT8F328P, I found it to be the same as the nano mode, I asked about the code, if the code is on this device, can I use it with the Arduino? thank you

можно ))) #41 как образец использования

Stargazer
Offline
Зарегистрирован: 09.12.2018

dimax пишет:

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

Золотые слова, только покупалось то как "WAVGAT Pro Mini ATMEGA328P" (чтоб они были здоровы...)

Благодаря этой теме хоть как-то задышало, а поначалу был шок :)  Кстати, при аддоне "от wavgat" времянка по millis совпадает (т.е. заветные 16МГц ©), а WDTO_2S срабатывает ровно через 8 секунд (т.е. в 4 раза дольше)

 

 

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

рискну показать результаты своего небольшого теста ADC.

правда я использовал  WEMOS XI LGT8F328D  это немного отличается от сабжа ...

Подопытными будут выступать WEMOS XI LGT8F328D и arduino Pro Mini

Для каждой из плат было проведены замеры четырьмя способами и для каждого способа вычислялось время. Способы и результаты видны на скринах

WEMOS XI

https://a.d-cd.net/X2AAAgDPYuA-1920.jpg

Pro Mini

https://a.d-cd.net/TuAAAgDPYuA-1920.jpg

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

WEMOS XI

https://a.d-cd.net/f2AAAgDPYuA-1920.jpg

 

Pro Mini

https://a.d-cd.net/weAAAgDPYuA-1920.jpg

 

 

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

renoshnik пишет:

рискну показать результаты своего небольшого теста ADC.

хм. а что за сигнал вообще ты измерял? ножку в воздухе?

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

mataor пишет:

renoshnik пишет:

рискну показать результаты своего небольшого теста ADC.

хм. а что за сигнал вообще ты измерял? ножку в воздухе?


Переменный резистор 10кОм, ползунок примерно в среднем положении.

12val12
Offline
Зарегистрирован: 19.02.2019

Здравствуйте .на этом клоне возможно ли вывести полноценный vga(640х480  c частотой точки 25.175Мгц).?

(если пишут  заявлено 32 МГц для питания от 1.8 вольт??!!. то моя чуйка говорит что при 5 вольтах будет работать на  60МГц )

 

 А АЦП интересно  проверять закольцовыванием PWM(DAC)--фильтр--ADC

так проверял на пропуск  (монотонность ?)кодов.. при тактовой ацп меги8 800кГц еще все коды были  ,но с разной вреоятностью

//// (Codevision)-----------------ADC-PWM  loop   -------------------------------------
//ADC_PWM:   
//  DDRD.1=1;    
//  i=0;  pwm_val=50;   
//   Input= FAST_adc(5)  ;   //28 PIN     
//    for ( i=0; i<=1023; i++)  //  target 
//  {       
//     PORTD.0=0;
//     //   for ( iter=1;iter<=50;iter++)          
//     while    (Input !=i )  
//             {    
//             CS=1; // CS=1 chip deselect   
//               delay_ms(200) ;   
//              Input= FAST_adc(5)  ;   //28 PIN            
//             if (Input>i)    { pwm_val--;}
//             if (Input<i)   { pwm_val++;}    
//              if (Input==i)    { PORTD.0=1;}   //  target captured 
//           if    ( pwm_val<0 )  pwm_val=0;     //PWM signed int 
//           if    ( pwm_val>1023 )  pwm_val=1023;     
//                 OCR1BH = (char)(pwm_val>>8);
//                 OCR1BL = (char)pwm_val;
//       CS=0; // CS=0 chip select
//       print_int (0,78,white  , i)  ;   
//       print_int (0,39,yellow, pwm_val )    ;        
//       print_int (0,0, cyan, Input)  ;    
//       }   
//  }
 

 

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

12val12 пишет:

 то моя чуйка говорит что при 5 вольтах будет работать на  60МГц

Чуйка херовая, надо менять, а то попалишся.

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).