Перейти к содержанию

Намоточный станок на Arduino версия 2.0


Рекомендуемые сообщения

09.11.2019 в 09:39, bykowina сказал:

Обмотки двигателя требуют какой то ориентации.? Как их павильно сфазировать.? Методом тыка, т е последовательным перебором? 

Обмоток в таких ШД всего две, то есть вариантов подключения то же ровно 2. От этого будет зависеть направление вращения. Если не устраивает, то меняете местами обмотки.

1 час назад, Mech51 сказал:

А если применить драйверы TB6600, то я понимаю, что эти перемычки не нужны и шаг надо устанавливать на самом драйвере?

Да, так.

У TB6600 есть микропереключатели, табличка назначений приведена на корпусе.

Ссылка на комментарий
Поделиться на другие сайты

Приветствую всех!

Собрал и тестирую данный станок.

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

При минимальном значении stepmul очень долго приходится крутить энкодер, а при значении 200( один оборот) укладчик перемещается быстро и проскакивает положение первого витка.Это касается если провод очень тонкий. 

Удобнее было использовать две кнопки: 1- движение укладчика влево. 2- движение укладчика вправо. 

 

И второй момент- при завершении намотки последнего витка происходит остановка двигателя приемной катушки с последующим снятием его с удержания. Я думаю, что лучше не снимать его с удержания т.к  витки могут сползти.

 

Изменено пользователем evkuch
корректировка
Ссылка на комментарий
Поделиться на другие сайты

Собрал сегодня схему, залил скетч, дисплей не горит. 

Завтра все проверю на свежую голову. 

 

Изменено пользователем bykowina
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Скрытый текст

#define ENC_CLK   2 // Даем имена номерам пинов
#define ENC_SW    3
#define STEP_Z    4 
#define ENC_DT    5 
#define DIR_Z     7
#define EN_STEP   8
#define BUZZ_OUT  10
#define STOP_BT   11
#define STEP_A    12
#define DIR_A     13
#define RS        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19
 

Здравствуйте! Для  подключения дисплея по I2C определения пинов для параллельного подключения оставлять, или их лучше закомментировать?

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

31 минуту назад, Mech51 сказал:
  Показать содержимое

#define ENC_CLK   2 // Даем имена номерам пинов
#define ENC_SW    3
#define STEP_Z    4 
#define ENC_DT    5 
#define DIR_Z     7
#define EN_STEP   8
#define BUZZ_OUT  10
#define STOP_BT   11
#define STEP_A    12
#define DIR_A     13
#define RS        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19
 

Здравствуйте! Для  подключения дисплея по I2C определения пинов для параллельного подключения оставлять, или их лучше закомментировать?

Подключил дисплей по I2C. дисплей засветился, естественно ничего кроме квадратиков не отображает. Возникает подобный вопрос.

"Вернуть к варианту 1602 I2C в текущей версии ПО все еще возможно, раскомментировав нужные строчки:

 

#include <LiquidCrystal.h>

//#include <LiquidCrystal_I2C.h>

//#include <Wire.h>

 

LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD

//LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки

 

lcd.begin(20,4); // Инициализация LCD Дисплей 20 символов 4 строки  

// lcd.begin(16,2); // Инициализация LCD Дисплей 16 символов 2 строки

"

Раскомментировать, значит убрать двойной бэкслеж?

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Простите за назойливость. Я полный ноль в Ардуино. В моем возрасте осваивать что то новое очень большая проблема. Доходит как до жирафа. 

Какие строки надо закоментировать, те которые в моей сноске не закоментированы?

Спасибо. 

 

//#include <LiquidCrystal.h>

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

 

//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD

LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки

 

//lcd.begin(20,4); // Инициализация LCD Дисплей 20 символов 4 строки  

 lcd.begin(16,2); // Инициализация LCD Дисплей 16 символов 2 строки

 

Должно быть вот так?

 

Вот сообщение об ошибке компиляции

 

"Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Uno"

C:\Users\Garry\Arduino_winding_machine_21b_i2c\Arduino_winding_machine_21b_i2c.ino:39:31: fatal error: LiquidCrystal_I2C.h: No such file or directory

 #include <LiquidCrystal_I2C.h>

                               ^

