[image]

Микроконтроллеры AVR - применение и Краткий Курс - часть 10

 
1 9 10 11 12 13 38
RU termostat #24.01.2009 15:37
+
-
edit
 

termostat

аксакал

ДЫК ! Тогда и прогу для ПК написать которая будет сама подстраиваться под частоту приема данных.
   7.07.0

hcube

старожил
★★
Там еще кажется от питающего напряжения частота RC зависит. И от температуры. Именно поэтому я ВСЕГДА использую кварц - ну, кроме случаев когда место очень критично, а девиация частоты ±1% некритична.
   6.06.0
RU termostat #24.01.2009 17:56
+
-
edit
 

termostat

аксакал

Во прикол ! Элитан - электронные компоненты Elitan

Atmega32 88 48 и другие по 3-5 рублей ... и в корзину покупателя кладутся ...



\\\\\\\\\\

Рисование диаграмм, алгоритмов - прога очень хорошая и удобная EDGE Diagrammer v6.02.2014

ht +++ tp://rs90.rapidshare.com/files/118246412/PaceStar.EDGE.Diagrammer.v6.02.2014-Lz0.rar

ht +++ tp://slil.ru/26578206
   7.07.0
Это сообщение редактировалось 24.01.2009 в 18:37
UA Serge77 #24.01.2009 19:24  @termostat#24.01.2009 15:37
+
-
edit
 

Serge77

модератор

termostat> ДЫК ! Тогда и прогу для ПК написать которая будет сама подстраиваться под частоту приема данных.

А как она может подстраиваться? Что ты имеешь в виду? Параметры СОМ порта фиксированные, их ведь нельзя подстроить с 4800 до 4850.
   3.03.0

Serge77

модератор

hcube> Там еще кажется от питающего напряжения частота RC зависит.

Зависит. Но ведь на схеме стабилизатор напряжения стоит.
   3.03.0
+
-
edit
 

Serge77

модератор

Можно ли в VMLab посчитать количество тактов процессора между двумя точками программы?
Длительность одного бита должна быть 333 такта, вручную не хочется считать.
   3.03.0
RU termostat #24.01.2009 20:11
+
-
edit
 

termostat

аксакал

По моему "секундомера" stopwatch там нет. Это в аврстудии
   7.07.0

hcube

старожил
★★
Вообще-то, раз уж нету аппаратного ком-порта, то естественно воспользоваться для этого таймером ;-) Запустить его на циклический расчет, с базовой частотой clk/8, ив цикле читать счетчик таймера. Как дойдет до заданного значения - значит, битик пришло время ставить ;-)

А подстройку очень просто сделать - делаешь прием с какой-нибудьь сервисной линии ком-порта, скажем с DTR. Прогу пишешь так, чтобы она при наличии целостных пакетов DTR устаналивала. А в контроллере задаешь программу - есть DTR нету больше какого-то времени, циклически менять частоту (калибрующий регистр).
   6.06.0
Это сообщение редактировалось 24.01.2009 в 20:20

Xan

координатор

hcube> А подстройку очень просто сделать

Гораздо дешевле - железный юарт и кварц. Гораздо.
День провозился, берёшь свою дневную зарплату и умножаешь на два. На эти деньги можно кучу микроконтроллеров с кварцами купить.
Даже если это что-то мелкосерийное, и даже тогда не надо экономить на железе - быстрее законченный и более надёжный проект принесёт дополнительную прибыль.

Ну, это если цель сделать, чтоб работало, а не учёба.
На учёбу, как утверждается, надо непрерывно тратить 35% жизни.

:)
   7.07.0
+
-
edit
 

Serge77

модератор

Причём тут прибыль. Я не собираюсь ничего продавать. Наоборот, хочу сделать то, что легко смогут повторить другие, и чтобы оно наверняка работало.
   3.03.0
RU termostat #24.01.2009 22:09  @Serge77#24.01.2009 21:16
+
-
edit
 

termostat

аксакал

