Страница 1 из 1

связь 2х Atmega8 через RFM69HW

Добавлено: Ср янв 24, 2024 11:53:01
Vovik-78
всем доброго дня.
Пытаюсь передать переменную через RFM69HW. Значения переменной не передаются или не принимаются.
Оборудования для замера радиочастотной активности нет.
Может у кого то есть кусочек кода, что бы точно рабочий был, для проверки модулей. А то может с ними что то не так.
Хотя может и я в коде что то напортачил. вот код передающей части:

Код: Выделить всё

#define F_CPU 1000000UL // Частота контроллера 1 МГц

				#include <avr/io.h>
				#include <util/delay.h>
				#include <avr/interrupt.h>
				#include <stdint.h>

				#define LCD_RS 2
				#define LCD_EN 3
				#define LCD_D4 4
				#define LCD_D5 5
				#define LCD_D6 6
				#define LCD_D7 7

				#include "LCD.h"


				// Настройки битов модуля RFM69HW
				#define RFM69_FREQUENCY_MSB 0x10
				#define RFM69_FREQUENCY_LSB 0xE4
				#define RFM69_POWER_LEVEL   0x80
				#define RFM69_DATA_RATE     0x03
				#define RFM69_CHANNEL_WIDTH 0x48
				#define RFM69_SPI_SPEED     1000000 // 1 MHz SPI speed

				// Пины для подключения к модулю RFM69
				#define SS_PIN  2
				#define MOSI_PIN 3
				#define MISO_PIN 4
				#define SCK_PIN  5

				// Переменные для передачи данных
				volatile uint16_t comand_1 = 0;

				void spi_init() {
					// Настройка SPI
					DDRB |= (1 << MOSI_PIN) | (1 << SCK_PIN) | (1 << SS_PIN);
					SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
				}

				void spi_transfer(uint8_t data) {
					SPDR = data;
					while (!(SPSR & (1 << SPIF)));
				}

				void rfm69_init() {
					// Настройка битов модуля
					spi_transfer(0x80 | RFM69_FREQUENCY_MSB);
					spi_transfer(RFM69_FREQUENCY_LSB);
					spi_transfer(RFM69_POWER_LEVEL);
					spi_transfer(RFM69_DATA_RATE);
					spi_transfer(RFM69_CHANNEL_WIDTH);

					// Включение передатчика
					spi_transfer(0x80 | 0x09);
					spi_transfer(0x01);
				}

				void rfm69_send(uint16_t data) {
					// Передача данных
					spi_transfer(0x80 | 0x00);
					spi_transfer(data >> 8);
					spi_transfer(data & 0xFF);
					spi_transfer(0x80 | 0x08);
				}

				int main() {
					spi_init();
					rfm69_init();
					LCD_Init();
					_delay_ms(10);
					LCD_Print("333-555");

					while (1) {
						rfm69_send(comand_1);
						comand_1++;
						print_varible (comand_1)  ;

						_delay_ms(2000); // Задержка 2 секунды
					}

					return 0;
				}

А вот приннимающей:

Код: Выделить всё

#define F_CPU 1000000UL // Частота контроллера 1 МГц

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define LCD_RS 2
#define LCD_EN 3
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7

#include "LCD.h"

// Настройки битов модуля RFM69HW
#define RFM69_FREQUENCY_MSB 0x10
#define RFM69_FREQUENCY_LSB 0xE4
#define RFM69_POWER_LEVEL   0x80
#define RFM69_DATA_RATE     0x03
#define RFM69_CHANNEL_WIDTH 0x48
#define RFM69_SPI_SPEED     1000000 // 1 MHz SPI speed

// Пины для подключения к модулю RFM69
#define SS_PIN  2
#define MOSI_PIN 3
#define MISO_PIN 4
#define SCK_PIN  5

// Переменные для принятия данных
volatile uint16_t comand_2 = 0;

void spi_init() {
	// Настройка SPI
	DDRB |= (1 << MOSI_PIN) | (1 << SCK_PIN) | (1 << SS_PIN) | (1 << MISO_PIN);
	SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
}

uint8_t spi_transfer(uint8_t data) {
	SPDR = data;
	while (!(SPSR & (1 << SPIF)));
	return SPDR;
}

void rfm69_init() {
	// Настройка битов модуля
	spi_transfer(0x80 | RFM69_FREQUENCY_MSB);
	spi_transfer(RFM69_FREQUENCY_LSB);
	spi_transfer(RFM69_POWER_LEVEL);
	spi_transfer(RFM69_DATA_RATE);
	spi_transfer(RFM69_CHANNEL_WIDTH);

	// Включение приемника
	spi_transfer(0x80 | 0x05);
	spi_transfer(0x01);
}

uint16_t rfm69_receive() {
	// Прием данных
	spi_transfer(0x80 | 0x10);
	uint16_t received_data = (spi_transfer(0) << 8) | spi_transfer(0);
	return received_data;
}

int main() {
	spi_init();
	rfm69_init();
	LCD_Init();
	_delay_ms(10);
	LCD_Print("333-444");

	while (1) {
		comand_2 = rfm69_receive();
		print_varible (comand_2);

		// Ваш код для обработки переменной comand_2

		_delay_ms(500); // Задержка 0.5 секунды
	}

	return 0;
}

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Вс апр 14, 2024 22:10:21
Vovik-78
Жаль, что так никто ничего и не подсказал (((

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Ср апр 17, 2024 01:00:53
kalobyte
потому что не в том разделе тема

для работы с передатчиками нужен волномер, схемы сам загуглиш

правильный код - это библиотеки для арудино
https://github.com/LowPowerLab/RFM69
залил примеры и сразу проверил модули, а не изобретать велосипед

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Ср апр 17, 2024 12:50:06
roman.com
[uquote="Vovik-78",url="/forum/viewtopic.php?p=4534531#p4534531"]Оборудования для замера радиочастотной активности нет.[/uquote]
Оборудование для замера радиочастотной активности - это простой диод с индикатором))
https://www.youtube.com/watch?v=YChJt2jQXVg
:tea:
в попу все ваши библиотеки для арудино))
надо открыть даташит и настроить всё согласно даташиту.
:tea:
кто это будет делать за вас... не ясно))
:tea:

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Ср апр 17, 2024 14:30:23
Morroc
[uquote="roman.com",url="/forum/viewtopic.php?p=4569534#p4569534"]кто это будет делать за вас... не ясно))[/uquote]
уже сделали... в библиотеках :))

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Вт май 07, 2024 16:25:39
Vovik-78
[uquote="kalobyte",url="/forum/viewtopic.php?p=4569402#p4569402"]правильный код - это библиотеки для арудино
https://github.com/LowPowerLab/RFM69
залил примеры и сразу проверил модули, а не изобретать велосипед[/uquote]
Ну вообще то у меня ни ардуина а Атмега8

Добавлено after 1 minute 15 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4569534#p4569534"][uquote="Vovik-78",url="/forum/viewtopic.php?p=4534531#p4534531"]Оборудования для замера радиочастотной активности нет.[/uquote]
Оборудование для замера радиочастотной активности - это простой диод с индикатором))
https://www.youtube.com/watch?v=YChJt2jQXVg[/uquote]

Спасибо, посмотрю.

Добавлено after 1 minute 27 seconds:
[uquote="kalobyte",url="/forum/viewtopic.php?p=4569402#p4569402"]потому что не в том разделе тема[/uquote]

Так тут увидел темы про радиоуправление на подобных схемах, вот и написал сюда.

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Вт май 07, 2024 17:58:25
Morroc
[uquote="Vovik-78",url="/forum/viewtopic.php?p=4577324#p4577324"]Ну вообще то у меня ни ардуина а Атмега8[/uquote]
Шансов найти готовую библиотеку к ардуине больше. В IDE там есть вариант с атмега8, я что то на ней ваял как на ардуине, но библиотека может оказаться несовместима с 8.

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Вт май 07, 2024 19:21:25
roman.com
[uquote="Vovik-78",url="/forum/viewtopic.php?p=4577324#p4577324"]Так тут увидел темы про радиоуправление на подобных схемах, вот и написал сюда.[/uquote]
тут у нас куча тем про радиоуправление... ни нигде ни разу мы не использовали библиотеки))
что ж все такие ленивые стали.. .уже даташит открыть всем влом))
:tea:

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Вт май 07, 2024 22:07:14
kalobyte
Vovik-78 писал(а):Ну вообще то у меня ни ардуина а Атмега8
ардуино это фреймворк, а не контроллер
он упрощает и унифицирует написание кода
под мегу 8 надо только установить свое ядро, загуглиш как это сделать
Vovik-78 писал(а):Так тут увидел темы про радиоуправление на подобных схемах, вот и написал сюда.
тема больше подходит под программирование контроллеров, а не про радио

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Ср май 08, 2024 09:16:03
Morroc
[uquote="kalobyte",url="/forum/viewtopic.php?p=4577409#p4577409"]под мегу 8 надо только установить свое ядро, загуглиш как это сделать[/uquote]
раньше вроде по дефолту была поддержка. пункт назывался как то "... NG and older "

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Ср май 08, 2024 11:18:48
kalobyte
ну так первые версии ардуины и были написаны, когда мега8 была популярная и платы были на ее основе

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Чт май 16, 2024 22:53:46
Vovik-78
[uquote="roman.com",url="/forum/viewtopic.php?p=4577362#p4577362"]что ж все такие ленивые стали.. .уже даташит открыть всем влом))
:tea:[/uquote]
Так приведенный в первом посте код и писал по даташиту. Но либо что то недоглядел, либо ошибся. По этому и создал тему.
Сложно искать ошибки в своем же коде.

Re: связь 2х Atmega8 через RFM69HW

Добавлено: Пт май 24, 2024 17:00:27
SAU
а может там связи нет.Попробуйте подавать чередующиеся ноль и единиц через секунду-две,а на приеме подключите светодиод.
А уж потом со своей переменной работайте