Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 06.05.2011, 18:43   #11
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Сообщение от =GM= Посмотреть сообщение
Тут у вас две проблемы. Первая заключается в долгой обработке прерывания, используя несколько printf. Пока принты обрабатываются, возникает новое прерывание (каждые 138 мкс). Внутри прерывания вы запрещаете подачу клоков на таймер, так что нового переполнения не будет, но отложенное прерывание - должно сработать, оно и срабатывает.

Попробуйте после запрещения клоков внутри прерывания снять флаг прерывания вручную, должно помочь.

Вторая проблема у вас по-видимому связана с ПК, уарт не сразу синхронизируется, т.е. начинает принимать с середины бита. Для проверки попробуйте передавать байты с небольшим интервалом между ними. Ещё попробуйте почистить RX буфер ПК перед началом приёма.
Спасибо, проблему с отложенным прерыванием исправил, просто отключаю таймер в самом начале в момент прерывания, до того как выполняются все printf

По второй проблеме пока ничего не решил, хотя есть предположение что виноват все же сам камень, точнее неправильно настроенное тактирование от внешнего кварца.
По ДШ CKSEL3..1 = 011

а вот CKSEL0 и SUT1..0 чему должны быть равны? Я сделал так:
CKSEL0 =1, SUT1..0 = 10, может проблема в этом?



вернул МК к внутреннему генератору 8мГц, так у меня на любой скорости теперь сплошные крокозябры, %90 ошибок
Реклама:

Последний раз редактировалось Sany81; 06.05.2011 в 22:59.
Sany81 вне форума  
Непрочитано 06.05.2011, 22:52   #12
kittec
Гражданин KAZUS.RU
 
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
kittec на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Может попробовать отладить без ререходника RS USB, например через МАХ232, а потом уже через переходник.
kittec вне форума  
Непрочитано 07.05.2011, 13:54   #13
Beginner43
Частый гость
 
Регистрация: 04.01.2010
Адрес: Россия, Киров
Сообщений: 31
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Beginner43 на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Если я не ошибаюсь, то RS-232 cовсем не совместим с USART по причине физических уровней(RS-232 +-12 или +-5, а USART 0..+5). Поэтому без преобразователя уровней не обойтись. Я обычно использую MAX232cpe. Поэтому если Вы используете переходник USB-›COM, то дальше у Вас должна быть микросхема MAX232, а уже потом контроллер.
Beginner43 вне форума  
Непрочитано 07.05.2011, 14:45   #14
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Сообщение от Beginner43 Посмотреть сообщение
Если я не ошибаюсь, то RS-232 cовсем не совместим с USART по причине физических уровней(RS-232 +-12 или +-5, а USART 0..+5). Поэтому без преобразователя уровней не обойтись. Я обычно использую MAX232cpe. Поэтому если Вы используете переходник USB-›COM, то дальше у Вас должна быть микросхема MAX232, а уже потом контроллер.
Это и есть преобразователь USB-COM-USART, так что не нужно больше ничего.
Sany81 вне форума  
Непрочитано 07.05.2011, 14:50   #15
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Сообщение от Beginner43 Посмотреть сообщение
Если я не ошибаюсь, то RS-232 cовсем не совместим с USART по причине физических уровней(RS-232 +-12 или +-5, а USART 0..+5).
В телефонных data-кабелях ТТЛ уровни.
AJScorp вне форума  
Непрочитано 07.05.2011, 15:11   #16
Beginner43
Частый гость
 
Регистрация: 04.01.2010
Адрес: Россия, Киров
Сообщений: 31
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Beginner43 на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

"for(count=0;count‹10;count++) {putchar(48+count);} //для проверки" - поробуйте без этой строчки. Такое ощущение, что у вас некорректно отрабатывается процедура putchar.
А вообще, не знаю как это относится к компилятору Си, поскольку для контроллеров код пишу на ассемблере, но обычно много проблем возникает, если в начале прерывания не скинуть в стек все используемые переменные и регистр статуса.
З.Ы. присмотритесь к переменной count - мне кажется она у вас не обнуляется, более того имеет разное значение

