| Страниц (5): [1] 2 3 4 5 » |
  |
Описание: не могу заставить что бы одновременно шим увеличивался и моргали фары |
| Поиск в теме | Версия для печати |
| Demckiy |
Отправлено: 07 Января, 2011 - 07:51:21
|
Полковник

Сообщений всего: 79
Дата рег-ции: Май 2010
|
нужно сделать так когда ШИМ на РВ2 увеличивается или уменьшается,что бы фары (РВ0 и РВ1) во время нарастания и спадения ШИМа моргали по очереди.
CODE:Chip type : ATtiny2313
Clock frequency : 4,000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#include <delay.h>
unsigned char Direct=0;//Направление счета 0=вниз 0xFF=вверх
unsigned char cnt;
unsigned char Step=0;
//****************************************
//Здесь будут обработчики прерываний
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//Если не пройдены все шаги (Step>0)
if (Step)
{
cnt++;
//Каждый 20-й заход в прерывание
if (cnt==19)
{
cnt=0;
Step--;//Уменьшаем количество оставшихся шагов
if (Direct)
{
//Если вверх, то OCR0A надо увеличивать
OCR0A=0xFE-Step; //254-0
}
else
{
//Если вниз, то OCR0A надо уменьшать
if (!Step)
{
OCR0A=0xFF; //=255
}
else
{
OCR0A=Step;
}
}
}
}
}
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here
}
interrupt[EXT_INT0] void ext_int0_isr(void)
{
//прерывание возникает когда кнопка нажимается
Direct=~Direct;//Сменить направление счета
if (Direct)
{
Step=0xFE-OCR0A; //254-0
}
else
{
Step=OCR0A;
}
}
void Port_Init(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0b00000000;
DDRB=0b11111111;
PORTD=0b1111111;
DDRD=0b0000000;
}
void Timer0_Init(void)
{
/* биты регистра:
COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00 */
TCCR0A=0x83;
/* биты регистра:
FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00 */
TCCR0B=0b00000001;
TCNT0=0x10;
OCR0A=0b11111111;
OCR0B=0b00000000;
/* биты регистра:
TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A */
TIMSK=0x03;
}
/*{void Timer1_Init(void)
{
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}/**/
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
Timer0_Init();
Port_Init();
GIMSK=0x40;
MCUCR=0x02;
#asm("SEI");
while (1)
{
#asm("wdr"); //Сброс сторожевого таймера
//----------------- ЭФФЕКТ : МИГАНИЕ ТРИЖДЫ В СЕКУНДУ - ЛЕВАЯ ФАРА, ПАУЗА, ПРАВАЯ ФАРА
if ((PIND.0==0)&(PIND.3==0))
{
PORTB.0=0; // off
delay_ms(300); // Задержка
PORTB.0=1; // on
delay_ms(300); // Задержка
PORTB.0=0; // off
delay_ms(300); // Задержка
PORTB.0=1; // on
delay_ms(300); // Задержка
PORTB.0=0; // off
delay_ms(300); // Задержка
PORTB.0=1; // on
delay_ms(300); // Задержка
PORTB.0=0; // off
delay_ms(700); // Задержка
PORTB.1=0; // off
delay_ms(300); // Задержка
PORTB.1=1; // on
delay_ms(300); // Задержка
PORTB.1=0; // off
delay_ms(300); // Задержка
PORTB.1=1; // on
delay_ms(300); // Задержка
PORTB.1=0; // off
delay_ms(300); // Задержка
PORTB.1=1; // on
delay_ms(300); // Задержка
PORTB.1=0; // off
delay_ms(700); // Задержка
}
};
}
Прикреплено изображение
(Отредактировано автором: 07 Января, 2011 - 08:55:55) |
| |
|
ОЛЕГ  |
Отправлено: 07 Января, 2011 - 14:49:11
|

Супермодератор

Сообщений всего: 1732
Дата рег-ции: Нояб. 2008
|
ПДД:
Перечень неисправности автомобилей, автобусов, автопоездов, прицепов, мотоциклов, мопедов, тракторов, других самоходных машин и условия, при которых запрещается их эксплуатация.
3.1. Количество, тип, цвет, расположение и режим работы внешних световых приборов не соответствуют требованиям конструкции транспортного средства.
КоАП:
Статья 12.5 - Управление транспортным средством при наличии неисправностей или условий, при которых эксплуатация транспортных средств запрещена
Часть 3. Управление транспортным средством, на передней части которого установлены световые приборы с огнями красного цвета или световозвращающие приспособления красного цвета, А РАВНО СВЕТОВЫЕ ПРИБОРЫ, ЦВЕТ ОГНЕЙ И РЕЖИМ РАБОТЫ КОТОРЫХ НЕ СООТВЕТСТВУЮТ требованиям Основных положений по допуску транспортных средств к эксплуатации и обязанностей должностных лиц по обеспечению безопасности дорожного движения, - влечет лишение права управления транспортными средствами на срок от шести месяцев до одного года с конфискацией указанных приборов и приспособлений. |
| |
|
| Demckiy |
Отправлено: 07 Января, 2011 - 23:00:05
|
Полковник

