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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Динамическая Индикация + Proteus VSM 7, Совместимы ли, че не так делаю ?
dio
сообщение Jun 24 2007, 14:18
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766



Приветствую!

Илектронный циферблат с 4мя 7ми-сегментными цифрами (в будущем будет часами) реализую с помощью динамики в IAR следующим образом:


Код
#define byte unsigned char
#define dynIndexingTime 20000
#define MaxValue 50

#define CharCodeBusDDR DDRB
#define CharCodeBus    PORTB
#define kathodBusDDR   DDRD
#define kathodBus      PORTD


void my_putChar(byte ind);
byte charTable(byte ind);

byte N1,N10,N100,N1000;

int main( void )
{
  int counter,ind;
  CharCodeBusDDR=0xFF;
  kathodBusDDR=0x0F;

  kathodBus=0xFE;

N1=0;
N10=0;
N100=0;
N1000=0;

counter=0;
ind=0;

for(;;)
{
   counter++;

  if (counter > MaxValue)
  {
   counter=0;
   N1++;
   if (N1>9)   {  N1=0;    N10++;  }
   if (N10>9)  {  N10=0;   N100++;  }
   if (N100>9) {  N100=0;  N1000++;  }
   if (N1000>9){  N1000=0;   }
  }


  if (ind==4) ind=0;
     my_putChar(ind++);

     __delay_cycles(dynIndexingTime);  // Wait

     kathodBus=~((~kathodBus)<<1);
     if (kathodBus==0xEF) kathodBus=0xFE;

}


}


void my_putChar(byte ind) //ind->index "0" -> N1,singles   '1'->N10,decades  '2'->N100,hundreds  '3'->N1000,thousands
{
     if (ind==0) CharCodeBus =charTable(N1);
else if (ind==1) CharCodeBus =charTable(N10);
else if (ind==2) CharCodeBus =charTable(N100);
else if (ind==3) CharCodeBus =charTable(N1000);
}

byte charTable(byte ind)
{
  switch(ind)
    {
    case 0: return 0x3F;
    case 1: return 0x06;
    case 2: return 0x5B;
    case 3: return 0x4F;
    case 4: return 0x66;
    case 5: return 0x6D;
    case 6: return 0x7D;
    case 7: return 0x07;
    case 8: return 0x7F;
    case 9: return 0x6F;
    }
return 0x01;
}



Результаты в Proteusе не соответствуют ожидаемым. Подскажите пжста в чем проблема, может какие настройки специальные в Proteusе или напутал чего?

Благодарю зарание !

Hex File

Proteus 7 file

Извиняюсь за Rapidshare, не мог втыкнуть по другому.

Сообщение отредактировал dio - Jun 24 2007, 14:06
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 24 2007, 15:56
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
циферблат с 4мя 7ми-сегментными цифрами (в будущем будет часами) реализую с помощью динамики в IAR следующим образом:


А почему бы не сделать макет устройства и не проверять на нем?
Если вам интересен конечный результат - т.е. часы, то зачем тратить время на протеус?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 24 2007, 21:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(dio @ Jun 24 2007, 17:18) *
byte charTable(byte ind)
{
switch(ind)
{
case 0: return 0x3F;
case 1: return 0x06;
case 2: return 0x5B;
case 3: return 0x4F;
case 4: return 0x66;
case 5: return 0x6D;
case 6: return 0x7D;
case 7: return 0x07;
case 8: return 0x7F;
case 9: return 0x6F;
}
return 0x01;
}


Вот это круто. smile.gif Я бы не додумался. Вы наверное раньше на PIC музыцировали? smile.gif Помоему эта ария оттуда.

Я сегодня сделаю что-то подобное. Отлажу и выложу сюда. Ждите.
Go to the top of the page
 
+Quote Post
vooon
сообщение Jun 24 2007, 21:32
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



http://nix-06.nm.ru/Primer_c/Primer_c_1.html

правда я теперь делаю немного подругому:
определил один раз хедер, теперь использую smile.gif
Код
/*******************************************************************************
* Digits.h
******************************************************************************/

#ifndef DIGITS_H
#define DIGITS_H

// segment bit def
#define DIGIT_0  0
#ifndef DIGIT_H
#define DIGIT_H  (1<<7)
#define DIGIT_G  (1<<6)
#define DIGIT_F  (1<<5)
#define DIGIT_E  (1<<4)
#define DIGIT_D  (1<<3)
#define DIGIT_C  (1<<2)
#define DIGIT_B  (1<<1)
#define DIGIT_A  (1<<0)
#endif // ifndef DIGIT_H

/*      NAME         A    |    B    |    C    |    D    |    E    |    F    |    G    |  H(dp)    /* comment    */
#define CG_0      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_0 | DIGIT_0   /* 00,      0 */
#define CG_1      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0   /* 01,      1 */
#define CG_2      DIGIT_A | DIGIT_B | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 02,      2 */
#define CG_3      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_0 | DIGIT_G | DIGIT_0   /* 03,      3 */
#define CG_4      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 04,      4 */
#define CG_5      DIGIT_A | DIGIT_0 | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 05,      5 */
#define CG_6      DIGIT_A | DIGIT_0 | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 06,      6 */
#define CG_7      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0   /* 07,      7 */
#define CG_8      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 08,      8 */
#define CG_9      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 09,      9 */
#define CG_A      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 10,      A */
#define CG_B      DIGIT_0 | DIGIT_0 | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 11,      B */
#define CG_C      DIGIT_A | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_0 | DIGIT_0   /* 12,      C */
#define CG_D      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 13,      D */
#define CG_E      DIGIT_A | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 14,      E */
#define CG_F      DIGIT_A | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 15,      F */
#define CG_c      DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 16,      c */
#define CG_g      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 17,      g */
#define CG_h      DIGIT_0 | DIGIT_0 | DIGIT_C | DIGIT_0 | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 18,      h */
#define CG_H      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 19,      H */
#define CG_J      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_0 | DIGIT_0 | DIGIT_0   /* 20,      J */
#define CG_L      DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_0 | DIGIT_0   /* 21,      L */
#define CG_n      DIGIT_0 | DIGIT_0 | DIGIT_C | DIGIT_0 | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 22,      n */
#define CG_N      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_E | DIGIT_F | DIGIT_0 | DIGIT_0   /* 23,   n_up */
#define CG_o      DIGIT_0 | DIGIT_0 | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 24,      o */
#define CG_P      DIGIT_A | DIGIT_B | DIGIT_0 | DIGIT_0 | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 25,      P */
#define CG_q      DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 26,      q */
#define CG_r      DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 27,      r */
#define CG_S      DIGIT_A | DIGIT_0 | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 28,      S */
#define CG_t      DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_G | DIGIT_0   /* 29,      t */
#define CG_U      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_0 | DIGIT_0   /* 30,      U */
#define CG_y      DIGIT_0 | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 31,      y */
#define CG_MINUS  DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_G | DIGIT_0   /* 32,      - */
#define CG_OPEN   DIGIT_A | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_E | DIGIT_F | DIGIT_0 | DIGIT_0   /* 33,      [ */
#define CG_CLOSE  DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_D | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0   /* 34,      ] */
#define CG_LOW    DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_D | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0   /* 35,      _ */
#define CG_GRAD   DIGIT_A | DIGIT_B | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_F | DIGIT_G | DIGIT_0   /* 36,      ╟ */
#define CG_LAMBDA DIGIT_A | DIGIT_B | DIGIT_C | DIGIT_0 | DIGIT_E | DIGIT_0 | DIGIT_G | DIGIT_0   /* 37, lambda */
#define CG_NONE   DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0 | DIGIT_0   /* 38,   none */

#endif // ifndef DIGITS_H
Go to the top of the page
 
+Quote Post
dio
сообщение Jun 24 2007, 21:48
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766



Цитата(defunct @ Jun 24 2007, 17:56) *
А почему бы не сделать макет устройства и не проверять на нем?



На данный момент нет такой возможности. Что касается Proteus, то время уже потрачено. Кроме того это нужно для следующих проэктов, где макет будет сложно себе позволить. 07.gif


Цитата(SasaVitebsk @ Jun 24 2007, 23:01) *
Вот это круто. smile.gif Я бы не додумался. Вы наверное раньше на PIC музыцировали? smile.gif


Если честно, не понял, в каком смысле?

PIC в глаза не видел sad.gif

Извиняюсь, забыл пояснить, что циферблатом является самодельная светодиодная панель, хотя это особо не меняет дела.

Сообщение отредактировал dio - Jun 24 2007, 21:39
Go to the top of the page
 
+Quote Post
dio
сообщение Jun 24 2007, 22:57
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766



vooon

спасибо за идею, но хотел бы заострить внимание на суть самого вопроса:
способен ли Proteus воспроизвести реально динамическую индикацию? Если да, то как ? Ну а если нет, тогда кто может ?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 25 2007, 00:06
Сообщение #7


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(dio @ Jun 25 2007, 06:57) *
vooon

спасибо за идею, но хотел бы заострить внимание на суть самого вопроса:
способен ли Proteus воспроизвести реально динамическую индикацию? Если да, то как ? Ну а если нет, тогда кто может ?

Года два назад пытался ради интереса смоделировать динамическую индикацию в Proteus'е, долго мучился, так ничего и не получилось. На макетке же все работало на ура. Как Вам и посоветовал уважаемый defunct, не тратьте зря время на протеус (ИМХО это игрушка), а спаяйте реальное железо. Вот, можно здесь почитать по протеусу.

Цитата(dio @ Jun 25 2007, 05:48) *
Что касается Proteus, то время уже потрачено.

Не продолжайте его тратить зря... Хотя не совсем зря... Какой-то опыт все-равно будет.
Цитата(dio @ Jun 25 2007, 05:48) *
Кроме того это нужно для следующих проэктов, где макет будет сложно себе позволить. 07.gif

