Светодиодные фонари и световые приборы. Всё о светотехнике.
Вернуться   Форум FONAREVKA.RU Лаборатория Разработка и модификация фонарей Разработка и модификация электроники фонарей
Расширенный поиск
Забыли пароль? Регистрация

  • О нашем проекте
  • Светотехника и световые приборы
  • Правила форума
Проект FONAREVKA.RU специализируется на предоставлении всей необходимой информации по светотехнике:

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

Если у вас есть вопросы по выбору фонарей, аккумуляторов и зарядных устройств ознакомьтесь с FAQ от наших экспертов:

F.A.Q. по выбору фонарей различных типов;
F.A.Q. по выбору аккумуляторов;
F.A.Q. по выбору зарядных устройств.
Ответ  Создать новую тему
Просмотров в теме 26264   Ответов в теме 46   Подписчиков на тему 2   Добавили в закладки 0
Опции темы Поиск в этой теме
Старый 24.04.2012, 00:40 Автор темы   1
Новичок
 
Регистрация: 24.04.2012
Последняя активность: 25.05.2012 10:56
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Простая моргалка на Attiny13A

Здравсвуйте! Нужна програмка для Attiny13A, которая будет работать с 5-ю диодами, поочерёдно зажигая каждый из них с промежутком в 30 секунд, и один как индикация работы устройства, т.е. 4 мигают, один светится как индикация.
Спасибо.
frotnline вне форума   Ответить с цитированием Вверх
Старый 24.04.2012, 02:17   2
oleg235
Ветеран Фонарёвки
 
Регистрация: 07.04.2011
Последняя активность: 05.07.2019 16:52
Сообщений: 2838
Сказал(а) спасибо: 25
Поблагодарили: 402 раз(а) в 189 сообщениях

По умолчанию Re: Прошивка микроконтроллеров AVR

frotnline, С в помощь.
oleg235 вне форума   Ответить с цитированием Вверх
Старый 25.04.2012, 08:46   3
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Прошивка микроконтроллеров AVR

Цитата:
Посмотреть сообщение Сообщение от frotnline :
Нужна програмка для Attiny13A
Готов помочь, при условии что 50% работы сделаешь сам.

Для затравки 50% программы:
Код:
#include <attiny13.h>

void delay(unsigned char);

main()
{
  DDRB=0x1F;
  for()
  {
    PORTB = 0x0E;
    delay(30);
    PORTB = 0x0D;
    delay(30);
    PORTB = 0x0B;
    delay(30);
    PORTB = 0x07;
    delay(30);
  }
}
Осталось добавить реализацию функции delay(), скомпилировать и прошить.
VladislavS вне форума   Ответить с цитированием Вверх
Старый 25.04.2012, 10:31   4
AVSel
Консультант

 
Аватар для AVSel
 
Регистрация: 15.11.2010
Последняя активность: 27.01.2024 20:53
Адрес: Москва
Сообщений: 8206
Сказал(а) спасибо: 1077
Поблагодарили: 1713 раз(а) в 912 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

frotnline, просто и доступно про основы программирование МК на С, можно почитать здесь: http://forum.hobbi.tv/showt...
AVSel вне форума   Ответить с цитированием Вверх
Старый 26.04.2012, 20:24 Автор темы   5
frotnline
Новичок
 
Регистрация: 24.04.2012
Последняя активность: 25.05.2012 10:56
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Спасибо большое, кстати у меня есть код,именно того что мне надо сделать в итоге, который должен работать, но почему-то светятся все светодиоды одновременно, я подозреваю что дело в fuse bits, можно ли их как-то подобрать, так как код не мой и как именно надо выставлять fuse я не знаю. Если что могу выложить код!

Спасибо!
frotnline вне форума   Ответить с цитированием Вверх
Старый 26.04.2012, 20:46   6
AVSel
Консультант

 
Аватар для AVSel
 
Регистрация: 15.11.2010
Последняя активность: 27.01.2024 20:53
Адрес: Москва
Сообщений: 8206
Сказал(а) спасибо: 1077
Поблагодарили: 1713 раз(а) в 912 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от frotnline :
Спасибо большое, кстати у меня есть код,именно того что мне надо сделать в итоге, который должен работать, но почему-то светятся все светодиоды одновременно, я подозреваю что дело в fuse bits, можно ли их как-то подобрать, так как код не мой и как именно надо выставлять fuse я не знаю. Если что могу выложить код!

Спасибо!
Для начала неплохо-бы выложить схему, потому-что каким образом у вас подключены светодиоды здесь никому не известно.
AVSel вне форума   Ответить с цитированием Вверх
Старый 27.04.2012, 07:48   7
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от frotnline :
я подозреваю что дело в fuse bits
Электроника - точная наука и гаданий не допускает. Поэтому, схему, программу и фузы в студию. А иначе можешь сам гадать дальше.
VladislavS вне форума   Ответить с цитированием Вверх
Старый 27.04.2012, 12:53 Автор темы   8
frotnline
Новичок
 
Регистрация: 24.04.2012
Последняя активность: 25.05.2012 10:56
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Вот кусочек схемы необходимого устройства:

Вот код,который имеется:
Код HTML:
#include <avr/io.h>
#include <avr/interrupt.h>
#define PreloadLow 0x0C //0x8C
#define PreloadHugh 0x0F //0x11
#define sc 15 //signal counter
//Bit oriented macros
unsigned char bits[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
#define set_bit(x,y) x|=bits[y] //Macros set bit Y in variable X
#define clear_bit(x,y) x&=~bits[y] //Macros clear bit Y in variable X
#define inv_bit(x,y) x^=bits[y] //Macros inversion bit Y in variable X

/*Signal definition
oD array define time of signal,
oS array define type of signal
	0x0F=pause
	0x0E=Dz/s
	0x0D=Z
	0x0B=Dz
	0x07=KPTS-1315 Dz Z KP Z KP Dz KP DzS p KP p Dz p Z p DzS*/
unsigned char oD[sc+1]={20, 20, 10, 30, 10, 20, 20, 30, 10, 30, 10, 30, 20, 20, 40, 30};
unsigned char oS[sc+1]={0x0B,0x0D,0x07,0x0D,0x07,0X0B,0x07,0x0E,0x0F,0x07,0x0F,0x0B,0x0F,0x0D,0x0F,0x0E};
unsigned char i=sc; //index
unsigned char duration; //signal duration
unsigned char TCNT1; //Hihg byte of timer

ISR (SIG_OVERFLOW0)
{
	if(!TCNT--)
	{
		TCNT1=PreloadHigh;
		TCNT0=PreloadLow;
		if(!duration--) //if time of signal is ended
		{
			if(!i--)
			{
				i=sc;
				inv_bit(PORTB,5);
			}
			duration=oD[i]; //change signal on PORTB
			PORTB=oS[i];
		}
		inv_bit(PORTB,4);
	}
}
int main (void)
{
	CLKPR=0x80;
	CLKPR=0x00;
	//Port B initialization
	//Func5=In Func4=Out Func3=Out Func2=out Funcs1=Out Func0=Out
	DDRB=0x3F;
	PORTB=oS[i]; //output first signal
	duration = oD[i]; //
	TIFR0=0;
	ACSR=0x80; //Analog Comparator initialization
	ADCSRB=0x00; //Analog Comparator: Off
	//External Interrupt(s) initialization
	//INTO:Off
	//Interrupt on any change on pins PCINTO-5: Off
	GIMSK=0x00;
	MCUCR=0x00;
	//Timer/Counter 0 initialization
	//Clock source: System Clock
	//Clock value: 4,492 kHz
	//Mode: Normal top=FFh
	//OC0A output: Disconnected
	//OC0B output: Disconnected
	TCCR0A=0x00;
	TCCR0B=0x05;
	TCNT1=PreloadHigh;
	TCNT0=PreloadLow;
	OCR0A=0x00;
	OCR0B=0x00;
	TIMSK0=0x02; //Timer Counet 0 Interrupt(s) initialization
	GIFR=0;
	sei();
	while(1)
}
А вот фьюзы для этого кода как раз мне и не известны.
frotnline вне форума   Ответить с цитированием Вверх
Старый 27.04.2012, 15:10   9
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Замечательно, давай начнём со схемы. У ATtiny13A питание на 8-ю ногу подаётся, а не на 5-ю. Программу чуть позже гляну. С виду она даже скомпилироваться не должна.
- while(1) должно быть while(1);
- PreloadHigh не определено
- TCNT не определено

[Исправлено: VladislavS, 27.04.2012 в 15:23]
VladislavS вне форума   Ответить с цитированием Вверх
Старый 27.04.2012, 16:21   10
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Предлагаю для начала выкинуть из программы всё ненужное и организовать/проверить прерывания с периодом 1 секунда. Для удобства программирования.

Код:
#include <avr/io.h>
#include <avr/interrupt.h>

unsigned char bits[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
#define set_bit(x,y) x|=bits[y]
#define clear_bit(x,y) x&=~bits[y]
#define inv_bit(x,y) x^=bits[y]

ISR (SIG_OUTPUT_COMPARE0A)
{
  inv_bit(PORTB,4);
}

int main (void)
{
  DDRB=0x1F;
  PORTB=0x1F;
  TCCR0A=0x02;  // WGM01=1 WGM00=0;  Режим CTC=0-OCRA
  TCCR0B=0x05;  // 128кГц / 1024 = 125 Гц
  OCR0A=125;     // 1 Гц по CompareA 
  TIMSK0=0x04;  // Compare Match A Interrupt
  sei();
  for(;;);
}
Ставим фьюзы на CKSEL0=1, CKSEL1=1 (“1” means unprogrammed ) и смотрим результат. Один из диодов должен замигать. Заставить их мигать по программе уже дело техники.

Подразумевается что компилятор у тебя есть

Саму программу миганий предлагаю чуть удобней переписать так
Код:
typedef enum { pause=0x0F, DzS=0x0E, Z=0x0D, Dz=0x0B, KP=0x07} STATES;
typedef struct
{
  STATES oS;
  unsigned char oD;
} PROGRAM;
const PROGRAM program[]={{Dz,20},{Z,20},{KP,10},{Z,30},{KP,10},{Dz,20},{KP,20},{DzS,30},{pause,10},{KP,30},{pause,10},{Dz,30},{pause,20},{Z,20},{pause,40},{DzS,30}};
Ну а исполнение программы как-то так сделать
Код:
ISR (SIG_OUTPUT_COMPARE0A)
{
  static unsigned char program_counter;
  static unsigned char delay_counter;
  if(++delay_counter==program[program_counter].oD) 
  { 
    delay_counter=0; 
    if(++program_counter==sizeof(program)){ program_counter=0; }; 
    PORTB=(PORTB&0x10)|program[program_counter].oS;
  }
  inv_bit(PORTB,4);
}

[Исправлено: VladislavS, 27.04.2012 в 16:53]
VladislavS вне форума   Ответить с цитированием Вверх
Старый 28.04.2012, 09:09   11
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

sizeof(program) правильнее заменить на sizeof(program)/sizeof(PROGRAM)
VladislavS вне форума   Ответить с цитированием Вверх
Старый 29.04.2012, 23:47   12
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
По умолчанию Re: Простая моргалка на Attiny13A

VladislavS,
Что-то длинно и не наглядно. Как я понял ему нужно типа бегущего огня на 4-х диодах и один просто горит пока программа работает (или нет?). Я бы сделал через сдвиг бита.
Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 30.04.2012, 01:03   13
andory
Завсегдатай Фонарёвки
 
Регистрация: 28.05.2010
Последняя активность: 22.12.2013 16:40
Адрес: msk
Сообщений: 843
Сказал(а) спасибо: 0
Поблагодарили: 80 раз(а) в 53 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от frotnline :
я подозреваю что дело в fuse bits, можно ли их как-то подобрать
Подбирайте: ATtiny13
Принимая во внимание ошибки в схеме и коде, заниматься этим можно до посинения.
andory вне форума   Ответить с цитированием Вверх
Старый 30.04.2012, 10:02   14
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Что-то длинно и не наглядно.
Ну просто товарищ сам не может сформулировать задачу. Посмотри приведённый им код. Там не просто диоды мигают, а выполняется совершенно конкретная программа миганий. А просто и наглядно в 3-м сообщении темы смотри.

А в отсутствии самого вопрошующего можно и поизголяться в кодомарательстве.

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Я бы сделал через сдвиг бита.
А смысл? Загрузка константы в PORT - две команды. Считать PORTB, сдвинуть, проверить не вышли ли за границы, если вышли, то взять константу, загрузить обратно. Сколько там набегает?

[Исправлено: VladislavS, 30.04.2012 в 10:10]
VladislavS вне форума   Ответить с цитированием Вверх
Старый 30.04.2012, 10:56   15
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от VladislavS :
А смысл? Загрузка константы в PORT - две команды. Считать PORTB, сдвинуть, проверить не вышли ли за границы, если вышли, то взять константу, загрузить обратно.
Примерно так:
Код:
void test() 
{
    while (1)
    {
        PORTB |= (1<<PORTB0);
        for (int i = 0; i < 5; i++)
        {
            _delay_ms(250);
            PORTB = PORTB << 1;
        }
    PORTB = 0;
    _delay_ms(250);
    }
}
Код вопрошающего лень смотреть, а по ТЗ вроде так выходит
Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 30.04.2012, 22:42   16
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Код вопрошающего лень смотреть,
Тогда схему посмотри. На ней твой код не будет ни по одному из ТЗ работать.

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Примерно так:
Это tiny, на нём нельзя так расточительно программировать.
VladislavS вне форума   Ответить с цитированием Вверх
Старый 30.04.2012, 23:14   17
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от VladislavS :
Тогда схему посмотри.
Да, точно, получится бегущая тень но это не принципиально - изменить не проблема.

Цитата:
Посмотреть сообщение Сообщение от VladislavS :
Это tiny, на нём нельзя так расточительно программировать.
Почему нельзя? Кто запретил? Городить малопонятные заклинания, в которых через месяц уже не разобраться, но гордиться, что осталось 85% памяти?

[Исправлено: Tamagotchi, 30.04.2012 в 23:59]
Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 01.05.2012, 00:42   18
VladislavS
Завсегдатай Фонарёвки
 
Регистрация: 16.02.2011
Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Почему нельзя?
Всё просто. Твой пример:
Код:
void test1(void)
{ 
  while (1)
  {
    PORTB |= (1<<PORTB0);
    for (int i = 0; i < 5; i++)
    {
      _delay_ms(250);
      PORTB = PORTB << 1;
    }
    PORTB = 0;
    _delay_ms(250);
  }
}
Компилируется вот так:
Код:
      5          void test1(void)
   \                     ??test1:
      6          { 
   \   00000000   938A               ST      -Y, R24
      7            while (1)
      8            {
      9              PORTB |= (1<<PORTB0);
   \                     ??test1_1:
   \   00000002   9AC0               SBI     0x18, 0x00
     10              for (int i = 0; i < 5; i++)
   \   00000004   E085               LDI     R24, 5
     11              {
     12                _delay_ms(250);
   \                     ??test1_2:
   \   00000006   EF0A               LDI     R16, 250
   \   00000008   ....               RCALL   ??_delay_ms
     13                PORTB = PORTB << 1;
   \   0000000A   B308               IN      R16, 0x18
   \   0000000C   0F00               LSL     R16
   \   0000000E   BB08               OUT     0x18, R16
     14              }
   \   00000010   958A               DEC     R24
   \   00000012   F7C9               BRNE    ??test1_2
     15              PORTB = 0;
   \   00000014   E000               LDI     R16, 0
   \   00000016   BB08               OUT     0x18, R16
     16              _delay_ms(250);
   \   00000018   EF0A               LDI     R16, 250
   \   0000001A   ....               RCALL   ??_delay_ms
   \   0000001C   CFF2               RJMP    ??test1_1
     17            }
     18          }

   Maximum stack usage in bytes:

     Function                      CSTACK RSTACK
     --------                      ------ ------
     test1()                           1      2 

  1 byte  in segment ABSOLUTE
 30 bytes in segment CODE
Код который делает то же самое:
Код:
void test1(void)
{
  for(;;)
  {
    PORTB = 1;
    _delay_ms(250);
    PORTB = 2;
    _delay_ms(250);
    PORTB = 4;
    _delay_ms(250);
    PORTB = 8;
    _delay_ms(250);
    PORTB = 0;
    _delay_ms(250);
  }
}
Экономим 2 байта в коде и 1 байт в стэке:
Код:
      6          void test1(void)
   \                     ??test1:
   \                     ??test1_1:
      7          {
      8            for(;;)
      9            {
     10              PORTB = 1;
   \   00000000   E001               LDI     R16, 1
   \   00000002   ....               RCALL   ?Subroutine0
     11              _delay_ms(250);
     12              PORTB = 2;
   \   00000004   E002               LDI     R16, 2
   \   00000006   ....               RCALL   ?Subroutine0
     13              _delay_ms(250);
     14              PORTB = 4;
   \   00000008   E004               LDI     R16, 4
   \   0000000A   ....               RCALL   ?Subroutine0
     15              _delay_ms(250);
     16              PORTB = 8;
   \   0000000C   E008               LDI     R16, 8
   \   0000000E   ....               RCALL   ?Subroutine0
     17              _delay_ms(250);
     18              PORTB = 0;
   \   00000010   E000               LDI     R16, 0
   \   00000012   ....               RCALL   ?Subroutine0
     19              _delay_ms(250);
     20            }
   \   00000014   CFF5               RJMP    ??test1_1
     21          }
   \                     ?Subroutine0:
   \   00000000   BB08               OUT     0x18, R16
   \   00000002   EF0A               LDI     R16, 250
   \   00000004   ....               RJMP    ??_delay_ms

   Maximum stack usage in bytes:

     Function                      CSTACK RSTACK
     --------                      ------ ------
     test1()                           0      2

  1 byte  in segment ABSOLUTE
 28 bytes in segment CODE
Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Кто запретил?
Архитектура микроконтроллера.

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Городить малопонятные заклинания
Вложенные циклы и сдвиги там где они не нужны? Это больше религиозные аспекты. Код должен "нравится" компилятору и микроконтроллеру, а человек потерпит.

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
в которых через месяц уже не разобраться
Объясни тогда через день, зачем в твоём примере PB4 зажигается на несколько тактов?

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
осталось 85% памяти?
Сегодня 85% осталось, а завтра 1 байта не хватило... Так бывает. :forum:

[Исправлено: VladislavS, 01.05.2012 в 00:51]
VladislavS вне форума   Ответить с цитированием Вверх
Старый 01.05.2012, 11:45   19
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
top Re: Простая моргалка на Attiny13A

VladislavS,
Ну, 2 байта экономии Но поставленная задача с большим запасом помещается, а код

Код:
void test1(void)
{   for(;;) 
  {
     PORTB = 1; 
    _delay_ms(250);
     PORTB = 2; 
    _delay_ms(250);
     PORTB = 4;
     _delay_ms(250);
     PORTB = 8;
     _delay_ms(250);
     PORTB = 0;
     _delay_ms(250); 
  }
 }
Это просто не красиво. А если бы светодиодов было 32, например? Или задача пробежать в одну сторону, а потом вернуться?

В данной задаче ресурсов МК хватает с запасом.
Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 01.05.2012, 14:49   20
andory
Завсегдатай Фонарёвки
 
Регистрация: 28.05.2010
Последняя активность: 22.12.2013 16:40
Адрес: msk
Сообщений: 843
Сказал(а) спасибо: 0
Поблагодарили: 80 раз(а) в 53 сообщениях

По умолчанию Re: Простая моргалка на Attiny13A

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Это просто не красиво.
Почему некрасиво? Вы считаете функцию, а VladislavS задает ее в табличном виде. Это предсказуемо, и есть простор для маневра- на каждом шаге можно задать любые состояния сид (понятно, что табличку можно оформить массивом). А у Вас получается- захотелось, чтобы 2 диода загорались, и все, переписывай код. А в прерывания загоните- получите источник багов при изменении функции при чуть более сложной задаче. Ну и комментарии нужны, формально, для каждой строки.
andory вне форума   Ответить с цитированием Вверх
Ответ  Создать новую тему
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск





Copyright ©2007 - 2024, FONAREVKA.RU

Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot

Правила форума | Отказ от ответственности

Время генерации страницы 0.13052 секунды с 17 запросами