Ключевое ?лово

vk

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Железо для умного дома

ТЕМА: Прошивка NRF24le1

Прошивка NRF24le1 17 Авг 2017 16:50 #19478

  • fixxxer
  • fixxxer аватар
  • Не в сети
  • Новый участник
  • Сообщений: 11
  • Спасибо получено: 3
  • Репутация: 1
Adminhs пишет:
Народ использует RCswitch и VirtualWire на частотах 433.
Понятно, это как минимум датчики+ардуина+передатчик. Но зато стены лучше прошибает. :)
Администратор запретил публиковать записи гостям.

Прошивка NRF24le1 02 Сен 2017 22:18 #19534

  • loginkr
  • loginkr аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Сообщений: 24
  • Спасибо получено: 1
  • Репутация: 0
Подскажите в чем может быть проблема :
не читаются данные с датчика d18b20
код:
#define chclient 		1 // номер клиента 1...
#define SPEED 			1 // 1 - 250кб , 2 - 1 мб , 3 -2 мб.
#define PAlevel 		3 // мощность 0..3
#define CHANNEL 		75 // 123
#define Crclength 	2 // 0 - crc off ,1 - 8bit ,2 - 16bit
#define AutoAck 		false // выключить аппаратное потверждение
#define WD_SAFE watchdog_calc_timeout_from_sec(5)

#define DHTPIN 			GPIO_PIN_ID_P0_4
#define DSPIN 			GPIO_PIN_ID_P0_4

#define useDHT 			0  // 1 - DHT ,  0 - DS18b20

#define POWER_PIN 	GPIO_PIN_ID_P0_6

#define nofloat 1 	// без float , данные передаются умноженные на 10.Очень экономит место.

#define INTERVAL 		10 //sec



#include "../libs.h"
#include "../nRFLE.c"


typedef struct{
	unsigned char identifier;// номер передатчика.МЕНЯТЬ НЕЛЬЗЯ
	long count;
	#if nofloat
	int temperature_Sensor; //передаём температуру.
	#if useDHT
		int Humidity_Sensor;// передаём влажность
	#endif
	#else
	 float temperature_Sensor;// передаём температуру.
	 #if useDHT
	 	float Humidity_Sensor;// передаём влажность
	 #endif
	#endif
}
nf1;
nf1 clientnf;

#if useDHT
unsigned char datadht[5];

uint8_t dhtread ()
{

unsigned char j = 0, i = 0;

datadht[0] = datadht[1] = datadht[2] = datadht[3] = datadht[4] = 0;

 //pin as output and set 0
gpio_pin_configure(DHTPIN, GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT);

delay_ms(18);

gpio_pin_val_set(DHTPIN); //set 1

//pin as input
gpio_pin_configure(DHTPIN,GPIO_PIN_CONFIG_OPTION_DIR_INPUT);

//=============check DHT response
delay_us(51);
if (gpio_pin_val_read(DHTPIN)) return 0;
delay_us(81);
if (!gpio_pin_val_read(DHTPIN)) return 0;

//===============receive 40 data bits

while (gpio_pin_val_read(DHTPIN));
for (j=0; j<5; j++)
    {
    datadht[j]=0;
    for(i=0; i<8; i++)
        {
        while (!gpio_pin_val_read(DHTPIN));
        delay_us (30);
	  if (gpio_pin_val_read(DHTPIN))
            datadht[j]|=1<<(7-i);
        while (gpio_pin_val_read(DHTPIN));
        }
    }

	return 1;
}
#else
// OneWire библиотеки-----------

void OneWireReset()
{
     gpio_pin_val_clear(DSPIN);
 gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT);
     delay_us(500);
gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);

     delay_us(500);
}

void OneWireOutByte(uint8_t d)
{
   uint8_t n;
interrupt_control_global_disable();

   for(n=8; n!=0; n--)
   {
      if ((d & 0x01) == 1)
      {
	 gpio_pin_val_clear(DSPIN);
	 gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT);
         delay_us(2); //5
	 gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);
         delay_us(60);
      }
      else
      {
	 gpio_pin_val_clear(DSPIN);
	 gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT);
         delay_us(60);
	 gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);

      }
      d=d>>1;
   }
   interrupt_control_global_enable();
}


