Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
как сделать 4-х канальный вольтметр на атмеге 16!!!!!! буду очень благодарен если кто нибудь поделится исходником
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
PORTD |=(1<<0)
PORTD.0=1равнозначны ли по смыслу и по весомости эти оба выражения ?
Tell Me The Truth
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
По идее, да. И там и там мы устанавливаем в 1 0-й бит порта D. В общем, всем спасибо, пойду думать(в железе бага не проявляется и при задержке в 20000 тактов, но пришлось увеличить задержку в опросе кнопок до 300000(думаю, можно обойтись и 250000, 200000 мало). Проект:
- Вложения
-
- AVR3.rar
- (16.34 КБ) 172 скачивания
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Ребят, вот такой вопрос-если прерывания запрещены, то TCNT0 продолжает "тикать"? И ещё вопрос-если прерывания разрешены, во время выполнения __delay_cycles(число тактов) может возникнуть прерывание?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
таймер тикает,бит прерывания выставляется.как только маска разрешения допускает прерывание оно обрабатывается.вается посмотрите в даташите там два регистра прерывания,один разрешение прерывания,а второй флаг прерывания.в любой момент времени,когда три бита прерывания (общее,флаг,таймер)равны единице возникает прерывание и флаг снимается аппаратно.
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Спасибо, то есть во время выполнения задержки прерывание выполняется?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Re: Вопросы по С/С++ (СИ)
как узнать состояние конкретного ввода например PB1
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
evil0o писал(а):как узнать состояние конкретного ввода например PB1
Код: Выделить всё
if(PINB & (1<<PB1)){
// если 1
} else {
// если 0
}битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Вопросы по С/С++ (СИ)
спасибо за помощь.
а можно как то более вменяемо написать(оптимизировать) код
суть программы в том что по нажатию одной из кнопки загорается лампочка, в дальнейшем на 7 сегментном табло загорается цифра.
а можно как то более вменяемо написать(оптимизировать) код
суть программы в том что по нажатию одной из кнопки загорается лампочка, в дальнейшем на 7 сегментном табло загорается цифра.
Код: Выделить всё
int main(void)
{
while (1)
{
if (PINB!=00000000 )
break;
};
if(PINB & (1<<PB0))
{
DDRD = 0xff;
PORTD |= _BV(PD0);//здесь будет немножко другой код для загорания цифр, но суть этажа.
}
else
if(PINB & (1<<PB1))
{
DDRD = 0xff;
PORTD |= _BV(PD1);
}
else
if(PINB & (1<<PB2))
{
DDRD = 0xff;
PORTD |= _BV(PD2);
}
else
if(PINB & (1<<PB3))
{
DDRD = 0xff;
PORTD |= _BV(PD3);
}
else
if(PINB & (1<<PB4))
{
DDRD = 0xff;
PORTD |= _BV(PD4);
}
else
if(PINB & (1<<PB5))
{
DDRD = 0xff;
PORTD |= _BV(PD5);
}
else
if(PINB & (1<<PB6))
{
DDRD = 0xff;
PORTD |= _BV(PD6);
}
else
if(PINB & (1<<PB7))
{
DDRD = 0xff;
PORTD |= _BV(PD7);
}
}
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
оптимизировать можно. во-первых, DDRD можно один-единственный раз в самом начале main() установить в 255, и более не трогать. а во-вторых, почитайте вот эту тему http://www.radiokot.ru/forum/viewtopic. ... 97f145271a примерно с 2-3 страницы - там про работу с кнопками все рассказано. кроме этой есть еще просто куча тем на форуме, и все посвящены этой страшной проблеме - обработке нажатий кнопки
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#define sa PORTB.0
#define sb PORTB.1
#define sc PORTB.2
#define sd PORTB.3
#define se PORTB.4
#define sf PORTB.5
#define sg PORTB.6
#define dp PORTB.7
#define catod_1 PORTD.1
#define catod_2 PORTD.0
char scr [2]; // экран
//---прототипы функций---------------------------------------------
void setcifra (char i); // включение цифры
//----------
void setcifra (char i) // включение цифры
{
switch (i)
{
case 0: sg=0; sa=1; sb=1; sc=1; sd=1; se=1; sf=1; break;
case 1: sa=0; sd=0; se=0; sf=0; sg=0; sb=1; sc=1; break;
case 2: sc=0; sf=0; sa=1; sb=1; sd=1; se=1; sg=1; break;
case 3: se=0; sf=0; sa=1; sb=1; sc=1; sd=1; sg=1; break;
case 4: sa=0; sd=0; se=0; sb=1; sc=1; sf=1; sg=1; break;
case 5: sb=0; se=0; sa=1; sc=1; sd=1; sf=1; sg=1; break;
case 6: sb=0; sa=1; sc=1; sd=1; se=1; sf=1; sg=1; break;
case 7: sd=0; se=0; sf=0; sg=0; sa=1; sb=1; sc=1; break;
case 8: sa=1; sb=1; sc=1; sd=1; se=1; sf=1; sg=1; break;
case 9: se=0; sa=1; sb=1; sc=1; sd=1; sf=1; sg=1; break;
}
}
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
catod_1=1; // гасим первый разряд
catod_2=1; // гасим второй разряд
}
// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
static char digit;
switch (digit)
{
case 0: setcifra (scr[digit]); catod_1=0; break;
case 1: setcifra (scr[digit]); catod_2=0; break;
}
if (++digit==2) digit=0;
}
void main( void )
{
char sec;
DDRB=0xFF;
PORTD=0x03;
DDRD=0x03;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
// Mode: Fast PWM top=FFh
// OC2 output: Disconnected
TCCR2=0x4B;
OCR2=0x01;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0xC0;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
// Global enable interrupts
#asm("sei")
while (1)
{
scr[0]=sec/10;
scr[1]=sec%10;
if (++sec==60) sec=0;
delay_ms (500);
}
}
меня интересует: есть ликакие-то неписанные правила по которым нужно читать прогу ?
может сразу нужно читать с основной ф-ции ?
кто, что скажет по этому поводу
Tell Me The Truth
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Ребят, в чём проблема. Страницой раньше выкладывал код и проект часов. За 5 часов накопилось опережение, по сравнению с обычными часами в 5 минут. МК настроен на внутреннее тактирование 4 МГц, электролит 200 мкФ по питанию стоит.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
прочитайте в даташите о стабильности внутреннего тактирования, и все вопросы отпадут. в принципе, с этого нужно было начинать при разработке часов.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Но у меня PA0 и PA1 задействованы!! Ппц..... а в даташите про это где говорится?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
в даташите
битва с дураками проиграна, победители торжествуют. слава победителям!
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Да я понял
а раздел?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Typical characteristics или как-то так. ближе к концу.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Из графика в даташите я понял, что при напряжении питания 5 Вольт и температуре 25 по Цельсию частота внутреннего генератора 4.025 Мгц...Ппц...
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Следовательно, за 1 секунду на таймер придет 15273 пинка, осталось подобрать регистр сравнения....
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Оверпостинг: не могу подобрать число...блин, что делать......Похоже, придется юзать 16-битный Т1....
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....