Например TDA7294

Форум РадиоКот :: Просмотр темы - Прошу помощи с ардуино и моим проектом
Форум РадиоКот
https://radiokot.ru/forum/

Прошу помощи с ардуино и моим проектом
https://radiokot.ru/forum/viewtopic.php?f=57&t=167270
Страница 2 из 3

Автор:  Alex-DJ [ Ср дек 04, 2019 20:48:57 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

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

P.S.

Пока собрал ту схему счётчика, вроде работает, но там она считает до десяти. Убрал семисегментный индикатор и вместо него вывожу на 8 светодиодов, потому что там всего один сдвиговый регистр 595-ый на восемь разрядов. Пока всё. Эти десять байто по очереди выводятся, и так по кругу.

Автор:  Самсусамыч [ Ср дек 04, 2019 21:32:05 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

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

Автор:  Alex-DJ [ Ср дек 04, 2019 21:33:28 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

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

Код:

#define DATA_PIN    13 // пин данных (англ. data)
#define LATCH_PIN   12 // пин строба (англ. latch)
#define CLOCK_PIN   11 // пин такта (англ. clock)
#define BUTTON_PIN  10

void setup()
{
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop()
{
  if (buttonWasUp && !digitalRead(BUTTON_PIN)) {
    delay(10);
    if (!digitalRead(BUTTON_PIN))
      clicks = (clicks + 1) % 10;
buttonWasUp = digitalRead(BUTTON_PIN);

byte H_byte[10] = {
  0b01001100, 0b01000101 // сюда ещё можно сколько угодно написать таких байтов? это для первых 8 светодиодов
}
byte L_byte[10] = {
  0b10000111,0b010001010 // и такое же количество и сюда, только для следующих 8 светодиодов ?
}
  // начинаем "продавливать" данные по цепочке регистров, начиная с последнего
  shiftOut(dataPin, clockPin, LSBFIRST, H_byte[clicks]);
// передаем последовательно на dataPin - в первом регистре значение B01001100
  shiftOut(dataPin, clockPin, LSBFIRST, L_byte[clicks]);
// "продавливаем" данные в следующий регистр - в первом регистре B10000111,
// во втором - B01001100 и т.д. по количеству регистров
  digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым
// устанавливая значения на выходах
  delayMicroseconds(5);
  digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW

Автор:  Самсусамыч [ Ср дек 04, 2019 21:39:37 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Я и рад бы помочь, но с языком Си не знаком… :)

Автор:  Ivanoff-iv [ Чт дек 05, 2019 03:48:14 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

почему у тебя в массивах 10 элементов, а заполнено только 2?
напиши вначале кода : #define n 10;
а потом в коде 10 (там где она указывает на количество элементов - в массивах, в счёте) замени на n
потом или массивы дозаполни или в дефайне 10 на 2 замени.
П.С. в массиве цифру можно вообще не ставить, тогда размерность его определится количеством элементов в скобках что идут следом... но лучше её ставить, чтобы в случае, как у тебя, выпала ошибка, а не скомпилировалось, и потом работало криво...

Автор:  BOB51 [ Чт дек 05, 2019 08:31:44 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Для начинающего борьбу с адуриньей (и ардуиноподобными) в рамках корректного подхода
(не "чистого Си", а именно ардуино-референса - там имеются некоторые различия)
рекомендовал бы вычитать все, касающееся ардуинки из
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
и
https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
я там ведь также практически "с нуля" разбор начинал.
Там и примеры и обсуждение и ссылки на литературу под самостоятельное прочтение.
Правда стартовая база несколько отличается - и схемотехника уже была изучена и МК под ассемблером.
8)

Alex-DJ
"...Сделал так код. Но в ардуинку не зашивается почему то, куча ошибок каких то. Поправьте плиз, где накосячил ?..."
Собственно читаем ошибки и устраняем - там обычно весьма четко указано "что есть БаГГ".
Или...
Копируем текст сообщения в блокнот и прилагаем текстовой файлик.
Или вставкой в сообщении (обязательно под спойлером!!! дабы "портянок" к просмотру не плодить)
или заархивированным файлом (текстовой не пропустится) к сообщению.
Да версию IDE указывать необходимо (на сегодня актуальна 1.8.9), режим контроля
(вкладка
файл->настройки->флажок напротив "сообщения компилятора"
(в моей выставлено "ВСЕ"))
8)

Автор:  Alex-DJ [ Чт дек 05, 2019 08:50:24 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

почему у тебя в массивах 10 элементов, а заполнено только 2?
напиши вначале кода : #define n 10;
а потом в коде 10 (там где она указывает на количество элементов - в массивах, в счёте) замени на n
потом или массивы дозаполни или в дефайне 10 на 2 замени.
П.С. в массиве цифру можно вообще не ставить, тогда размерность его определится количеством элементов в скобках что идут следом... но лучше её ставить, чтобы в случае, как у тебя, выпала ошибка, а не скомпилировалось, и потом работало криво...


Так? Только для проверки я пока сделал для пяти элементов, везде где было в предыдущем коде 10 поменял на 5 и в массивах по 5 элементов.

Код:
#define n 5;
#define DATA_PIN    13 // пин данных (англ. data)
#define LATCH_PIN   12 // пин строба (англ. latch)
#define CLOCK_PIN   11 // пин такта (англ. clock)
#define BUTTON_PIN  10

void setup()
{
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop()
{
  if (buttonWasUp && !digitalRead(BUTTON_PIN)) {
    delay(10);
    if (!digitalRead(BUTTON_PIN))
      clicks = (clicks + 1) % 5;
buttonWasUp = digitalRead(BUTTON_PIN);

byte H_byte[5] = {
  0b01001100, 0b01000101,  0b00000001, 0b11001100, 0b01010101// пока 5 элементов для примера
}
byte L_byte[5] = {
  0b10000111, 0b010001010, 0b00101100, 0b00010000, 0b11110000 // и такое же количество здесь
}
  // начинаем "продавливать" данные по цепочке регистров, начиная с последнего
  shiftOut(dataPin, clockPin, LSBFIRST, H_byte[clicks]);
// передаем последовательно на dataPin - в первом регистре значение B01001100
  shiftOut(dataPin, clockPin, LSBFIRST, L_byte[clicks]);
// "продавливаем" данные в следующий регистр - в первом регистре B10000111,
// во втором - B01001100 и т.д. по количеству регистров
  digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым
// устанавливая значения на выходах
  delayMicroseconds(5);
  digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW


P.S/

нет , опять ошибка при компиляции (((

Автор:  BOB51 [ Чт дек 05, 2019 09:00:03 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Да укладывайте же исходник под спойлер!
8)
Это выделить текст а затем нажать кнопу spoiler в заголовке редактора сообщения на сайте.
Тогда текстовка не будет отвлекать лишнее внимание (а при необходимости читающий ее развернет).
8)
Посмотрю чего там устроить...
А пока... скачайте и почитайте книжи:
http://elektromehanika.org/load/serii_t ... 0-1-0-1874
:beer:

Автор:  Alex-DJ [ Чт дек 05, 2019 09:15:23 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Да версию IDE указывать необходимо (на сегодня актуальна 1.8.9)


актуальная версия Arduino IDE 1.8.10

Автор:  BOB51 [ Чт дек 05, 2019 12:10:29 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

1.8.10
Это для виндовс 7-8-10 и "старше"
на ХР (и простеньком компе с пнемIII к примеру) она не пойдет посему и заявлена "как ограниченная" - не у всех 10 используется.
Так что для большинства простолюбителей на сегодня таки 1.8.9 наиболее оптимальна.
Хотя и там есть нюансы (для версии ESP8266 к примеру под ХР допускается только 2.5.0)...
Вот Ваша хотелка отредактированя под прогон в симуляторе (https://www.sites.google.com/site/unoardusim/services)
ибо влом макетку портить на сию мелочь.
Потому текст малость "корявенький" (некоторые ограничения восприятия у симулятора к исходнику - не понимает к примеру переносов строки)...
Спойлер
Код:
// #include <avr/pgmspace.h> // подключаем функционал работы с ПЗУ

//----------

int dataPin  = 13;   //Пин подключен к DS входу 74HC595
int latchPin = 12;  //Пин подключен к ST_CP входу 74HC595
int clockPin = 11;  //Пин подключен к SH_CP входу 74HC595
/*
 * dataPin,latchPin,clockPin нельзя объявлять иначе ибо функция
 * shiftOut оговаривает их значения как int (возможен вариант const int dataPin)
 * смотри референс IDE к используемым функциям!!!
 */
byte my_sens = 10; // активный уровень = 0

byte L_data_buf;
byte H_data_buf;
static byte point_ptr;
void outdata();

byte my_data[] = {B10000111, B01001100, B01101100, B00001000, B01000101, B01001010,B11111100, B10100101, B10100000, B10011010, B01010010, B10000000, B01010101, B00000010, B10100101, B01011010, B01011010, B10100101}; // 18

/*
const byte my_data[18] PROGMEM = {\
B10000111, B01001100, B01101100, B00001000, B01000101, B01001010,\
B11111100, B10100101, B10100000, B10011010, B01010010, B10000000,\
B01010101, B00000010, B10100101, B01011010, B01011010, B10100101}; // 18
// столько данных - сколько нужно (или несколько массивов см. референс)
// однако размещение только перед setup()
// и НЕ ЗАБЫВАЕМ, что в БАЙТЕ ВСЕГО 8 БИТ (а не 9 и более!)
*/
//----------

void setup() {
  // put your setup code here, to run once:
//устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  digitalWrite(latchPin, LOW);
  pinMode(clockPin, OUTPUT);
  digitalWrite(clockPin, LOW);
  pinMode(dataPin, OUTPUT);
  digitalWrite(dataPin, LOW);
  pinMode(my_sens, INPUT_PULLUP);
  point_ptr = 0; H_data_buf = 0; L_data_buf = 0;
  outdata(); // начальная инициализация
 
}

void loop() {
  // put your main code here, to run repeatedly:
 if (!digitalRead(my_sens))
 {
  delay(20);
   if (!digitalRead(my_sens))
   {
    // H_data_buf = pgm_read_byte_near(my_data+point_ptr); // соответствует исправленному в sketch_dec03b
    H_data_buf = my_data[point_ptr];
    point_ptr++;
    // L_data_buf = pgm_read_byte_near(my_data+point_ptr); // соответствует исправленному в sketch_dec03b
    L_data_buf = my_data[point_ptr];
    point_ptr++;
    // изменение point_ptr в соответствии с размером массива в ПЗУ
    if (point_ptr==18)
     {
      point_ptr=0; // вернем указатель на начало массива
      // (в текущем тесте из 18 байт последняя ячейка 17)
     }
   outdata();
   byte flag=1;
    while (flag)
    {
      if (digitalRead(my_sens))
      {
        delay(20);
        if (digitalRead(my_sens))
        {
          flag=0;
        }
      }
    }
   }
 }
 delay(20);
}

//----------

void outdata()
{
  // начинаем "продавливать" данные по цепочке регистров, начиная с последнего
  shiftOut(dataPin, clockPin, LSBFIRST, lowByte(H_data_buf));
// передаем последовательно на dataPin - в первом регистре значение B01001100
  shiftOut(dataPin, clockPin, LSBFIRST, highByte(L_data_buf));
// "продавливаем" данные в следующий регистр - в первом регистре B10000111,
// во втором - B01001100 и т.д. по количеству регистров
  digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым
// устанавливая значения на выходах
  delayMicroseconds(5);
  digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW
}

и собственно схемка
http://img.radiokot.ru/files/20529/22h44tkfsd.GIF
как желательно бы КОТУ рисовать/расматривать.
Тренируйтесь.
8)

Пы.Сы.
Редактор текста на сайте таки вносит некоторые некорректности с "длинными строками", что может привести к ошибкам при копипасте из текста в окне сообщения...
посему прилагаю сам исходник для анализа непосредственно в редакторе IDEбез лишних "сторонних искажений"
Вложение:
sketch_dec03a.zip [1.77 KiB]
Скачиваний: 231

8)

Автор:  Alex-DJ [ Чт дек 05, 2019 12:32:32 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Спасибо...А куда к ардуино кнопку подключать ?

Автор:  BOB51 [ Чт дек 05, 2019 12:35:15 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

На схеме постом выше - вывод D10 (уно,нано и аналогичные).
Да и в исходнике же тоже указано...
Я ж Вашу последнюю раскладку из исходника брал за основу...
:roll:

Автор:  Alex-DJ [ Чт дек 05, 2019 12:52:53 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Скачал UnoArduSimV2.5.0.zip загрузил туда код, нажал кнопку выполнить

Вложение:
66666661.jpg [96.24 KiB]
Скачиваний: 241


и всё вот так стоит и не двигается, так должно быть ? А работу кода посмотреть никак не получится?

Автор:  BOB51 [ Чт дек 05, 2019 14:19:10 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Я там только алгоритм отслеживал, принимая к сведению, что вывод в регистры правильно проводится (у симулятора нету внешних регистров того типа, что нам требуются).
А вот кнопку - вернее выключатель с резисторами (ибо трассировка была пошаговая) прицепить на 10й вывод надо.
Да и убрать лишнюю периферию в текущем сеансе.
Далее гоняем соответственно пожеланию.
Без переключения кнопы программа выдаст в регистры нулики и зависнет в ожидании нажатия кнопы.
Затем шажок по массиву и ожидание отпускания кнопы.
Затем снова ждет нажатие.
"пошаговое" исполнение кнопкой меню "шаг внутри" (с беленькой стрелкой).
http://img.radiokot.ru/files/20529/22h7pxc5yz.jpg
исходно переключатель в том положении, что на фотке (непрерывный простой в ожидании нажатия)
переключив его в 0 (красный индикатор на соответствующей линии унки заменится на синий)
прощелкиваем очередной цикл вывода и попадаем в "ожидание единицы" на D10
переводим переключатель в 1 и прощелкиваем программу в очередной цикл ожидания нажатия.
И так далее...
Если желание прсмотра с анимацией - тогда оставляем переключатель в положении 1, запускаем симуляцию в режиме "анимация выполнение" + "замедленная съемка" с помощью зеленой стрелки в строке иконок-менюшек ("выполнить") и пользуемся зеленой кнопой (push которая в поле макета) - нажать и подержать - исполнится очередной шаг прогона цикла вывода.
:sleep:
Вообще-то в каталоге симулятора лежат весьма подробные *.pdf файлы с описанием как с ним работать.
Внимательно читаемс!
:beer:

Исправлена ошибка в закомментированной области - чтение элементов массива из ПЗУ (progmem)
Вложение:
sketch_dec03b.zip [34.08 KiB]
Скачиваний: 224

таки с тем progmem без конспекту... ТОСКНОВАТО...
:(

Автор:  Alex-DJ [ Чт дек 05, 2019 19:38:57 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

BOB51, к сожалению схема не заработала на макетке. Прошивается без ошибок, при включении на светодиодах появляется какой то код, потом после загрузки микроконтроллера, то есть через секунду после подачи питания на схему, всё гаснет и на кнопку не реагирует. Кнопку включил как на схеме, одним концом к общему вторым к 10 пину на ардуине. Правда светодиоды у меня общий на минусе, но от этого ведь не может не работать, просто светить будут инверсно вшитому массиву, тоесть где 1 там не будет светить, там где ноль будет светить. Но тут вообще ничего не пашет и на кнопку не реагирует

Автор:  OKF [ Чт дек 05, 2019 20:23:40 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Ой, Alex-DJ, поменьше бы вы пользовались форумом вместо здравого смысла.)
Удачи!

Автор:  BOB51 [ Чт дек 05, 2019 23:47:42 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

В прожке закралась ошибка невнимательности...
Компилятор оные не распознает.
Устранено тут
Вложение:
sketch_dec03c.zip [1.76 KiB]
Скачиваний: 184

собственно не подправлено было от старого двухбайтового значения апендикс.
Неверно(было):
void outdata()
{
// начинаем "продавливать" данные по цепочке регистров, начиная с последнего
shiftOut(dataPin, clockPin, LSBFIRST, lowByte(H_data_buf));
// передаем последовательно на dataPin - в первом регистре значение B01001100
shiftOut(dataPin, clockPin, LSBFIRST, highByte(L_data_buf));
// "продавливаем" данные в следующий регистр - в первом регистре B10000111,.....
а нужно (исправлено):
void outdata()
{
// начинаем "продавливать" данные по цепочке регистров, начиная с последнего
shiftOut(dataPin, clockPin, LSBFIRST, H_data_buf);
// передаем последовательно на dataPin - в первом регистре значение B01001100
shiftOut(dataPin, clockPin, LSBFIRST, L_data_buf);
// "продавливаем" данные в следующий регистр - в первом регистре B10000111,.....
8)
Возможно еще некоторые "погрешности"/неоптимальности засели - это уже "на вылизывание" после которого можно начинающему совсем ничего не понять.
:wink:

Автор:  Alex-DJ [ Пт дек 06, 2019 00:03:21 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

В прожке закралась ошибка невнимательности...
Компилятор оные не распознает.

Возможно еще некоторые "погрешности"
:wink:


И не только это, у вас на сдвиговых регистрах на 10 и 13 ноге общий, на 10 ногу должен идти плюс питания

Автор:  BOB51 [ Пт дек 06, 2019 00:23:24 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

Это точно - вот так верно:
http://img.radiokot.ru/files/20529/22hohx9i9g.GIF
зявнулсс... давненько те регистры не вынимал из шкапчика...
Собственно у меня линия сброса выводится на МК - а уточнить какой уровень
соответствует сбросу, а какой работе забыл.
:oops:
А 13-я лапка - это разрешение выходного каскада - там и должен быть 0 для его активации.
Подашь 1 и на выходе будет Z-состояние (не нуль и не единичка - это для работы нескольких регистров на одну шину).
8)

Автор:  Самсусамыч [ Пт дек 06, 2019 03:00:14 ]
Заголовок сообщения:  Re: Прошу помощи с ардуино и моим проектом

:) Да и резистор на ноге сброса (10) не к чему… подать на неё +5 напрямую и нормуль. :beer:
Вложение:
1.png

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/