Сообщений всего: 79
Дата рег-ции: Май 2010
|
ОЛЕГ пишет:unsigned char Step=0; и if (Step) - лично у меня есть вопрос, как это так?
Далее: unsigned char Step=0; и Step--; - тоже как-то не очень
Это то что бросилось в глаза.
Вам нужен Михаил- он любит чужой код ковырять. 
"unsigned char" (беззнаковый тип от 0 до 255)
Объявили перемененную Step и записали в нее 0
if (Step) или if (Step>0) выполняется условие пока Step>0(Отредактировано автором: 07 Января, 2011 - 23:08:08) |
| |
|
| Demckiy |
Отправлено: 08 Января, 2011 - 15:07:19
|
Полковник

Сообщений всего: 79
Дата рег-ции: Май 2010
|
с помощью переключателя SW2 выбераем эффект мигания фарами :
— трижды в секунду одна фара (L2), пауза, трижды в секунду другая фара (L3) (PIND.3);
CODE:if ((!PIND.0) & (!PIND.3==1))
{
PORTB.0=0; // off
delay_ms(300); // Задержка
PORTB.0=1; // on
delay_ms(300); // Задержка
PORTB.0=0; // off
delay_ms(300); // Задержка
PORTB.0=1; // on
delay_ms(300); // Задержка
PORTB.0=0; // off
delay_ms(300); // Задержка
PORTB.0=1; // on
delay_ms(300); // Задержка
PORTB.0=0; // off
delay_ms(700); // Задержка
PORTB.1=0; // off
delay_ms(300); // Задержка
PORTB.1=1; // on
delay_ms(300); // Задержка
PORTB.1=0; // off
delay_ms(300); // Задержка
PORTB.1=1; // on
delay_ms(300); // Задержка
PORTB.1=0; // off
delay_ms(300); // Задержка
PORTB.1=1; // on
delay_ms(300); // Задержка
PORTB.1=0; // off
delay_ms(700); // Задержка
}
— поочередное мигание фар (L2 и L3) (PIND.4);
CODE:
if ((!PIND.0) & (!PIND.4==1))
{
PORTB.0=0; // off
PORTB.1=0; // off
PORTB.0=1; // on
delay_ms(1000); // Задержка
PORTB.0=0; // off
PORTB.1=1; // on
delay_ms(1000); // Задержка
PORTB.1=0; // off
PORTB.0=1; // on
delay_ms(1000); // Задержка
PORTB.0=0; // off
PORTB.1=1; // on
delay_ms(1000); // Задержка
PORTB.1=0; // off
}
— двойное мигание обеими фарами (L2 и L3) (PIND.5)
CODE:if ((!PIND.0 ) & (!PIND.5==1))
{
PORTB.0=0; // off
PORTB.1=0; // off
delay_ms(500); // Задержка
PORTB.0=1; // on
PORTB.1=1; // on
delay_ms(500); // Задержка
PORTB.0=0; // off
PORTB.1=0; // off
delay_ms(500); // Задержка
PORTB.0=1; // on
PORTB.1=1; // on
delay_ms(500); // Задержка
PORTB.0=0; // off
PORTB.1=0; // off
}
Но мигание фар только тогда когда нажата кнопка SW3;
С помощью ШИМа организовать от такие действия:
(кнопка SW4 имитирует открытие/закрытие двери)
— открыл дверь — мгновенное включение света (L1) в салоне;
— закрыл дверь — задержка выключения света (L1) на 7 секунд, после чего, свет плавно гаснет в течении секунд;
— если дверь открыта более 10 минут, - свет (L1) плавно гаснет .
(Добавление)
nest пишет:Demckiy пишет:то бы одночастно работал ШИМ и выполнялась основная программа ШИМ заводится аппаратный, а программа болтается как программа.
ШИМ я завел апаратный, и в основном цыкле пишу программу какая управляет портами.
Но при это работает только одно ШИМ или управления портами.а что бы но работало одновременно не получается...((((Отредактировано автором: 08 Января, 2011 - 15:20:21) |
| |
|
|
| Поиск в теме | Версия для печати |
| Страниц (5): [1] 2 3 4 5 » |
| « Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|