радиомодули я уже заказал, правда они 433, 315 нет в наличии. Но для опытов пойдет, а 315 поищу, неохота с Али заказывать - можно на месяцы попасть
операторы давно хотят выключить, да не могут - пул телефонов пока ещё большой, а выхлоп - малнький. это где-то в москале может так. А на периферии радиус 30-50 км.
Не в Москве а за городом вдоль дорог. Там GSM 900 и радиус больше зато и емкость базы меньше. Поэтому интернет не везде хотя связь есть. Когда я работал в Мухосранске в МТС в 2000 на заре GSM в городе 350 тыщ населения было всего 4 базовых станции и 1200 абонентов. Тогда хватало а потом перешли на 1800 уменьшив мощность и увеличив емкость БС. Ты скажи лучше сможешь код подправить в Студии для ТС? Там пару строчек всего. Тыж в Студии шаришь?
вот нашел такую статью по прошивке тиньки через дуню. Возможно поможет. https://voltiq.ru/program-attiny-13-attiny-13-a-arduino-ide/
Вот код-посмотри и если не трудно проверь в Студии? Код (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
Я так понимаю надо убрать цикл for (i=0; i<256; i++) и передавать просто RF_write (i); где i это номер маячка-так?
а для каких целей нужен второй цикл: Код (C++): for (int j=0; j<80; j++) { RF_write (0b10110010); для чего 80 раз посылку числа 0b10110010 делать?
Это чтоб мусор не ловить. Идентификатор «своего» передатчика.80 можно уменьшить. Но вообще то я Паровоза просил посмотреть ну и Ваше мнение нужно. Можно посылать 2 числа если первое например 22 то второе номер маячка например 5. Если приняли 22 то отображаем 5 если нет ничего не отображаем
Если вам надо так Код (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(), но она нигде не вызывается. Может я чего не досмотрел?
так этот идентификатор "своего" передатчика вот точно не нужен. Иначе приемник будет только один передатчик принимать, что не годится. Принимать он должен все. А насчет мусора - можно же передавать строку, начало которой будет какой то контрольный символ (или два) а потом уже номер маяка. А в приемнике делать проверку принятого сообщения - если начинается не контрольным символом - игнорить, если контрольный, то "отрезать контрольку" и оставлять только номер маяка
Вот включаете вы маяки и начинают они долбить, пускай и с разным таймаутом, но часто, практически одновременно.
Код не мой поэтому ХЗ. Но спасибо за помощь! Скачано с Паяльника. Может и не надо но ВСЕ твои маяки будут бить идентификатор. И ты только их будешь принимать а не соседа который через стенку жмет автозапуск. Но если не надо так ненадо. Сереж долбить они будут без антенн в радиусе 5—10 метров. Сильно мешать не будут. Да и приемник загрубим чтоб не ловил все что плохо лежит. Я тоже хочу поиграться поэтому и заинтересовался. А так мне без надобности
приедут модули - буду пробовать. Сейчас никак проверить не могу, после опытов отпишусь о результатах. В любом случае спасибо, что помогаете
Ссылочку дайте. А то я как-то не совсем понял как этот модуль работает. Получается нужно просто на входную ножку с определённой частотой пихать биты и всё? Настроек никаких?
Доброго вечера!Воть! Вы правы тупо передает одно(или два?)числа. Идентификатор и номер маячка. В примере тупо считает и передает. Завтра перед работой попробую проверить на железе если успею. А Ваш код откомпилить сможете в НЕХ чтоб передавал например 22?