Страница 1 из 1
Программа для автопереворота инкубатора на ATMega8
Добавлено: Вт апр 08, 2014 22:58:40
stm
Недавно начал изучать программирования мк avr конкретно atmega 8я , так как потребовалса автопереворот для небольшого инкубатора почитал немного литературу смотрел видео уроки интересовала реализация таймера но нигде не нашол нужного везде рассматривалася пример с миганиям светодиода через delay но с ним нужную задержку не получу.
На этом сайте
http://avr-start.ru/?p=414 нашол пример где используется 16dbit таймер с приреваныем но он считает только 1минуту. Как мне зделать задержку 4 часа?
Буду признателен за любую помощ

Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Вт апр 08, 2014 23:39:39
takei
так как потребовалса автопереворот для небольшого инкубатора
Как говорил (архимед наверное) дайте мне точку опоры, и я переверну землю, у вас проблема гораздо мельче, всего навсего перевернуть инкубатор.
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Вт апр 08, 2014 23:44:33
takei
Нуа если серьезно то через 4 часа переворот будет так
Код: Выделить всё
s++; // увеличиваем переменную каждую секунду
if(s>14400) // прошло 4 часа!
{
s=0;
}
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Ср апр 09, 2014 10:46:09
stm
Сапсибо буду пробовать

Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Ср апр 09, 2014 22:42: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 биполярных транзисторах
Ниже есть исходник
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Ср апр 09, 2014 22:56:31
dr.doc
Пишу на Асьме, но алгоритмом помогу. Делаете в оперативке регистр флагов (индикатор состояния) в котором находится текущее значение вывода порта (запуск, реверс и пр.). В начальный момент выставляете нужное значение в порту и соотв. бит в регистре. По достижении нужного времени записываете в аккумулятор число: 00100100 - где 1 - инвертор, 0 - повторитель. Читаете в другой регистр значение флага и выполняете xor - там, где были 0 значения останутся без изменения, 1 - инвертируются. Сохраняем, далее, в зависимости от состояния бита включаете/выключаете инверсию поворота.
PS Таймер на большие значения делал так: аппаратно секундные значения, а в прерывании - увеличение счетчика и его сверка с константой.
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Пт апр 11, 2014 09:38:36
stm
Прошивку написал и пришол час прошить мк mega8.......... но незнаю правильное включения мк для прошивки
и правильной работы уже в схеме, прошивать собирался через ponyprog(lpt STK200/300) фюзы все заводские тактирование тоже 1Мгц внутр.
Заранее спасибо!

Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Пт апр 11, 2014 18:47:04
dr.doc
Зачем лошадь? STK200/300 поддерживается Atmel Studio и CodeVisionAVR. Интерфейс простой и понятный.
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Вс апр 13, 2014 11:24:45
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;
}
}
}
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Вс апр 13, 2014 11:33:09
takei
Напиши для светодиода так
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Вс апр 13, 2014 15:58:25
stm
Это хорошо но что мне сделать чтобы
выполнялось не только при включении а циклично как только таймер обнулися и нащитает 1 секунду
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Пн апр 14, 2014 12:27:05
stm
Подскажет кто то как правильно выставить стандартные fuse биты atmega 8 ДЛЯ POny prog
а то у меня они не выставлены
Re: Программа для автопереворота инкубатора на ATMega8
Добавлено: Вт апр 29, 2014 01:12:44
dr.doc
А как вопрос может выполнятся? if - если.