Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » стробоскоп на фары автомобиля ....

Страниц (5): [1] 2 3 4 5 »
 

1. Demckiy - 07 Января, 2011 - 07:51:21 - перейти к сообщению
нужно сделать так когда ШИМ на РВ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); // Задержка

}

};
}
2. ОЛЕГ - 07 Января, 2011 - 14:49:11 - перейти к сообщению
ПДД:
Перечень неисправности автомобилей, автобусов, автопоездов, прицепов, мотоциклов, мопедов, тракторов, других самоходных машин и условия, при которых запрещается их эксплуатация.
3.1. Количество, тип, цвет, расположение и режим работы внешних световых приборов не соответствуют требованиям конструкции транспортного средства.

КоАП:
Статья 12.5 - Управление транспортным средством при наличии неисправностей или условий, при которых эксплуатация транспортных средств запрещена

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

Объясните мне чего программа не работает так как надо....Заранее спасибо...
4. ОЛЕГ - 07 Января, 2011 - 15:51:07 - перейти к сообщению
unsigned char Step=0; и if (Step) - лично у меня есть вопрос, как это так?

Далее: unsigned char Step=0; и Step--; - тоже как-то не очень

Это то что бросилось в глаза.

Вам нужен Михаил- он любит чужой код ковырять. Улыбка
5. Demckiy - 07 Января, 2011 - 23:00:05 - перейти к сообщению
ОЛЕГ пишет:
unsigned char Step=0; и if (Step) - лично у меня есть вопрос, как это так?

Далее: unsigned char Step=0; и Step--; - тоже как-то не очень

Это то что бросилось в глаза.

Вам нужен Михаил- он любит чужой код ковырять. Улыбка


"unsigned char" (беззнаковый тип от 0 до 255)
Объявили перемененную Step и записали в нее 0
if (Step) или if (Step>0) выполняется условие пока Step>0
6. Demckiy - 07 Января, 2011 - 23:14:23 - перейти к сообщению
исходник
7. Demckiy - 07 Января, 2011 - 23:15:53 - перейти к сообщению
файл протеуса
8. mihail - 08 Января, 2011 - 01:58:57 - перейти к сообщению
Demckiy пишет:
if (Step) или if (Step>0) выполняется условие пока Step>0
Неверно.
CODE:
if (Step)
это то же самое, что и
CODE:
if ( Step != 0 )


ОЛЕГ пишет:
Михаил - он любит чужой код
Голливудская улыбка

PS У меня нет ни одной идеи о том, зачем фарам работать в режиме стробоскопа. Так что, я пас.
9. cjA - 08 Января, 2011 - 05:58:09 - перейти к сообщению

что бы руку от коленки не отрывать, када гиббдэшников видешь (наверное) Помираю со смеху
10. Demckiy - 08 Января, 2011 - 08:13:09 - перейти к сообщению
Я на этом примере хочу разобраться,что бы одночастно работал ШИМ и выполнялась основная программа ... Объясните на другом примере....

PS Как сделать что бы несколько операций выполнялось параллельно...
11. cjA - 08 Января, 2011 - 13:28:36 - перейти к сообщению
МК стоит рублей... ну короче бюджетно
Demckiy пишет:
Как сделать что бы несколько операций выполнялось параллельно

ставить второй МК (если быть честным)
12. nest - 08 Января, 2011 - 13:59:16 - перейти к сообщению
Demckiy пишет:
то бы одночастно работал ШИМ и выполнялась основная программа
ШИМ заводится аппаратный, а программа болтается как программа.
13. Белый Волк - 08 Января, 2011 - 14:19:01 - перейти к сообщению
Demckiy
Если Вы сформулируете конкретную проблему - будет легче разобраться в ней.

1 Расскажите подробно, какая задача должна быть решена:
1.1 Описание задачи, при необходимости в связке с оборудованием. Например "Есть стандартный автомобиль. Изначально руль установлен в какое-то положение. Необходимо, чтобы при повороте руля на 90 градусов против часовой стрелки загоралась левая фара, а при 67 градусах по часовой - правая. При этом необходимо, чтобы зажигание фар происходило мягко на протяжении 2 секунд, а гашение мгновенно. На оси руля стоит энкодер L, я использую микроконтроллер Х"
1.2 Что конкретно Вы хотите получить в ответ. Например "Подскажите, каким образом управлять с помощью микроконтрллера зажиганием фар? Объясните в общих словах алгоритм"
2 Если у Вас есть наработки по этой теме - изложите их. Желательно код и словестное описание алгоритма к нему.
14. Demckiy - 08 Января, 2011 - 15:07:19 - перейти к сообщению
с помощью переключателя 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 пишет:
то бы одночастно работал ШИМ и выполнялась основная программа
ШИМ заводится аппаратный, а программа болтается как программа.


ШИМ я завел апаратный, и в основном цыкле пишу программу какая управляет портами.

Но при это работает только одно ШИМ или управления портами.а что бы но работало одновременно не получается...(((
15. nest - 08 Января, 2011 - 16:43:03 - перейти к сообщению
Demckiy пишет:
работает только одно ШИМ или управления портами
это как ?