Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
12.03.2011, 20:21
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Что делаю не правильно?
На будущее - чтоб комменты остались русскими копируйте в буфер обмена при включенной русской раскладке. Вставляйте тоже включив русскую.
А по тексту - на первый взгляд напоминает бред. Что получить то хотите? И что работает не так, как задумывалось?
|
|
|
|
12.03.2011, 20:23
|
#12
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
кротоВ, был бы признателен...
|
|
|
|
12.03.2011, 20:26
|
#13
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
Управлять светодиодом белый в бумажной лампе Икеа, 3 режима работы с помощью трех кнопок: + яркость, - яркость, и смена режимов. Первый режим: просто в ручную меняем яркость диода, второй: неприрывно сам плавно гаснет и разгорается снова, третий: режим просто Ярко горит постоянно. Режимы меняются поочередно нажимая на кнопку 3, и так по кругу 1-2-3, 1-2-3.
работает, ШИМ выставлет на минимум в Протусе и на кнопки нет реакции.
|
|
|
|
12.03.2011, 20:31
|
#14
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
Цитата:
|
static void mode1(void){
u8 key;
while(1) {
key = get_key();
switch(key){
case KEY_UP: if(OCR2 ‹ 255) OCR2++;
break;
case KEY_DN: if(OCR2›0) OCR2--;
break;
case KEY_NEXT:
return;
}
}
}
|
У вас нет возможности выхода программы из цикла...вот она и виснет...
|
|
|
|
12.03.2011, 20:37
|
#15
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
если виснет в первой функции то должно хотябы прибывляться и уменьшаться от кнопок?
|
|
|
|
12.03.2011, 20:42
|
#16
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
Попробуйте вначале убедится, что ваши кнопки работают... в другой программе попроще, просто перенаправляя входа на выходы МК.
Когда будете уверенны, тогда используйте те же настройки в вашей программе... ну и ещё раз о протеусе - не надо ему верить...
ЗЫ..Возможно так же вывести на свободные пины (светодиоды) переменную key...И понаблюдать изменяется ли она...
Последний раз редактировалось кротоВ; 12.03.2011 в 20:46.
|
|
|
|
12.03.2011, 21:13
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Что делаю не правильно?
Выход из цикла есть - return
Начните с конфигурации PB3 на выход. DDRB = (1‹‹3);
|
|
|
|
13.03.2011, 11:52
|
#18
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
Сообщение от kison
|
с конфигурации PB3 на выход. DDRB = (1‹‹3);
|
так он вроде на выходе и был сделан!
вообщем проверил кнопки на конфигурацию.
Код:
|
#include ‹mega8.h›
#include ‹delay.h›
// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=P State1=P State0=P
PORTC=0x07;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=FFh
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x69;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
if((PINC.0==0)&(OCR2!=0xff)) // увеличивать пока не достигло максиума
{
delay_ms(10); // задержка 10 мс.
OCR2+=1; //увеличиваем заполнение
}
if((PINC.1==0)&(OCR2!=0x00)) // уменьшать пока не достигло миниума
{
delay_ms(10); // задержка 10 мс.
OCR2-=1; //уменьшаем заполнение
};
if (PINC.2==0) break;
};
} |
вот картинка из протуса, в железе пока не могу сделать...
хочу обратить внимание как вход на кнопки я делаю: http://my-avr.at.ua/publ/1-1-0-23 учился по вот этой статьйки.
|
|
|
|
13.03.2011, 14:30
|
#19
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю неправильно?
вообщем вот все это минимизирола для провеки кнопок на своих функциях со светодиодами подключенными к PORTD.0 и PORTD.1 и опять ничего не выходит(((( свети не зажигаются по нажатию кнопок
Код:
|
#include ‹mega8.h›
#include ‹delay.h›
#define KEY_UP 1
#define KEY_DN 2
#define KEY_NEXT 3
#define KEY_NONE 0
typedef unsigned char u8;
// функция, которая опрашивает кнопки и возвращает код нажатой
u8 get_key(void){
u8 temp = ~(PINC & (KEY_UP | KEY_DN | KEY_NEXT));
delay_ms(15);
if(temp != (~(PINC & (KEY_UP | KEY_DN | KEY_NEXT))))
return KEY_NONE;
else
return temp;
}
static void mode1(void){
u8 key;
while(1){
key = get_key();
switch(key){
case KEY_UP: PORTD.0=1;
delay_ms(500);
break;
case KEY_DN: PORTD.1=1;
delay_ms(500);
break;
case KEY_NEXT:
return;
}
}
}
void main(void)
{
PORTC=0xff;
DDRC=0x00;
State0=T
PORTD=0x00;
DDRD=0xFF;
while (1)
{
mode1();
};
} |
|
|
|
|
13.03.2011, 19:27
|
#20
|
Прописка
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
|
Re: Что делаю неправильно?
В первом сообщении
Сообщение от neid_nnov
|
PORTC=0x07;
|
Неправильно. Должно быть PORTC=0x16;
Сообщение от oleg_harp
|
u8 temp = ~(PINC & (KEY_UP | KEY_DN | KEY_NEXT));
|
Неправильно! И т.д. Что неправильно объяснять некогда, убегаю. А, вообще то, лучше выкладывать проект в Proteus, а то так долго можно ковыряться! Сами в Proteus по коду пошагово пройдите и увидите где косяк.
Последний раз редактировалось oleg_harp; 13.03.2011 в 20:41.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:34.
|
|