roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 22:50

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 15:02 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
Код:
PORTA.6 = 1;
PORTC = segment[x1];
PORTD.7 = PORTC.6;
delay_ms(5);                 
                 
PORTA.6 = 0;

PORTC = segment[x10];
PORTD.7 = PORTC.6;
delay_ms(5); 

Код:
unsigned char x=segment[x1];
PORTA.6 = 1;
PORTC = x;
PORTD.7 = x>>6;
delay_ms(5);                 
                 
PORTA.6 = 0;
x=segment[x10]
PORTC = x;
PORTD.7 = x>>6;
delay_ms(5); 

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 16:33 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июн 2010, 08:04
Сообщения: 201
Откуда: Казань
Ничего не изменило :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 17:01 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
тогда схему приведи ... а лучше проект в протеусе....

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 18:04 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июн 2010, 08:04
Сообщения: 201
Откуда: Казань
Ваш код кстати вообще не скомпилился. Пишет что строчка unsigned char x=segment[x1];
must declared first in block. Перенес в начало void main, ничего не отображает индикатор.

Схема верна, просто число показывает же. А если необходимо вывести 2 числа подряд, то тут проблемы возникают


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 18:09 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
дык и хочется посмотреть на схему , да бы понять в чем косяк программы

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 19:29 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июн 2010, 08:04
Сообщения: 201
Откуда: Казань
Переписал код, вытащив все из главного тела. Работает, но фиксированную задержку не могу поставить, все цифры невозможно разглядеть становится.

Косяк тут выявляется
Код:
  void print()
    {     
    for (i=1; i<10000; i++)
    {
   
     print_n(i);
delay_ms(50); //ВОТ ТУТ! ЕСЛИ УБРАТЬ ЗАДЕРЖКУ ВСЕ НОРМ!

     
     }
    }


Схемы нет, все на макетке.. Если поможет.
Индикаторы с общим анодом, сегменты подключены так:
C0 b
C1 a
C2 f
C3 c
C4 d
C5 e
D7 g

Аноды соответственно:
A4
A5
A6
A7

Код:
    #include <mega16.h> //Âêëþ÷àåì áèáëèîòåêó äëÿ ðàáîòû ñ ìèêðîêîíòðîëëåðîì ATMega16

    #include <delay.h> //Âêëþ÷àåì áèáëèîòåêó äëÿ îðãàíèçàöèè çàäåðæåê

    int i,a, x1,x10, disp;

     
     unsigned char segment[10]= {   
     // gedcfab    gedcfab   
      0b1000000, 0b1110110, //0,1
      0b0001100, 0b0100100, //2,3
      0b0110010, 0b0100001, //4,5
      0b0000001, 0b1110100, //6,7
      0b0000000, 0b0100000  //8,9
     };
     
     

     void cifra(int z)

    PORTC=0xFF;          // Ïîäòÿíóòü ïîðò C  ê 1
    PORTD=0xFF;          //  Ïîäòÿíóòü ïîðò D ê 1   
    PORTC = segment[z];
    PORTD.7 = PORTC.6;
    delay_ms(1);

}
   
   void print_n(int n)
{   

   PORTA.4 = 1;PORTA.5 = 0;PORTA.6 = 0;PORTA.7 = 0; cifra(n%10); n = n/10;
   PORTA.4 = 0;PORTA.5 = 1;PORTA.6 = 0;PORTA.7 = 0; cifra(n%10); n = n/10;
   PORTA.4 = 0;PORTA.5 = 0;PORTA.6 = 1;PORTA.7 = 0; cifra(n%10); n = n/10;
   PORTA.4 = 0;PORTA.5 = 0;PORTA.6 = 0;PORTA.7 = 1; cifra(n%10);
}
   
   void initialization()
   {
       DDRD=0xFF;         // Âñå ïîðòû D - âûõîäû 
    DDRC=0xFF;         // Âñå ïîðòû C - âûõîäû     
    DDRA=0xFF;         // Âñå ïîðòû A - âûõîäû
   
    PORTA=0x00;          // Ïîäòÿíóòü ïîðò A ê 0
    PORTC=0xFF;          // Ïîäòÿíóòü ïîðò C  ê 1
    PORTD=0xFF;          //  Ïîäòÿíóòü ïîðò D ê 1
   }
   
    void print()
    {     
    for (i=1; i<10000; i++)
    {
   
     print_n(i);
delay_ms(50); //ВОТ ТУТ! ЕСЛИ УБРАТЬ ЗАДЕРЖКУ ВСЕ НОРМ!

     
     }
    }

    void main(void)       
{

    initialization();
    while(1)
    {   
    print();
     
   
   
     }
     
    } 
   



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 18 июл 2011, 23:41 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
тогда зачем те эта задержка ?

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семисегментный светодиодный индикатор
СообщениеДобавлено: 20 июл 2011, 19:03 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
в прерывание надо вывод засунуть тогда голова не будет болеть когда и что выводить. и мерцать не будет. частоту любую можно выставить.

Добавлено спустя 1 минуту 6 секунд:
я вроде уже когдато тут выкладывал примеры с работы индикатором.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO