Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

Pika4u писал(а):Из графика в даташите я понял, что при напряжении питания 5 Вольт и температуре 25 по Цельсию частота внутреннего генератора 4.025 Мгц...Ппц...

нифига вы не поняли... в даташите сказано, что частота хоть и калибруется на заводе при изготовлении, может иметь отклонение от "паспортной" до 5%. причем, вы не знаете, какое именно, и при этом еще частота плавает от температуры и напряжения. для часов встроенный RC-генератор НЕ ПОДХОДИТ ПРИНЦИПИАЛЬНО.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

блин...я в шоке....плата сделана, все сделано...а тут блииинн.....
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

Pika4u писал(а):блин...я в шоке....плата сделана, все сделано...а тут блииинн.....

во-первых, разработку следует начинать с изучения документации, а во-вторых, какое все это имеет отношение к С/С++?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

В общем, решил я плату добить и скорректировать все программно. Заюзал Т1, подбираю регистр сравнения...Ну что ж, поглядим....
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

BerZerK-ku писал(а):Суровый код. Для начала могу сказать только то , что __restore_interrupt и __save_interrupt тут лишние. У них несколько иное предназначение )
old = ...; можно выкинуть. __restore_...; заменить на __enable_interrupt();

У вас случаем нет проекта для протеуса? Лень рисовать, чтобы понять что горит, а что нет :)))
Туплю, картину не посмотрел, выложите проект плз.

Полистав тему, увидел это сообщение))) Так вот, а что, если во время выполнения кода запрещены прерывания, а таймер совпал со значением? Нельзя просто так вырубать прерывания))
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

Pika4u писал(а):Так вот, а что, если во время выполнения кода запрещены прерывания, а таймер совпал со значением? Нельзя просто так вырубать прерывания))

таймер совпал, установил флажок запроса прерывания, и пошел дальше считать. раз прерывания запрещены - ничего больше не произошло. в чем проблема?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

После включения прерываний обработчик выполнится?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

Ещё вопрос, при такой конструкции

Код: Выделить всё

volatile unsigned char i;
......
main()
{
while(1)
PORTB=i;
}
обработчик какого-нибудь прерывания

если в обработчике изменяется переменная i, то доступ к ней будет атомарен?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

Pika4u писал(а):После включения прерываний обработчик выполнится?
если флаг принудительно не сбросить - выполнится.
Pika4u писал(а):если в обработчике изменяется переменная i, то доступ к ней будет атомарен?

к однобайтной переменной доступ ВСЕГДА АТОМАРНЫЙ - он по определению не может быть другим.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

Спасибо вам огромное за ликбез))))
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

Хм......Что-то странно..Вот проект из Proteus и код часов:

Код: Выделить всё

#include <intrinsics.h>
#include <iotiny2313.h>
__flash unsigned char clock[10]={63,6,91,79,102,109,125,7,127,111};
volatile unsigned char dechours=0,edhours=0,decmin=0,edmin=0,second=0,takt=0;
unsigned char old;
int main( void )
{
DDRD=15;
DDRB=255;
TIMSK|=(1<<OCIE0A);
TCCR0B|=(1<<CS02);
TCCR0B&=(~(1<<CS01)|(1<<CS00));
OCR0A=125;
__enable_interrupt();
while(1)
{
if(PIND_Bit4==0)
{
__delay_cycles(300000);
if(PIND_Bit4==0)
edhours++;
}
if(PIND_Bit5==0)
{
__delay_cycles(300000);
if(PIND_Bit5==0)
edmin++;
}
PORTD_Bit0=0;
PORTB=clock[dechours];
__delay_cycles(20000);
PORTD_Bit0=1;
PORTB=0;
__delay_cycles(20000);
PORTD_Bit1=0;
PORTB=clock[edhours];
PORTB_Bit7=1;
__delay_cycles(20000);
PORTD_Bit1=1;
PORTB=0;
__delay_cycles(20000);
PORTD_Bit2=0;
PORTB=clock[decmin];
__delay_cycles(20000);
PORTD_Bit2=1;
PORTB=0;
__delay_cycles(20000);
PORTD_Bit3=0;
PORTB=clock[edmin];
__delay_cycles(20000);
PORTD_Bit3=1;
PORTB=0;
}
}
#pragma vector=TIMER0_COMPA_vect
__interrupt void Timer1CompA(void)
{
TCNT0=0;
takt++;
if(takt==125)
{
takt=0;
second++;
}
if(second==60)
{
second=0;
edmin++;
}
if(edmin==10)
{
decmin++;
edmin=0;
}
if(decmin==6)
{
edhours++;
decmin=0;
}
if(edhours==10)
{
dechours++;
edhours=0;
}
if((dechours==2) && (edhours==4))
{
dechours=0;
edhours=0;
}
}

Тактирование 4 Мгц, вроде все норм, но за 10 минут отстают примерно на 2 секунды. Отстают в Proteus.
Вложения
avr4.rar
(12.95 КБ) 115 скачиваний
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
v000va
Мучитель микросхем
Сообщения: 422
Зарегистрирован: Ср дек 26, 2007 18:33:00

Re: Вопросы по С/С++ (СИ)

Сообщение v000va »

День добрый, хотелось бы организовать управление АЦП процессора через UART, старт, стоп преобразования, включать выключать отдельные выходы, управлять яркостью светодиода через ШИМ. Напирмер меню имеет 10 пунктов, каждый из которых вызывается цифрой или буквой. Дальше другое подменю, другие цифры-буквы и т.д., ну и каким-то символом делать возврат в корневое меню. Что-то типа:
нажали клавишу S в терминале, включился ацп, пошло непрерывное преобразование, посыпались в терминал данные от вольтметра.
нажали H - стоп преобразования.
нажали Х, вошли в меню установки значения шим, ввели 100 например, одна яркость диода, ввели 200 другая.

Подскажите в какую сторону копать, или простой примерчик для начинающих.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

v000va , а причём тут С(++) ? :)
Создайте отдельную тему по своему вопросу. Как создадите, я эту почищу.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

DDRD &= ~(1<<2);
с помощью этой команды инвертируется только 2 бит или все ?
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Не инвертируется, а сбрасывается 2-ой бит.
Аватара пользователя
v000va
Мучитель микросхем
Сообщения: 422
Зарегистрирован: Ср дек 26, 2007 18:33:00

Re: Вопросы по С/С++ (СИ)

Сообщение v000va »

Аlex писал(а):v000va , а причём тут С(++) ? :)
Создайте отдельную тему по своему вопросу. Как создадите, я эту почищу.

Я прошу прощения, но вопрос об организации меню на СИ.
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

А мой проектик посмотрели?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
v000va
Мучитель микросхем
Сообщения: 422
Зарегистрирован: Ср дек 26, 2007 18:33:00

Re: Вопросы по С/С++ (СИ)

Сообщение v000va »

Pika4u писал(а):А мой проектик посмотрели?

Дайте ссылку плз. Можно и в личку.
Добавлю, как загружать через uart любое значение в OCR2 (mega8)? Не какую-то предустановленную величину из меню, а любую из доступного диапазона.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

Аlex писал(а):Не инвертируется, а сбрасывается 2-ой бит.

а не проще ли написать PORTD.2=0 ? :tea:
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

FreshMan писал(а):а не проще ли написать PORTD.2=0 ? :tea:
Это Вы меня спрашиваете ? :))
Я Вам только ответил что делает Ваша строчка, и всё.... :)
Ответить

Вернуться в «Разные вопросы по МК»