compilation terminated.

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции""

 

 

Кажется понял в чем дело. Нет файла  LiquidCrystal_I2C.h.  

Изменено пользователем bykowina
Ссылка на комментарий
Поделиться на другие сайты

	[code]
//#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
	

//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD 
LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 I2C адрес для PCF8574AT, дисплей 16 символов 2 строки 

  //lcd.begin(20,4);                                                            // Инициализация LCD Дисплей 20 символов 4 строки   
  lcd.begin(16,2);                                                              // Инициализация LCD Дисплей 16 символов 2 строки                                                              
	

Вот, надо найти эти строчки в скетче и сделать их так.

Ссылка на комментарий
Поделиться на другие сайты

38 минут назад, bykowina сказал:

"Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Uno"

C:\Users\Garry\Arduino_winding_machine_21b_i2c\Arduino_winding_machine_21b_i2c.ino:39:31: fatal error: LiquidCrystal_I2C.h: No such file or directory

 #include <LiquidCrystal_I2C.h>

                               ^

compilation terminated.

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Я так и сделал. Выдает вот такую ошибку.

Я отредактировал файл и сохранил его под другим именем. Может здесь я что то не так сделал. 

Пытаюсь загрузить скетч от первой версии выдаёт ту же ошибку. Нет библиотеки I2C. 

Изменено пользователем bykowina
Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Mech51 сказал:

Здравствуйте! Для  подключения дисплея по I2C определения пинов для параллельного подключения оставлять, или их лучше закомментировать?

Можно оставить как есть. Нужно проверить в работе. Я сейчас только с полубайтовым подключением экспериментирую.

1 час назад, bykowina сказал:

Я так и сделал. Выдает вот такую ошибку.

Да, нужно установить библиотеку LiquidCrystal_I2C.h

Делается это в менеджере библиотек. Скопируйте название LiquidCrystal_I2C в строку поиска, должно получиться как то так:

964736439_.png.b11d922c5162c3c4084b784f3f6ebe8f.pngspacer.png

Изменено пользователем TDA
Ссылка на комментарий
Поделиться на другие сайты

Библиотеку установил, скетч залил в Ардуино, на экране верхний ряд черных квадратов, самый последний символ просто  горизонтальные полосы. Что то подобное было описано в первой теме. Подключение проверял, библиотеку менял. Подключил дисплей непосредственно к Адруинке без энкодера. Увы все тоже самое. 

Ссылка на комментарий
Поделиться на другие сайты

11 минут назад, bykowina сказал:

Подключил дисплей непосредственно к Адруинке без энкодера. Увы все тоже самое. 

А почему не хотите полубайтовое подключение использовать? Это будет лучше.

Ссылка на комментарий
Поделиться на другие сайты

квадратики прорисовываются в двух случая - дисплей не запущен или не отрегулирована контрастность. Что происходит при кручении потенциометра?

Ссылка на комментарий
Поделиться на другие сайты

Завтра попробую покрутить. При подключении 12В квадратики полностью черные, при подключении ЮСБ все немного блеклые а последний три или четыре горизонтальные полосы. 

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

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

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, bykowina сказал:

При подключении 12В квадратики полностью черные, при подключении ЮСБ все немного блеклые а последний три или четыре горизонтальные полосы. 

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

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

12В надеюсь не напрямую к LCD? 

Странно, подсветка должна загораться сразу после подключения 5В питания даже без сигнальных.

Энкодер это просто замыкающие контакты, электрически их повредить сложно.

Квадратики на первой строчки значат, что дисплей не инициализирован. Это либо неправильное подключение или при использовании I2C не тот адрес. Какая у вас микросхема на I2C модуле? Должно быть что-то типа PCF8574 или PCF8574A

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

Ссылка на комментарий
Поделиться на другие сайты

Все-таки при подключении дисплея по I2C что-то не так. Работало все на первой версии, решил залить вторую. Ничего не отключал, только шилд отсоединил от Ардуино. Сделал все необходимые изменения для I2C-подключения в скетче, залил, и на тебе-дисплей с квадратиками. Где-то что-то не стыкуется. А дисплея без модуля I2C пока нет. 

