Все микроконтроллеры AVR семейства MEGA имеют в своем составе модуль UART/USART. Он позволяет связывать микроконтроллер и компьютер по интерфейсу RS-232. Для этого необходим компьютер с COM портом, преобразователь уровней, ну и соответствующий микроконтроллер. Проблема в том, что современные компьютеры перестают оснащать COM портами, потому что на смену им приходит (или уже пришла) USB. На наше счастье ряд фирм выпускает специализированные микросхемы преобразующие USB в RS232 без всякой головной боли. Им требуется минимальная "обвязка" внешних компонентов, и для них доступны готовые драйвера. Одна из таких микросхем - FT232BM фирмы FTDI. Чтобы вы не тратили свое время на изучение документации, рисование схемы и разводку платы, предлагаю вам готовое решение на ее основе.
Схема
Файлы
Comments
кварцах . У меня сейчас работает 7.372800
непрерывно , но хотя бы раз в два дня
происходит потеря байта .
Есть ли какие-либо правила по
надежности передачи данных через UART
между МК и ПК .
А если проверка на четность включена , то
как этим воспользоваться ?
В CodeVisionAVR увеличил размеры буферов
чтения и записи с 8 байт до 128 и на
стоп бит дал 2 бита : 19200,n,8,2 .
Почему-то и с EEPROM-ом все стало в
порядке ( параметры для устройства задавал через UART ) . Параметры с ПК до МК доходили , но EEPROM то записывал то нет . Что только с этим EEPROM я не делал .
Ваш совет по контролю четности держал до
последнего . Может быть еще пригодится .
Вроде все в порядке , а чувство такое ,
что толком до конца не разобрался .
Такой вопрос. Требуется ли в обязательном порядке запрещать прерывания при записи в еерrоm? Или же это желательно для того, чтобы гарантировать корректное сохранение данных?
В даташите на тинку2313 приводят время записи(со стиранием) 3.4 ms Это слишком долго, т.к. (например) требуется чаще опрашивать порты. В том же даташите пишут, что запись осущ. последовательно й установкой бита EEMPE и последующей в теч. 4 тактов установкой бита EEPE регистра EECR. Есть подозрение, что прерывание не должно возникнуть именно в теч. этих 4-х тактов. Иначе зачем было делать прерывание по готовности eeprom (EE READY)?
Возможный код:
Code:
/* прерывания разрешены */
while(EECR & (1<<EEPE));
EEAR = someAddress;
EEDR = someData;
EECR |= 1<<EEMPE;
/* запретить прерывания */
EECR |= 1<<EEPE;
/* разрешить прерывания */
Собственно вопрос: так ли это? Можно ли так делать и не приведет ли это к проблемам?
разрядным 7сегментником , на Timer1
каждые 5 секунд меняются 2 переменные
для опроса датчиков ds18b20 уже в основном теле .
Даже в EEPROMе дал смещение в 16 байт . Подумал что может быть ячейки плохо записывают . Причем значения записывались но не на свое место . В CVAVR за адресацией записи не следишь .
Потом стал пользоваться предложенными
функциями с даташит
по ATmega8 с конкретной адресацией . Тоже не помогло .
На время записи отключал индикацию ,
обходил опрос датчиков , ставил #asm("sei") ... #asm("cli") , давал задержку
delay_ms(10); . Все равно записанный байт
мог попасть куда угодно . Хотя "Program
EEPROM" из CodeVisionAVR Chip Programmer
всегда срабатывал четко .
для UART , дал 19200,n,8,2 , потом
смещение так и оставил в 16 байт - все
пошло . Больше месеца проверяю - все в
порядке .
Правда в программе на ПК я сделал так ,
что кнопки для отправки параметров на
МК активны только первые 3 секунды из 5 .
Еще что заметил :
При старте программы на ПК поля параметров должны заполняться с МК из
EEPROMа ( по заданию ) . Теперь они заносятся так быстро как-будто там уже
были прописаны .
RSS feed for comments to this post