Перейти к содержанию

bloowz

Members
  • Постов

    21
  • Зарегистрирован

  • Посещение

Электроника

  • Стаж в электронике
    Менее года

Достижения bloowz

Новобранец

Новобранец (2/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Элементарное решение проблемы) Спасибо!
  2. Вот так правильный байт не приходит на МК, но если между МАКС232 и МК поставить инвертор - то все идеально работает.
  3. Чертов протеус не воспринимает сигнал с макс232, но если его инвертировать то идет все отлично. Вот меня и ввело в заблуждение)
  4. По этой диаграмме мы и наблюдаем инверсию, разве нет? Низкий сигнал ком-порта преобразуется в логическую единицу +5V и наоборот. Или я что-то не понимаю?
  5. Но как тогда объяснить, что в протеусе с макс232 выходит инвертированный фрейм от ком-порта? И в даташите тоже инверторы указаны
  6. Нужно ли ставить инвертор между RxD MAX232 и МК? Как я понял, если подавать RxD с ком-порта на MAX232, то на выход RxDout макса будет выводиться инвертированный сигнал от ком-порта и МК и в итоге не верно будет воспринимать фрейм информации. По крайней мере в протеусе выход инверторный. Собственно это ошибка протеуса или на практике так оно и есть?
  7. !!!!!!!! ЗАРАБОТАЛО!!!! Спасибо, добрый человек) Как же все просто решалось)) Ну и про кнопку спасибо я тож знаю)
  8. К сожалению фокус не удался Тут определенно косяк с записью UDR в переменную. Пробую вместо нее задать другую char two = 0xAA; и вывести ее на ногу вместо one, каждый раз когда получаю байт с ком-порта - вполне удачно выводится two. Но вот если пробую поставить полученный one - все идет крахом и выводится ерунда
  9. #define F_CPU 8000000UL UCSRA=0b00000000; UCSRB=0b00010000; UCSRC=0b10000110; UBRRH = 0; // установка скорости UBRRL = 51; частота 8МГц, исходя из этого UBRRL = 51 для скорости 9600 бод. На 9600 и от ком-порта идет
  10. Как в atmel studio это реализовать? ) Там же не сэмулировать ком-порт и передачу с него пакета байтов. Компилирую в студии и эмулирую в протеусе. Замеряю осциллом то что приходит на RxD и то что выходит с ноги МК, это и должно быть One. В МК заходит байт такой какой он должен быть, но на выходе ерунда полнейшая. Полагаю нужно как-то иначе записать UDR в переменную, не char one = UDR, а что-то типа со сдвигом char one = 8<<UDR как то так.. но не пойму как это записать
  11. Посылаю байт на UART через виртуальный ком-порт, эмулирую в протеусе. Байт приходит (смотрю вход RxD МК осциллом), цикл отрабатывается но в итоге в переменной "one" совершенно иное значение, нежели было передано с ком-порта (передавал 0x31, выведя переменную получил 0x20). Что я делаю не так с чтением из этого чертового UDR регистра? Пакет 8 бит 1 стоп-бит без парити на всех концах. UCSRA=0b00000000; UCSRB=0b00010000; UCSRC=0b10000110; UBRRH = 0; // установка скорости UBRRL = 51; char one; while(1) { while (!(UCSRA & (1<<RXC))); // ожидание приема байта one = UDR; // запись байта for (int n = 0; n<8; n++) // вывод байта побитно на ногу PB1 с синхро { if(((one<<n)&0x80)==0x80) { //вывод 1 PORTB = 0b00000010; _delay_ms(100); PORTB = PORTB^0x01; _delay_ms(10); //синхро на PB0 PORTB = PORTB^0x01; _delay_ms(10); } else { PORTB = 0b00000000; _delay_ms(100); //вывод 0 PORTB = PORTB^0x01; _delay_ms(10); PORTB = PORTB^0x01; _delay_ms(10); } } }
  12. Спасибо (кнопочки тож нажал) добрые люди! Защита через несколько дней а у меня еще конь не валялся)
  13. и эту переменную после преобразования 8 раз вывести на ногу? Маска должна быть такая, чтобы переменная "1" всегда принимала следующий бит переменной а? Это насколько я знаю XOR?
  14. Есть переменная char a = 0xDC. Как ее последовательно подать на ногу PB1? На языке С. Делаю вот что for (int i=0; i<8; i++){ PB1 = (a<<1); } и конечно же не работает)
×
×
  • Создать...