Serge77> хочу сделать то, что легко смогут повторить другие, и чтобы оно наверняка работало.

C кварцем наверняка, с керамическим резонатором тоже - он маленький и конденсаторы встроены обычно.

Тем более Тини15 устаревшие и возможно скоро пропадут из продажи потому Тини 24 можно использовать.

Керамический резонатор.
Прикреплённые файлы:
6_1.gif (скачать) [288x202, 26 кБ]
 
 
   7.07.0
+
-
edit
 

Serge77

модератор

В предыдущем большом сообщении я писал, что увеличением калибровочного байта удалось добиться правильной передачи. Оказывается, и эта передача неверная, я только сейчас заметил.

Вот кусок принятых данных:
255 236
253 236
254 236
247 236
255 236
255 236
128 237
129 237

Видно, что при увеличении старшего байта (справа) на единицу младший байт становится не 0, 1,.., а сразу 128.

То же самое получилось, когда я стал уменьшать временнОй интервал передачи одного бита.

Всё-таки файл, получаемый при стандартном калибровочном байте и исходной программе, содержит правильные данные, но некоторые байты теряются при передаче.

Кажется, я понял. В принятом файле нет ни одного младшего байта - нуля! И именно в тех местах, где должны быть нули, видно, что потеряны байты. Похоже, что принимающая программа не замечает байтов, состоящих из одних нулей. Завтра разберусь.
   3.03.0
RU termostat #25.01.2009 01:04  @Serge77#25.01.2009 00:56
+
-
edit
 

termostat

аксакал

Serge77> Похоже, что принимающая программа не замечает байтов, состоящих из одних нулей. Завтра разберусь.

Если что-то типа max232 есть в пути данных то возможно конденсаторы ей побольше надо поставить (или проверит те что стоят там) - возможно она не может так долго уровень деражать.
   7.07.0

Xan

координатор

Serge77> Причём тут прибыль. Я не собираюсь ничего продавать.

При том, что жизнь конечна, мы все умрём. :)
Время жизни надо не растрачивать напрасно. :)

Даже если проект "чиста для себя" его надо оптимизировать по стоимости.

Не обращайте внимания, это у меня профессиональное искажение психики!!! :-D
   7.07.0
+
-
edit
 

Serge77

модератор

Причина пропадания байтов найдена. Это моя принимающая программа. Она почему-то пропускает все нули и часть единиц. Запустил на приём данных SerialWatcher, он всё принял, так что прошивка МК, его осциллятор и МАХ232 не при чём.

Наблюдение над собой. Я эти принятые файлы разглядывал чуть ли не часами, причём именно те места, где я сейчас заметил отсутствие нулей. Как я этого не замечал несколько дней - не представляю.

Буду править программу.
   3.03.0
RU termostat #25.01.2009 16:08  @Serge77#25.01.2009 16:04
+
-
edit
 

termostat

аксакал

Serge77> Это моя принимающая программа. Она почему-то пропускает все нули и часть единиц.

Напомню ! НОРМАЛЬНЫЕ, праильно работающие проги для приема данных, отправки и мониторинга данных по COM портам рекомендованы у меня на страничке - avr123.nm.ru/z4.htm - возможно написание скриптов для адаптации под конкретный прибор.
   7.07.0
RU termostat #25.01.2009 16:12
+
-
edit
 

termostat

аксакал

Serge77> Это моя принимающая программа. Она почему-то пропускает все нули и часть единиц.

Напомню ! Правильно работающие проги для приема данных, отправки и мониторинга данных по COM портам рекомендованы у меня на страничке - avr123.nm.ru/z4.htm - возможно написание скриптов для адаптации под конкретный прибор.

А еще есть SelmaDAQ - логер в Excel. "SelmaDAQ - Microcontroller Data Acquisition for Excel"

http://www.selmaware.com/selmaDAQ/home.htm
   7.07.0
UA Serge77 #25.01.2009 16:42  @termostat#25.01.2009 16:12
+
-
edit
 

Serge77

модератор

Я знаю, что есть правильные проги. Но ведь и моя была правильная, я на неё принимал данные с меги8 без ошибок ещё 3 года назад. Я так был в ней уверен, что даже и не думал в эту сторону. А теперь посмотрел - оказывается в данных, принимаемых с меги, не было нулей, т.е. случайно оказалось так, что старший байт не менялся, а значит младший не переходил через ноль.

Это кстати и к вопросу о надёжности наших изделий вообще. Казалось бы, всё давно проверено, ан нет - ошибка затаилась и стережёт. Поэтому я считаю опасным запускать двигатели от МК.
   3.03.0

Xan

координатор

Serge77> Я знаю, что есть правильные проги. Но ведь и моя была правильная

А в ней использовалась функция CreateFile (и всё, что с ней связано) или что-то иное?
   7.07.0

Serge77

модератор

Xan> А в ней использовалась функция CreateFile (и всё, что с ней связано) или что-то иное?

Я пишу в VisualBasic, там именно такой функции нет, но файл естественно создаётся и в него записываются принятые данные.
А что?
   3.03.0

hcube

старожил
★★
Вообще-то, это значит всего лишь, что опасно запускать двигатели от твоих МК ;-) Я бы попросил не обобщать на все МК как класс. Уверен, что у самого большого ракетомоделиста в мире (я Маска разумею с фалькон-1 ;-D) на Мерлине стоит именно МК в той или иной форме.
   6.06.0
RU termostat #25.01.2009 17:21  @Serge77#25.01.2009 16:42
+
-
edit
 

termostat

аксакал

Serge77> Поэтому я считаю опасным запускать двигатели от МК.

Я бы так скащал: "Опасно запускать ракетные двигатели".
   7.07.0

Xan

координатор

Xan>> А в ней использовалась функция CreateFile (и всё, что с ней связано) или что-то иное?
Serge77> Я пишу в VisualBasic, там именно такой функции нет, но файл естественно создаётся и в него записываются принятые данные.

Не-не-не, не про файл на диске, а про открытие компорта как файла.
Это стандартный (от Билли Гейтеса) путь (http://msdn2.microsoft.com/en-us/library/aa363858(VS.85).aspx).


hCom = CreateFile("Com1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
fResult = GetCommState(hCom, &dcb);

dcb.BaudRate = 115200;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT;

dcb.fBinary = True; // binary mode, no EOF check
dcb.fParity = True; // enable parity checking
dcb.fOutxCtsFlow = False; // CTS output flow control
...
И так далее.

После чего используются функции ReadFile и WriteFile для приёма/посылки байтов.

И никаких неожиданностей.

Не знаю точно про VisualBasic, но мне кажется и там должна быть возможность использовать системные функции.
   7.07.0

Serge77

модератор

Xan> Не-не-не, не про файл на диске, а про открытие компорта как файла.

В VB всё есть, я просто сделал ошибку в программе.
   3.03.0
AD Реклама Google — средство выживания форумов :)

alex_zeed

втянувшийся

Xan> Не-не-не, не про файл на диске, а про открытие компорта как файла.
Xan> fResult = GetCommState(hCom, &dcb);
Xan> dcb.BaudRate = 115200;
Xan> dcb.ByteSize = 8;
Xan> dcb.Parity = ODDPARITY;
Xan> dcb.StopBits = ONESTOPBIT;
Xan> dcb.fBinary = True; // binary mode, no EOF check
Xan> dcb.fParity = True; // enable parity checking
Xan> dcb.fOutxCtsFlow = False; // CTS output flow control
Xan> ...
Xan> И так далее.

А еще в этом DCB есть милое поле fNull. Описано в мсдн: If this member is TRUE, null bytes are discarded when received.
Так что для своих программ очень рекомендую добавить в этот список явное dcb.fNull = False. Иначе будет глотать нули. Все. Сам как-то натыкался. Какой-то программатор повадился ставить на компорту этот бит и не снимать его при выходе.
   
1 9 10 11 12 13 38

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru