nrf24l01+ и atmega8
- Сообщения: 110
- Зарегистрирован: Вс май 10, 2009 18:23:45
Не могу понять почему модуль nrf24l01+ с внешней антенной определяется МК хорошо, а с печатной платой не определяется вообще. Оба модуля рабочие, с ардуино оба определяются. Просто в разъем вставляю то один то другой модуль, распиновка одинаковая.
- Реклама
- Сообщения: 563
- Зарегистрирован: Чт апр 16, 2009 04:53:41
Печатную плату сам ваял?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
- Сообщения: 110
- Зарегистрирован: Вс май 10, 2009 18:23:45
[uquote="vek",url="/forum/viewtopic.php?p=3541538#p3541538"]Печатную плату сам ваял?[/uquote]
Сам. Все вроде разобрался, убрал резисторы по линии spi и заработало нормально, хотя на другой плате они стоят и все работает. Без резистором раньше не шился контроллер, мешал nrf модуль. А тут шьется, чудеса какие то.
Сам. Все вроде разобрался, убрал резисторы по линии spi и заработало нормально, хотя на другой плате они стоят и все работает. Без резистором раньше не шился контроллер, мешал nrf модуль. А тут шьется, чудеса какие то.
Доброго времени, уважаемые коты и кошечки! Осмелюсь в этой теме задать свой вопрос.
Собственно проблема: почему не работает PIPE5? Вот куски кода:
uint8_t TX_ADDRESS1[TX_ADR_WIDTH] = {0x01,0xb5,0xa1};
uint8_t TX_ADDRESS2[TX_ADR_WIDTH] = {0x02,0xb5,0xa1};
uint8_t TX_ADDRESS3[TX_ADR_WIDTH] = {0x03,0xb5,0xa1};
uint8_t TX_ADDRESS4[TX_ADR_WIDTH] = {0x04,0xb5,0xa1};
uint8_t TX_ADDRESS5[TX_ADR_WIDTH] = {0x05,0xb5,0xa1};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NRF24_Write_Buf(RX_ADDR_P1, TX_ADDRESS1, TX_ADR_WIDTH);
NRF24_Write_Buf(RX_ADDR_P2, TX_ADDRESS2, 1); //для каналов Pipe2 — Pipe5 мы заносим
NRF24_Write_Buf(RX_ADDR_P3, TX_ADDRESS3, 1); // только младший байт
NRF24_Write_Buf(RX_ADDR_P4, TX_ADDRESS4, 1); // регистра, а старшие берутся из
NRF24_Write_Buf(RX_ADDR_P5, TX_ADDRESS5, 1); // адреса канала pipe1.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NRF24_WriteReg(RX_PW_P0, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 0
NRF24_WriteReg(RX_PW_P1, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 1
NRF24_WriteReg(RX_PW_P2, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 2
NRF24_WriteReg(RX_PW_P3, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 3
NRF24_WriteReg(RX_PW_P4, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 4
NRF24_WriteReg(RX_PW_P5, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 5
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NRF24_WriteReg(EN_AA, 0x3F);
NRF24_WriteReg(EN_RXADDR, 0x3F);
что имею: две платы с STM8S103F3 и подключенные к ним платки с али NRF24L01+ которые без антенн. использую прерывание от NRF
Передатчик присваивает себе по очереди адреса со списка и отправляет пакет. на передатчике включено AutoAck. Пакеты передаются нормально. Дальность работы около 25 м. на улице около 50.
Куски кода из прошивки приемника. Ловлю прерывание о приходе пакета и по ЮАРТу скидываю в терминал содержимое пакета и номер PIPE с которого пришел пакет. С PIPE1-PIPE4 корректно работает а вот с PIPE5 ничего нет. Платы между собой менял местами - эффекта ноль, обе платы с одной партии, пришли неразрезанные.
Просто очень интересно почему так. А то решил разобраться с данными модулями перед их применением
Может кто с этим сталкивался?
Заранее спасибо ))
Собственно проблема: почему не работает PIPE5? Вот куски кода:
Спойлер
#define TX_ADR_WIDTH 3uint8_t TX_ADDRESS1[TX_ADR_WIDTH] = {0x01,0xb5,0xa1};
uint8_t TX_ADDRESS2[TX_ADR_WIDTH] = {0x02,0xb5,0xa1};
uint8_t TX_ADDRESS3[TX_ADR_WIDTH] = {0x03,0xb5,0xa1};
uint8_t TX_ADDRESS4[TX_ADR_WIDTH] = {0x04,0xb5,0xa1};
uint8_t TX_ADDRESS5[TX_ADR_WIDTH] = {0x05,0xb5,0xa1};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NRF24_Write_Buf(RX_ADDR_P1, TX_ADDRESS1, TX_ADR_WIDTH);
NRF24_Write_Buf(RX_ADDR_P2, TX_ADDRESS2, 1); //для каналов Pipe2 — Pipe5 мы заносим
NRF24_Write_Buf(RX_ADDR_P3, TX_ADDRESS3, 1); // только младший байт
NRF24_Write_Buf(RX_ADDR_P4, TX_ADDRESS4, 1); // регистра, а старшие берутся из
NRF24_Write_Buf(RX_ADDR_P5, TX_ADDRESS5, 1); // адреса канала pipe1.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NRF24_WriteReg(RX_PW_P0, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 0
NRF24_WriteReg(RX_PW_P1, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 1
NRF24_WriteReg(RX_PW_P2, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 2
NRF24_WriteReg(RX_PW_P3, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 3
NRF24_WriteReg(RX_PW_P4, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 4
NRF24_WriteReg(RX_PW_P5, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 5
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NRF24_WriteReg(EN_AA, 0x3F);
NRF24_WriteReg(EN_RXADDR, 0x3F);
что имею: две платы с STM8S103F3 и подключенные к ним платки с али NRF24L01+ которые без антенн. использую прерывание от NRF
Передатчик присваивает себе по очереди адреса со списка и отправляет пакет. на передатчике включено AutoAck. Пакеты передаются нормально. Дальность работы около 25 м. на улице около 50.
Куски кода из прошивки приемника. Ловлю прерывание о приходе пакета и по ЮАРТу скидываю в терминал содержимое пакета и номер PIPE с которого пришел пакет. С PIPE1-PIPE4 корректно работает а вот с PIPE5 ничего нет. Платы между собой менял местами - эффекта ноль, обе платы с одной партии, пришли неразрезанные.
Просто очень интересно почему так. А то решил разобраться с данными модулями перед их применением
Может кто с этим сталкивался?
Заранее спасибо ))

