Пятница, 29.03.2024, 14:50
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Регулятор хода на attiny 13 - Страница 2 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Регулятор хода на attiny 13 (Пытаемся запустить.)
Регулятор хода на attiny 13
ВитГоДата: Суббота, 18.05.2013, 22:52 | Сообщение # 16
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
тогда так и пишите
Код

TCCR0A=(1<<COM0A1)|(1<<WGM01) | (1<<WGM00);


про установку нужного уровня читайте по строке Force Output compare
это регистр TCCR0B (стр 73 даташита)
биты FOC0A и FOC0B

на ШИМ не знаю влияет ли.. по меньшей мере при старте влияет, потом то нет наверное...


Виталий (аka ВитГо)
 
HamsterODPДата: Понедельник, 20.05.2013, 16:09 | Сообщение # 17
Рядовой
Группа: Проверенные
Сообщений: 4
Репутация: 0
Статус: Offline
А подробнее можете рассказать про FOC0A и FOC0B. А то с английским совсем не лады. Переводчик сильно жестко переводит ничего не понял.
 
uwrteyДата: Вторник, 21.05.2013, 07:51 | Сообщение # 18
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
в датащите написано, что биты FOC0A и FOC0B НЕ активны в режиме ШИМ. wacko

Цитата
The FOC0A/FOC0B bit is only active when the WGM bits specify a non-PWM mode.


вот Гугл перевод

Цитата

бит FOC0A активна только при WGM бита определить действие не по режим ШИМ.

Тем не менее, для обеспечения совместимости с будущими устройствами, этот бит должен быть установлен в ноль, когда TCCR0B написана при работе в режиме ШИМ.

При написании логическим биту FOC0A, немедленного матча Compare вынужден на блок формирования сигнала.

Выход OC0A изменяется в соответствии с его COM0A1: 0 битов параметра. Следует отметить, что бит FOC0A реализован в виде вспышки.

Поэтому это значение присутствует в COM0A1: 0 битов, которое определяет воздействие принудительного сравнения.

FOC0A стробоскопа не генерирует никаких прерываний, и не будет ясно, таймер в режиме CTC использованием OCR0A как топ.

бит FOC0A всегда читается как ноль


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 21.05.2013, 07:57
 
lorddroidДата: Четверг, 23.05.2013, 15:20 | Сообщение # 19
Рядовой
Группа: Проверенные
Сообщений: 9
Репутация: 2
Статус: Offline
ну давно ен писал тык вот по факту:
1) тини 13 слишком мала и там нет 2х таймеров у 85 выводы не подошли.
2) макет мой на меге 8 - и под него сделал с жк все работает
3) перешел на тини 2313 , все также пашет

под мегу скину ниже.

//ДЛЯ MEGA8
#define Led_UP PORTC.2 //зажигаем вверх
#define Led_DOWN PORTC.1 //зажигаем вниз
#define Led_OUT_of_range PORTC.0 //зажигаем больше максимального или меньше минимального

#include <mega8.h>
#include <delay.h>
#include <lcd.h>
#include <stdio.h>

char lcd_buffer[33]; //массив с данными для экрана

unsigned char OnOff=0, Mode=1,i=0,i_min=35,i_max=63,PWM=0; ;
int x0=0;

#asm
.equ __lcd_port=0x12 // ЖК подключен к порту B PORTD=0x12; PORTB=0x18;
#endasm

void Speed(int V)
{

if ((V<14)&&(V>=0)) {
// ВПЕРЕД Только А -1мс вверх
/* TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
*/
// Clock value: 31,250 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Discon.

TCCR1A=0x81;
TCCR1B=0x0C;

PORTB.0=0;PORTB.6=1; // открываем транзюк второй

OCR1B=0;

if (V>0) { OCR1A =255-16*V;}
else { OCR1A=255; }

Led_UP=1;
Led_DOWN=0; //индикация

PWM= OCR1A;

// if (V>0) { PWM =255-16*V;}
// else { PWM=255; }
}

if ((V<=16)&& (V>=14))
{
// СТОП
TCCR1A=0;
TCCR1B=0;
OCR1A=0; OCR1B=0;

PORTB.0=0;PORTB.6=0; //закрываем транзисторы оба

PWM=0;

Led_UP=1;
Led_DOWN=1; //индикация

}

if ((V>16)&&(V<=29))
{
// РЕВЕРС Только B //32250гц не инверсный шим Mode: Fast PWM top=0x00FF -2мс ВНИЗ
/* TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
*/
// Clock value: 31,250 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Discon.
// OC1B output: Non-Inv.
TCCR1A=0x21;
TCCR1B=0x0C;

PORTB.0=1;PORTB.6=0; // открываем транзюк второй

OCR1A =0;

if (V<28) { OCR1B=47+ 16*(V-17);}
else { OCR1B=255; }

PWM= OCR1B;

// if (V<28) { PWM=47+ 16*(V-17);}
// else { PWM=255; }

Led_UP=0;
Led_DOWN=1; //индикация
}

// за пределами

if ((i<i_min-5)||(i>i_max+5)) {Led_OUT_of_range=1; Led_UP=0; Led_DOWN=0;}
else {Led_OUT_of_range=0;} //красный гасим как что то пришло на вход

}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

