реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Счетчик импульсов с выводом на 7-ми сегментный индикатор, Помогите, пожалуйста, создать схему
shadow86
сообщение Dec 16 2011, 20:46
Сообщение #46


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



И снова здравствуйте, уважаемые программисты!
в неравном бою с CodeVisionAVR побеждает машина! Бился над ним 3 дня, вцелом, достиг некоторых успехов (это мое личное мнение), но голова уже трещит.. Помогите запустить этот счетчик, чтоб его.. В приложенном файле текст программы, которую удалось сложить из кусков разных программ и которая благополучно не работает (((((((((. Как его перетасовать, чтоб входные импульсы в ножки РА1 считасись МК и выводились на 3 розрядный 7 сегментный индикатор??? help.gif

Вот последняя более-менее подходящая наработка Прикрепленный файл  M4.rar ( 899 байт ) Кол-во скачиваний: 88
тут происходит индикация, но вторая и третья цифры при выводе одинаковы ((( помогите это исправить help.gif

Сообщение отредактировал shadow86 - Dec 16 2011, 22:09
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 17 2011, 13:59
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



У вас неправильно вычисляется средняя цифра (в процедуре IND_Conv). Ошибка в строке 48
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 17 2011, 20:34
Сообщение #48


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



вот исправил недочет, на который Вы мне указали, но все равно выводит не корректно (((((. Подскажите, пожалуйста, где бок?

Сообщение отредактировал shadow86 - Dec 18 2011, 07:25
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 18 2011, 07:28
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



Спасибо всем за участие! Разобрался! Теперь счетчик выводит корректно. Добавить еще немного штрихов и можно запускать живую модель. )))
Извиняюсь за глупые вопросы и благодарен за помощь ))
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 18 2011, 18:45
Сообщение #50


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



Уважаемые программисты, подскажите, пожалуйста, где мне (и что) добавить, чтоб программа считала импульсы в течение 46с и выдавала на индикатор последнее посчитанное значение, тоесть спустя 46с показало первый раз, а потом через 46с обновило показание и так далее.
вот текст моей программы: Прикрепленный файл  M4.rar ( 787 байт ) Кол-во скачиваний: 84
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 18 2011, 19:21
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(shadow86 @ Dec 18 2011, 22:45) *
Уважаемые программисты, подскажите, пожалуйста, где мне (и что) добавить, чтоб программа считала импульсы в течение 46с и выдавала на индикатор последнее посчитанное значение,

Для этого вам надо отсчитать 46 секунд. Единственное место у вас, где есть какая то известная периодичность - это динамическое сканирование индикатора (прерывание от таймера), вот в нем и отсчитывайте.
Как насчитаете - копируйте накопленное значение счетчика в переменную, из которой и будете выводить на индикаторы, а счетчик сбрасывайте
Go to the top of the page
 
+Quote Post
Vladex
сообщение Dec 19 2011, 11:03
Сообщение #52


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 24-01-06
Из: Ярославль
Пользователь №: 13 558



Цитата(shadow86 @ Dec 7 2011, 00:11) *
чтоб во время счетного периода выводилось последнее посчитанное число импульсов, а не 1, 2, 3, .. и т.д.

буферизуй индикацию регистрами-защелками (ИР24 или им подобными)по окончанию счета, и не надо микроконтроллера будет


--------------------
Разработка электронных устройств. Радиомонтаж. Ремонт оборудования в Ярославле i-link@bk.ru
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 23 2011, 13:31
Сообщение #53


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



Попробывал соеденить один из выходов-катодов с еще одной ножкой-входом, чтоб считать изменения уровня на этой ножке и от него отталкиваясь, получить 46с задержки, но что-то опять не получается ((
. . .
PORTA.3 = 0;
DDRA.3 = 0;
PORTA.4 = 0;
DDRA.4 = 0;
ACSR = 0x80;
#asm("sei");
while(1){
while (PINA.3 == 1) {counterProg++;} // регистрирую изменение уровня на входе РА3 (соединенного с одним из зажигаемых катодов индикатора)

while (PINA.4 == 1){} //считаю импульсы
{imp ++;}
while (PINA.4 == 0){}
if (imp >= 1000) {
imp -= 1000;
}
if (counterProg == 10) { //обнуляю количество импульсов
imp = 0;
counterProg = 0;}
IND_Conv(imp); //вывожу количество имп. за счетный период на индикатор

}
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 23 2011, 13:52
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Да зачем такие извращения?
Один таймер в счетном режиме, на него заводим то, что нужно считать
Второй отсчитывает время. Прошло 46 сек - читаем состояние вервого счетного таймера и обнуляем его
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 23 2011, 14:05
Сообщение #55


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



вот вам легко говорить... у меня 0-й работает на динамическую индикацию. когда пытаюсь запустить 1-й, то фигня какая-то получается.. либо индикация отказывает, либо счет останавливается.. не могу победить пока что использование 2 счетчиков-таймеров одновременно (((
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 23 2011, 14:22
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(shadow86 @ Dec 23 2011, 18:05) *
вот вам легко говорить... у меня 0-й работает на динамическую индикацию. когда пытаюсь запустить 1-й, то фигня какая-то получается.. либо индикация отказывает, либо счет останавливается.. не могу победить пока что использование 2 счетчиков-таймеров одновременно (((

А вот тут нужно смотреть, что там наваяно
Как приоритеты расставлены, как что...

А зачем использовать два таймера для временных интервалов? Тот, который динамическую индикацию осуществляет, вполне посчитает и 46сек...
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 23 2011, 14:37
Сообщение #57


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



а как это должно выглядеть? у меня вынесена отдельная функция на динамику:
void IND_Update(void)
{
static unsigned char count = 0;

PORT_K &= ~((1<<KAT1)|(1<<KAT2)|(1<<KAT3));
PORT_IND = data[count];
{
if (count == 0) {
PORT_K |= (0<<KAT1);
PORT_K |= (1<<KAT2);
PORT_K |= (1<<KAT3);
}
if (count == 1){
PORT_K |= (0<<KAT2);
PORT_K |= (1<<KAT1);
PORT_K |= (1<<KAT3);
}
if (count == 2) {
PORT_K |= (0<<KAT3);
PORT_K |= (1<<KAT1);
PORT_K |= (1<<KAT2);
}
count++;
if (count == 3) {count = 0;}
}
}
допустим, я могу повышать еще некоторую переменную на ряду с count, а как потом мне ее значение вынести в тело основной программы?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 23 2011, 15:14
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



да покажите уже полностью, что там наваяли
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 24 2011, 08:40
Сообщение #59


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



Прикрепленный файл  M4.rar ( 953 байт ) Кол-во скачиваний: 71
Вот моя программа
Она считает импульсы на РА3 и выводит их количество на 3-х знаковый 7-ми сегментный индикатор.
Go to the top of the page
 
+Quote Post
shadow86
сообщение Dec 27 2011, 09:28
Сообщение #60


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 12-11-09
Из: украина, г. харьков
Пользователь №: 53 585



Вот попробывал добавить функцию на счет некоторой переменной.. ПОМОГИТЕ ПОЖАЛУЙСТА!!! У меня уже фантазия иссякла

#include <tiny26.h>

unsigned char number[] =
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};

#define PORT_IND PORTB
#define DDR_IND DDRB
#define PORT_K PORTA
#define DDR_K DDRA
#define KAT1 0
#define KAT2 1
#define KAT3 2

volatile unsigned char data[3];
static unsigned int time;
void IND_Init(void)
{
//порт, к которому подкл. сегменты
PORT_IND = 0xff;
DDR_IND = 0xff;

//порт, к которому подкл. катод
PORT_K &= ~((1<<KAT1)|(1<<KAT2)|(1<<KAT3));
DDR_K |= ((1<<KAT1)|(1<<KAT2)|(1<<KAT3));

data[0] = 0;
data[1] = 0;
data[2] = 0;
}

void IND_Conv(unsigned int value)
{
unsigned char tmp0, tmp1, tmp2;
tmp0=tmp1=0;
while (value >= 100)
{ value -= 100;
tmp0++;
}
while (value >= 10)
{ value -= 10;
tmp1++;
}
tmp2 = value;

data[0]=number[tmp0]; //вывод сотен
data[1]=number[tmp1]; //вывод десятков
data[2]=number[tmp2]; //вывод единиц
}

void IND_Update(void)
{
static unsigned char count = 0;
PORT_K &= ~((1<<KAT1)|(1<<KAT2)|(1<<KAT3));
PORT_IND = data[count];
{
if (count == 0) {
PORT_K |= (0<<KAT1);
PORT_K |= (1<<KAT2);
PORT_K |= (1<<KAT3);
}
if (count == 1){
PORT_K |= (0<<KAT2);
PORT_K |= (1<<KAT1);
PORT_K |= (1<<KAT3);
}
if (count == 2) {
PORT_K |= (0<<KAT3);
PORT_K |= (1<<KAT1);
PORT_K |= (1<<KAT2);
}
count++;
if (count == 3) {count = 0;}
}
}

int Wait (void)
{
time++;
return time;
}
unsigned int imp = 0;
void main( void )
{
IND_Init();

//инициализация таймера Т0
//частота прерываний 50Гц при частоте кварца 4МГц
TIMSK = (1<<TOIE0);
TCCR0 = (1<<CS02)|(0<<CS01)|(1<<CS00);
TCNT0 = 0xb2;
PORTA.3 = 1;
DDRA.3 = 0;

TCCR1A = (1<<CS13)|(0<<CS12)|(0<<CS11)|(1<<CS10);
TCNT1 = 0x00;
#asm("sei");
while(1){
while (PINA.3 == 1){}
{imp ++;}
while (PINA.3 == 0){}
if (imp >= 1000) {
imp -= 1000;
}

IND_Conv(imp);
if (Wait()>=10){
time=0;
imp=0;}
}
}

//прерывания таймера Т0 - вывод на индикатор
interrupt [TIM0_OVF] void Timer0Ovf(void)
{
TCNT0 = 0xb2;
IND_Update();
Wait();
}
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016