Ну так не годится (ИМХО). Нужно собрать нормальную макетку, либо купить готовую и отлаживать на ней софт, железо. Все равно же в конечном счете придется проверять наработки на готовом железе. И наверняка при переносе проекта с протеуса на реальное железо возникнут не легко устраняемые баги.
Цитата(dio @ Jun 25 2007, 05:48) *
Если честно, не понял, в каком смысле?

PIC в глаза не видел sad.gif

Реализация этого:
Код
byte charTable(byte ind)
{
  switch(ind)
    {
    case 0: return 0x3F;
    case 1: return 0x06;
    case 2: return 0x5B;
    case 3: return 0x4F;
    case 4: return 0x66;
    case 5: return 0x6D;
    case 6: return 0x7D;
    case 7: return 0x07;
    case 8: return 0x7F;
    case 9: return 0x6F;
    }
return 0x01;
}

сильно напоминает программирвоание МК PIC на ассемблере. Подобным образом описывались таблицы, из которых можно было извлечь число, местоположение которого определялось смещением, записанным в регистр w микроконтроллера.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 25 2007, 00:18
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



В первом приближении написал. Отлажу завтра, а то у меня чё-то с железом. Понять не могу. По ходу не те транзисторы запаяли.
Прикрепленные файлы
Прикрепленный файл  main.zip ( 1.88 килобайт ) Кол-во скачиваний: 74
 
Go to the top of the page
 
+Quote Post
vooon
сообщение Jun 25 2007, 00:29
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата(dio @ Jun 25 2007, 02:57) *
способен ли Proteus воспроизвести реально динамическую индикацию? Если да, то как ? Ну а если нет, тогда кто может ?

один раз мне удалось - увеличил шаг времени, и стало показывать все сегменты.
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jun 25 2007, 05:35
Сообщение #10


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Нормально Протеус с динамической индикацией работает ... увеличить нужно время реакции у индикаторов и усё работает.
Go to the top of the page
 
+Quote Post
dio
сообщение Jun 25 2007, 08:09
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766



Цитата(AndryG @ Jun 25 2007, 07:35) *
Нормально Протеус с динамической индикацией работает ... увеличить нужно время реакции у индикаторов и усё работает.


прекрасно, но к сожалению этой настройки нет в 7SEG-COM-CAT компоненте
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 25 2007, 19:21
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



В принципе то что я выложил вчера без проверки - работает, но ошибки в инициализации таймеров. Короче в голове. Если сравните сегодняшнюю, то увидите их. smile.gif

Несколько переписал для удобства. Теперь можно выводить в двух режимах часы:мин и мин:сек.
У меня это, естественно, не часы, а, собственно таймер, но принцип понятен. Если надо схему, чтобы понять что к чему, - стучи - выложу.

Прога рабочая. Я её проверил.

Очень опытный паяльщик оказался. smile.gif Сходу нашёл ошибку в верхнем ключе, и исправил. smile.gif В результате вместо КП505 были запаяны КТ3107. Резисторы поменяны. Ну и в завершение ЕН-ка запаяна раком. После восстановления схемы - всё заработало. smile.gif

Да кстати ещё один вариант вот здесь лежит http://nix-06.nm.ru/
Прикрепленные файлы
Прикрепленный файл  main.zip ( 2.14 килобайт ) Кол-во скачиваний: 64
 
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jun 25 2007, 19:21
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(dio @ Jun 25 2007, 01:57) *
vooon

спасибо за идею, но хотел бы заострить внимание на суть самого вопроса:
способен ли Proteus воспроизвести реально динамическую индикацию? Если да, то как ? Ну а если нет, тогда кто может ?


Кто или что может? smile.gif

Я и протеус тоже это может smile.gifsmile.gifsmile.gif

Вообже динамика у протеуса работает немного так сказать кривовато.
Суть в том что перед засвечиванием следующего сегмента необходимо
1 запереть порты ( DDR)
2 сформировать новую засветку
3 переключить следующий сегмент
4 открыть порты
5 сделать небольшую паузу
и томже духе следующий сегмент.

В реале работает и без открывания\запирания портов ,так как время нитожно мало ,а протеус реагирует.
Go to the top of the page
 
+Quote Post
_Diman_
сообщение Jun 25 2007, 20:40
Сообщение #14


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

Группа: Свой
Сообщений: 92
Регистрация: 8-03-05
Пользователь №: 3 160



Динамика в протеусе отлично (в целях отладки) работает. Надо только использовать дисплеи а не светодиодные модели. В настройках дисплея ставится время minimum trigger time. А светодиоды вообще симуляцию вешают, вместо них лучше пользоваться LOGICSTATE ( в место одиночного светодиода), и вообще как почти во всех симуляторах проще и быстрей работает с примитивами. Можете посмотреть на модель моих часов для версии протеуса6,95 http://startcd.narod.ru/clock/proteus16n.rar
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 25 2007, 22:45
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



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

Возникает вопрос - зачем? Простейшие устр-ва делаются на раз. А более сложные фактически не поддаются моделированию.

По-моему мнению эффективность того же JTAGа во много раз выше! Самое дорогое - это Ваше время.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:01
Рейтинг@Mail.ru


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