Ви не увійшли.
Сторінки 1
Ничего общего с моим проектом: ни полевых транзисторов, ни Atmega2560. А про PoE на ESP8266 я вообще молчу.
Я не сильно большой знаток украинского языка, но вроде бы мама по-украински будет "Мамо" или "Мати".
Можете назвать "Хлопець" и "Дівчина", если так сильно хочется, чтобы максимально отличалось от русского языка, но такие вещи как правило наоборот отпугивают людей.
Я никогда не занимался разводкой плат, поэтому нужен человек, который подскажет как это правильно сделать, поправит, если где накосячу либо сам разведет плату под мой проект.
На плате должны быть:
1) Современный импульсный преобразователь напряжения (или даже 2; возможно 1 преобразователь и 1 кренка) на напряжения 5В и 3.3В
2) Микроконтроллер Atmega2560 + кварц
3) MAX232 (2 RS232 порта на 1 микросхеме)
4) Часы DS3231
5) Ethernet на чипе W5500 с трансформатором (возможно с PoE)
6) Flash 25Q128
7) 4 полевых транзистора для управления внешними устройствами (12В реле, электромагнитные катушки)
8) 5 входов для кнопок
9) 2 логических выхода (0/5 В)
10) разъем для внутрисхемного программирования и отладки
Желательно все в SMD-корпусах. Должны присутствовать все необходимые защиты, согласование уровней, обвязка...
Для начала интересует ориенитировочная цена.
Напряжение проверял до пайки и после. Осцилографа нет, но по тестеру скачков не наблюдаю. До пайки на макетке модули вели себя точно так же. Думал, что из-за плохих контактов. Спаял всё (проводки не больше 2-х см) - а ничего не изменилось. Воткнул конденсатор на 220 мФ (на віход стабилизатора 3.3 В), результат тот же.
Здравствуйте. Никак не могу побороть работу с Flash-памятью на Arduino UNO. Подключил через преобразователь уровней. SS пин на 9 пин UNO. (На 10-ом подключен W5500). С библиотекой SPIMemory читать флешку получается, а писать в нее - нет. Взял за основу эту библиотеку, выкинул все лишнее и получился такой код:
#define BAUD_RATE 2400
#define Flash_CS 9
#include <SPI.h>
// WinBond flash commands
#define WB_WRITE_ENABLE 0x06
#define WB_WRITE_DISABLE 0x04
#define WB_CHIP_ERASE 0xc7
#define WB_READ_STATUS_REG_1 0x05
#define WB_READ_DATA 0x03
#define WB_PAGE_PROGRAM 0x02
#define WB_JEDEC_ID 0x9f
#define SPI_PAGESIZE 256
void not_busy(void) {
PORTB |= 4; // digitalWrite(W5500_CS, HIGH);
PORTB &= 253; // digitalWrite(Flash_CS, LOW);
SPI.transfer(WB_READ_STATUS_REG_1);
while (SPI.transfer(0) & 1) {};
PORTB |= 2; // digitalWrite(Flash_CS, HIGH);
}
void _get_jedec_id(byte *b1, byte *b2, byte *b3) {
PORTB |= 4; // digitalWrite(W5500_CS, HIGH);
PORTB &= 253; // digitalWrite(Flash_CS, LOW);
SPI.transfer(WB_JEDEC_ID);
*b1 = SPI.transfer(0); // manufacturer id
*b2 = SPI.transfer(0); // memory type
*b3 = SPI.transfer(0); // capacity
PORTB |= 2; // digitalWrite(Flash_CS, HIGH);
not_busy();
}
void _read_page(word page_number, byte *page_buffer) {
PORTB |= 4; // digitalWrite(W5500_CS, HIGH);
PORTB &= 253; // digitalWrite(Flash_CS, LOW);
SPI.transfer(WB_READ_DATA);
SPI.transfer((page_number >> 8) & 0xFF);
SPI.transfer((page_number >> 0) & 0xFF);
SPI.transfer(0);
for (int i = 0; i < SPI_PAGESIZE; ++i) {
page_buffer[i] = SPI.transfer(0);
}
PORTB |= 2; // digitalWrite(Flash_CS, HIGH);
not_busy();
}
void _write_page(word page_number, byte *page_buffer) {
PORTB |= 4; // digitalWrite(W5500_CS, HIGH);
PORTB &= 253; // digitalWrite(Flash_CS, LOW);
SPI.transfer(WB_WRITE_ENABLE);
PORTB |= 2; // digitalWrite(Flash_CS, HIGH);
PORTB &= 253; // digitalWrite(Flash_CS, LOW);
SPI.transfer(WB_PAGE_PROGRAM);
SPI.transfer((page_number >> 8) & 0xFF);
SPI.transfer((page_number >> 0) & 0xFF);
SPI.transfer(0);
for (int i = 0; i < SPI_PAGESIZE; ++i) SPI.transfer((byte)page_buffer[i]);
PORTB |= 2; // digitalWrite(Flash_CS, HIGH);
not_busy();
}
void setup() {
Serial.begin(BAUD_RATE);
Serial.println("");
Serial.println("=====================");
Serial.println("START");
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
SPI.begin();
SPI.setDataMode(0);
SPI.setBitOrder(MSBFIRST);
digitalWrite(10, HIGH);
// flash.begin();
}
void startTest() {
byte data_buffer[SPI_PAGESIZE];
int startAddress = 32;
int i4 = 0;
uint8_t b1, b2, b3;
/*
uint64_t UNIQ = getUniqueID();
byte* ptrB = (byte*)&UNIQ;
Serial.print("UniqueID: ");
for(b1=0;b1<8;b1++) {
b2 = (byte*)(ptrB + b1);
Serial.print(b2,HEX);
Serial.print(" ");
}
Serial.println("");
*/
_get_jedec_id(b1,b2,b3);
Serial.print("Manufacturer ID: ");
Serial.print(b1,HEX);
Serial.print(" Memory Type: ");
Serial.print(b2,HEX);
Serial.print(" Capacity: ");
Serial.println(b3,HEX);
_read_page(startAddress, &data_buffer[0]);
Serial.print(" startAddress: ");
Serial.print(startAddress);
Serial.print(" old: ");
Serial.print(data_buffer[i4],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+1],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+2],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+3],HEX);
data_buffer[i4]=0xFF;
data_buffer[i4+1]=0xFF;
data_buffer[i4+2]=0x12;
data_buffer[i4+3]=0xFF;
Serial.print(" new: ");
Serial.print(data_buffer[i4],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+1],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+2],HEX);
Serial.print(" ");
Serial.println(data_buffer[i4+3],HEX);
delay(1000);
_write_page(startAddress, &data_buffer[0]);
Serial.print(" test: ");
Serial.print(data_buffer[i4],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+1],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+2],HEX);
Serial.print(" ");
Serial.println(data_buffer[i4+3],HEX);
delay(1000);
_read_page(startAddress, &data_buffer[0]);
Serial.print(" result: ");
Serial.print(data_buffer[i4],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+1],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+2],HEX);
Serial.print(" ");
Serial.print(data_buffer[i4+3],HEX);
}
void loop() {
if(Serial.available() > 0) { // Пришли данные от считывателя
char _tempRS232 = Serial.read();
Serial.print(_tempRS232);
if(_tempRS232=='0') {
Serial.println("");
Serial.print("START TEST");
startTest();
}
}
}
Вроде все работает, но есть одно НО: при попытке записи байта 0xFF ячейка памяти не обновляется. Любой другой байт записывается нормально.
Вот результат в терминале:
=====================
START
10
START TESTManufacturer ID: 0 Memory Type: 0 Capacity: 0
startAddress: 32 old: 0 0 FF F0 new: FF FF 12 FF
test: FF FF 12 FF
result: 0 0 12 F0
Подскажите, что не так делаю.
Здравствуйте. Имеется вот такой модуль:
Причем не один, а два. И с обоими одна и та же проблема.
Питаются Arduino UNO и Модуль W5500 от понижающего преобразователя на 5В (3А).
Подключаюю к Arduino UNO на стандартные пины SPI, земля у модуля и Arduino - общая. Сначала подключал напрямую, потом добавил в схему преобразователь уровней. Кроме модуля на шине SPI висит ещё флешка 25Q64 (SS: 9 pin). Не думаю, что она влияет, так как без нее все тоже самое.
Проблема в следующем: через раз модуль при включении не запускается. Желтый светодиод в разъеме Ethernet загорается, после этого загорается зеленый и оба светодиода сразу тухнут. Через 1 сек. всё повторяется. И так до бесконечности. Если выключить питание схемы, подождать, пока все светодиоды потухнут и включить питание - все начинает работать. Иногда модуль начинает работать нормально при первом включении.
Подскажите как бороться с этой проблемой. Куда копать и на что смотреть.
Звучит примерно, как: научте шашлык меня кушать.
Разберитесь в Вашем примере что и куда отправляется, тогда и вопрос сам собой отпадёт.
trackball пише:Arduino Mega - это конечно круто, но 40 проводов тянуть в одну точку...
Я бы предложил взять контроллер попроще и подешевле и добавить к нему расширители портов, например MCP23017. К тому же у них есть выход прерывания по изменению уровня любого входа. Чуть больше плат, но меньше проводов и по деньгам чуть дешевле выйдет.
Все зависит от расстояния между кнопками и ардуинокй. ИМХО иногда лучше бросить 40 проводов чем трахаться с i2c из-за возможных проблем с большим расстоянием.
Полностью согласен, что "иногда". Но иногда и наоборот.
trackball пише:Arduino Mega - это конечно круто, но 40 проводов тянуть в одну точку...
Я бы предложил взять контроллер попроще и подешевле и добавить к нему расширители портов, например MCP23017. К тому же у них есть выход прерывания по изменению уровня любого входа. Чуть больше плат, но меньше проводов и по деньгам чуть дешевле выйдет. И с адресными светодиодами я бы не заморачивался. По простому - включение от тех же кнопок. Но если подсветка далеко от кнопок, то опять таки MCP23017 или 74HC595 для экономии проводов.
По большому счёту разница в пару долларов в железе, по сравнению со стоимостью всей остальной обвязки (светодиоды, транзисторы, резисторы подтяжки, кнопки и пр.), небольшая, но вот количество проводов и их укладка - это как раз то, на чём стоит сэкономить на стадии проектирования (в хорошем смысле).
Звучит грамотно. Но мне бы схему - ведь я совсем мало понимаю в электронике, сейчас мне по силам скопировать схему, ну и может, скорректировать немного скетч под себя. Разработка - это, мягко говоря, не моё. И про прерывания я как-то не вкурил пока что, непонятная тема для меня.
Мне нужна помощь в том, чтобы показать правильную схему, ведь задача - я тут форум полистал - плёвая для местных шарящих. Тут и не такое ваяют.
Вопросы по сути вашего сообщения:
- не подскажете, может, какую ссылку, где поподробнее можно было бы почитать про использование MCP23017, и расширители портов?
- я правильно понимаю, с помощью этих расширителей можно сделать нужное количество пинов? - тогда как решается вопрос количества проводов?
- в АрдуиноИДЕ MCP23017 прошивается, или нужно что-то другое?
Набираем в поиске "MCP23017 Arduino", "74HC595 Arduino", "прерывания Arduino" - будет куча готовых примеров со схемами
Вопрос на засыпку: D0 подтянут внешним сопротивлением на Vcc ?
Если да, то: читаем мануал внимательно. Для нормальной загрузки ESP8266 с флешки (у нее есть и другие варианты загрузки) D0 (GPIO15) должен быть в LOW, D3 (GPIO0) и D4 (GPIO2) должны быть в HIGH. После загрузки можете их использовать как хотите, но при старте обеспечьте именно такие уровни
1) на работу можно добираться пешком, велосипедом, маршруткой, троллейбусом, трамваем, вертолётом, катером и пр. Причём можно комбинировать. Мы же не знаем, что за коробки и как их можно с полок снимать. Может внутри мягкие игрушки, тогда их можно просто скидывать с полок (шутка). Скорее всего коробки будут стоять на специальных поддонах (+500 грамм на вскидку), значит снимать нужно уже 2 кг.
2) Тележке прийдется возить на себе подъемник, двигатель подъемника, значит нужно увеличить вес АКБ. Да и для подъемника доп. вес АКБ не помешает (и как противовес, и как источник энергии для подъема/спуска груза).
3) На вскидку 4-х метровая алюминиевая лестница весит около 7 кг. Соответственно подъемник из того же материала (с учётом жесткости) будет весить килограмм 20, а из железа - как минимум 50.
4) Неровность полов: при наклоне тележки подъемник будет наклонятся вместе с ней. Даже в сложенном варианте - это все-равно рычаг. Какие перепады высот есть на складе?
Слишком много неизвестных...
ну-ну...
Манипулятор (он же рычаг) 4 м. Жёсткость конструкции должна обеспечивать точное позиционирование на высоте 4 м +- 1-2 см (поправьте, если не прав). Дальше начинаем считать вес тележки, чтобы 4-х метровый рычаг с 1,5кг груза её не завалил случайно...
Хотя Вам простительно, вы же в отличии от ТС не утверждали, что разбираетесь в физике.
...Для начала что б снимать товар с полок на высоте 4 метра. Сам программист. И в физике соображаю...
Что-то мне подсказывает, что колёса от гироскутера не выдержат вес манипулятора
Arduino Mega - это конечно круто, но 40 проводов тянуть в одну точку...
Я бы предложил взять контроллер попроще и подешевле и добавить к нему расширители портов, например MCP23017. К тому же у них есть выход прерывания по изменению уровня любого входа. Чуть больше плат, но меньше проводов и по деньгам чуть дешевле выйдет. И с адресными светодиодами я бы не заморачивался. По простому - включение от тех же кнопок. Но если подсветка далеко от кнопок, то опять таки MCP23017 или 74HC595 для экономии проводов.
По большому счёту разница в пару долларов в железе, по сравнению со стоимостью всей остальной обвязки (светодиоды, транзисторы, резисторы подтяжки, кнопки и пр.), небольшая, но вот количество проводов и их укладка - это как раз то, на чём стоит сэкономить на стадии проектирования (в хорошем смысле).
Всем привет.
Я ещё очень сильно плаваю в теме, но поиском так и не нашёл ответа.
Есть простенькая задача: подключить к интернету датчики (герконы, ИК-датчики движения) и светодиодики. Может быть ещё какие-нибудь релюшки, датчики температуры, но это уже не обязательное условие. Общее количество - 10-20 штук. Протокол: HTTP либо MQTT Проблем с подключением всего этого хозяйства к микроконтроллеру(микроконтроллерам) не вижу. Вопрос в цене.
Сейчас играюсь с ESP8266 (LoLin nodeMCU v3). Его цена порядка 3$ и плюс расширитель портов ещё где-то 1$. Но это WiFi, а я хочу уйти от радиоканала, тем более, что МК у меня как раз возле роутера жить будет. А с проводным вариантом что-то не могу найти ничего сравнительно недорогого. Один только W5500 выходит в 3$ + МК = получается раза в 2 дороже. Неужели нет хотя бы чего-то аналогичного по цене и объёму памяти для программы?
Что бы Вы посоветовали для таких задач? Какой МК? Какую платформу?
Сторінки 1