Ссылка на комментарий
Поделиться на другие сайты

Вот фото подключения. 

Микросхема на контроллере дисплея  PCF8574T. 

image.jpeg

image.jpeg

image.jpeg

Регулировка контрастности выставлена оптимально. 

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

Изменено пользователем bykowina
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Mech51 сказал:

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

А не пробовали обратно залить первую версию?

Видимо где то ошибка в скетче. Я залил первую версию и дисплей ЗАРАБОТАЛ!!! Ура!!!

 

Изменено пользователем bykowina
Ссылка на комментарий
Поделиться на другие сайты

С адресом (который 27) могут быть ошибки - зависит от платы i2c. 
Контроллер имеет входы A0-A2, которыми может устанавливаться младший адрес i2c
Буква А в названии чипа означает старшую часть адреса на i2c. Без буквы А адрес будет 0x20 + A (0x20-0x27), для микросхемы с буквой А 0x38 + A(0x38-0x3f).

Ссылка на комментарий
Поделиться на другие сайты

В первой версии прошивки 27-й адрес. С ней все работает. Во второй версии указан тоже  0х27. 

Микросхема в интерфейсе PCF8574T. 

Изменено пользователем bykowina
Ссылка на комментарий
Поделиться на другие сайты

Проверил адрес сканером, все как и было, 0х27, а на дисплее квадратики. Загрузил 1 версию, все нормально, работает.

Изменено пользователем Mech51
дополнение
Ссылка на комментарий
Поделиться на другие сайты

/* Name: Winding machine    
   Description: Arduino ATmega 328P + Stepper motor control CNC Shield v3 + 2004 LCD + Encoder KY-040
   Author:      TDA
   Ver:         2.1b_I2C_DEBUG
   Date:        20/11/2019

       Arduino pinout diagram:
          _______________
         |      USB      |
         |           AREF|
         |            GND|
         |             13| DIR A
         |RESET        12| STEP A
         |3V3         #11| STOP BT
         |5V          #10| BUZ OUT
         |GND          #9|
         |VIN           8| EN STEP
         |               |
         |              7| DIR Z
         |             #6|
  LCD RS |A0 14        #5| ENCODER CLK
  LCD EN |A1 15         4| STEP Z
  LCD D4 |A2 16   INT1 #3| ENCODER SW
  LCD D5 |A3 17   INT0  2| ENCODER DT
  LCD D6 |A4 18      TX 1|
  LCD D7 |A5 19      RX 0|
         |__A6_A7________|                        
*/

//**************************************************************  
    
#define ShaftStep 50 // ShaftStep = Шаг резьбы*50

//**************************************************************

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#define ENC_CLK   2 // Даем имена номерам пинов
#define ENC_SW    3
#define STEP_Z    4 
#define ENC_DT    5 
#define DIR_Z     7
#define EN_STEP   8
#define BUZZ_OUT  10
#define STOP_BT   11
#define STEP_A    12
#define DIR_A     13
#define RS        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19

byte up[8] =   {0b00100,0b01110,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000};   // Создаем свой символ ⯅ для LCD
byte down[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b01110,0b00100};   // Создаем свой символ ⯆ для LCD

volatile int Encoder_Dir;                                 // Направление вращения энкодера
volatile boolean Push_Button, Var_Set, DC, AutoWindStart; // Нажатие кнопки; режим установки значения; формирование сигнала STEP; работает подпрограмма автонамотки 
volatile boolean Pause;                                   // Флаг паузы в режиме автонамотка   
volatile int i;                                           // Счетчик кол-ва заходов в прерывание таймера
char Str_Buffer[22];                                      // Буфер для функции sprintf 
byte LCD_Column, LCD_Row, Symbol_Code, Motor_Num;         // Номер столбца и строки LCD; код символа https://i.stack.imgur.com/oZhjJ.gif; номер шагового двигателя
int32_t ActualShaftPos, ActualLayerPos;                   // Текущие позиции двигателей вала и укладчика
int Actual_Turn = 0, Actual_Layer = 0;                    // Текущий виток и слой при автонамотке
int Shaft_Pos, Lay_Pos, Set_Turns, Set_Step, Set_Speed=1, Set_Layers=1, Step_Mult=1;  // Переменные изменяемые на экране
byte Menu_Index = 0;                                      // Переменная хранит номер текущей строки меню
int32_t Steps, Step_Accel, Step_Decel;

volatile uint16_t OCR1A_NOM;
volatile uint32_t OCR1A_TEMP;
volatile uint32_t INCR;
volatile uint32_t NSteps;
volatile uint32_t Temp;
int V;
volatile int NTurn;
uint8_t run_btn;
 
uint8_t MicroSteps = 16;
long SteppersPositions[2];
int Pitch = 1;
int8_t Steppers_Dir = 1;
int16_t SpeedIncrease, SpeedDecrease;

volatile int X,Y;
volatile int Set_Speed_INT;

enum menu_states {Autowinding, PosControl, TurnsSet, StepSet, SpeedSet, LaySet, Direction, Start, Cancel, Empty, ShaftPos, LayPos, StepMul, PosCancel}; // Нумерованный список строк экрана

struct MenuType {                       // Структура описывающая меню
  byte Screen;                          // Индекс экрана
  byte string_number;                   // Номер строки на экране
  char format[22];                      // Формат строки
  char format_Set_var[6];               // Формат значения при вводе переменной
  int  *param;                          // Указатель на адрес текущей переменной изменяемой на экране
  int  var_Min;                         // Ограничение значения переменной снизу
  int  var_Max;                         // Ограничение значения переменной сверху
  byte param_coef;};                    // Размерный коэффициент значения переменной

const struct MenuType Menu[] = {        // Объявляем переменную Menu пользовательского типа MenuType и доступную только для чтения
  {0,  0,  "  AUTOWINDING        ", ""      ,NULL,        0,      0,      0        },    // "> AUTOWINDING   "
  {0,  1,  "  POS CONTROL        ", ""      ,NULL,        0,      0,      0        },    // "> POS CONTROL   "
  {2,  0,  "  TURNS:  %03d       ", "%03d"  ,&Set_Turns,  1,      999,    1        },    // "> TURNS: >000<  "
  {2,  1,  "  STEP: 0.%04d       ", "%04d"  ,&Set_Step,   1,      200,    ShaftStep},    // "> STEP:>0.0000<↓"  
  {4,  0,  "  SPEED:  %03d       ", "%03d"  ,&Set_Speed,  1,      300,    1        },    // "> SPEED: >000< ↑"
  {4,  1,  "  LAYERS: %02d       ", "%02d"  ,&Set_Layers, 1,      99,     1        },    // "> LAYERS:>00<  ↓" 
  {6,  0,  "  DIRECTION >>>      ", ""      ,NULL,        0,      0,      0        },    // "> DIRECTION >>>↑"
  {6,  1,  "  START              ", ""      ,NULL,        0,      0,      0        },    // "> START        ↓" 
  {8,  0,  "  CANCEL             ", ""      ,NULL,        0,      0,      0        },    // "> CANCEL       ↑" 
  {8,  1,  "                     ", ""      ,NULL,        0,      0,      0        },    // ">               " 
  {10, 0,  "  SH POS: %+04d      ", "%+04d" ,&Shaft_Pos,  -999,   999,    1        },    // "> SH POS:>±000< "
  {10, 1,  "  LA POS: %+04d      ", "%+04d" ,&Lay_Pos,    -999,   999,    1        },    // "> LA POS:>±000<↓" 
  {12, 0,  "  STPMUL: %03d       ", "%03d"  ,&Step_Mult,  1,      100,    1        },    // "> STPMUL:>000< ↑"
  {12, 1,  "  CANCEL             ", ""      ,NULL,        0,      0,      0        },    // "> CANCEL        "   
  {14, 0,  "T%03d/%03d L%02d/%02d", ""      ,NULL,        0,      0,      0        },    // "T000/000 L00/00 "
  {14, 1,  "SP%03d ST0.%04d      ", ""      ,NULL,        0,      0,      0        },    // "SP000 ST0.0000  " 
  {16, 0,  "AUTOWINDING DONE     ", ""      ,NULL,        0,      0,      0        },    // "AUTOWINDING DONE" 
  {16, 1,  "PRESS CONTINUE       ", ""      ,NULL,        0,      0,      0        }};   // "PRESS CONTINUE  "
  
