Rinin 0 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба Пытаюсь передать через USART хоть один байт. С другой стороны ловлю их HyperTerminal'ом Пробовал принимать терминалом данные с GPS - работает нормально. Для простоты отключил внешний резонатор, сделал простенькую программку. С той стороны жду сигналов на скорости 1200, без проверки четности, 8 бит, один стоповый бит. В окне терминала пустота. Соответственно вот код для AVR Studio #include <avr/io.h> #include <avr/delay.h> #define F_CPU 1000000UL void USART_Transmit (unsigned char data) { while ( !(UCSR0A & (1<<UDRE0)) ) ; UDR0 = data; } void USART_Init (unsigned int baud) { UBRR0H = (unsigned char)(baud>>8); UBRR0L = (unsigned char)(baud); UCSR0B = (1<<RXEN0)|(1<<TXEN0); UCSR0C = (1<<UCSZ00)|(1<<UCSZ01); } void Beep (unsigned int time) { PORTC = 0xff; _delay_ms(time); PORTC = 0x00; _delay_ms(time); } int main(void) { DDRC = 0xff; PORTC = 0x00; USART_Init (51); while (1) { USART_Transmit ('1'); Beep (100); } } Который день пытаюсь хоть что научить его отправлять или принимать - но безуспешно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iar 0 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба Проверить есть ли сигнал на ноге контроллера. Если нет, то искать где накосячили с инициализацией (читать даташиту, ага). Если есть, то искать где накосячили в сопряжении с RS232 или со скоростью (опять читать даташиту, ага). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EmbedElektrik 0 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба Я бы сначала проверил фузы - правильно ли установлена частота - должна быть 1 МГц для твоей инициализации. На порте С то есть сигнал? На разъеме ком порта соедини 2и 3й контакты - тогда в терминале при наборе символов будет эхо - можно проверить кабель. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба а без внешнего резонатора оно работать не будет! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rinin 0 3 августа, 2008 Опубликовано 3 августа, 2008 (изменено) · Жалоба Я всё это время пытался что-то передавать несогласованными по уровню сигналами. Логично что на компе всегда было отсутствие питания. Спасибо, что указали на очевидную ошибку, а то я бы и дальше с кодом возился. Без внешнего резонатора оно вполне работает. На выходе напряжение есть. А резонатор я потому и отключил чтоб с фьюзами не возиться. Изменено 3 августа, 2008 пользователем Rinin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба Вообще и в коде есть серьезная ошибка: функция _delay_ms (WinAVR ведь?) должна получать в качестве аргумента константу и только, иначе работать будет не верно. См. delay.h. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rinin 0 3 августа, 2008 Опубликовано 3 августа, 2008 (изменено) · Жалоба Использовал в _delay_ms переменную (которая действительно менялась), не помню насколько криво, но работало. Впрочем запомню, если будут с ней проблемы - пойму откуда. Пока что цель - спаять таки перевод сигналов и прогнать по паре байт туда и обратно. Если кто-нибудь кинет в меня каким-нить доком по этому вопросу (согласованию уровней) - буду благодарен, хотя тут вроде информации и так хватает. Изменено 3 августа, 2008 пользователем Rinin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба Чтобы не заморачиваться с согласованием примените что-нибудь типа ADM207 или max232 или ft232rl (сразу на USB). Скачайте даташиты на данные микрухи - и схема включения у вас в руках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться