1. Slava143 - 06 Июля, 2012 - 13:34:13 - перейти к сообщению
Здравствуйте! Подскажите какой текст программы должен быть для того, что бы двумя кнопками можно было управлять скоростью мигания одного светодиода, тоисть нажал одну кнопку он мигает с одной скоростью,потом отпустил. А когда нажал другую, то он мигает с другой с коростью.
2. Роботов - 06 Июля, 2012 - 13:51:04 - перейти к сообщению
Slava143 пишет:
Подскажите какой текст программы должен быть
Сначала надо определится с языком программирования, затем выбрать среду разработки, следующий этап - выбор программатора, затем выбор контроллера, а уж потом, определившись с тем к каким выводам контроллера будут подключены кнопки и светодиод, задавать вопросы по программированию.
3. Slava143 - 06 Июля, 2012 - 13:59:09 - перейти к сообщению
язык СИ, работаю с CodeVisionAVR , програматор usb , как его завут не помню. Но суть в том что я прошиваю atmega8 и все хорошо.Я не знаю как описать выше сказаный цыкл.
4. Роботов - 06 Июля, 2012 - 14:32:32 - перейти к сообщению
Хорошо, а как просто помигать светодиодом вы знаете?
5. Slava143 - 06 Июля, 2012 - 14:46:02 - перейти к сообщению
Если память не изменяет я делал так:
#include <mega8.h>
#include <delay.h>
DDRD = 0xff;
PORTD=0х00;
while (1)
{
if (PIND.1==1)
{ PORTD.0=0;
delay_ms(50);
PORTD.0=1;
delay_ms(50);}
else(PIND.1==0)
{PORTD.0=0;}
};
}
Вроди так , или я может что то напутал, наизусть не помню. ну вобщем когда я нажимаю кнопку и пока она нажата то светодиод моргает, а когда кнопка не нажата то не мигает.
#include <mega8.h>
#include <delay.h>
DDRD = 0xff;
PORTD=0х00;
while (1)
{
if (PIND.1==1)
{ PORTD.0=0;
delay_ms(50);
PORTD.0=1;
delay_ms(50);}
else(PIND.1==0)
{PORTD.0=0;}
};
}
Вроди так , или я может что то напутал, наизусть не помню. ну вобщем когда я нажимаю кнопку и пока она нажата то светодиод моргает, а когда кнопка не нажата то не мигает.
6. Роботов - 06 Июля, 2012 - 14:53:42 - перейти к сообщению
Ну вот, теперь надо объявить переменную, например так:
int i;
и менять эту переменную нажатием кнопки, допустим так:
i=100; или i=1200;
а функцию задержки написать так:
delay_ms(i);
Всё)
int i;
и менять эту переменную нажатием кнопки, допустим так:
i=100; или i=1200;
а функцию задержки написать так:
delay_ms(i);
Всё)
7. Slava143 - 06 Июля, 2012 - 14:57:13 - перейти к сообщению
Что то я не понял. У меня щас есть кнопка PIND.1, а мен надо еще одну PIND.2 например, но частота допустим 100мс а светодиод тот же PORTD.0
(Добавление)
а если так:
#include <mega8.h>
#include <delay.h>
DDRD = 0xff;
PORTD=0х00;
while (1)
{
if (PIND.1==1)
{ PORTD.0=0;
delay_ms(50);
PORTD.0=1;
delay_ms(50);}
else if
(PIND.2==1)
{ PORTD.0=0;
delay_ms(100);
PORTD.0=1;
delay_ms(100);}
else (PIND.2==0;PIND.1==0)
{PORTD.0=0;}
};
}
будет работать моя задумка???
(Добавление)
а если так:
#include <mega8.h>
#include <delay.h>
DDRD = 0xff;
PORTD=0х00;
while (1)
{
if (PIND.1==1)
{ PORTD.0=0;
delay_ms(50);
PORTD.0=1;
delay_ms(50);}
else if
(PIND.2==1)
{ PORTD.0=0;
delay_ms(100);
PORTD.0=1;
delay_ms(100);}
else (PIND.2==0;PIND.1==0)
{PORTD.0=0;}
};
}
будет работать моя задумка???
8. Роботов - 06 Июля, 2012 - 20:46:01 - перейти к сообщению
Slava143 пишет:
будет работать моя задумка???
А попробовать слабо?
9. Slava143 - 07 Июля, 2012 - 00:28:20 - перейти к сообщению
ничего не работает, пробовал выкидывает ошибки, не могу разобраться...
(Добавление)
ну не могу я найти как ето написать, неужели так сложно подсказать начинающему.я уже и так пробывал:
#include <mega8.h>
#include <delay.h>
PORTD = 0x00;
DDRD = 0xFF;
while(1)
{
while (PIND.1==0) {}
delay_ms(70);
if (PIND.1==0)
{
if (PIND.0==1)
{ PORTD.0=0; }
else
{ PORTD.0=1; }
}
}
while (PIND.0==0) {}т
while (PIND.2==0) {}
delay_ms(70);
if (PIND.2==1)
{
if (PIND.0==1)
{ PORTD.0=0; }
else
{ PORTD.0=1; }
}
while (PIND.0==0) {}
}
и ничегго, на кнопку PIND.1 откликается а на PIND.2 НЕТ!
(Добавление)
Забацал такую штуку:
while(1)
{
while (PIND.1==0) {} //ждем 0 на ноге D.1
{PORTD.0=1;
delay_ms(50);
PORTD.0=0;
delay_ms(50);
} ; //задержка
if (PIND.2==1) // проверка после окончания дребезга
{ // действия согласно затее
if (PIND.0==0)
{ delay_ms(100);
PORTD.0=0;
delay_ms(100); }
}
}
}
Когда нажал и держиш кнопку PIND.1 то мигает с цыклом delay_ms(50) а когда вкл еще одну кнопку PIND.2 вместе с PIND.1 то мигает с цыклом delay_ms(100). Впринцыпи пойдет, но а как сделать чтобы кнопки были независимы одна от другой???
(Добавление)
ну не могу я найти как ето написать, неужели так сложно подсказать начинающему.я уже и так пробывал:
#include <mega8.h>
#include <delay.h>
PORTD = 0x00;
DDRD = 0xFF;
while(1)
{
while (PIND.1==0) {}
delay_ms(70);
if (PIND.1==0)
{
if (PIND.0==1)
{ PORTD.0=0; }
else
{ PORTD.0=1; }
}
}
while (PIND.0==0) {}т
while (PIND.2==0) {}
delay_ms(70);
if (PIND.2==1)
{
if (PIND.0==1)
{ PORTD.0=0; }
else
{ PORTD.0=1; }
}
while (PIND.0==0) {}
}
и ничегго, на кнопку PIND.1 откликается а на PIND.2 НЕТ!
(Добавление)
Забацал такую штуку:
while(1)
{
while (PIND.1==0) {} //ждем 0 на ноге D.1
{PORTD.0=1;
delay_ms(50);
PORTD.0=0;
delay_ms(50);
} ; //задержка
if (PIND.2==1) // проверка после окончания дребезга
{ // действия согласно затее
if (PIND.0==0)
{ delay_ms(100);
PORTD.0=0;
delay_ms(100); }
}
}
}
Когда нажал и держиш кнопку PIND.1 то мигает с цыклом delay_ms(50) а когда вкл еще одну кнопку PIND.2 вместе с PIND.1 то мигает с цыклом delay_ms(100). Впринцыпи пойдет, но а как сделать чтобы кнопки были независимы одна от другой???
10. Белый Волк - 07 Июля, 2012 - 07:59:26 - перейти к сообщению
Slava143
Алгоритм на псевдокоде:
Надеюсь, идея понятна.
Алгоритм на псевдокоде:
CODE:
Подключение библиотек, инициализация портов;
Бесконечный цикл
{
включить светодиод;
задержка на X миллисекунд;
выключить светодиод;
задержка на X миллисекунд;
если нажата кнопка №1, то
X = 100;
если нажата кнопка №2, то
X = 200;
}
Бесконечный цикл
{
включить светодиод;
задержка на X миллисекунд;
выключить светодиод;
задержка на X миллисекунд;
если нажата кнопка №1, то
X = 100;
если нажата кнопка №2, то
X = 200;
}
Надеюсь, идея понятна.
11. Slava143 - 08 Июля, 2012 - 14:56:43 - перейти к сообщению
Белый Волк пишет:
Slava143
Алгоритм на псевдокоде:
Надеюсь, идея понятна.
Алгоритм на псевдокоде:
CODE:
Подключение библиотек, инициализация портов;
Бесконечный цикл
{
включить светодиод;
задержка на X миллисекунд;
выключить светодиод;
задержка на X миллисекунд;
если нажата кнопка №1, то
X = 100;
если нажата кнопка №2, то
X = 200;
}
Бесконечный цикл
{
включить светодиод;
задержка на X миллисекунд;
выключить светодиод;
задержка на X миллисекунд;
если нажата кнопка №1, то
X = 100;
если нажата кнопка №2, то
X = 200;
}
Надеюсь, идея понятна.
Идея давно понятна, но не могу написать это в проге.
12. mihail - 08 Июля, 2012 - 19:39:55 - перейти к сообщению
/*****************************************************
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 1,000000 MHz
PD0 - button 1
PD1 - button 2
PB0 - led
*****************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char flag = 0;
// Input/Output Ports initialization
// Port B initialization
PORTB=0x00;
DDRB=0x01;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x03;
DDRD=0x00;
while (1)
{
// Place your code here
PORTB ^= (1<<0); // led on/off
if( 0 == flag )
{
delay_ms(100); // wait 0.1 s
}
if( 1 == flag )
{
delay_ms(200); // wait 0.2 s
}
if( 0 == (PIND & (1<<0)) ) // check button 1
{
flag = 0;
}
if( 0 == (PIND & (1<<1)) ) // check button 2
{
flag = 1;
}
}
}
13. Slava143 - 08 Июля, 2012 - 21:11:28 - перейти к сообщению
mihail пишет:
/*****************************************************
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 1,000000 MHz
PD0 - button 1
PD1 - button 2
PB0 - led
*****************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char flag = 0;
// Input/Output Ports initialization
// Port B initialization
PORTB=0x00;
DDRB=0x01;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x03;
DDRD=0x00;
while (1)
{
// Place your code here
PORTB ^= (1<<0); // led on/off
if( 0 == flag )
{
delay_ms(100); // wait 0.1 s
}
if( 1 == flag )
{
delay_ms(200); // wait 0.2 s
}
if( 0 == (PIND & (1<<0)) ) // check button 1
{
flag = 0;
}
if( 0 == (PIND & (1<<1)) ) // check button 2
{
flag = 1;
}
}
}
У меня ето не работает так как надо. Просто включается диод и все..
(Добавление)
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.6 Evaluation
Automatic Program Generator
© Copyright 1998-2012 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 08.07.2012
Author : Freeware, for evaluation and
non-commercial use only
Company :
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B 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
PORTB=0x00;
DDRB=0x00;
// 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=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0x0F;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
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: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// 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;
while(1)
{
while (PIND.1==0) {} //ждем 1 на ноге D.1 виконується пустий цикл
{ PORTD.0=1;
delay_ms(50);
PORTD.0=0;
delay_ms(50);
} ;
if (PIND.2==1)
{
if (PIND.0==0)
{
delay_ms(100);
PORTD.0=1;
delay_ms(100); }
}
while (PIND.0==1) //ждем 1 на ноге D.0 якщо на PORTD.0 залишається 1 то цикл переводить його в 0
{ PORTD.0=0;
}
}
}
А ето работает так:
Когда нажал и держиш кнопку PIND.1 то мигает с цыклом delay_ms(50) а когда вкл еще одну кнопку PIND.2 вместе с PIND.1 то мигает с цыклом delay_ms(100), а когда сразу две то сначала работает цыкл для кнопки PIND.1 а при окончании цыкл PIND.2 и так пока не выключить кнопки. Впринцыпи пойдет, но а как сделать чтобы кнопки были независимы одна от другой???
14. mihail - 08 Июля, 2012 - 22:13:00 - перейти к сообщению
Slava143 пишет:
Сравните с программой, которую компилировали. Я внес изменения в программу через некоторое время после публикации.
У меня это не работает так как надо.
15. sibiryak - 08 Июля, 2012 - 22:25:02 - перейти к сообщению
Могу помочь, но только на асме