//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD 
LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки 

void setup() {
pinMode(ENC_CLK, INPUT);    // Инициализация входов/выходов  
pinMode(ENC_SW,  INPUT);
pinMode(STEP_Z,  OUTPUT);
pinMode(ENC_DT,  INPUT);
pinMode(DIR_Z,   OUTPUT);
pinMode(EN_STEP, OUTPUT);
pinMode(STEP_A,  OUTPUT);
pinMode(DIR_A,   OUTPUT); 
pinMode(BUZZ_OUT,OUTPUT);
pinMode(STOP_BT, INPUT);
pinMode(RS,      OUTPUT);
pinMode(EN,      OUTPUT);
pinMode(D4,      OUTPUT);
pinMode(D5,      OUTPUT);
pinMode(D6,      OUTPUT);
pinMode(D7,      OUTPUT);

digitalWrite(EN_STEP, HIGH); // Запрет управления двигателями  
digitalWrite(STOP_BT, HIGH); // Вкл. подтягивающие резисторы к VDD  
  
 lcd.init(); 
 lcd.backlight();             // Включение подсветки LCD
  
  lcd.createChar(0, up);       // Записываем символ ⯅ в память LCD
  lcd.createChar(1, down);     // Записываем символ ⯆ в память LCD

  cli();                                                                        // Глобальный запрет прерываний
  EICRA = (1<<ISC11)|(0<<ISC10)|(0<<ISC01)|(1<<ISC00);                          // Настройка срабатывания прерываний: INT0 по изменению сигнала, INT1 по спаду сигнала; ATmega328/P DATASHEET стр.89
  EIMSK = (1<<INT0)|(1<<INT1);                                                  // Разрешение прерываний INT0 и INT1; ATmega328/P DATASHEET стр.90 
  EIFR = 0x00;                                                                  // Сбрасываем флаги внешних прерываний; ATmega328/P DATASHEET стр.91
  TCCR1A=(0<<COM1A1)|(0<<COM1B1)|(0<<COM1A0)|(0<<COM1B0)|(0<<WGM11)|(0<<WGM10); // Настройка таймера/счетчика 1: нормальный режим работы порта, OC1A/OC1B отключены; ATmega328/P DATASHEET стр.170-172
  TCCR1B=(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);                   // Режим работы таймера/счетчика - CTC (очистить таймер при достижении значения в регистре сравнения OCR1A)
  OCR1A = 20000;                                                                // Значение в регистре OCR1A определяет частоту входа в прерывание таймера и устанавливает скрость вращения двигателей
  sei();
//lcd.begin(20,4);                                                              // Инициализация LCD Дисплей 20 символов 4 строки   
//lcd.begin(16,2);                                                             // Инициализация LCD Дисплей 16 символов 2 строки 
       
  lcd.clear();                                                      
  sprintf(Str_Buffer, Menu[0].format);
  lcd.print(Str_Buffer);                                                        // Выводим первую строку на экран
  lcd.setCursor(0,1); 
  sprintf(Str_Buffer, Menu[1].format);
  lcd.print(Str_Buffer);                                                        // Выводим вторую строку на экран
  PrintSymbol(0,0,0x3E);}                                                       // Выводим символ ">" на 0,0 LCD

 

Замените весь код до void loop() 

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

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

Изменено пользователем TDA
Ссылка на комментарий
Поделиться на другие сайты

19.11.2019 в 21:06, РеактоР сказал:

как подрубить 2004.? я так понимаю комплектная проводка не встанет на ардуино.(пока не пришел)

Я использовал эту схему для подключения

image.thumb.png.353da4c6fbc73227d1dc055bf9f04f53.png

 

Изменено пользователем TDA
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде.
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
×
×
  • Создать...