Программа для автопереворота инкубатора на ATMega8

Обсуждаем контроллеры компании Atmel.
Ответить
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

Недавно начал изучать программирования мк avr конкретно atmega 8я , так как потребовалса автопереворот для небольшого инкубатора почитал немного литературу смотрел видео уроки интересовала реализация таймера но нигде не нашол нужного везде рассматривалася пример с миганиям светодиода через delay но с ним нужную задержку не получу.

На этом сайте http://avr-start.ru/?p=414 нашол пример где используется 16dbit таймер с приреваныем но он считает только 1минуту. Как мне зделать задержку 4 часа?

Буду признателен за любую помощ :)
takei
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение takei »

так как потребовалса автопереворот для небольшого инкубатора

Как говорил (архимед наверное) дайте мне точку опоры, и я переверну землю, у вас проблема гораздо мельче, всего навсего перевернуть инкубатор.
takei
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение takei »

Нуа если серьезно то через 4 часа переворот будет так

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

 s++; // увеличиваем переменную каждую секунду
   if(s>14400) // прошло 4 часа!
   {
      s=0;
   }
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

Сапсибо буду пробовать :)
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

Писал прогу и застрял на этих строчках

if(PINB.2==0)
{
PORTB.0=1;
PORTB.1=0;
}

if(PINB.3==0)

{
PORTB.0=0;
PORTB.1=1;

}


Вобщем не знаю как сделать так что бы при прикосновении к 1 из 2 концевиков приводивод остонавливался и менял фазировку выходных сигналов лог 0.1 для передвижения в обратную сторону так как привод у меня сделан из коллекторного DC двигателя хотел исползовать мостовое управление на 4 биполярных транзисторах

Ниже есть исходник
Вложения
таймер mega8.c
Исходник
(2.08 КБ) 357 скачиваний
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение dr.doc »

Пишу на Асьме, но алгоритмом помогу. Делаете в оперативке регистр флагов (индикатор состояния) в котором находится текущее значение вывода порта (запуск, реверс и пр.). В начальный момент выставляете нужное значение в порту и соотв. бит в регистре. По достижении нужного времени записываете в аккумулятор число: 00100100 - где 1 - инвертор, 0 - повторитель. Читаете в другой регистр значение флага и выполняете xor - там, где были 0 значения останутся без изменения, 1 - инвертируются. Сохраняем, далее, в зависимости от состояния бита включаете/выключаете инверсию поворота.
PS Таймер на большие значения делал так: аппаратно секундные значения, а в прерывании - увеличение счетчика и его сверка с константой.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

Прошивку написал и пришол час прошить мк mega8.......... но незнаю правильное включения мк для прошивки
и правильной работы уже в схеме, прошивать собирался через ponyprog(lpt STK200/300) фюзы все заводские тактирование тоже 1Мгц внутр.

Заранее спасибо! :))
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение dr.doc »

Зачем лошадь? STK200/300 поддерживается Atmel Studio и CodeVisionAVR. Интерфейс простой и понятный.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

пошил все таки через PONY фюзы не трогал мк запустился начат выполнять программу
но работает не так как нужно то есть когда s==1 должен 4 раза мигнуть светодиод и включится порты PORTB.0=0;PORTB.1=1; а дальше через 4 часа все тоже самое только PORTB.0=1;PORTB.1=0;
Проблема в том что первое условие s==1 выполняется всего один раз при включении а второе s==14400 как положено какждые 4 часа хотя оба дольжны работать циклично

Подскажите что не так в коде?

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

#include <mega8.h>
#include <delay.h>


int s = 0;

                 
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
   s++; // увеличиваем переменную каждую секунду
   if(s>14400) // прошло 4 часа!
   {
      s=0;
   }
             
                     
             
        TCNT1H=0x00;
        TCNT1L=0x00;
 
       

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x0F;


// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off

TCCR1A=0x00;
TCCR1B=0x05;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x03;
OCR1AL=0xD1;
OCR1BH=0x00;
OCR1BL=0x00;





// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;



// Global enable interrupts
#asm("sei")

while (1)
      {
             
       
                     
         if(s==1)
        {
         PORTB.3=1;
         delay_ms(1000);   
         PORTB.3=0;       
         
         PORTB.3=1;
         delay_ms(1000);
         PORTB.3=0;
         
         PORTB.3=1;       // мигания светодиодом
         delay_ms(1000);
         PORTB.3=0;
         
         PORTB.3=1;
         delay_ms(1000);   
         PORTB.3=0;
                                                             
         
         PORTB.0=0;            // включения привода в право
         PORTB.1=1;
         
         
         delay_ms(1000);
         delay_ms(500);
         
         PORTB.0=0;
         PORTB.1=0;
                   
        }   
                 
         if(s==14400)
       
       {
        PORTB.2=1;
        delay_ms(1000);   
        PORTB.2=0;
       
        PORTB.2=1;
        delay_ms(1000);  // мигания светодиодом
        PORTB.2=0;
       
        PORTB.2=1;
        delay_ms(1000);
        PORTB.2=0;
       
        PORTB.2=1;
        delay_ms(1000);
        PORTB.2=0;
             
        PORTB.0=1;  // включения привода в лево
        PORTB.1=0;
       
        delay_ms(1000);
        delay_ms(500);
       
        PORTB.0=0;
        PORTB.1=0;
       
       
         
          }   
                     
      }
}
takei
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение takei »

Напиши для светодиода так

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

 if(s==1||s==2||s==3||s==4)
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

Это хорошо но что мне сделать чтобы

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

if(s==1)
         
 

выполнялось не только при включении а циклично как только таймер обнулися и нащитает 1 секунду
stm
Открыл глаза
Сообщения: 46
Зарегистрирован: Пн янв 28, 2013 18:25:46
Откуда: Мукачево

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение stm »

Подскажет кто то как правильно выставить стандартные fuse биты atmega 8 ДЛЯ POny prog
а то у меня они не выставлены
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Программа для автопереворота инкубатора на ATMega8

Сообщение dr.doc »

А как вопрос может выполнятся? if - если.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Ответить

Вернуться в «AVR»