|
USART на ATMega 16, На комп выдает непонятные символы |
|
|
|
Mar 17 2006, 21:13
|

Знающий
   
Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095

|
2 AVR Если нет под рукой преобразователя уровней RS232, то советую применить схему "токовая петля" (см. в прикрепленном файле), она во-первых, обеспечивает корректное преобразование уровней, во-вторых, обеспечивает гальваническю развязку между AVR и РС, в-третьих, простая. Для того, чтобы заработало в RS232pro выставьте уровни сигналов DTR и RTS как показано на схеме. Если все-таки остановитесь на схеме предложенной defunct, то советую параллельно переходу база-эмиттер транзистора, подключенного базой к Тх ком-порта, подключить диод катодом к базе, дабы защитить переход база-эмиттер от отрицательного напряжения (которое может на некоторых портах достигать -12В, а на базе транзистора в схеме -6В, что уже многовато будет...)
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 30 2006, 05:48
|
Группа: Новичок
Сообщений: 5
Регистрация: 22-02-06
Пользователь №: 14 590

|
Я тоже пытался связаться по 232, правда МК у меня AT90S2313, микросхема МАХ 232. Использовал Advanced Serial Port Monitor и RS232pro, и еще что-то(не помню). Если я правильно помню, то в ДШ на конкретный МК есть таблицы ошибок скоростей передачи при стандартных частотах кварца. Кварц у меня 3.579545Mhz, по ДШ и Applicatiom Builder-у это ошибка в 1.3%, однако у меня данные передавались и принимались без ошибок. Затем я поставил кварц (в ту же схему) на 4Mhz, и уменя пошли всякие кракозябры... ХОТЯ по ДШ и Апп Билдеру ошибка составляет 0.2%...странно Я сам новичок, но мне кажется что дело может быть в кварце. Я думаю что огромное значение имеет производитель. (кварц с которым все работало стоил 15р, а скоторым нет-2р  ) Может быть поможет замена кварца? Удачи!
|
|
|
|
|
Jun 30 2006, 07:12
|
Местный
  
Группа: Новичок
Сообщений: 232
Регистрация: 24-06-06
Пользователь №: 18 332

|
Цитата(ILYCHOFF @ Feb 3 2006, 17:32)  Проц мега16, кварц 4 МГц. Проверьте правильность установки бадрейта, убедитесь что мега работает на нужно частоте.
|
|
|
|
|
Jun 30 2006, 07:36
|
Местный
  
Группа: Новичок
Сообщений: 232
Регистрация: 24-06-06
Пользователь №: 18 332

|
Цитата(AVR @ Mar 19 2006, 20:12)  Глупый вопрос не по теме (прошу не судить строго новичка): Существует ли в интернете электронный каталог, в котором бы все электронные компоненты были отсортированы по их функционального назначению? Например, если в магазине нет какой-то микросхемы, чтобы можно было бы найти её аналог. я видел обзор таких каталогов на [banned]/01.htm
|
|
|
|
|
Jun 30 2006, 09:05
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598

|
Цитата(Alex3742 @ Jun 30 2006, 08:48)  Я тоже пытался связаться по 232, правда МК у меня AT90S2313, микросхема МАХ 232. Использовал Advanced Serial Port Monitor и RS232pro, и еще что-то(не помню). Если я правильно помню, то в ДШ на конкретный МК есть таблицы ошибок скоростей передачи при стандартных частотах кварца. Кварц у меня 3.579545Mhz, по ДШ и Applicatiom Builder-у это ошибка в 1.3%, однако у меня данные передавались и принимались без ошибок. Затем я поставил кварц (в ту же схему) на 4Mhz, и уменя пошли всякие кракозябры... ХОТЯ по ДШ и Апп Билдеру ошибка составляет 0.2%...странно Я сам новичок, но мне кажется что дело может быть в кварце. Я думаю что огромное значение имеет производитель. (кварц с которым все работало стоил 15р, а скоторым нет-2р  ) Может быть поможет замена кварца? Удачи! Может меня специалисты поправят, но RS протокол работает сносно и при 3% ошибки (где-то когда-то прочитал)! А от кварца требуется стабильность выдаваемой частоты. А для отладки обмена предлагаю следующий метод (сам периодически пользуюсь): Приемник и передатчик постоянно передает по своей линии байт 0х55 (или 0хАА) и двухлучевым осциллографом сравниваются длительности и количество стартовых и стоповых бит. Все наглядно!
|
|
|
|
|
Jun 30 2006, 10:48
|
Группа: Новичок
Сообщений: 5
Регистрация: 22-02-06
Пользователь №: 14 590

