Attiny 13 моя первая сборка

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Благодарен тем кто обратил внимание.
Мой первый проект(можно назвать и по другому, но для меня это выглядет так :)) )
Нужна помощ ибо самому не понятно ,точнее не могу понять как правильно использовать прерыание, по чему именно* использовать прерывание.
Задача.
принимаем два сигнала,
при сигнале 0 на PB0, даем выход PB2/0,8 сек.(sleep)
при сигнале 0 на PB1, выход PB2/0.8 сек ,PB3/15сек (sleep) , при этом если PB0==0,PB2/0,8 сек.

С кодом получаетса все просто, при задержке 15 сек PB0 не обслуживаетса.
пробовал и на С и на Асм :(

не хватает знаний, имея другие примеры нужного результата не достиг.
ВОТ КОД ПРОГРАММЫ;

#include <avr/io.h>
#include <util/delay.h>
#define sig1ON PORTB |= (1<<PB2)
#define sig1OFF PORTB ^= (1<<PB2)
#define sig2ON PORTB |= (1<<PB3)
#define sig2OFF PORTB ^= (1<<PB3)
#define t08 _delay_ms(800)
#define t10 _delay_ms(10000)

int main(void)
{
DDRB = 0b001100;
PORTB = 0b100011;
while(1)
{
if (bit_is_clear(PINB,PB0))
{
sig1ON;
t08;
sig1OFF;

}
if(bit_is_clear(PINB,PB1))
{
sig1ON;
sig2ON;
t08;
sig1OFF;
//t10;// ПРИ ЗАДЕРЖКЕ 10СЕК PB0 НЕ ОБСЛУЖИАЕТСА
//sig2OFF;//
}
}
}
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Начнём с простого
#define sig1OFF PORTB ^= (1<<PB2)
Это не правильная запись!!! Правильная будет так:

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

#define sig1OFF PORTB &= ~(1<<PB2)
[/b]
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Dr. Alex писал(а):Начнём с простого
#define sig1OFF PORTB ^= (1<<PB2)
Это не правильная запись!!! Правильная будет так:

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

#define sig1OFF PORTB &= ~(1<<PB2)
[/b][/quote
Бесспорно но интерестно, так тоже работает но в чем разница?
я из соображений ^=() короче чем &=~().
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

При вашей записи, вы сбросите в 0 нужный вам бит, а остальные инвертируете. При моей записи вы сбросите в 0 нужный бит, при этом все остальные останутся нетронутыми!!! Учите матчасть - http://radioparty.ru/index.php/prog-avr ... 39-lesson7
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Dr. Alex писал(а):При вашей записи, вы сбросите в 0 нужный вам бит, а остальные инвертируете. При моей записи вы сбросите в 0 нужный бит, при этом все остальные останутся нетронутыми!!! Учите матчасть - http://radioparty.ru/index.php/prog-avr ... 39-lesson7
Понято!
исправляю код.
что подкажете по основному вопросу?
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Скажите, вы зачем полностью цитируете сообщение?
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

чтоб был виден диалог :(
не подумал что может быть вне правилах.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

madil писал(а):С кодом получаетса все просто, при задержке 15 сек PB0 не обслуживаетса
Конечно не будет обслуживаться)))) У тебя камень простаивает 15 секунд, и в эти 15 секунд он абсолютно ничего не делает, а тупо отсчитывает задержку!!!! Лучше опрашивать входы на прерывании) Ну или задержку немного не так делать...

З.Ы.
madil писал(а):чтоб был виден диалог
А диалог и так видно))))))
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

В этом и есть суть :) не знаю как правильно програмно(кодом) сделать задержку.
или по переполнению таймера или по другому :( нет у меня основы.
не понимаю как правильно связать команды с переменными :(
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Вы не достигнете никаких результатов, пока не сформулируете сами для себя конкретную цель, а вот это ваше:
как правильно програмно(кодом) сделать задержку или по переполнению таймера или по другому нет у меня основы
:)) :)) :)) :))
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Какже правильно сформулировать чтоб было понятно? :(
сделать задержку по времени , и обращятса к ней когда нужно при этом чтоб выполнялся основной цикл.
скажем опрос портов на низкий уровень сигнала каждые 2мс,
1 на выходе порта через задержку 1сек или 10 сек, при этом чтоб проц не бездействовал.
думаю в выше написанном коде можно понять где нужна правильная задержка.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Ну вот, сделать задержку на Таймере в режиме совпадения, например! При поступлении сигнала на вход, обнуляете таймер, сбрасываете выход и таймер начинает считать.... Как достигнет нужного вам времени по прерыванию выставит 1 (ну или 0) на нужном вам выходе... Вот как-то так :)
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Правильнали моя модель?

#define F_CPU = 9600000/8=1200000
#include <avr/io.h>
#include <avr/interrupt.h>

ISR(SIG_OVERFLOW0)
{
PORTB //ОПИСАНИЯ ДЕЙСТВИЙ,ЧТО КУДА И КОГДА И НА ДОЛГОЛИ :)
TCNT0
}

int main(void)
{
PORTB = // ОПИСАНИЕ ПОРТОВ
DDRB =

// Таймер
TCCR0A = 0;
TCCR0B = 0b00000101; //делитель
TCNT0 = (256 - 234);
TIMSK0 = 0b00000010; // Разрешение прерываний по переполнению

sei();
while (1) {}
}
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

А где опрос портов??? В функции прерывания только выход указать!
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

#define F_CPU = 9600000/8=1200000
#include <avr/io.h>
#include <avr/interrupt.h>
#define sig1ON PORTB |= (1<<PB2)
#define sig2ON PORTB |= (1<<PB3)

ISR(SIG_OVERFLOW0)
{

PORTB &= ~ (1<<PB2);// КАК Я ПРАВИЛЬНО ПОНЕЛ МНЕ НАДО ЗДЕСЬ ИХ ОБОЗВАТЬ КАК TCCR0A/TCCR0B ?
PORTB &= ~ (1<<PB3);

}

int main(void)
{
DDRB = 0b001100;
PORTB = 0b100011;

// Таймер
TCCR0A = 0;
TCCR0B = 0b00000101; //делитель

TIMSK0 = 0b00000010; // Разрешение прерываний по переполнению

sei();
while(1)
{
if (bit_is_clear(PINB,PB0))
{
PORTB |= (1<<PB2);
TCNT0 = (256 - 200);
}
if(bit_is_clear(PINB,PB1))

{
PORTB |= (1<<PB2);
PORTB |= (1<<PB3);

}
}
}
Получаетса но что то не то, где моя ошыбка? ткните меня носом.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Вот смотри: при приходе 1 на вход - выставляешь нужное тебе значение на выходе + запускаешь таймер, который отсчитывает нужное тебе время, по окончании счёта - ПРЕРЫВАНИЮ, останавливаешь таймер и сбрасываешь значение выхода! Вот и всё)

Ну не буду-же я за тебя весь код писать)
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Буквально кодом я занялся с утра :) до сегоднешнего дня и знать не мог что это, решение было спонтанно, придумал мысль, под руку в магазине оказалась
тиньки и программатор скт 500
Голова кипит от незнания :(
я не прошу писать за меня код...
прошу просветить....думаю за день думок я уже торможу :(
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Вот почитай ТУТ. Очень хорошая обучалка)))
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт дек 19, 2013 12:12:01

Сообщение madil »

Ужэ читаю
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Проясняется? Какие вопросы?
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Ответить

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