нифига вы не поняли... в даташите сказано, что частота хоть и калибруется на заводе при изготовлении, может иметь отклонение от "паспортной" до 5%. причем, вы не знаете, какое именно, и при этом еще частота плавает от температуры и напряжения. для часов встроенный RC-генератор НЕ ПОДХОДИТ ПРИНЦИПИАЛЬНО.Pika4u писал(а):Из графика в даташите я понял, что при напряжении питания 5 Вольт и температуре 25 по Цельсию частота внутреннего генератора 4.025 Мгц...Ппц...
Вопросы по С/С++ (СИ)
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
блин...я в шоке....плата сделана, все сделано...а тут блииинн.....
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
во-первых, разработку следует начинать с изучения документации, а во-вторых, какое все это имеет отношение к С/С++?Pika4u писал(а):блин...я в шоке....плата сделана, все сделано...а тут блииинн.....
битва с дураками проиграна, победители торжествуют. слава победителям!
В общем, решил я плату добить и скорректировать все программно. Заюзал Т1, подбираю регистр сравнения...Ну что ж, поглядим....
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Полистав тему, увидел это сообщение))) Так вот, а что, если во время выполнения кода запрещены прерывания, а таймер совпал со значением? Нельзя просто так вырубать прерывания))BerZerK-ku писал(а):Суровый код. Для начала могу сказать только то , что __restore_interrupt и __save_interrupt тут лишние. У них несколько иное предназначение )
old = ...; можно выкинуть. __restore_...; заменить на __enable_interrupt();
У вас случаем нет проекта для протеуса? Лень рисовать, чтобы понять что горит, а что нет
Туплю, картину не посмотрел, выложите проект плз.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Реклама
таймер совпал, установил флажок запроса прерывания, и пошел дальше считать. раз прерывания запрещены - ничего больше не произошло. в чем проблема?Pika4u писал(а):Так вот, а что, если во время выполнения кода запрещены прерывания, а таймер совпал со значением? Нельзя просто так вырубать прерывания))
битва с дураками проиграна, победители торжествуют. слава победителям!
После включения прерываний обработчик выполнится?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Ещё вопрос, при такой конструкции
если в обработчике изменяется переменная i, то доступ к ней будет атомарен?
Код: Выделить всё
volatile unsigned char i;
......
main()
{
while(1)
PORTB=i;
}
обработчик какого-нибудь прерывания
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
если флаг принудительно не сбросить - выполнится.Pika4u писал(а):После включения прерываний обработчик выполнится?
к однобайтной переменной доступ ВСЕГДА АТОМАРНЫЙ - он по определению не может быть другим.Pika4u писал(а):если в обработчике изменяется переменная i, то доступ к ней будет атомарен?
битва с дураками проиграна, победители торжествуют. слава победителям!
Спасибо вам огромное за ликбез))))
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Хм......Что-то странно..Вот проект из Proteus и код часов:
Тактирование 4 Мгц, вроде все норм, но за 10 минут отстают примерно на 2 секунды. Отстают в 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;
}
}- Вложения
-
- avr4.rar
- (12.95 КБ) 119 скачиваний
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Сообщения: 422
- Зарегистрирован: Ср дек 26, 2007 18:33:00
День добрый, хотелось бы организовать управление АЦП процессора через UART, старт, стоп преобразования, включать выключать отдельные выходы, управлять яркостью светодиода через ШИМ. Напирмер меню имеет 10 пунктов, каждый из которых вызывается цифрой или буквой. Дальше другое подменю, другие цифры-буквы и т.д., ну и каким-то символом делать возврат в корневое меню. Что-то типа:
нажали клавишу S в терминале, включился ацп, пошло непрерывное преобразование, посыпались в терминал данные от вольтметра.
нажали H - стоп преобразования.
нажали Х, вошли в меню установки значения шим, ввели 100 например, одна яркость диода, ввели 200 другая.
Подскажите в какую сторону копать, или простой примерчик для начинающих.
нажали клавишу S в терминале, включился ацп, пошло непрерывное преобразование, посыпались в терминал данные от вольтметра.
нажали H - стоп преобразования.
нажали Х, вошли в меню установки значения шим, ввели 100 например, одна яркость диода, ввели 200 другая.
Подскажите в какую сторону копать, или простой примерчик для начинающих.
v000va , а причём тут С(++) ?
Создайте отдельную тему по своему вопросу. Как создадите, я эту почищу.
Создайте отдельную тему по своему вопросу. Как создадите, я эту почищу.
DDRD &= ~(1<<2);
с помощью этой команды инвертируется только 2 бит или все ?
с помощью этой команды инвертируется только 2 бит или все ?
Tell Me The Truth
- Сообщения: 422
- Зарегистрирован: Ср дек 26, 2007 18:33:00
Я прошу прощения, но вопрос об организации меню на СИ.Аlex писал(а):v000va , а причём тут С(++) ?![]()
Создайте отдельную тему по своему вопросу. Как создадите, я эту почищу.
А мой проектик посмотрели?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Сообщения: 422
- Зарегистрирован: Ср дек 26, 2007 18:33:00
Дайте ссылку плз. Можно и в личку.Pika4u писал(а):А мой проектик посмотрели?
Добавлю, как загружать через uart любое значение в OCR2 (mega8)? Не какую-то предустановленную величину из меню, а любую из доступного диапазона.
а не проще ли написать PORTD.2=0 ?Аlex писал(а):Не инвертируется, а сбрасывается 2-ой бит.
Tell Me The Truth
Это Вы меня спрашиваете ?FreshMan писал(а):а не проще ли написать PORTD.2=0 ?
Я Вам только ответил что делает Ваша строчка, и всё....