|
Цитата(IEC @ Jun 30 2006, 15:05)  Цитата(Alex3742 @ Jun 30 2006, 08:48)  Я тоже пытался связаться по 232, правда МК у меня AT90S2313, микросхема МАХ 232. Использовал Advanced Serial Port Monitor и RS232pro, и еще что-то(не помню). Если я правильно помню, то в ДШ на конкретный МК есть таблицы ошибок скоростей передачи при стандартных частотах кварца. Кварц у меня 3.579545Mhz, по ДШ и Applicatiom Builder-у это ошибка в 1.3%, однако у меня данные передавались и принимались без ошибок. Затем я поставил кварц (в ту же схему) на 4Mhz, и уменя пошли всякие кракозябры... ХОТЯ по ДШ и Апп Билдеру ошибка составляет 0.2%...странно Я сам новичок, но мне кажется что дело может быть в кварце. Я думаю что огромное значение имеет производитель. (кварц с которым все работало стоил 15р, а скоторым нет-2р  ) Может быть поможет замена кварца? Удачи! Может меня специалисты поправят, но RS протокол работает сносно и при 3% ошибки (где-то когда-то прочитал)! А от кварца требуется стабильность выдаваемой частоты. А для отладки обмена предлагаю следующий метод (сам периодически пользуюсь): Приемник и передатчик постоянно передает по своей линии байт 0х55 (или 0хАА) и двухлучевым осциллографом сравниваются длительности и количество стартовых и стоповых бит. Все наглядно! То есть все-таки стабильность частоты?
|
|
|
|
|
Sep 30 2008, 02:35
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 20-09-08
Пользователь №: 40 344

|
Добрый день. Кто может помочь? Пользуюсь терминалом версии 1.9 Б. Пытаюсь организовать кольцо, чтобы сигнал с компьютера дошел до меги16, и обратно в терминал. Столкнулся с рядом трудностей. Первое когда пишешь программу типа с = UDR PORTA = 55 ОНа работает, светодиоды горят как надо. КОгда пишешь что-то типа С = UDR UDR = C ТЕрминал коннектиться и постоянно получает <0>, не остановить, ни чего сделать не реально. И наконец когда приводишь что ни будь типа этого: #include <avr/io.h> #include <avr/delay.h> #include <avr/interrupt.h> // для доступа к функции сей #include <avr/signal.h> // для доступа к макросу интерупт #include <stdio.h> #include <string.h> int c;
INTERRUPT(SIG_UART0_RECV) { c = UDR; PORTB = c; }
int main (void) //начало программы { DDRB = 0xFF; // все выводы порта B - выходы UBRRH = 0; UBRRL = 71; UCSRA = 0x00; UCSRB |= (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);// прерывание на прием, прием UCSRC |= (1<<URSEL); // асинхронный, UCSRC |= (1<<UCSZ1)|(1<<UCSZ0);
sei(); c = 0; while (1); } Терминал так же конектиться, и получает тот же символ <0>, но в момент отправки символа останавливается. Однако светодиоды, подключенные к порту, свое состояние не меняют. И потом, АВРстудия, вообще отказывается толково реагировать на флаг "Прием завершен", перескакивает в самое начало программы и начинает заново - это ненормально потому как нарушается вообще принцип прерывания. И что насчет инверсии, МАХ правда инвертирует сигнал, или нет? Заранее спасибо.
|
|
|
|
|
Sep 30 2008, 07:33
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(_Ie0nid @ Sep 30 2008, 06:35)  Добрый день. Кто может помочь? ... Может быть проблема в том, что у вас не описан обработчик прерывания по завершению передачи байта? Судя по настройкам у вас включены и приемник и передатчик, и разрешены прерывания от них. Насколько я помню у М16 отдельный адрес для прерывания по событию прием байта завершен и отдельный адрес для прерывания по событию передача байта завершена в векторе прерывания. Также есть адрес по событию пуст регистр УДР. Если АВР студия некорректно симулирует прерывания, то скорее всего это ваша недоработка, вроде переход по вектору должен осуществляться правильно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|