Просто отправить байт с atmega169P

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Здравствуйте.
Прошу помочь достичь понимания механизма передачи байта по UART. Именно по UART, ибо только это и надо.
Вроде, понимание есть, но не работает механизьм.
Как должно быть?
1 инициализируем
2 проверяем, готов ли буфер
3 если готов, кладем байт
4 если флаг заполнения упал, значит буфер не пуст.
5 Включаем прерывание
6 байт ушел
и когда флаг UDRE0 поднялся, буфер пуст и можно сывать следующий байт...
Чего хочу добиться?
Нормального срабатывания по флагу UDRE0. Чтобы отправка массива символов шла, пока еще есть в массиве символы.
Кончился массив,...
UCSR0B &=~(1<<UDRIE0); ...хорош!
Что делает мкашка? Ну она мигает светодиодом вывода 3 и зажигает светодиод на выводе 4. И все. Но данных нет.
Код написан тут... Подправлен 13.11.14 http://codepad.org/R1wuoesk
Зачем так? Чтобы не ждать и не делать лишних телодвижений. (Хочу так)
Код данные не отправляет. Прошу рассудить...
Переделал. Американские друзья помогли, все ровно также, не шлется массив.
Вот последний вариант http://codepad.org/UnBTdTYE
Реклама
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Странно, что народ просто проходит мимо. А вот западные спецы помогли разобраться всего за один день
Это же фрики =)
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Код: Выделить всё

void USART_Transmit(unsigned char data )
{
    /*
    Wait for empty transmit buffer
    */
    while
    ( !( UCSRA & (1<<UDRE)) );
    /*
    Put data into buffer, sends the data
    */
    UDR = data;
}
А что тут думать. Я просто открыл документацию на мегу32 и на странице 147 откопипастел фнкцию передачи. Вот и все, в чем сложность?
А чтоб совсем все было кашерно, запили на STM32 там DMA есть, он все за тебя сделает, лишь укажы чего , откуда и сколько. :))
Я не волшебник, я только лечусь
Контактная информация:
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Gurvinok писал(а):

Код: Выделить всё

А что тут думать.   :))[/quote]
Да есть чего. Например, вот ты копировал. Ты знаешь, что код работает. Я тоже знаю. Но ведь с мк ничего не отправляется! Объясни мне, почему?
Я, думаешь, просто так к профи полез? Нееет =) Потому что  не пашет и точка.  Есть три контроллера, я проверял каждый. Не пашет. Проверял адаптеры rs232 - их два - пашут
Вот попутно посмотрел осциллом, что там происходит на плечах моего кварца....  Разве так должно быть?
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Вот
Вложения
это осциллограмма работы кварца.jpg
(233.47 КБ) 533 скачивания
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

100% работающее готовое решение: http://www.simple-devices.ru/articles/7 ... console-io
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Если не пашет функция из документации, значит:
1 Работает ли кварц.
2 Правильно ли прошиты фьюз биты (под текущий кварц)
3 Правильно ли настроен USART
4 Не перепутаны ли аппаратно Rx с Tx

У меня была ситуация когда UART слал постоянно мусор, я тоже все перепробовал, в итоге оказалась микросхема. Поменял МК на новый и все пошло как по маслу.
Я не волшебник, я только лечусь
Контактная информация:
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

фьюзы даны ниже
уарт настроен как в последнем примере тут
rx tx перепутаны, может быть, но я менял их местами. Осцлл показывает, что из tx идут сигналы, постоянно транслируется 00
Вложения
Gooogle.jpg
(133.91 КБ) 503 скачивания
fuse169puart.jpg
(88.12 КБ) 473 скачивания
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

А что показывает осцил на Tx?
Рекомендую Логический Анализатор
Я не волшебник, я только лечусь
Контактная информация:
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Gurvinok писал(а):А что показывает осцил на Tx?
Рекомендую Логический Анализатор
есть, но немножко не такой...
импульсы идут. Длительность в 0.962 мс
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Ну тогда тут поможет только это.
Изображение
Я не волшебник, я только лечусь
Контактная информация:
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Gurvinok писал(а):Ну тогда тут поможет только это.
Изображение
скорость повыше помогла. Мне помогли и посоветовали 19200.
Работает все как надо =) я счастлив
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Было ощущение что дело в этом еще вчера.
Смотри...
Я заливаю программу, там 9600.
Врубаю терминалку. Меняю скорость начиная с градации в 600 бод на терминалке
1200 - FF
2400 - FF
4800 - FF
9600 - 00
и дальше, и дальше - 00
нужная скорость между 4800 и 9600. Такое моё ощучивание
терминалка Advanced Serial Port Terminal
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

начинать надо с безусловно работающего кода. например, по моей ссылке. даже если он делает не то, что вам надо - так вы сможете определить, в схеме или программе у вас проблема. если готовый код работает - либо сравнивайте его со своим, чтобы найти причину, либо модифицируйте его под свои нужды - если главное результат.
если 100% правильный код не работает - ищите причину в аппаратуре: то ли схема у вас не правильная, то ли кварц не тот, то ли фьюзы, то ли контакт в разъеме барахлит...

как-то так. а в бубен постучите на радостях, когда решите проблему - в иные моменты не помогает :)))

P.S. в самом начале используйте терминалку попроще, например, стандартную для винды Terminal или Hyper Terminal и обмен текстом, а не байтами. а еще лучше сначал наладить обмен в протеусе с его терминалом.
может у вас терминалка ваша крутая как-то не настроена и кажет бред собачий, а вы голову ломаете...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср ноя 12, 2014 14:48:39

Сообщение krokodandi »

Конечно же. Сначала я написал код. Потом я дал его проверить и в паузах проверял фьюзы и настройки. Были сомнения насчет крутой терминалки, но дело не в крутости. Другие, более простые терминалки показывали тоже самое. И только на этой терминалке я менял скорости. Более того, эта терминалка давала мне возможность понять разницу между сессией и открытым портом. Все решилось, потому как я сидел и искал причину. Догадался бы сам рано или поздно(хотел скорость поменять после еще одной проверки). Хорошо, что помогли обнаружить проблему хорошие люди. Хорошо что вы есть =) А посему Спасибо за помощь
Вот мой окончательный код. Он работает замечательно
http://codepad.org/ezEshi5I
Ответить

Вернуться в «AVR»