Последний раз редактировалось Beginner43; 07.05.2011 в 15:43.
Beginner43 вне форума  
Непрочитано 07.05.2011, 17:33   #17
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Сообщение от Beginner43 Посмотреть сообщение
"for(count=0;count‹10;count++) {putchar(48+count);} //для проверки" - поробуйте без этой строчки. Такое ощущение, что у вас некорректно отрабатывается процедура putchar.
А вообще, не знаю как это относится к компилятору Си, поскольку для контроллеров код пишу на ассемблере, но обычно много проблем возникает, если в начале прерывания не скинуть в стек все используемые переменные и регистр статуса.
З.Ы. присмотритесь к переменной count - мне кажется она у вас не обнуляется, более того имеет разное значение
Эта строчка была просто добавлена для проверки, будут ли ошибки при таком методе вывода или нет, так что ошибки хоть с этой строкой хоть без нее возникают.

Думаю надо и правда попробовать на макс232 собрать преобразователь и попробовать, может проблема не в компе и не в контроллере а в моем преобразователе, хотя телефон на нем работал нормально.
Sany81 вне форума  
Непрочитано 07.05.2011, 18:09   #18
Beginner43
Частый гость
 
Регистрация: 04.01.2010
Адрес: Россия, Киров
Сообщений: 31
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Beginner43 на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Когда я осваивал связь компьютера с контроллером, то первым делом написал код, который по прерыванию от приема байта по USART посылал последовательность байт"Hello world", в main крутился пустой цикл. Через hyper terminal посылал любой символ и получал ответ. Такая простая програмка надежно проверит физическую часть, и исключит конфликты внутри контроллера.
Beginner43 вне форума  
Непрочитано 08.05.2011, 16:20   #19
akzamit
Частый гость
 
Аватар для akzamit
 
Регистрация: 15.07.2006
Сообщений: 26
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
akzamit на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

Сообщение от jump Посмотреть сообщение
akzamit,
экономный вы наш...
сколько раз прошивается современный МК?
а шпротеус ваш - гуано, пол-форума на ушах стоит, рыдает, на сопли исходит, ошибки ища в программах.
только железо + различные дебаггеры фирменные (jtag, ...) могут помочь... да, забыл... без головы программисту-электронщику делать нечего
да я стал больше думать, прежде чем залить прошивку для отладки
протеусом не пользуюсь уже года 2, и как говорил, его можно юзать для проверки простых вещей (на крайний случай)
сейчас после пересаживания на JTAG назад уже не хочется, когда только правильным суждением и проверкой кода можно понять в чём косяк.
PS главное -искать правильно ошибку)
современный мк прошивается от 1000 до 10000 раз, свой мк я пошил уже много раз...
Глюк на старте я исправлял стартовым байтом, к примеру 0x17, потом байт длины передачи сообщения, потом данные
очень удобно. можно в конец crc приспособить.
__________________
-
akzamit вне форума  
Непрочитано 09.05.2011, 17:52   #20
justej
Прохожий
 
Регистрация: 23.03.2011
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
justej на пути к лучшему
По умолчанию Re: Mega48+USART= кракозябры

можу порадити наступний варіант:
1. вимкни обробку зовнішнього переривання, залиш лише обробку переривання таймера (і закоментуй це: TCCR0B = 0x00; ).
2. запусти hyper terminal, встанови потрібну швидкість, прибери керування потоком і дивись на отримані дані. переривання по таймеру спрацьовує кожні 36 мс (138 мкс - період тактування таймера, а саме переривання наступить після 256*138мкс=36мс).

це дозволить перевірити роботу usart. якщо дані не биті - під"єднуй зовнішнє переривання і т.д.
justej вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си -> Assembler (mega48) MKsoft Микроконтроллеры, АЦП, память и т.д 7 12.03.2009 14:31
Замена mega48 на mega8 ? woroba Микроконтроллеры, АЦП, память и т.д 4 04.02.2008 21:55
AVR Mega48 и самопрограммирование Alex_mel Микроконтроллеры, АЦП, память и т.д 1 17.05.2006 14:06


Часовой пояс GMT +4, время: 15:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot