Организация Светоэффектов На Матрице 6Х5+Attiny2313

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

Помогите написать программу. Работа должна быть такой: при нажатой кнопке - вся матрица загорается. Саму програмку вроде написал. но она не работает. Где может быть ошибка?
проект в Proteus прикрепил ниже.

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

#include <avr/io.h>
#include <delay.h>

void main(void)
{
	
PORTB = 0b0000010;
PORTD = 0b00000000;

    while(1)
    {
      while (PIND==0)
      {
      portB=1;
      _delay_ms(100);
      portB=0;
      _delay_ms(500)
      }
    };
}
Вложения
Attiny2313+30Led.rar
(14.29 КБ) 132 скачивания
Безымянный.png
(206.01 КБ) 354 скачивания
Реклама
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение coredumped »

Ну кода маловато написано.
Первая ошибка - порт нужно переключить на вывод - записать 1 в соответствующий порт DDRx, например DDRB = 0x03 переводит биты 1 и 0 порта B на вывод.
Вторая - чтоб зажечь светодиод в матрице, нужно установить порт, к которому подключен катод в 0, а порт анода в 1.
Как-то так.
Ваш DSN я не смотрел (это протеус наверна - у меня этого г...на никогда не было). Я такое творчество не приветствую, тк следующие крики от Вас будут типа: "Спасите-памагите. В протеусе все работает, а в железе нет...".
Последний раз редактировалось coredumped Сб апр 28, 2012 20:47:21, всего редактировалось 1 раз.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение pyzhman »

Все порты назначены как входы.
А что у вас на порту кнопки, когда она не нажата?
1. У меня там "1". Ответ - смысл кнопки?
2. У меня там "0". Ответ-вопрос - откуда он там?
следующие крики от Вас будут типа
+
Docendo discimus
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение coredumped »

pyzhman писал(а):Все порты назначены как входы.
А что у вас на порту кнопки, когда она не нажата?
Совершенно верно. Кнопки обычно подключают так, чтоб замыкать порт на землю, а на порт ставят подтяжку (pull-up) к питанию. Подтяжка может быть внутренней (PORTD = 2 в Вашем случае) и внешней - в виде резистора 1...10кОм.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Эиком - электронные компоненты и радиодетали
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

А как же тогда порт PortD2 програмно инициализировать как ввод данных?
Реклама
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение vovik15 »

PORTD=0b11111011; вот так
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение pyzhman »

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

DDRD= 0b11111011; вот так
:)
А так подтянуть к питанию:

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

PORTD|= 0b00000010;
Docendo discimus
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

Вот этой функцией я указываю МК, что 3-й бит порта D будет настроен как ввод данных.

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

DDRD= 0b11111011;
А что означает "подтянуть к питанию"

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

PORTD|= 0b00000010;
Зачем это нужно и как оно работает?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение pyzhman »

Это означает, что в то время, когда вход порта ни к чему не подключен(в нашем случае кнопка не нажата), на него подается "1" через внутренний резистор.
Docendo discimus
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

то есть, если мне нужно подключить 3 кнопки на 3,5,7 биты порта D, а все биты порта В на вывод, это мне нужно сделать так?!

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

#include <avr/io.h>
#include <delay.h>

void main(void)
{
   
PORTD = 0b0101011;
DDRD = 0b0101011;

PORTB = 0b11111111;
DDRB = 0b11111111;

vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение vovik15 »

не,нитак
регистр DDRD отвечает за направление работы порта D тоесть на вход или на выход. нумерация битов в байте начинаеться справо на лево ОТ 0 ДО 7!
в AVR 1это выход а 0 это вход. тоесть если нам нужно установить 1,2,3 линии в порте D на вход, то мы пишем DDRD=0b11110001;
линии 0,4,5,6,7 на выход а линии 1,2,3 на вход
а регистр PORTD отвечает за состояние уровней на порту D тоесть 0 или 1
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

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

PORTB = 0b0000000;
DDRB = 0b0000010;

PORTD = 0b00000000;
DDRD = 0b00000000;
то есть в начале я указываю что изначально будет на пинах порта 1 или 0, при помоши "Port", и командой "DDR" указываю какие из них будут на ввод-вывод?!
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение pyzhman »

В приведенном коде лапка РВ1 настроена на выход, на ней висит "0". Все биты порта D настроены на вход без подтяжки к питанию.
Docendo discimus
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

pyzhman писал(а):лапка РВ1 настроена на выход, на ней висит "0".
А в AVR разве не 1 это ввод, а 0 вывод данных? По поводу подтяжки питания, это же при нажатии на кнопку оно должно подтянуть его, или там всегда должно быть питание?
При компиляции выбрасывает такую ошибку:

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

Error: delay.h: No such file or directory
Хотя там и библиотека и есть, правда в ней нет ни одной функции
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение pyzhman »

Если в DDRx сидит "1", то лапка становиться выводом. И наоборот. Если в PORTx "1" при "0" в DDRx, то лапка подтянута к питанию через ВНУТРЕННИЙ резистор. Если DDRx "1", то напряжение на лапке соответствует значению на PORTx.
Чтобы библиотека заработала, ее надо подключить во перв'ых строках программы:

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

.include "delay.h"
Docendo discimus
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

pyzhman писал(а):ее надо подключить во перв'ых строках программы:

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

.include "delay.h"
Программно она была подключена, только начало не с точки, а с диеза

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

#include <delay.h>
проблему решил, когда прописал вот так:

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

#include <util/delay.h>
теперь появилась новая ошибка с " ; " вот сам код программы:

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

#include <avr/io.h>
#include <util/delay.h>
void main(void)
{   
PORTB = 0b1111101;
DDRB = 0b0000010;
PORTD = 0b00000000;
DDRD = 0b00000000;
    while(1)
    {
      while (PINB==0)
      {
      PORTB=1;
      _delay_us(500);
      PORTB=0;
      _delay_us(500)
      };
    };
}
где ошибка? :(
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

проблемы с ошибками решил.
теперь никак не могу завести программу((
хочу сделать так чтобы на PortB поступал +, а на PortD -. И реакция на кнопку (Pin0, PortD) собственно и сам код:

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

#include <avr/io.h>
#include <util/delay.h>
int main(void)
{   
PORTB = 0b1111110;
DDRB = 0b0000000;
PORTD = 0b11111111;
DDRD = 0b00000000;
    while(1)
    {
      if ((PIND & (1<<PIND0)))
      {
      PORTB=1;
      _delay_us(500);
      PORTB=0;
      _delay_us(500)
      };
    };
}
Может кто напишет для наглядности?
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение vovik15 »

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

#include <tiny2313.h>
#include <delay.h>

void main(void)
{

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

DDRB =  0b11111101;//все на выход первая линия на вход это кнопка
DDRD =  0b11111111;//порт д на выход весь это минус
//читстим порты   
PORTB = 0;
PORTD = 0;

while(1)
    {
     
   
    //если кнопка нажата мигаем 
if((~PINB)&(1 << 1)) //если на RB1 == 0
      {
      PORTB=253;
      delay_us(500);
      PORTB=0;
      delay_us(500);
      }
else PORTB=0;//если кнопка отпущена,погасить все



    };//конец бесконечного цикла
}//конец программы



SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение SabitofF »

Спасибо, но запустить ее не могу((
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: Организация Светоэффектов На Матрице 6Х5+Attiny2313

Сообщение vovik15 »

почему не запускаеться? у меня в протеусе все работало как часы
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»