Помогите с созданием таймера включения
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
pyzhman - спасибо огромное, зачем я его тулил в while и for - ведь void main основная функция =) Всем спасибо ребят. В Proteus заработало... Осталось спаять.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Реклама
Re: Помогите с созданием таймера включения
Вот это надо было делать вперёд. Эффект был бы совсем другойОсталось спаять.
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Лежит у меня мэинборд с Atmega 8 - на ней завтра и потестю =) Вообще надо Кернигана и Ричи курить =)
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Перекомпильнул код под Мегу 8, потом под 8535 (лежат у меня когда-то собранные мэинборды, давно уже не занимался с МК) - все работает. Всем спасибо, кто поделился опытом, помог, подсказал.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Re: Помогите с созданием таймера включения
есть предложение по оптимизации схемы -
исключить кварц.
исключить кварц.
- Реклама
Re: Помогите с созданием таймера включения
Неее, так не интересно. А дисплей, клавиатуру, чтоб параметры задавать? 
Re: Помогите с созданием таймера включения
при массовом производстве этого устройства, дисплей и клавиатуру можно предлагать как опцию.
... я тут подумал - еще одно предложение - исключить две емкости . - еще 80 копеек сэкономим
... я тут подумал - еще одно предложение - исключить две емкости . - еще 80 копеек сэкономим
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Вот интересно теперь сделать вот так: повесить кнопку по минусу через RC цепочку на какой-нибудь порт, и выполнять функции описанные выше при нажатии кнопки а не при подаче питания =)
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Re: Помогите с созданием таймера включения
Вот, это правильные мысли. Так что читайте статьи по работе с МК, что не получится - спрашивайте. Главное - сделать самому.
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
А по поводу кварца - так лучше я его для надежности поставлю. Потому что RC очень зависима от температуры, конденсатор по ТКЕ и не найти наверное такой, мож только тантал.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Chip type : AT90S2323
AVR Core Clock frequency: 4,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/
#include <90s2323.h>
#include <delay.h>
#define Pulse0 PORTB.0 //присваиваем порту имя Pulse0
#define Button0 PINB.1 //присваиваем порту имя Button
void main(void)
{
DDRB.0=1;// бит 0 порта B как выход
DDRC.2=0;// бит 1 порта B как вход
delay_ms(6000);
PORTB.0= 1;
delay_ms(1000);
PORTB.0= 0;
}
while (1)
{
if (Button0==0) // Если кнопка нажата,
Pulse0=1; // то зажигаем светодиод,
else // иначе
Pulse0=0; // светодиод не горит
};
}
Думаю вот так может, я еще не компилировал, набрал в тхт.
AVR Core Clock frequency: 4,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/
#include <90s2323.h>
#include <delay.h>
#define Pulse0 PORTB.0 //присваиваем порту имя Pulse0
#define Button0 PINB.1 //присваиваем порту имя Button
void main(void)
{
DDRB.0=1;// бит 0 порта B как выход
DDRC.2=0;// бит 1 порта B как вход
delay_ms(6000);
PORTB.0= 1;
delay_ms(1000);
PORTB.0= 0;
}
while (1)
{
if (Button0==0) // Если кнопка нажата,
Pulse0=1; // то зажигаем светодиод,
else // иначе
Pulse0=0; // светодиод не горит
};
}
Думаю вот так может, я еще не компилировал, набрал в тхт.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Добрый день комрады. Столкнулся с очередной проблемой... Я так понимаю библиотека delay.h может давать задержку в 1 минуту, не более, как же реализовать более минуты, таймер подключать? Как будет выглядеть код.. Хелп ми плиз....
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Я тут попробовал сделать на меге 8 и 16 битном таймере. Хочу это все на тинни 13 (задача ведь не велика, а такой мощный проц жалко). Вот только беда - помогите расчитать константу для 8 битного таймера, как это считается. 16 битный, при тактировании 8МГЦ я поделил на 1024 получил в визарде 7813, и у меня тик вроде как получился раз в сек. А как с 8 битным не могу вкурить... Направте на путь - ниже прилагаю код и схему в ISIS в архиве.
- Вложения
-
- NewTime.rar
- (29.74 КБ) 144 скачивания
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Re: Помогите с созданием таймера включения
Плохо пользоваться задержками, МК должен выполнять полезную работу, а не сидеть в пустых циклах, а сидеть в прерываниях:), конечно, если больше занять МК не чем... тогда, да.
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Неуж-то никто не отзовется?
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Re: Помогите с созданием таймера включения
а если так:Я так понимаю библиотека delay.h может давать задержку в 1 минуту, не более, как же реализовать более минуты
на 4ре минуты задержкаint mins = 4;
while(mins--){
delay_ms(60000);
}
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
/*****************************************************
Project :
Version :
Date : 31.03.2012
Author :
Company :
Comments:
Chip type : ATtiny13
AVR Core Clock frequency: 0,128000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*****************************************************/
#include <tiny13.h>
unsigned int num; // наша переменная
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
TCNT0=0;
num++; // инкрементирруем
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State5=T State4=T State3=T State2=T State1=0 State0=0
PORTB=0x00;
DDRB=0x03;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,125 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x7D;
OCR0B=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;
// Global enable interrupts
#asm("sei")
while (1)
{
if (num==30); //если 30 сек. "зажигаем" ПОРТ В.0
PORTB.0=1;
if (num==100); // если num = 100 сек. зануляем num и тушим ПОРТ В.0
{ num=0;
PORTB.0=0;
}
}
}
_________________
Да что ж такое, где собака зарылась. В Протеусе моделирую светодиод с частотой генератора скачет. Ткните, где ошибся-то...
Project :
Version :
Date : 31.03.2012
Author :
Company :
Comments:
Chip type : ATtiny13
AVR Core Clock frequency: 0,128000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*****************************************************/
#include <tiny13.h>
unsigned int num; // наша переменная
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
TCNT0=0;
num++; // инкрементирруем
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State5=T State4=T State3=T State2=T State1=0 State0=0
PORTB=0x00;
DDRB=0x03;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,125 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x7D;
OCR0B=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;
// Global enable interrupts
#asm("sei")
while (1)
{
if (num==30); //если 30 сек. "зажигаем" ПОРТ В.0
PORTB.0=1;
if (num==100); // если num = 100 сек. зануляем num и тушим ПОРТ В.0
{ num=0;
PORTB.0=0;
}
}
}
_________________
Да что ж такое, где собака зарылась. В Протеусе моделирую светодиод с частотой генератора скачет. Ткните, где ошибся-то...
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Помогите с созданием таймера включения
читаем, вникаем, пользуемся. http://chipenable.ru/index.php/programm ... yword.html
не факт, что в этом проблема, но это точно не помешает.
А вообще стандартно - проверить всю схему. Например написать простую программу, которая зажигает светодиод и залить ее в контроллер, тем самым проверив схемотехнику.
P.S. посмотрел ваш код. Вам синтаксис нужно учить, батенька. конструкция : здесь PORTB.1 = 1 будет всегда выполняться независимо от условия . Наводка: тут лишняя ";"
не факт, что в этом проблема, но это точно не помешает.
А вообще стандартно - проверить всю схему. Например написать простую программу, которая зажигает светодиод и залить ее в контроллер, тем самым проверив схемотехнику.
P.S. посмотрел ваш код. Вам синтаксис нужно учить, батенька. конструкция :
Код: Выделить всё
if(num==30);
PORTB.1 = 1;Ставим плюсы: )
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
Та екаранный бабай =) Спасибо, излишки ";" помешали =) Спасибо большое!
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: Помогите с созданием таймера включения
В железе тоже пошло! Спасибо. Такой вопрос - верно ли, что я регистр обнулил?
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
TCNT0=0;
num++; // инкрементирруем
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
TCNT0=0;
num++; // инкрементирруем
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]


