Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.07.2011, 18:21  
alex_r61
Временная регистрация
 
Регистрация: 09.09.2007
Сообщений: 82
Сказал спасибо: 40
Сказали Спасибо 32 раз(а) в 19 сообщении(ях)
alex_r61 на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

А что железо? Так же работает?
Реклама:
alex_r61 вне форума  
Сказали "Спасибо" alex_r61
ollycat (09.07.2011)
Непрочитано 08.07.2011, 18:25  
ollycat
Частый гость
 
Регистрация: 26.06.2011
Адрес: SPB
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
ollycat на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

В том то и проблема, что железо так же себя ведет. Я уже второй день сижу голову ломаю. Поэтому и стал спрашивать: думаю, на знаю наверно каких то нюансов МК, или еще чего. А то так то пытался сам баг найти.

Нет, я конечно понимаю, что для устройства, которое я планирую сделать, просто куплю контроллер в отдельном корпусе и не буду париться, но хочется же понять, почему такой косяк возник!
ollycat вне форума  
Непрочитано 08.07.2011, 19:17  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Сообщение от ollycat Посмотреть сообщение
Текст скетча я прокомментировал чуть ли не каждую строку, там все тривиально в общем то...
Тривиально, но не работает. Выложите код сюда. Пусть даже на корявом Си. Покумекаем.
Easyrider83 вне форума  
Непрочитано 08.07.2011, 19:26  
E_C_C
Почётный гражданин KAZUS.RU
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Задержка между переключением анодов незаметна совсем, может из за этого ?Нажмите на изображение для увеличения
Название: 2323.jpg
Просмотров: 75
Размер:	77.4 Кб
ID:	23554
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 08.07.2011, 19:27  
ollycat
Частый гость
 
Регистрация: 26.06.2011
Адрес: SPB
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
ollycat на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Так выложил же. Или не чет не то сделал и не видно прикрепленного архива? Ну вот еще раз попробую прицепить.
Пардон если что, первый раз сюда пишу, до этого только читал.
Вложения:
Тип файла: zip led7_plus.zip (1.7 Кб, 83 просмотров)
ollycat вне форума  
Непрочитано 08.07.2011, 19:29  
E_C_C
Почётный гражданин KAZUS.RU
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Сообщение от ollycat Посмотреть сообщение
Так выложил же. Или не чет не то сделал и не видно прикрепленного архива?
Народу лень в архивах копасться они хотят вот так
Код:
//vim: syntax=c:tabstop=2:softtabstop=2:shiftwidth=2

#define BUTTON 12 // пин для подключения кнопки

#define REGS 4 // количество регистров экрана
char anods[REGS] = {8,9,10,11}; // пины анодов
char pins[] = {0,1,2,3,4,5,6}; // пины семисегментного индикатора
volatile char d[REGS] = {17,17,17,17}; // сюда пишем число для отображения
volatile char reg = 0; // тут сохраняем номер разряда, с которым будет работать обработчик прерывания
volatile char prev_reg = REGS - 1; // тут номер предыдущего обработанного разряда
bool button_state = false; // текущее состояние кнопки
char dig[] = {
	0b01000000,			// 0
	0b01111001,			// 1
	0b00100100,			// 2
	0b00110000,			// 3
	0b00011001,			// 4
	0b00010010,			// 5
	0b00000010,			// 6
	0b01111000,			// 7
	0b00000000,			// 8
	0b00010000,			// 9
	0b00001000,			// A
	0b00000011,			// b
	0b01000110,			// C
	0b00100001,			// d
	0b00000110,			// E
	0b00001110,			// F
	0b01111111,			// чисто - индекс 16
	0b00111111,			// -	-	индекс 17
	0b00011100,			// градус	-	индекс 18
};

ISR(TIMER2_OVF_vect) // вектор прерывания по переполнению
{
	digitalWrite(anods[prev_reg], LOW); // отрубаем аноды матрицы
	char i = 0; // счетчик битов
	for(char mask=0b00000001; i‹8; mask‹‹=1) // цикл маски битов
	{
		digitalWrite(pins[i++], (dig[d[reg]] & mask) ? HIGH: LOW); // берем поочередно биты и включаем нужные
	}
	digitalWrite(anods[reg], HIGH); // как выставили все биты катодов, можно включить и анод текущего разряда
	prev_reg = reg; // сохраняем номер зажженного разряда
	reg++; // увеличиваем разряд, что бы в следующий раз его включать
	if(reg == REGS) // если это последний разряд...
		reg = 0; // ... начинаем с начального разряда
}