uint8_t OneWireInByte()
{
    uint8_t d=0, n,b=0;
  interrupt_control_global_disable();

    for (n=0; n<8; n++)
    {
	gpio_pin_val_clear(DSPIN);
	gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT);
        delay_us(2); // 5
	gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);
        delay_us(2); // 5
	b = gpio_pin_val_read(DSPIN);
        delay_us(50);
        d = (d >> 1) | (b<<7);
    }
    interrupt_control_global_enable();
    return(d);
}

#endif

//====================main========================

void main()
{
__xdata __at(0x0100) long countloop; //counter for loop
__xdata __at(0x0110) int sleep_counter;

#if useDHT
unsigned int crcdata;
#else
// ds
uint8_t SignBit;
uint8_t DSdata[2];
int TReading;
#endif

CLKLFCTRL = 1;
rtc2_configure(RTC2_CONFIG_OPTION_COMPARE_MODE_0_RESET_AT_IRQ , 65535); //65535=2 сек, 32767=1 сек
rtc2_run();
pwr_clk_mgmt_wakeup_configure(PWR_CLK_MGMT_WAKEUP_CONFIG_OPTION_WAKEUP_ON_RTC2_TICK_ALWAYS,0);


if ((PWRDWN&0x7)==0x3) {
    PWRDWN=0x0;
    RSTREAS=0x0;
    if (sleep_counter<(INTERVAL/2)) {
      sleep_counter++;

     // rtc2_run();
     // watchdog_set_wdsv_count(WD_SAFE);
     // pwr_clk_mgmt_close_retention_latches();
      pwr_clk_mgmt_enter_pwr_mode_memory_ret_tmr_on();
    }
		if (countloop <= 2147483646) countloop++;      /// счетчик передач для контроля качества канала
		else countloop = 0;

    clientnf.count=countloop;

} else {
    countloop = 0;
    clientnf.count = 0;
}



radiobegin(); //


openAllPipe(); // открываем прием/передачу
// или по ардуиновски:
//penWritingPipe(0xD2); // канал передачи
//openReadingPipe(1,0xE1); // Открываем канал приема

setChannel(CHANNEL);
setDataRate(SPEED);
setAutoAck(AutoAck);
setCRCLength(Crclength);
setPALevel(PAlevel);

clientnf.identifier=chclient;

#if useDHT
	gpio_pin_configure(POWER_PIN, // укажем необходимые параметры
		GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT |
		GPIO_PIN_CONFIG_OPTION_OUTPUT_VAL_CLEAR |
		GPIO_PIN_CONFIG_OPTION_PIN_MODE_OUTPUT_BUFFER_NORMAL_DRIVE_STRENGTH);
	gpio_pin_val_clear(DHTPIN);
	gpio_pin_configure(DHTPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);

	gpio_pin_val_set(POWER_PIN);
	delay_ms(850);
	dhtread ();
	gpio_pin_val_clear(POWER_PIN);

	crcdata= (datadht[0] + datadht[1] + datadht[2] + datadht[3]);

	if (datadht[0]==0 && datadht[1]==0 && datadht[2]==0 && datadht[3]==0) {
		clientnf.temperature_Sensor=0;
	  clientnf.Humidity_Sensor=0;
	   //обработка ошибки:не подключен датчик !!

	 } else if ( crcdata == datadht[4]) {

#if nofloat
   	  if (datadht[1]==0 && datadht[3]==0) {
	    // dht11
	    clientnf.temperature_Sensor=datadht[2]*10; // умножение на 10,чтобы было однинаково как у dht22,можно убрать.
	    clientnf.Humidity_Sensor=datadht[0]*10;

	  }else  { // dht22

       clientnf.Humidity_Sensor = (datadht[0] * 256 + datadht[1]);
       clientnf.temperature_Sensor = ((datadht[2] & 0x7F)* 256 + datadht[3]);
       if (datadht[2] & 0x80)  clientnf.temperature_Sensor *= -1;

	}
#else
   	  if (datadht[1]==0 && datadht[3]==0) {
	    // dht11
	    clientnf.temperature_Sensor=datadht[2];
	    clientnf.Humidity_Sensor=datadht[0];

	  }else  { // dht22

       clientnf.Humidity_Sensor = (float)(datadht[0] * 256 + datadht[1])/10;
       clientnf.temperature_Sensor = (float)((datadht[2] & 0x7F)* 256 + datadht[3])/10;
       if (datadht[2] & 0x80)  clientnf.temperature_Sensor *= -1;

	}
#endif
	 } else {/* обработка ошибки:ошибка CRC */}

#else
		gpio_pin_configure(POWER_PIN, // укажем необходимые параметры
			GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT |
			GPIO_PIN_CONFIG_OPTION_OUTPUT_VAL_CLEAR |
			GPIO_PIN_CONFIG_OPTION_PIN_MODE_OUTPUT_BUFFER_NORMAL_DRIVE_STRENGTH);
		gpio_pin_val_set(POWER_PIN);
		delay_ms(2000);
		gpio_pin_val_clear(DSPIN);
		gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);



     OneWireReset();
     OneWireOutByte(0xcc);
     OneWireOutByte(0x44);
     //strong

       gpio_pin_val_set(DSPIN);
      gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT);
       //delay_ms(1000);
       gpio_pin_configure(DSPIN, GPIO_PIN_CONFIG_OPTION_DIR_INPUT);
       gpio_pin_val_clear(DSPIN);

     OneWireReset();
     OneWireOutByte(0xcc);
     OneWireOutByte(0xbe);

		 gpio_pin_val_clear(POWER_PIN);

     DSdata[0] = OneWireInByte();
     DSdata[1] = OneWireInByte();

     TReading = (int)(DSdata[1] << 8) + DSdata[0];
     SignBit = TReading & 0x8000;
     if (SignBit) TReading = (TReading ^ 0xffff) + 1;

		 #if nofloat
     	clientnf.temperature_Sensor =(int)((6 * TReading) + TReading / 4)/100;
		 #else
			clientnf.temperature_Sensor =(float)((6 * TReading) + TReading / 4)/100;
		 #endif
#endif

		adc_power_up();
		rf_power_up(1);
		rf_write_tx_payload((const uint8_t*)&clientnf, 32, true); //transmit received char over RF

		//wait until the packet has been sent or the maximum number of retries has been reached
		while(!(rf_irq_pin_active() && rf_irq_tx_ds_active()));




	//disconnectGPIO();

	rf_irq_clear_all();
	rf_power_down();
	sleep_counter=0;
	//rtc2_run();
	//watchdog_set_wdsv_count(WD_SAFE);
	//pwr_clk_mgmt_close_retention_latches();
	pwr_clk_mgmt_enter_pwr_mode_memory_ret_tmr_on();
}

С dht22 проблем yнет
Последнее редактирование: 02 Сен 2017 22:20 от loginkr.
Администратор запретил публиковать записи гостям.

Прошивка NRF24le1 12 Сен 2017 19:46 #19617

  • loginkr
  • loginkr аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Сообщений: 24
  • Спасибо получено: 1
  • Репутация: 0
Проверил на 3х разных датчиках , результат тот же. => Проблема в коде или в соединении.
Из конструктора ds18b20 тоже не хочет работать.
В каком направлении искать ?

P.S. датчики на ардуинке работают
Администратор запретил публиковать записи гостям.

Прошивка NRF24le1 13 Сен 2017 15:40 #19626

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
3 проводная схема надеюсь, и резистор не забыли ?
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.

Прошивка NRF24le1 13 Сен 2017 15:41 #19627

  • loginkr
  • loginkr аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Сообщений: 24
  • Спасибо получено: 1
  • Репутация: 0
Да , сопротивление на месте. 3х проводная. На ардуине работает.
Администратор запретил публиковать записи гостям.

Прошивка NRF24le1 13 Сен 2017 15:43 #19628

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
В конструкторе точно работает... Давно реализовано, уже много народу испытало
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.
Модераторы: FlyRouter
Время создания страницы: 0.167 секунд

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.