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

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

Сообщение stm »

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

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

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

Сообщение takei »

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

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

Сообщение takei »

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

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

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

Сообщение stm »

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

Сообщение 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 КБ) 359 скачиваний
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

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

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

Сообщение stm »

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

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

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

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

Сообщение 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;
        
        
         
          }   
                      
      }
}
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

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

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

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

Сообщение stm »

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

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

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

Сообщение stm »

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

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

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

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