Вы ходите по форуму только в поисках фраз (слов, предложений), за которые можно зацепиться и, поспорив, попытаться показать себя грамотнее тех, кто их озвучил
разве не в этом смысл форума? разве дающий советы изначально не позиционирует сам себя, как более знающий? я встреваю только в том случае, когда вижу попытку сделать хуже, чем было. топикстартер спросил совета, и я молчал, пока не увидел ВРЕДНЫЙ совет. в чем вредность - я обосновал. вы считаете, что из толерантности к чужому мнению, которое вредит другим, я должен промолчать? ок, теперь буду молчать, когда люди демонстрируют полную безграмотность: "АБ" - это два магических числа... да еще и с сарказмом демонстрируют...
а потом вы же сами будете отсылать новичка учить матчасть, когда он будет спрашивать "почему в Си в строке на 1 символ больше, чем в кавычках" - да? это лучше? причем отсылать будете куда как в более резкой форме, чем я.
ладно, теперь можете потереть тему, как модератор. всё равно моё мнение не интересно тем, кто считает неприемлемым обращать внимание на собственные ляпы...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
В чем может быт л шибка? Записал я данные принятые по UART в буфер далее по окончанию приёма активирую переменную и проверяю в цикле условие If (start == 1) If (strcmp(rx_buffer, buffer) == 0) PORTC = 0b00000001
Где: start переменная активируется после окончания приёма данных. rx_buffer принятые данные buffer переменная типа char заполненая символами ON тоесть char buffer[] = "ON" В итоге два этих буфера должы быть одинаковы но на деле ни чего не работает.
Добавлено after 13 minutes 10 seconds: Пробовал и таким способом
Код:
define RX_BUFFER 128 //длина нашего буфера, читай макс. длина строки
volatile unsigned char work=0; volatile unsigned char rx_buffer[RX_BUFFER]; int rx_index; ISR(USART_RXC_vect) { unsigned char status,data; status=UCSRA; data=UDR; if ((status&((1<<FE)|(1<<PE)|(1<<DOR)))==0) { if (data==10) // CR { work=1; } else rx_buffer[rx_index]=data;
if (++rx_index == RX_BUFFER) rx_index=0;
}
} в майне: if (work) { work=0; //тут пробовал так же проверять бесполезно. }
Переменная work не принимает значение 1, через терминал посылал данные с окончанием символом CR
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
if (read_enable == 1) { rx_buffer[rx_wr_index++]=data; if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }
}
} }
int main(){
DDRC= 0b00000001;
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33;
sei();
while (1) {
if (_out == 1) { If (strcmp(rx_buffer, buffer) == 0) { PORTC = 0b00000001; }
_out = 0; rx_wr_index= 0; rx_counter = 0; } } }
Если опять пытаюсь сравнить буфер
Код:
If (strcmp(rx_buffer, buffer) == 0) PORTC = 0b00000001
то та же ни чего не работает. Вообще не могу вкурить как его сравнить этот буфер принятый.
Здесь алгоритм такой, когда принимаем символ $ то активируем переменную _out = 1, и заканчиваем прием read_enable = 0 Далее уже в цикле сравниваем записанные данные в буфер. Но ни чего не выходит.
глянул док. - вроде для PORTC0 отключение житага не даст ничего - может пробовать перейти на скорость UARTа ниже (1200), никогда меги с использованием UART без кварца не включал.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
oleg110592 писал(а):
никогда меги с использованием UART без кварца не включал.
Включал несколько раз на 9600 мегу8 со внутренним RC генератором, а OSCCAL не менял . Проблем не было.
Добавлено after 6 minutes 35 seconds:
LEX38RUS писал(а):
но если залить прошивку в кристалл то включить светодиод удается а вот выключить уже нет.
Я данный топик только бегло поглядывал. Хороший метод для тестирования UART, это возвращать на комп, что принял. В любой терминальной программе сразу будет видно.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения