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

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

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

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

Сообщение Pika4u »

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

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

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

Сообщение Pika4u »

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

Сообщение Pika4u »

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

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

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

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

Сообщение Pika4u »

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

Сообщение Pika4u »

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

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

volatile unsigned char i;
......
main()
{
while(1)
PORTB=i;
}
обработчик какого-нибудь прерывания
если в обработчике изменяется переменная i, то доступ к ней будет атомарен?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

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

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

Сообщение Pika4u »

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

Сообщение 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 КБ) 119 скачиваний
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Мучитель микросхем
Аватара пользователя
Сообщения: 422
Зарегистрирован: Ср дек 26, 2007 18:33:00

Сообщение v000va »

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

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

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

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

Сообщение FreshMan »

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

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

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

Сообщение v000va »

Аlex писал(а):v000va , а причём тут С(++) ? :)
Создайте отдельную тему по своему вопросу. Как создадите, я эту почищу.
Я прошу прощения, но вопрос об организации меню на СИ.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Сообщение Pika4u »

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

Сообщение v000va »

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

Сообщение FreshMan »

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

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

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

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