Mx-f01 радиомаяк

Тема в разделе "Закажу проект", создана пользователем Kot26ru, 15 ноя 2021.

  1. Kot26ru

    Kot26ru Гик

    радиомодули я уже заказал, правда они 433:(, 315 нет в наличии. Но для опытов пойдет, а 315 поищу, неохота с Али заказывать - можно на месяцы попасть:rolleyes:
     
  2. parovoZZ

    parovoZZ Гуру

    операторы давно хотят выключить, да не могут - пул телефонов пока ещё большой, а выхлоп - малнький.

    это где-то в москале может так. А на периферии радиус 30-50 км.
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Не в Москве а за городом вдоль дорог. Там GSM 900 и радиус больше зато и емкость базы меньше. Поэтому интернет не везде хотя связь есть. Когда я работал в Мухосранске в МТС в 2000 на заре GSM в городе 350 тыщ населения было всего 4 базовых станции и 1200 абонентов. Тогда хватало а потом перешли на 1800 уменьшив мощность и увеличив емкость БС. Ты скажи лучше сможешь код подправить в Студии для ТС? Там пару строчек всего. Тыж в Студии шаришь?
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Да заказывай в DIP корпусе а радиомодули можно будет оперативно заменить на 315 мГц
     
  5. Kot26ru

    Kot26ru Гик

    https://smdx.ru/attiny13a-dip8
    ок, заказываю
     
  6. parovoZZ

    parovoZZ Гуру

    ну так выложи. Тока не дуринакод. У меня нет ничего для нее.
     
  7. Kot26ru

    Kot26ru Гик

    вот нашел такую статью по прошивке тиньки через дуню. Возможно поможет. https://voltiq.ru/program-attiny-13-attiny-13-a-arduino-ide/
     
  8. Airbus

    Airbus Радиохулиган Модератор

    Вот код-посмотри и если не трудно проверь в Студии?
    Код (Text):
    #define F_CPU 9600000UL
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <math.h>
    #include <stdlib.h>

    int i=0;

    #define DELAY 200            // настройка скорости (частоты)

    #define RF_PORT PORTB        // порт передачи
    #define RF_PIN  PINB        // порт чтения
    #define RF_DDR  DDRB

    #define OUT_PIN 0        // линия передачи
    #define IN_PIN  1            // линия чтения

    // функции с модулем RF

    #define SET(r, b) (r |= (1 << b))  // установка бита порта
    #define CLR(r, b) (r &= ~(1 << b)) // сброс бита порта

    #define OUT_LOW  (CLR(RF_PORT, OUT_PIN))  // низкий уровень CE
    #define OUT_HIGH (SET(RF_PORT, OUT_PIN))  // высокий уровень CE


    void RF_init()
    {
        /*настройка входа и выхода*/
        RF_DDR  = (1<<OUT_PIN)|(0<<IN_PIN);
        RF_PORT = (1<<OUT_PIN)|(1<<IN_PIN);
    }


    // передача байта
    void RF_write(unsigned char data){

        unsigned char i;


            for(i = 0; i < 8; i++){ // передача данных

                if(((data >> 7) & 1)) { // получение одного бита для передачи
                  OUT_HIGH; // передача единицы
                } else {
                  OUT_LOW;  // передача нуля
                }

             
                _delay_us(DELAY);

             
                data <<= 1;
            }
    }


    // чтение байта
    unsigned char RF_read(void){

        unsigned char  res = 0;
        unsigned char i;


            for(i = 0; i < 8; i++){ // прием данных

                res <<= 1;
                if((RF_PIN >> IN_PIN) & 1){ // получение бита
                  res |= 1; // получили 1, иначе запишется 0 на предыдущем шаге
                }

                     
                _delay_us(DELAY);
            }

     
        return res;
    }


    int main(void)
    {

    while (1)
    {

    for (i=0; i<256; i++) {

    for (int j=0; j<80; j++) {
    RF_write (0b10110010);

    RF_write (i);
    }

    _delay_ms(350);

    }
    } // конец while(1)
    } // конец main
     
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Я так понимаю надо убрать цикл for (i=0; i<256; i++) и передавать просто RF_write (i); где i это номер маячка-так?
     
  10. Kot26ru

    Kot26ru Гик

    да, перебирать числа и передавать не нужно
     
  11. Kot26ru

    Kot26ru Гик

    и функцию чтения из кода можно убрать - она передатчику не нужна
     
  12. Kot26ru

    Kot26ru Гик

    а для каких целей нужен второй цикл:
    Код (C++):
    for (int j=0; j<80; j++) {
    RF_write (0b10110010);
    для чего 80 раз посылку числа 0b10110010 делать?
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Это чтоб мусор не ловить. Идентификатор «своего» передатчика.80 можно уменьшить. Но вообще то я Паровоза просил посмотреть ну и Ваше мнение нужно. Можно посылать 2 числа если первое например 22 то второе номер маячка например 5. Если приняли 22 то отображаем 5 если нет ничего не отображаем
     
    Последнее редактирование: 17 ноя 2021
  14. a1000

    a1000 Гуру

    Если вам надо так
    Код (C++):
    #define F_CPU 9600000UL
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <math.h>
    #include <stdlib.h>

    int i=0;

    #define DELAY 200            // настройка скорости (частоты)

    #define RF_PORT PORTB        // порт передачи
    #define RF_PIN  PINB        // порт чтения
    #define RF_DDR  DDRB

    #define OUT_PIN 0        // линия передачи
    #define IN_PIN  1            // линия чтения

    // функции с модулем RF

    #define SET(r, b) (r |= (1 << b))  // установка бита порта
    #define CLR(r, b) (r &= ~(1 << b)) // сброс бита порта

    #define OUT_LOW  (CLR(RF_PORT, OUT_PIN))  // низкий уровень CE
    #define OUT_HIGH (SET(RF_PORT, OUT_PIN))  // высокий уровень CE


    void RF_init()
    {
        /*настройка входа и выхода*/
        RF_DDR  = (1<<OUT_PIN)|(0<<IN_PIN);
        RF_PORT = (1<<OUT_PIN)|(1<<IN_PIN);
    }


    // передача байта
    void RF_write(unsigned char data){

        unsigned char i;


        for(i = 0; i < 8; i++){ // передача данных

            if(((data >> 7) & 1)) { // получение одного бита для передачи
                OUT_HIGH; // передача единицы
                } else {
                OUT_LOW;  // передача нуля
            }

           
            _delay_us(DELAY);

           
            data <<= 1;
        }
    }


    // чтение байта
    unsigned char RF_read(void){

        unsigned char  res = 0;
        unsigned char i;


        for(i = 0; i < 8; i++){ // прием данных

            res <<= 1;
            if((RF_PIN >> IN_PIN) & 1){ // получение бита
                res |= 1; // получили 1, иначе запишется 0 на предыдущем шаге
            }

           
            _delay_us(DELAY);
        }

       
        return res;
    }


    int main(void)
    {

        while (1)
        {

            //for (i=0; i<256; i++) {

                for (int j=0; j<80; j++) {
                    RF_write (0b10110010);

                    RF_write (i);
                }

                _delay_ms(350);

            //}
        } // конец while(1)
    } // конец main
    Ловите. Только немного не понял код. Есть функция инициализации void RF_init(), но она нигде не вызывается. Может я чего не досмотрел?
     

    Вложения:

    • Debug.zip
      Размер файла:
      12,6 КБ
      Просмотров:
      95
  15. Kot26ru

    Kot26ru Гик

    так этот идентификатор "своего" передатчика вот точно не нужен. Иначе приемник будет только один передатчик принимать, что не годится. Принимать он должен все. А насчет мусора - можно же передавать строку, начало которой будет какой то контрольный символ (или два) а потом уже номер маяка. А в приемнике делать проверку принятого сообщения - если начинается не контрольным символом - игнорить, если контрольный, то "отрезать контрольку" и оставлять только номер маяка
     
  16. SergeiL

    SergeiL Оракул Модератор

    Вот включаете вы маяки и начинают они долбить, пускай и с разным таймаутом, но часто, практически одновременно.
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Код не мой поэтому ХЗ. Но спасибо за помощь! Скачано с Паяльника.
    Может и не надо но ВСЕ твои маяки будут бить идентификатор. И ты только их будешь принимать а не соседа который через стенку жмет автозапуск. Но если не надо так ненадо.
    Сереж долбить они будут без антенн в радиусе 5—10 метров. Сильно мешать не будут. Да и приемник загрубим чтоб не ловил все что плохо лежит. Я тоже хочу поиграться поэтому и заинтересовался. А так мне без надобности
     
  18. Kot26ru

    Kot26ru Гик

    приедут модули - буду пробовать. Сейчас никак проверить не могу, после опытов отпишусь о результатах. В любом случае спасибо, что помогаете:)
     
  19. a1000

    a1000 Гуру

    Ссылочку дайте. А то я как-то не совсем понял как этот модуль работает. Получается нужно просто на входную ножку с определённой частотой пихать биты и всё? Настроек никаких?
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Доброго вечера!Воть! Вы правы тупо передает одно(или два?)числа. Идентификатор и номер маячка. В примере тупо считает и передает. Завтра перед работой попробую проверить на железе если успею. А Ваш код откомпилить сможете в НЕХ чтоб передавал например 22?