OnOff++;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
/*//=============================
if(PIND.2==0)// нисходяший фронт 1->0 старт
{ TCNT0=0; // очистка счетчика 0
TCNT1=0;
TCNT2=0;
// x=0;
}
if(PIND.2==1)// восходяший фронт 0->1 стоп
{ i=TCNT0; } // в тиках время импульса
//===================================
*/

if(Mode==2)// нисходяший фронт 1->0 старт //вниз 63-62 / 49-50 среедина /вверх 35-36
{i=TCNT0; // в тиках время импульса
MCUCR=0x0C;
Mode=0; } // INT0 Mode: Rising Edge

if(Mode==1)// восходяший фронт 0->1 стоп
{ MCUCR=0x08; // INT0 Mode: Falling Edge
TCNT0=0;
OnOff=0; // дублируем
}

Mode++;
}
void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x7F;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=T State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xF7;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
TCCR0=0x04;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Global enable interrupts
#asm("sei")
lcd_init(16);
while (1)
{

// if (i<i_min) {i_min=i;}
// if (i>i_max) {i_max=i;}

lcd_gotoxy(0,0);
sprintf(lcd_buffer,"Time =%i min=%i max=%i N=%i %i",i,i_min,i_max,i-i_min,PWM);
lcd_puts(lcd_buffer);
delay_ms(200);
lcd_clear();

Speed (i-i_min);

// if(PIND.2==1){OnOff=0;} // восходяший фронт 0->1 т.е. получаем какой то сигнал
if(OnOff>2)
{

TCCR1A=0;
TCCR1B=0;
OCR1A=0; OCR1B=0;

PORTB.0=0;PORTB.6=0; //закрываем транзисторы оба

PWM=0;

Led_UP=1;
Led_DOWN=1; //индикация
Led_OUT_of_range=1;

}// те нет несколько циклов нет на вход импульсов тормозим шим

}
}

Добавлено (23.05.2013, 15:13)
---------------------------------------------
еще одно тут в коментах прерывания на INT два варианта или менять режим по фронтам или можно сравнивать что на входе smile

Добавлено (23.05.2013, 15:20)
---------------------------------------------


http://s2.ipicture.ru/uploads/20130507/6WRGd5YR.jpg

http://s2.ipicture.ru/uploads/20130507/RtA1dZyF.jpg

фотки в железе.


Сообщение отредактировал lorddroid - Четверг, 23.05.2013, 15:27
 
ВитГоДата: Воскресенье, 23.06.2013, 08:30 | Сообщение # 20
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
а оргстекло чем так ровненько вырезали ?

p.s. монументальный однако у вас подход, смотреть приятно ! :-)


Виталий (аka ВитГо)
 
uwrteyДата: Воскресенье, 23.06.2013, 21:35 | Сообщение # 21
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
Да, оргстекло ровно резать - это очень много терпения надо...
У меня на такое терпения ни когда не хватало.. sad
Мне как-то понадобилось нарезать оргстекла, так я обратился в рекламную конторку, при чем обратился не официально - просто подошел к работяге, который вышел на перекур и договорился с ним.
Они мне все нарезали по размерам на лазерном станке и из своего материала - обошлось вполне доступно... а качество на пять с плюсом!
( оргстекло даже в пленке защитной было - без царапин и потертостей )


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Воскресенье, 23.06.2013, 21:38
 
ВитГоДата: Понедельник, 24.06.2013, 06:31 | Сообщение # 22
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
понятно, да, качество реза сразу видно !

Виталий (аka ВитГо)
 
Форум » Разработка электронных устройств » Разрабатываю ! » Регулятор хода на attiny 13 (Пытаемся запустить.)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz