Ви не увійшли.
Дякую, розібрався.
Жаль, що не цікаво.
Тема закрита
khalimon пише:Якщо можна, напишіть це на с++ з урахуванням синтаксису. Якщо запрацює, я віддячу
Вибачте, мені це не цікаво. Тут я не заради заробітку, принаймні не зараз. Задача тривіальна, може хтось зацікавиться, у кого є час та натхнення. Успіхів у пошуку.
Планую змодулювати на ардуіно нано в ардуіно IDE . Якщо можна, напишіть це на с++ з урахуванням синтаксису. Якщо запрацює, я віддячу
Нехай у вас є масив бітового зображення:
uint8_t M[8] = { ... };
Лінію даних назвем DS, пін тактування/защолки - CLK, пін OE - OE.
Алгоритм керування:
1. Конфігуруєте піни DS, CLK та OE в output.
2. Ініціалізуєте лічильник секцій: uint8_t section=0
3. Ініціалізуєте маску секцій: uint8_t mask = 0x80Планую змодулювати на ардуіні нано в ардуіно ІIDE. Якщо можна, напишіть цей приклад на с++, щоб я міг вставити та перевірити. Якщо запрацює, я відлячу
Приблизно раз на мілісекунду, можна і частіше:
1. OE = High
2. Виводите 16 біт на лінію даних з тактуванням. Ці 16 біт складаються з байта масиву зображення та інвертованої маски секції. Значення, що виводиться (LSB first):uint16_t val = (~mask << 8) | M[section]
for i від 0 до 15 {
CLK = High
DS = val & 1;
CLK = Low;
val >>= 1;
}
CLK=High3. OE = Low
4. section = (section + 1) % 8
5. mask >>= 1; if (mask==0) mask = 0x80;
Напишіть, як з вами зв'язатись. Сьогодні або завтра перевірю.
Є готова промислова індикація, яку змінювати, перепаювати не можна. З самого початку це я обізначив. На прикладі засвітити один світлодіод, або зробити бігучу стрічку або ще щось подібне, я хочу отримати алгоритм керування. Те що є в інтернеті є, не працює повинним чином, тому що там апаратно по іншому реалізовано.
Щоб увімкнути світлодіод треба на першому чіпі ( де транзистори) подати лог одиницю на відповідний пін ( щоб увімкнувся транзистор та подався плюс живлення ), а на другому чіпі ( де резістори ) подати лог нуль, щоб подався мінус.
З цим ясно, питання в керуванні - тоб то алгоритм ( код програми/ скетч )
Готов віддячити грошима за рішення..
Так, на базах не малював резистори, показав схематично, щоб було зрозуміло,
що це матриця 8 х 8. Вихід з них "плюс", де резистори " мінус".
Цікавить саме алгоритм керування
Вітаю, суспільство. Є готова індикація на двох 74ch595.
Роблю під неї плату керування.
Зазвичай задіяні піни 14 ( данні ), 11 та 12 ( защьолка та тактування ).
А тут задіяні пін данних(14), піни 11 та 12 з'єднані, та задіян пін 13 ( ОЕ )
Зрисовану схему додаю.
Натякніть будь ласка як засвітити потрібну ячейку...
Проектую на ардуіно нано 328р
На мекетці вхід Rx я закоротив з D2, тобто INT0.
По D2 переривання постійно робить, але імпульс вимірює лише після прийнятого символа 5. (див. скетч)
В мене вимірює, але щось не те. Ще й в буфері щось зайве гуляє..
Якщо хтось може допомогти готов віддячити в межах 500грн
Доброго дня!
Atmega8a, 8mhz, Arduino IDE
У періодичних пакетах (1 пакет на 0,8сек) на вході Rx (швидкість 9600) після певного прийнятого символу (конкретно цифра 5) необхідно порахувати довжину першого імпульсу (не важливо до якого символу він відноситься, важлива довжина саме першого імпульсу після прийнятої 5ки). Прошу знавців ткнути у потрібному напрямку.
Дякую!
#include <HardwareSerial.h>
volatile unsigned long i, dlina, ms3;
volatile bool d;
bool fl;
#define led 13 // светодиод
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(led, OUTPUT);
Serial.attachSerialInterrupt(SerialInterrupt);
attachInterrupt(0, isr, CHANGE);
}
void SerialInterrupt() {
if (UDR0 == '5') d = 1;
}
void isr() {
if (millis() - ms3 > 1000 && fl == 1) fl = 0;
if (fl == 0 && d == 1) {
if (digitalRead(2) == 0 ) i = micros();
else {
dlina = micros() - i;
// if (dlina > 100 && dlina < 110) digitalWrite(led, 1); else digitalWrite(led, 0);
Serial.print("dlina "); Serial.println(dlina);
fl = 1;
d = 0;
ms3 = millis();
}
}
}
void loop() {
}
Нічого не зрозумів... Встановив нову бібліотеку - запрацювало.
Але стояла стара, раніше працювало...
Заработало - та й добре.
Дякую за відповіді!
При виборі плати ардуіно нано все компелюється.
При виборі саме чіпа атмега328 - видає помилку "ошибка коммиляции для atmega328"
Всі інші проекти компилюються норм і на плату ардуіно і на чіп 328, 88, 8 та інші.
Проблема з'явилась при підключенні бібліотеки тм1637...
Доброго дня!
Така проблема:
TM1637 помилка при компиляціі для чіпа атмега328,
хоча для ардуіно нано все норм...
Колись була така проблема для OLED, додатково підключив #include <Wire.h> і все пішло...
Тут гадаю що щось треба вказати саме для чіпа.
Підскажіть будь ласка...
#include <avr/wdt.h>
#include <EEPROM.h>
#include <TM1637.h>
#define CLK A5
#define DIO A4
TM1637 disp(CLK, DIO);
Чітка відповідь! Дякую!
Буду дивитись в напрямку програмної правки або шукати інше апаратне рішення...
Доброго дня!
Роблю проект, де задіян модуль датчика струму.
Вимірювати струм треба до 5а
Програмую на ардуіно іде, використовую бібліотеку EmonLib.
Проблема наступна - при струмі до 1ампера - вимірювання відповідають дійсності,
якщо вище - то вже показники відрізняються від реальних в меншу сторону.
Нагрузка активна без індуктивної частини.
з коефицієнтом в emon1.current(pin, 30); грався в різні боки.
Буду вдячний за пораду
Даташит на ATMega328P, параграф 15 "16-bit Timer/Counter1 with PWM".
Если не хотите разбираться самостоятеьно, обращайтесь, сделаю.
Вернулся опять к этому проекту. Хочу всё таки побороть данный вопрос. Есть пару сотен грн. Если устроит, то готов обратится.
Даташит на ATMega328P, параграф 15 "16-bit Timer/Counter1 with PWM".
Если не хотите разбираться самостоятеьно, обращайтесь, сделаю.
Очень благодарен! Буду иметь ввиду.
Очень благодарен!
А если нужно будет сдвиг инвертировать, т.е. сдвинуть канал А относительно B, это будет так?
OCR1A = 234;
OCR1B = 312;
И встречный вопрос - как поменять сдвиг А относительно B в процессе работы?
Приветствую!
Работаю над проектом для атмега328р + кварц 16мгц (или ардуино нано 3)
Нуждаюсь в создании 2х меандров 50гц со сдвигом друг от друга 5мс (могу приложить осциллограмму, но не пойму как тут это сделать)
Меандры должны быть на разных пинах.
Очень важна именно качественная привязка второго меандра к первому. В loop будет достаточное количество вычислений, поэтому важно, что бы меандры работали независимо от основного кода программы.
Заранее благодарен за помощь!
Не понял о каком файле конфига речь. Но попробуйте вставить эти значения в калькулятор фьюзов по ссылке и аккуратно перенести галочки вручную в свою программу.
Супер!!! Заработало!
ОООЧЕНЬ спасибо!!!
Дуже дякую!!!
Atmega328P кварц 16МГц, загрузчик 512байт(256слов):
E:FD, H:DE, L:FF
а можно файл конфига в hex на почту khalimonav@ukr.net (в TL866 вручную не прописуется)
khalimon пише:Я по всякому пробовал. И от внутреннего кварца в том числе. Мне бы фьюзы у кого то списать с uno...
А в "досках" почему не посмотришь ???
А в досках - это где?
https://www.engbedded.com/fusecalc/
Ext. Crystal Osc., частота чтобы соответствовала частоте кварца.
Как определяете что "не работает"? если залить "блинк", мигает?
У меня на проектной плате светодиод стоит , пару реле и бузер. При запуске проц должен их включать поочерёдно, типа тест проходит.
Но при включении тишина...
Я по всякому пробовал. И от внутреннего кварца в том числе. Мне бы фьюзы у кого то списать с uno...
Приветствую!
Такая проблема.
Есть готовый проект. Скетч писался на ардуино ide 1.8.6 и отлаживался на ардуино нано.
Собрал пробную печатную плату, где использовал голый чип атмега328р pu ( длинный, 28 ног, вставленный в dip панель).
Кварц 16 мгц + 2 конденсатора 22пф. Avcc, vcc, aref на + 5в
Reset через 10к на 5в.
Точное напряжение питания 4.74в ( так задумано и связано с подключением ntc датчиков ).
В ардуино ide выставил плату UNO, скомпелировал hex файл и с загрузчиком и без загрузчика.
Шил программатором TL866 через панель ( НЕ внутрисхемно ). Прошивается нормально.
Не работает никак.
Чувствую, что с фьюзами что то не то делаю.
Не хотелось бы покупать uno для прошивки.
Прошу помощи в запуске голого чипа.
Заранее благодарен!
YK пише:Будет работать. Дело в том что со строкой можно еще ввести контрольные суммы и т.п. Т.е. если пару пакетов заглючат, ты их просто проигнорируешь, думаю это не принципиально. зато всегда будешь получать гарантированные данные
..
Несколько раз проверил, вроде нормально работает. В течении недели планирую полностью собрать агрегат. Если хоть раз глюканет - нужно будет контрольную сумму впихнуть. За 200грн поможешь?