Nano Every на чипе mega4808

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Ясно. Я уже писал выше что исходя из схемы не видно цепи для автоматизации подачи сигнала Reset как на обычных UNO на 328P(PB).

alex_r61
Offline
Зарегистрирован: 20.06.2012

 МК интересный, но с этой платой китайцы что-то перемудрили. Лучше свои делать, огород с USB-TTL и мс переходника в реальных проектах не нужен.

alex_r61
Offline
Зарегистрирован: 20.06.2012

 В общем разобрался. Проблема в jtag2updi и Serial1, они пишут, что если быстро занимается порт то .... в общем .опа. Вот так работает нормально, без Reset:

/*
  Blink
  Addon Thinary Nano Every
  Reg.  None(ATMEGA4808)
  Out:
  Serial  D2(TX0) D3(RX0)
  Serial1 TX1 RX1
  Serial2 none
*/

uint8_t ct = 0;

void setup() {
  delay(2000);
  PORTC.DIR = PORTC.DIR | PIN2_bm;
  Serial.begin(19200);
//  Serial1.begin(19200);
//  Serial2.begin(19200);
  delay(300);
  Serial.println("Blink");
//  Serial1.println("Blink1");
//  Serial2.println("Blink2");
}

void loop() {
//  digitalWrite(led, HIGH);
  PORTC.OUT &= ~PIN2_bm;
  delay(990);                
//  digitalWrite(led, LOW);
  PORTC.OUT |= PIN2_bm;
  delay(10);               
  ct++;
  if(ct > 4) {
    Serial.println("Blink");
//    Serial1.println("Blink1");
    ct = 0;
  }
//  Serial1.println("Blink2");
}

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

 А так можно просто нажать Reset, затем загрузку.

/*
  Blink
  Addon Thinary Nano Every
  Reg.  None(ATMEGA4808)
  Out:
  Serial  D2(TX0) D3(RX0)
  Serial1 TX1 RX1
  Serial2 none
*/

uint8_t ct = 0;

void setup() {
  PORTC.DIR = PORTC.DIR | PIN2_bm;
  Serial.begin(19200);
//  Serial1.begin(19200);
//  Serial2.begin(19200);
  delay(300);
  Serial.println("Blink");

  delay(15000);             // офигеть...еть..ть.ь
  Serial1.begin(19200);
  delay(300);
  Serial1.println("Blink1");
//  Serial2.println("Blink2");
}

void loop() {
  PORTC.OUT &= ~PIN2_bm;
  delay(990);                
  PORTC.OUT |= PIN2_bm;
  delay(10);               
  ct++;
  if(ct > 4) {
    Serial.println("Blink");
    Serial1.println("Blink1");
    ct = 0;
  }
//  Serial1.println("Blink2");
}

 

slavagrishko
Offline
Зарегистрирован: 15.02.2020

Что-то у меня не получается ничего.

Все скетчи, которые Вы alex_r61, написали, попробовал. Никакой реакции платы. В тот момент, когда начинается загрузка ранее всегда по крайней мере однократно моргал синий светодиод. Сейчас вообще молчит. Только постоянно горят красный и зеленый. если наживаю Resert - при нажатой кнопке гаснет красный, отпуска. - снова загорается.

Во время загрузки, когда долго висит на строке 

     Overriding Baud Rate          : 115200

 пробовал нажимать Reset - сразу выскакивает следующее

JTAG ICE mkII sign-on message:
Communications protocol version: 1
M_MCU:
  boot-loader FW version:        1
  firmware version:              6.00
  hardware version:              1
S_MCU:
  boot-loader FW version:        1
  firmware version:              6.00
  hardware version:              1
Serial number:                   0a:0b:0c:0d:0e:0f
Device ID:                       Thinary mkII
         AVR Part                      : ATmega4808
         Chip Erase delay              : 0 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 0
         StabDelay                     : 0
         CmdexeDelay                   : 0
         SyncLoops                     : 0
         ByteDelay                     : 0
         PollIndex                     : 0
         PollValue                     : 0x00
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           prodsig        0     0     0    0 no         61   61      0     0     0 0x00 0x00
           fuses          0     0     0    0 no          9    0      0     0     0 0x00 0x00
           fuse0          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse1          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse2          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse4          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse5          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse6          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse7          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           fuse8          0     0     0    0 no          1    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0     0     0 0x00 0x00
           data           0     0     0    0 no          0    0      0     0     0 0x00 0x00
           usersig        0     0     0    0 no         64   64      0     0     0 0x00 0x00
           flash          0     0     0    0 no      49152  128      0     0     0 0x00 0x00
           eeprom         0     0     0    0 no        256   64      0     0     0 0x00 0x00

         Programmer Type : JTAGMKII_PDI
         Description     : JTAGv2 to UPDI bridge
         M_MCU hardware version: 1
         M_MCU firmware version: 6.00
         S_MCU hardware version: 1
         S_MCU firmware version: 6.00
         Serial number:          0a:0b:0c:0d:0e:0f
         Vtarget         : 5.0 V

Произошла ошибка при загрузке скетча
avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description
avrdude: jtagmkII_reset(): bad response to reset command: RSP_ILLEGAL_MCU_STATE
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: jtagmkII_close(): bad response to sign-off command: RSP_ILLEGAL_MCU_STATE

avrdude done.  Thank you.
 

Может я плату загубил?

slavagrishko
Offline
Зарегистрирован: 15.02.2020

На второй такой же плате все работает - по последнему скетчу - моргает светодиод (красный) и в мониторе порта пишется "blink1" приблизительно раз в 4 сек (ну, выполняется скетч).

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

По идее надо кратковременно нажать RESET когда появляется надпись - Перезагрузка платы открытием/закрытием порта COM13 на 1200bps

slavagrishko
Offline
Зарегистрирован: 15.02.2020

Теперь еще одна напасть...

Отключил плату Thinary Nano Every (с порта 13). Подключил старую добрую UNO на порт COM8. В IDE выбрал Arduino UNO. А в выборе порта пишется COM8(Thinary Nano Every). Скетчи в UNO не грузятся

https://yadi.sk/d/YPlwoVkUTFHc7A

 

Feofan
Offline
Зарегистрирован: 28.05.2017

 1-й 2-й мне помогало. возможно придется переставить драйвера.

slavagrishko
Offline
Зарегистрирован: 15.02.2020

Драйвера чего возможно придется переставить? Редактирование реестра ничего не дало.

Feofan
Offline
Зарегистрирован: 28.05.2017

В устройствах скрытые COM'ы удаляли? Была схожая ситуация, пере...сь com-порты. Удалил все скрытые, в реестре очистил содержимое ComDB по всем веткам CurrentControlSetxxx - нормализовалось. Когда удаляете скрытые COM'ы в устройствах windows предлагает удалить драйвера.

 
Vergily
Offline
Зарегистрирован: 01.09.2020

Спасибо за тему

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

 Теперь не могу подружить с дисплеем oled ssd1306 128x64

подключил SCL -> A5, SDA -> A4

Проблема 1:

при компиляции

C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:65:5: error: 'TWSR' was not declared in this scope
     TWSR = 0;
     ^~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:65:5: note: suggested alternative: 'TWI0'
     TWSR = 0;
     ^~~~
     TWI0
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h: In member function 'uint8_t AvrI2c::read(bool)':
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:19: error: 'TWINT' was not declared in this scope
     execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
                   ^~~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:19: note: suggested alternative: 'TWI_t'
     execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
                   ^~~~~
                   TWI_t
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:34: error: 'TWEN' was not declared in this scope
     execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
                                  ^~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:34: note: suggested alternative: 'TWI0'
     execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
                                  ^~~~
                                  TWI0

И т.д.

 

Проблема 2:

С каким-то вариантом библиотеки скомпилировалось, но дисплей не реагирует (адрес 0x3C)

Даже не понимаю с чего начать.

 

 

 

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

А библиотека дисплея  "обычная" или специально портированная под 4808? - по ошибкам похоже, что либа под обычную ардуину, а для 4808 нужны, видимо, другие имена регистров I2c

Vergily
Offline
Зарегистрирован: 01.09.2020

Когда устанавливаешь плату по ссылке -  https://github.com/Thinary/ThinaryArduino библиотеки есть и файл переназначения портов

 

Вообще поделитесь тогда опытом, кто что использовал для дисплея?

и насколько критично это сообщение?

ПРЕДУПРЕЖДЕНИЕ: библиотека Wire должна запускаться на архитектурах megaavr и может быть несовместима с вашей платой на архитектуре avr.

 