void setup()
{
	for(char i=0; i‹sizeof(pins); i++) // выставим пины в out и погасим сегменты
	{
		pinMode(pins[i], OUTPUT);
		digitalWrite(pins[i], LOW);
	}

	pinMode(12, INPUT); // пин для кнопки поставим в in

	for(char i=0; i‹sizeof(anods); i++) // отключим аноды
	{
		pinMode(anods[i], OUTPUT);
		digitalWrite(anods[i], LOW);
	}

	//настраиваем Timer2: делитель /256, WGM mode 0 - по переполнению
	TCCR2A = 0;
	TCCR2B = 1‹‹CS22 | 1‹‹CS21;

	//Timer2 включаем прерывание по переполнению
	TIMSK2 = 1‹‹TOIE2;

	//обнуляем таймер
	TCNT2 = 0;
}

void loop()
{
	delay(100); // чуток подождем :) дребезг кнопки для простоты не обрабатываем
	if(digitalRead(BUTTON) == HIGH && !button_state) // если нажата кнопка и флаг не выставлен (ранее не была нажата) прибавляем в младший разряд единицу
	{
		button_state = true; // флаг выставляем, что кнопка нажата
		d[0]++; // собственно увеличиваем разряд на единицу
		for(char i=0; i‹REGS; i++) // далее проверяем переполнение разрядов
		{
			if(d[i] › 9)
			{
				d[i] = 0;
				d[i+1]++;
			}
		}
	}
	else if(digitalRead(BUTTON) == LOW && button_state) // если кнопку отпустили, но ранее она была нажата (флаг выставлен) то...
		button_state = false; // ...убираем флаг
}
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Сказали "Спасибо" E_C_C
ollycat (09.07.2011)
Непрочитано 08.07.2011, 19:33  
ollycat
Частый гость
 
Регистрация: 26.06.2011
Адрес: SPB
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
ollycat на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Я думал об этом. Пробовал сделат задержки между вклюиением и отключением анодов. Та же картина.
ollycat вне форума  
Непрочитано 08.07.2011, 19:35  
ollycat
Частый гость
 
Регистрация: 26.06.2011
Адрес: SPB
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
ollycat на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Пардон, я по своей юниксовой привычке думал что не удобно с веб морды ковыряться в коде, а легче взять файл.
ollycat вне форума  
Непрочитано 08.07.2011, 21:28  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Сообщение от ollycat Посмотреть сообщение
На 2 горит лишний сегмент "C", на 4 - сегмент "E". В битовых масках в программе нормально все стоит, эти биты не должны гореть, сейчас еще раз проверил.
Все-таки проблема в масках, или включен какой-то аппаратный модуль, который отбирает определенные ножки себе - и программа не может изменить уровень на этих ножках. Попробуйте залить во все разряды коды FFh и 00h - если будут провалы, ковыряйте все аппаратные модули, которые имеют доступ к порту
niXto вне форума  
Непрочитано 08.07.2011, 22:16  
ollycat
Частый гость
 
Регистрация: 26.06.2011
Адрес: SPB
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
ollycat на пути к лучшему
По умолчанию Re: 7-ми сегментный индикатор, atmega и динамическая индикация

Понятно. Конкретнее, я так понимаю, ни кто не скажет, видимо не сталкивался ни кто. Ладно, спасибо всем отозвавшимся за помощь, пойду ковырять дальше.
ollycat вне форума  
 

Закладки

Метки
atmega32, вопросы чайника, начинающий, помогите
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще динамическая индикация Kabron Микроконтроллеры, АЦП, память и т.д 22 29.09.2010 16:12
Динамическая индикация mironov Микроконтроллеры, АЦП, память и т.д 4 02.07.2010 17:37
Динамическая индикация ПОМОГИТЕ 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 2 27.03.2008 23:53
Динамическая индикация dosikus Микроконтроллеры, АЦП, память и т.д 3 16.02.2008 19:09
Сегментный ЖК индикатор MT10T71. К каким пинам AVR присоед. retcom Микроконтроллеры, АЦП, память и т.д 10 07.11.2007 19:42


Часовой пояс GMT +4, время: 19:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot