CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

хочу сделать секундомер с четырмя семисигментами. не могу составить алгоритм. нужно что бы по нажатию кнопки начинался счет. таймеры не используем. задержки. задержка 0.1 сек. по достижению десяти по 0.1 сек добавляем следующий десяток. считаем секунды. по достижению 60 сек начинаем считать минуты. далее 60 мин и считаем часы. 4 сигментника. индикация динамическая. с алгоритмом что то запутался. при еще одном нажатии кнопки секундомер останавливается. зацикливается. еще одно нажатие и сброс. задачка для меня тяжеленькая но я справлюсь. просто алгаритм этот и еще индикация динамическая пугает
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

mixon46 писал(а):таймеры не используем
Ну и напрасно.
Настройте таймер на 1 мс, в нём реализуйте динамическую индикацию и там же отсчитывайте свои интервалы. 1000 раз вызвался обработчик - прошла секунда.
Туда же и опрос кнопок запихните.
Реклама
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

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

void main (void)
{...

...
...

while (1)
{
PORTB=0b00111111;
delay_ms (100);
PORTB=0b00100100;
delay_ms (100);

и так далее до 9.
}
}



могу сравнивать. переменную ввести. надо алгоритм. хотя бы для двух сигментов. главное понять как добавлять следующий десяток
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

mixon46 писал(а):я таймеры еще не проходил
Ну вот, настало самое время их изучить. Ибо текущая задача без них превратиться в долгий и геморройный путь :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

ладно. а как можно было бы упростить перебор цыфр на сигменте что бы не писать 10 строчек. прибавлять там регистр +1 или еще как то. мне бы это надо знать
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Непонятно, что Вы хотите упростить :dont_know: Тот код, который Вы показали - это всего лишь вывод данных в порт и очень далёк от динамической индикации.
В сети полно статей на эту тему, поищите...
Реклама
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

да что неясного. у меня два семисигментника. они подключены к порту B. их минусы подключены через транзисторы к двум портам и управляются по очереди через порт D1 и D2. к D0 подключена кнопка. алгоритм такой. на двух сигментах по нулям. по нажатию кнопки мк начинает считать и выводить одновременно на сигмент цыфры по возврастающей. соответственно когда на одном сигменте цыфра дойдет до 9 и с следующим счетом на другом сигменте прибавится единица и счет продолжится.



00
кнопка была нажата и пошел счет
01
02
03
04
05
06
07
08
09
далее счет начинается с 10 тоесть прибавляем следующий десяток. и так каждый раз когда дойдет до x9
10
11
12
13 и так далее



и вот я не могу чет сообразить как бы это написать програмно
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: CodeVision AVR в вопросах и ответах

Сообщение pokk »

mixon46, по смотрите в сторону преобразования в двоично-десятичный формат.
вкратце после преобразования каждый разряд будет находится в своих перемененных. в вашем случае простейшее преобразование будет делением на 10. т.е у вас есть переменная которая принимает значение от 00 до 99 (к примеру 54)
после деления 10 целую часть (5) выводите на первый индикатор а остаток (4) на второй.

Либо вообще сделать 2 переменных

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

a++;
if(a>9){
  a=0;
  b++;
}

Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: CodeVision AVR в вопросах и ответах

Сообщение COKPOWEHEU »

А динамическую индикацию неизменного числа уже реализовали?
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

пока ничего не сделал. в сторону массивов и переменных клонит. некогда было делать пока что
sanyo.95
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Вс мар 30, 2014 21:41:24
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение 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
Но в Протеусе тупит ужасно, может есть какой другой способ сделать это, с меньшими затратами ресурсов МК. Или это нормально?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Что значит "тупит" ? Если тормозит, то скорее всего не из-за куска кода, а из-за низкой производительности ПК.
sanyo.95
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Вс мар 30, 2014 21:41:24
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение sanyo.95 »

Аlex писал(а):Что значит "тупит" ? Если тормозит, то скорее всего не из-за куска кода, а из-за низкой производительности ПК.
Да пк слабоват, но без этой строчки

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

while (s>=10000){s-=10000;c4++;}
работает отлично.
На железе только вечером могу попробовать. Я просто предположил что если ПК тормозит, то МК тоже будет тяжело, просто в программе еще куча функций кроме этой, и хотелось бы минимально загружать контроллер, вот и спрашиваю нужно менять эту функцию или так нормально будет работать?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

так и хочется сказать на великом и могучем все, что я думаю по этому поводу "разбиения по разрядам"... :twisted:
мало того, что есть itoa, оптимальнее которой вряд ли у кого хватит тямки сделать, так есть и тривиальнейший алгоритм, который, если вспомнить школьную математику, прост, как колумбово яйцо! специально ведь статью даже сделал по этой теме: Вывод чисел на дисплей
так нет же, каждый норовит изобрести свой виласипет, да еще и ромбовидными колесами с карданным приводом... :(
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
sanyo.95
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Вс мар 30, 2014 21:41:24
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение sanyo.95 »

Спасибо, буду разбираться.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: CodeVision AVR в вопросах и ответах

Сообщение COKPOWEHEU »

Да нормальный способ, ненамного хуже других.Самый простой, конечно, atoi, можно и обычным делением или побитовым шаманством. По скорости способ вычитания степеней деяти уделывает многих, включая тое же atoi, побитовое шаманство и (вот это совсем не удивительно) sprintf.
t@nki$t
Грызет канифоль
Сообщения: 289
Зарегистрирован: Ср дек 01, 2010 23:24:16

Re: CodeVision AVR в вопросах и ответах

Сообщение t@nki$t »

Добрый вечер. При попытке считать МК выдает следующее. Програматор AVR910. В програмировании ноль. Что делать дальше? Заранее спасибо.
Вложения
Fo_6zXgMLfI.jpg
(40.02 КБ) 466 скачиваний
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

А считать пытаетесь AT90S2313? Не?
Docendo discimus
t@nki$t
Грызет канифоль
Сообщения: 289
Зарегистрирован: Ср дек 01, 2010 23:24:16

Re: CodeVision AVR в вопросах и ответах

Сообщение t@nki$t »

Пытаюсь считать ATtiny 2313.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: CodeVision AVR в вопросах и ответах

Сообщение COKPOWEHEU »

Кажется, программатор найти не может, или он выдает неожиданные ответы. Можно проверить, каким com-портом он себя считает (avrprog вроде только до 4 считать умеет), можно проверить контакты и монтаж, можно ресетнуть его во время работы.
Ответить

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