Вот вывод компилятора с библиотекой SSD1306Ascii

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\user\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\user\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\user\Documents\Arduino\libraries -fqbn=thinary:avr:nona4808:mode=off -vid-pid=1A86_7523 -ide-version=10813 -build-path C:\Users\user\AppData\Local\Temp\arduino_build_442786 -warnings=default -build-cache C:\Users\user\AppData\Local\Temp\arduino_cache_234570 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino16 -prefs=runtime.tools.avrdude-6.3.0-arduino16.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino16 -prefs=runtime.tools.avr-gcc.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.arduinoOTA.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\examples\Wire128x64\Wire128x64.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\user\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\user\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\user\Documents\Arduino\libraries -fqbn=thinary:avr:nona4808:mode=off -vid-pid=1A86_7523 -ide-version=10813 -build-path C:\Users\user\AppData\Local\Temp\arduino_build_442786 -warnings=default -build-cache C:\Users\user\AppData\Local\Temp\arduino_cache_234570 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino16 -prefs=runtime.tools.avrdude-6.3.0-arduino16.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino16 -prefs=runtime.tools.avr-gcc.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.arduinoOTA.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\user\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\examples\Wire128x64\Wire128x64.ino
Using board 'nona4808' from platform in folder: C:\Users\user\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0
Using core 'arduino' from platform in folder: C:\Users\user\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0
Detecting libraries used...
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4808 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_AVR -DMILLIS_USE_TIMERB2 -DNO_EXTERNAL_I2C_PULLUP "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino/api/deprecated" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\variants\\nona4808" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
  -> candidates: [Wire@1.0]
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4808 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_AVR -DMILLIS_USE_TIMERB2 -DNO_EXTERNAL_I2C_PULLUP "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino/api/deprecated" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\variants\\nona4808" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\libraries\\Wire\\src" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for SSD1306Ascii.h: [SSD1306Ascii@1.3.0]
ResolveLibrary(SSD1306Ascii.h)
  -> candidates: [SSD1306Ascii@1.3.0]
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4808 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_AVR -DMILLIS_USE_TIMERB2 -DNO_EXTERNAL_I2C_PULLUP "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino/api/deprecated" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\variants\\nona4808" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\libraries\\Wire\\src" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\SSD1306Ascii\\src" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Using cached library dependencies for file: C:\Users\user\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\libraries\Wire\src\Wire.cpp
Using cached library dependencies for file: C:\Users\user\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\libraries\Wire\src\utility\twi.c
Using cached library dependencies for file: C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src\SSD1306Ascii.cpp
ПРЕДУПРЕЖДЕНИЕ: библиотека Wire должна запускаться на архитектурах megaavr и может быть несовместима с вашей платой на архитектуре avr.
Generating function prototypes...
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4808 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_AVR -DMILLIS_USE_TIMERB2 -DNO_EXTERNAL_I2C_PULLUP "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino/api/deprecated" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\variants\\nona4808" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\libraries\\Wire\\src" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\SSD1306Ascii\\src" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp" -o "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\preproc\\ctags_target_for_gcc_minus_e.cpp" -DARDUINO_LIB_DISCOVERY_PHASE
"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Компиляция скетча...
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega4808 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_AVR -DMILLIS_USE_TIMERB2 -DNO_EXTERNAL_I2C_PULLUP "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino/api/deprecated" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\cores\\arduino" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\variants\\nona4808" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\thinary\\hardware\\avr\\1.0.0\\libraries\\Wire\\src" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\SSD1306Ascii\\src" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp" -o "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp.o"
Compiling libraries...
Compiling library "Wire"
Используем предварительно скомпилированный файл: C:\Users\user\AppData\Local\Temp\arduino_build_442786\libraries\Wire\Wire.cpp.o
Используем предварительно скомпилированный файл: C:\Users\user\AppData\Local\Temp\arduino_build_442786\libraries\Wire\utility\twi.c.o
Compiling library "SSD1306Ascii"
Используем предварительно скомпилированный файл: C:\Users\user\AppData\Local\Temp\arduino_build_442786\libraries\SSD1306Ascii\SSD1306Ascii.cpp.o
Compiling core...
Используем предварительно скомпилированный файл: C:\Users\user\AppData\Local\Temp\arduino_build_442786\core\variant.c.o
Using precompiled core: C:\Users\user\AppData\Local\Temp\arduino_cache_234570\core\core_thinary_avr_nona4808_mode_off_e1a3c3e4296e137a0aaf99c80f0c2357.a
Linking everything together...
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-gcc" -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -Wl,--section-start=.text=0x0 -mmcu=atmega4808 -o "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.elf" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\sketch\\Wire128x64.ino.cpp.o" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\libraries\\Wire\\Wire.cpp.o" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\libraries\\Wire\\utility\\twi.c.o" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\libraries\\SSD1306Ascii\\SSD1306Ascii.cpp.o" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786\\core\\variant.c.o" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/..\\arduino_cache_234570\\core\\core_thinary_avr_nona4808_mode_off_e1a3c3e4296e137a0aaf99c80f0c2357.a" "-LC:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786" -lm
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-objcopy" -O binary -R .eeprom "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.elf" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.bin"
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.elf" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.eep"
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.elf" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.hex"
Используем библиотеку Wire версии 1.0 из папки: C:\Users\user\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\libraries\Wire 
Используем библиотеку SSD1306Ascii версии 1.3.0 из папки: C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii 
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-size" -A "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_442786/Wire128x64.ino.elf"
Скетч использует 5504 байт (11%) памяти устройства. Всего доступно 49152 байт.
Глобальные переменные используют 349 байт (5%) динамической памяти, оставляя 5795 байт для локальных переменных. Максимум: 6144 байт.

Все подлинковалось из нужных вроде мест библиотеки для платы из папки Thinary от кетайцев

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

Vergily пишет:

С каким-то вариантом библиотеки скомпилировалось, но дисплей не реагирует (адрес 0x3C)

Даже не понимаю с чего начать.

начните с запуска скрипта I2C-scaner -смотрите в примерах к библиотеке Wire. Если дисплей не виден в сканере - искать другие библиотеки экрана бесполезно, проблема на системном уровне

Vergily
Offline
Зарегистрирован: 01.09.2020

i2c сканер завис на первой итерации цикла где-то в районе   error = Wire.endTransmission(); без отладчика грустно


// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#include <Wire.h>
//#define Serial Serial1
void setup()
{  delay(2000);
  PORTC.DIR = PORTC.DIR | PIN2_bm;
  Serial1.begin(115200);
  delay(300);
  Serial1.println("Serial 1 ready: \n");
  Wire.begin();   
}

void loop()
{
  byte error, address;
  int nDevices;
  Serial1.println("Scanning...");

  nDevices = 0;
  for (address = 1; address < 127; address++ )
  {
    Serial1.println(address, HEX);
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
     Serial1.println("beginTransmission");
    error = Wire.endTransmission();
    Serial1.println("endTransmission");
    if (error == 0)
    {
      Serial1.print("I2C device found at address 0x");
      if (address < 16)
        Serial1.print("0");
      Serial1.print(address, HEX);
      Serial1.println("  !");
      nDevices++;
    }
    else if (error == 4)
    { Serial1.print("Unknown error at address 0x");
      if (address < 16)
        Serial1.print("0");
      Serial1.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial1.println("No I2C devices found\n");
  else
    Serial1.println("done\n");
  delay(5000);           // wait 5 seconds for next scan
 }

 

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

Vergily пишет:

i2c сканер завис на первой итерации цикла где-то в районе   error = Wire.endTransmission(); без отладчика грустно

Код сканера откуда брали? - нужно брать из папки библиотеки для вашей версии платы

Судя по комментам в начале кода - это версия для старых атмелов

Vergily
Offline
Зарегистрирован: 01.09.2020

для этой версии нет сканера, хотя на вскидку там алгоритм простой: Просто в цикле start и endTransmission.

Что-то с библиотекой китайской wire или  twi.

Vergily
Offline
Зарегистрирован: 01.09.2020

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

Суть в следующем.

1. Работа с Serial.

В библиотеки для платы https://github.com/Thinary/ThinaryArduino

в файле /Thinary-megaavr/variants/nona4808/pins_arduino.h расписаны все порты:

// SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
// SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
// SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
// SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
// SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX pins are NOT connected to anything by default.

SERIAL_PORT_MONITOR       Serial
SERIAL_PORT_HARDWARE      Serial1
SERIAL_PORT_USBVIRTUAL    Serial

--распиновка--

Serial  D2(TX0) D3(RX0)
Serial1 TX1 (D1) RX1(D0) (USB)
Serial2 none

То есть работаем с Serial1

2. Заливка прошивки. Пока UART занят, прошивка не заливается и нужно нажимать кратковременно кнопку reset на плате либо удерживать до начала загрузки, а потом вовремя отпустить. А иногда не надо и заливается прошивка норм (это бесит)

3. Все хозяйство от платы лежит C:\Users\%username%\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0

реализация библиотек EEPROM HID SoftwareSerial Wire и SPI под нашу плату

Соответственно, если во внешний библиотеках используется своя реализация этих вещей , то под плату ничего не скомпилируется. Это существенно ограничивает свободу творчества, но повышает уровень зад...орства.

4. Распиновка

По даташиту Microchip TWI у чипа 4808 имеет фичу:  
 Independent Master and Slave operation
  – Combined (same pins) or Dual mode (separate pins)
  – Single or multi-master bus operation with full arbitration support
Открываем C:\Users\%username%\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\variants\nona4808\pins_arduino.h
 А там вся распиновка
 Для Dual mode (separate pins)
 SDA  это пины D4 и D18(A4)
 SCL  это пины D5 и D19(A5)
 То есть у Thinary board EVERY NANO пины самого чипа Atmega4808 PF2 и PF3 распаяны на  A4 и A5 .  Это TWIS (Slave) pins.
 А TWIM (Master) pins PA2, PA3 распаяны на D4 и D5.
Поэтому при использовании библиотеки Thinary Wire (as Master) подцепляем SDA к PA2 (D4) и SCL к PA3 (D5).
(спасибо ребятам https://www.avrfreaks.net/forum/split-nano-every-use-atmega4808)

На этом месте я вообще запутался, потому что не изучил еще как что должно работать под капотом всех этих библиотек. НО

5. Подключаем дисплей I2C

I2C дисплей типаSSD1306  подключился SDA к D4 и SCL к D5 и с библиотекой U8G2 все заработало!

#include <Arduino.h>
#include <U8x8lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif

// Please UNCOMMENT one of the contructor lines below
// U8x8 Contructor List
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected

U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE);  

// End of constructor list
void setup(void)
{
  /* U8g2 Project: SSD1306 Test Board */
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  digitalWrite(5, 0);
  digitalWrite(4, 0);    
 
  u8x8.begin();
  u8x8.setPowerSave(0);
}
void loop(void)
{
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  u8x8.drawString(0,0,"Hello World!");
  u8x8.refreshDisplay();        // only required for SSD1606/7  
  delay(2000);
}

 

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

Хм, а зачем нужен СофтСериал на чипе, у которого аж 4 аппаратных USART интерфейса?(если я правильно прочитал описание на сайте Микрочип)

Vergily
Offline
Зарегистрирован: 01.09.2020

Сначала вообще не понятно было как хоть какой-то serial запустить. Хоть хард , хоть софт

Теперь более-менее понятно

SERIAL_PORT_MONITOR       Serial
SERIAL_PORT_HARDWARE      Serial1
SERIAL_PORT_USBVIRTUAL    Serial

Vergily
Offline
Зарегистрирован: 01.09.2020

Подскажите еще, плз.

Подключаю к этой железке модуль GPS к ногам tx и rx. Это у нас судя по всему Serial1

Что-то не выходит каменный цветок. Получается что кабель USB тоже использует этот же Serial1.

Никогда раньше не работал с несколькими Serial

Мне нужно мониторить com-порт  чтоб видеть показания модуля GPS ну и чтоб сам модуль обменивался данными с платой.

Как правильно все сделать?

 

 

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

Vergily пишет:

Как правильно все сделать?

очевидно - подключить GPS ни к тому порту, на котором USB. а к другому. соответвенно и ноги rx tx будут другие. Какие - я не знаю, смотрите описание платы

Vergily
Offline
Зарегистрирован: 01.09.2020

Сделал распиновку платы (выложил еще на avrfreaks.net , но там глухо). Можете посмотреть что не так или что добавить. Не знаю про управлениями прерываниями, таймеры. Может с ШИМ напутал. потому что в ядре указаны пины как на картинке, а в даташите на микросхему совсем другие.

Кто разбирался - пишите. Думаю это будет полезно.

Исходники картинки тут https://github.com/Robotvasya/thinary-nano-every

pauk_ln
Offline
Зарегистрирован: 14.07.2021

Приветствую уважаемых форумчан. Прошу помощи с такой же платой, не могу запустить на ней диммер с детектором нуля.Понимаю что проблема в таймерах. Поделитесь библиотекой пожалуйста. В датташит прошу не посылать, я там был, для меня это тёмный лес. Сам скеч прикладываю.

 

/*
https://raw.githubusercontent.com/Thinary/ThinaryArduino/master/Thinary-...
Ссылка на загрузчик плат
/*
   Диммер переменки на Arduino. 6 каналов для полной прожарки
   На меге работает
*/
#include <EEPROM.h>
#include <Watchdog.h>
// ***** I2C дисплей *****
#include <LiquidCrystal_I2C.h> // https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#define cols 20
#define rows 4
LiquidCrystal_I2C lcd(0x27, cols, rows);

// подключаем кучу выходов на симисторы
#define dimPin1 4
#define dimPin2 5
#define dimPin3 6

#define zeroPin 2
#define counterPin 3
#include <TimerOne.h>

volatile byte tic, Dimmer1 = 20, Dimmer2 = 50, Dimmer3 = 200;     // Переменные для управления нагрузкой
volatile int counterWater = 0;                                    // Переменная для хранения протока


void setup()
{
  wdt_disable();                          // бесполезная строка до которой не доходит выполнение при bootloop
 
  lcd.begin();
  lcd.backlight();  

  pinMode(dimPin1, OUTPUT);
  digitalWrite(dimPin1, 0);
  pinMode(dimPin2, OUTPUT);
  digitalWrite(dimPin2, 0);
  pinMode(dimPin3, OUTPUT);
  digitalWrite(dimPin3, 0);

  pinMode(zeroPin, INPUT);                    // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
  pinMode(counterPin, INPUT);                 // настраиваем порт на вход для отслеживания изменения состояния протока воды
  attachInterrupt(0, detect_up, FALLING);     // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
  attachInterrupt(1, counter_Water, CHANGE);  // настроить срабатывание прерывания interrupt1 на pin 3 на изменение

  Timer1.initialize(40);                      // Интервал срабатывания таймера в мкс
  Timer1.attachInterrupt(timer_interrupt);    //будет вызыватся каждый раз при отсчете заданого времени
  Timer1.stop();

  delay(30000);                               // Задержка, чтобы было время перепрошить устройство в случае bootloop

  Serial1.begin(9600);
  wdt_enable (WDTO_8S);                       // Для тестов не рекомендуется устанавливать значение менее 8 сек.
}

void loop() {
  wdt_reset();
  lcd.clear();
  lcd.print("It's just a demo");
 
  /*
    раскомментировать для ввода числа диммирования чеерез монитор порта
    while (Serial1.available()) {
    Dimmer11 = Serial1.parseInt();
    Serial1.println(Dimmer11);
    }
  */
}

void counter_Water() {
  counterWater++;
}

//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
void timer_interrupt() {       // прерывания таймера срабатывают каждые 40 мкс
  tic++;                       // счетчик
  if (tic > Dimmer1)            // если настало время включать ток
    digitalWrite(dimPin1, 1);   // врубить ток
  if (tic > Dimmer2)            // если настало время включать ток
    digitalWrite(dimPin2, 1);   // врубить ток
  if (tic > Dimmer3)            // если настало время включать ток
    digitalWrite(dimPin3, 1);   // врубить ток

}

void  detect_up() {    // обработка внешнего прерывания на пересекание нуля снизу
  tic = 0;                                  // обнулить счетчик
  Timer1.restart();                           // перезапустить таймер
  attachInterrupt(0, detect_down, RISING);  // перенастроить прерывание
}

void  detect_down() {  // обработка внешнего прерывания на пересекание нуля сверху
  tic = 0;                                  // обнулить счетчик
  Timer1.stop();                             // остановить таймер
  digitalWrite(dimPin1, 0);                  // вырубить ток
  digitalWrite(dimPin2, 0);                  // вырубить ток
  digitalWrite(dimPin3, 0);                  // вырубить ток
 
  attachInterrupt(0, detect_up, FALLING);   // перенастроить прерывание
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------

С библиотекой https://github.com/Kees-van-der-Oord/Arduino-Nano-Every-Timer-Controller-B подружить так и не получилось. Потому слёзно прошу помощи.