Доброго всем! "Понедельник день тяжелый"(с) Решил залить в Iskra_Neo (читай Leonardo) такой вот код: Код (C++): // U_MOTOR - мотор верхнего винта // D_MOTOR - мотор нижнего винта #define U_MOTOR_PIN A0 #define D_MOTOR_PIN A1 void setup() { //оба входа настраиваем на считывание pinMode(U_MOTOR_PIN, INPUT); pinMode(D_MOTOR_PIN, INPUT); } void loop() { long cU, cD; // открываем последовательный порт Serial.begin(115200); // 0 = 0 Вольт, 255 = 5 Вольт (максимальные обороты) cU = analogRead(U_MOTOR_PIN)/51; cD = analogRead(D_MOTOR_PIN)/51; Serial.print(cU); Serial.print(" U_umotor\t"); Serial.print(cD); Serial.print(" D_dmotor\t"); } ..да вот выход из этого всего не предусмотрел... (чуть не забыл! при прошивке программатор был установлен в Arduino as ISP!!! ) теперь Искра не дает загрузить в себя даже Blink. Спойлер: Текст ошибки Sketch uses 4 788 bytes (16%) of program storage space. Maximum is 28 672 bytes. Global variables use 151 bytes (5%) of dynamic memory, leaving 2 409 bytes for local variables. Maximum is 2 560 bytes. Перезагрузка платы открытием/закрытием порта COM5 на 1200bps PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM5, } => {} PORTS {COM5, } / {COM3, } => {COM3, } Found upload port: COM3 C:\Program Files\Arduino/hardware/tools/avr/bin/avrdude -CC:\Program Files\Arduino/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -PCOM3 -b57600 -D -Uflash:w:C:\Temp\build5066821649304159881.tmp/Blink.cpp.hex:i avrdude: Version 6.0.1, compiled on Jan 15 2015 at 16:58:43 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "C:\Program Files\Arduino/hardware/tools/avr/etc/avrdude.conf" Using Port : COM3 Using Programmer : avr109 Overriding Baud Rate : 57600 AVR Part : ATmega32U4 Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PA0 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00 flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : butterfly Description : Atmel AppNote AVR109 Boot Loader Connecting to programmer: . Found programmer: Id = "CATERIN"; type = S Software Version = 1.0; No Hardware Version given. Programmer supports auto addr increment. Programmer supports buffered memory access with buffersize=128 bytes. Programmer supports the following devices: Device code: 0x44 avrdude: devcode selected: 0x44 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9587 avrdude: reading input file "C:\Temp\build5066821649304159881.tmp/Blink.cpp.hex" avrdude: writing flash (4788 bytes): Writing | ################################################## | 100% 0.06s avrdude: 4788 bytes of flash written avrdude: verifying flash memory against C:\Temp\build5066821649304159881.tmp/Blink.cpp.hex: avrdude: load data flash data from input file C:\Temp\build5066821649304159881.tmp/Blink.cpp.hex: avrdude: input file C:\Temp\build5066821649304159881.tmp/Blink.cpp.hex contains 4788 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.05s avrdude: verifying ... avrdude: verification error, first mismatch at byte 0x0000 0x00 != 0x0c avrdude: verification error; content mismatch avrdude done. Thank you. Есть методы какие-нибудь как все это безобразие остановить/исправить? "Признаю себя ослом и жду ваших распоряжений"(с)Треллони вдогонку: можно ли прошить загрузчик в Neo через usb-serial или еще хитрее через iskra mini, подключенную через usb-serial адаптер?
из loop выходить никогда не нужно (это идеология Arduino). Прошить загрузчик можно по ICSP любым программатором или через другую Arduino. На всякий случай: загрузчик в Leonardo активируется однократным или двукратным нажатием Reset.
Простите за вмешательство... но в рабочем цикле: Код (C++): // открываем последовательный порт Serial.begin(115200); по моему каждый раз отрывать порт..... Если это не ставить в setup а оставить в loop похоже будет повторяться сие недоразумение. Ещё раз простите!
Serial.begin() вынести в setup и добавить небольшую задержку между итерациями если нет необходимости получать десяток тысяч символов в секунду.
а как теперь перепрошить-то? не дает даже блинк залить...может это загрузчик повредился/слетел из-за того, что при заливке скетча был выбран программатором (поспешил-недосмотрел) Arduino as ISP? два раза подряд надо нажать или как? (однократно нажимал - все вариации = безрезультатно) можно ли сделать из Искра мини программатор? оказывается можно: http://justforduino.blogspot.ru/2015/08/avr-arduino-pro-mini.html
загрузчик на Neo восстановлен через Искру мини, все как в статье вышеуказанной, только на Neo спользован разъем ISP Код (C++): Iskra Mini --- Iskra Neo GND -------- GND VCC +5В --- VIN D10 --- Reset D11 --- MOSI D12 --- MISO D13 --- SCLK схема наглядно - в приложенном файле. Код переделал, теперь вот так: Код (C++): // U_MOTOR - мотор верхнего винта // D_MOTOR - мотор нижнего винта #define U_MOTOR_PIN A0 #define D_MOTOR_PIN A1 void setup() { //оба входа настраиваем на считывание pinMode(U_MOTOR_PIN, INPUT); pinMode(D_MOTOR_PIN, INPUT); // открываем последовательный порт Serial.begin(115200); } void loop() { long cU, cD; if (Serial.available()) { // 0 = 0 Вольт, 255 = 5 Вольт (максимальные обороты) cU = analogRead(U_MOTOR_PIN)/51; cD = analogRead(D_MOTOR_PIN)/51; Serial.print(cU); Serial.print(" U_umotor "); Serial.print(cD); Serial.println(" D_dmotor "); delay(100); } }
Так и было: проект был загружен, испытан, после чего Iskra Neo перестала отображаться в диспетчере устройств... (не сообразил, что не зря разность потенциалов на контактах коллекторного движка -3.7В, хотя по обозначениям должно было быть +3.7В, в итоге на Gnd Ардуинки подано было примерно -3.7 Вольт) Выход был найден нетривиальным способом: дело в том, что по двойному нажатию резета (клац-клац) Iskra Neo ненадолго появлялась в диспетчере устройств на каком-то порте в виде Leonardo bootloader (COM X), где Х - номер порта. Решено было попытаться прошить Ардуинку пустым скетчем пока она видна (1-2 секунды), для чего было установлено на каком порту появляется устройство, затем в Arduino IDE было выставлены параметры платы и порт (благо IDE запоминает порт, если на нем хоть что-то засветилось). Затем был скомпилирован пустой стандартный скетч (который отображается на старте) и сразу по двойному нажатию резета (клац-клац) скетч был отправлен в Ардуинку, однако она успела погаснуть в диспетчере и пришлось тут же еще два раза клацнуть по резету.. и "О, Чудо!" прошилась! Ардуинка переселилась на другой порт и теперь уже не исчезает, значит жива...(тут же был прошит Blink, как символ победы жизни над смертью в плоскости компьютерных систем, разумеется). и слава Богу!