Страница 327 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб ноя 29, 2014 22:49:09
mixon46
хочу сделать секундомер с четырмя семисигментами. не могу составить алгоритм. нужно что бы по нажатию кнопки начинался счет. таймеры не используем. задержки. задержка 0.1 сек. по достижению десяти по 0.1 сек добавляем следующий десяток. считаем секунды. по достижению 60 сек начинаем считать минуты. далее 60 мин и считаем часы. 4 сигментника. индикация динамическая. с алгоритмом что то запутался. при еще одном нажатии кнопки секундомер останавливается. зацикливается. еще одно нажатие и сброс. задачка для меня тяжеленькая но я справлюсь. просто алгаритм этот и еще индикация динамическая пугает
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб ноя 29, 2014 23:02:39
Аlex
mixon46 писал(а):таймеры не используем
Ну и напрасно.
Настройте таймер на 1 мс, в нём реализуйте динамическую индикацию и там же отсчитывайте свои интервалы. 1000 раз вызвался обработчик - прошла секунда.
Туда же и опрос кнопок запихните.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб ноя 29, 2014 23:13:18
mixon46
я таймеры еще не проходил. вот занимаюсь. научился цыфру выводить на сигментник. вот чисто для того что бы понять как можно было бы осуществить прибавление следующего разряда. пока что могу только так выводить
void main (void)
{...
...
...
while (1)
{
PORTB=0b00111111;
delay_ms (100);
PORTB=0b00100100;
delay_ms (100);
и так далее до 9.
}
}
могу сравнивать. переменную ввести. надо алгоритм. хотя бы для двух сигментов. главное понять как добавлять следующий десяток
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб ноя 29, 2014 23:15:52
Аlex
mixon46 писал(а):я таймеры еще не проходил
Ну вот, настало самое время их изучить. Ибо текущая задача без них превратиться в долгий и геморройный путь

Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб ноя 29, 2014 23:26:25
mixon46
ладно. а как можно было бы упростить перебор цыфр на сигменте что бы не писать 10 строчек. прибавлять там регистр +1 или еще как то. мне бы это надо знать
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб ноя 29, 2014 23:58:12
Аlex
Непонятно, что Вы хотите упростить

Тот код, который Вы показали - это всего лишь вывод данных в порт и очень далёк от динамической индикации.
В сети полно статей на эту тему, поищите...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 30, 2014 00:42:32
mixon46
да что неясного. у меня два семисигментника. они подключены к порту B. их минусы подключены через транзисторы к двум портам и управляются по очереди через порт D1 и D2. к D0 подключена кнопка. алгоритм такой. на двух сигментах по нулям. по нажатию кнопки мк начинает считать и выводить одновременно на сигмент цыфры по возврастающей. соответственно когда на одном сигменте цыфра дойдет до 9 и с следующим счетом на другом сигменте прибавится единица и счет продолжится.
00
кнопка была нажата и пошел счет
01
02
03
04
05
06
07
08
09
далее счет начинается с 10 тоесть прибавляем следующий десяток. и так каждый раз когда дойдет до x9
10
11
12
13 и так далее
и вот я не могу чет сообразить как бы это написать програмно
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 30, 2014 10:10:39
pokk
mixon46, по смотрите в сторону преобразования в двоично-десятичный формат.
вкратце после преобразования каждый разряд будет находится в своих перемененных. в вашем случае простейшее преобразование будет делением на 10. т.е у вас есть переменная которая принимает значение от 00 до 99 (к примеру 54)
после деления 10 целую часть (5) выводите на первый индикатор а остаток (4) на второй.
Либо вообще сделать 2 переменных
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 30, 2014 12:47:47
COKPOWEHEU
А динамическую индикацию неизменного числа уже реализовали?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 30, 2014 16:03:35
mixon46
пока ничего не сделал. в сторону массивов и переменных клонит. некогда было делать пока что
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 11:58:21
sanyo.95
Здравствуйте, есть задача разложить пятизначное число на разряды. Делаю так:
Код: Выделить всё
void bcd(unsigned int s) // функция разложения
{
c4=0;c3=0;c2=0;c1=0;
while (s>=10000){s-=10000;c4++;}
while (s>=1000){s-=1000;c3++;}
while (s>=100){s-=100;c2++;}
while (s>=10){s-=10;c1++;}
c0=s;
}
После этой функции - вывод на lcd1100
Но в Протеусе тупит ужасно, может есть какой другой способ сделать это, с меньшими затратами ресурсов МК. Или это нормально?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 12:03:48
Аlex
Что значит "тупит" ? Если тормозит, то скорее всего не из-за куска кода, а из-за низкой производительности ПК.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 12:10:40
sanyo.95
Аlex писал(а):Что значит "тупит" ? Если тормозит, то скорее всего не из-за куска кода, а из-за низкой производительности ПК.
Да пк слабоват, но без этой строчки
работает отлично.
На железе только вечером могу попробовать. Я просто предположил что если ПК тормозит, то МК тоже будет тяжело, просто в программе еще куча функций кроме этой, и хотелось бы минимально загружать контроллер, вот и спрашиваю нужно менять эту функцию или так нормально будет работать?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 12:17:08
ARV
так и хочется сказать на великом и могучем все, что я думаю по этому поводу "разбиения по разрядам"...
мало того, что есть itoa, оптимальнее которой вряд ли у кого хватит тямки сделать, так есть и тривиальнейший алгоритм, который, если вспомнить школьную математику, прост, как колумбово яйцо! специально ведь статью даже сделал по этой теме:
Вывод чисел на дисплей
так нет же, каждый норовит изобрести свой
виласипет, да еще и ромбовидными колесами с карданным приводом...

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 12:33:31
sanyo.95
Спасибо, буду разбираться.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 19:26:09
COKPOWEHEU
Да нормальный способ, ненамного хуже
других.Самый простой, конечно, atoi, можно и обычным делением или побитовым шаманством. По скорости способ вычитания степеней деяти уделывает многих, включая тое же atoi, побитовое шаманство и (вот это совсем не удивительно) sprintf.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 19:45:40
t@nki$t
Добрый вечер. При попытке считать МК выдает следующее. Програматор AVR910. В програмировании ноль. Что делать дальше? Заранее спасибо.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт дек 04, 2014 06:15:47
pyzhman
А считать пытаетесь AT90S2313? Не?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт дек 04, 2014 11:07:55
t@nki$t
Пытаюсь считать ATtiny 2313.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт дек 04, 2014 15:58:48
COKPOWEHEU
Кажется, программатор найти не может, или он выдает неожиданные ответы. Можно проверить, каким com-портом он себя считает (avrprog вроде только до 4 считать умеет), можно проверить контакты и монтаж, можно ресетнуть его во время работы.