Перейти к содержанию

Бегущая Строка На Avr - Помогите С Программой На Си


cucumber

Рекомендуемые сообщения

Хм...

А посмотрите дизасм, компиль не вырезал случаем условие ?

:blush: дизассемблером не пользовался, щас погуглю

погуглил, пока рановато думаю

ура :clapping: скобки добавил вроде что-то сработало

Изменено пользователем cucumber
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я бы убавил кол-во строк до 4-х (как у Китайцев сделано в бегущих строках). Для этого можно убрать дешифратор 3х8 и добавить 1 линию порта, сделав программный дешифратор строк. Придется вдвое увеличить кол-во регистров, но можно отказаться от сборок ULN (нагрузка регистров допускается до 35-40мА на выход).

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А зачем !=0 ?

Согласен.

Я бы убавил кол-во строк ...

Пока рано модернизировать))

Пока что застопорился:

оставил только один модуль в схеме для простоты программы.

Т.е. 8*8 диодов всего.

Создал массив:

buffer [0][0] = 0b00011111;
buffer [0][1] = 0b00100001;
buffer [0][2] = 0b00100001;
buffer [0][3] = 0b00100001;
buffer [0][4] = 0b00111111;
buffer [0][5] = 0b00100001;
buffer [0][6] = 0b00100001;
buffer [0][7] = 0b00100001;

Т.е. как-бы буква "А" должна высветиться.

Если ввести паузы (breakpoints) то Протеус показывает - как вложении,

это все одна и та же схема в 3-х экземплярах.

Т.е. Протеус отображает элементы массива во всех сразу строчках почему-то.

ладно, пока спать

post-152089-0-47274600-1451779904_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

"приколхозил" аналоговые резисторы в протеусе на землю, и если поставить delay_ms() после вывода в пин DATA - то строчки переключаются почти как надо поочередно сверху вниз (только нижняя и верхняя строчка поменяны местами, буду разбираться).В свойсвах матрицы Протеус нужно было еще поменять trigger time чтобы начало показывать нормально без delay в программе.

Видимо из-за тогог, что нижняя и верхняя строчка перепутаны (или какое-то смещение) получилась вот такая картинка- вложение

post-152089-0-22993800-1451804717.jpg

Изменено пользователем cucumber
Ссылка на комментарий
Поделиться на другие сайты

издержки протеза, точнее цифровой модели самой матрицы, ТС с двух сторон приколхозил аналоговые цепи , с одной стороны транзисторы, с другой ULNку и то и другое анологовые цепи которые без потяжек потенциалы не выдают... как то так...

Ссылка на комментарий
Поделиться на другие сайты

пока не буду менять схему симуляции

по-прежнему экспериментирую только с одним модулем 8*8

пока получается вот что (в подпрограмме прерывания):

for (str = 0; str < 8; ++str) // меняем строки массива
{
 for (digit = 0; digit < 8; digit++) //просматриваем разряды
 {	
	 if ((buffer[0][str] &(1 << digit )) !=0) //если разряд в переменной массива равен 1
	 {
	 PORTC.0 = 1; // вывод значения 1 в DATA
	 #asm("nop") // топчемся на месте
	 #asm("nop")
	 #asm("nop")		
	 PORTC.1 = 1; // такт 1
	 #asm("nop") // топчемся на месте
	 #asm("nop")
	 #asm("nop")
	 PORTC.0 = 0; // вывод значения 0 в DATA
	 PORTC.1 = 0; // такт 0
	 }
	 else
	 {
	 PORTC.0 = 0; // вывод значения 0 в DATA
	 #asm("nop") // топчемся на месте
	 #asm("nop")
	 #asm("nop")
	 PORTC.1 = 1; // такт
	 #asm("nop")
	 #asm("nop")
	 PORTC.1 = 0; // такт
	 }
 } //конец цикла digit "просмотра" битов
 PORTD = str; //включаем нужную строку
// передаем сигнал "защелкивания" регистра в STROB
PORTC.2 = 1;
#asm("nop") //немного топчемся на месте
#asm("nop")
#asm("nop")
PORTC.2 = 0;				
//delay_ms(10);
}

массив выглядит так:

buffer [0][0] = 0b00011111;
buffer [0][1] = 0b00100001;
buffer [0][2] = 0b00100001;
buffer [0][3] = 0b00100001;
buffer [0][4] = 0b00111111;
buffer [0][5] = 0b00100001;
buffer [0][6] = 0b00100001;
buffer [0][7] = 0b00100001;

Протеус показывает вот что:

(в символе "А" верхний левый зажженый бит - лишний, похоже опять что-то "смазывается" или перескакивает, или какой-то зрительный обман- хз. Еще иногда проскакивают подмигивания, как будто на строчки случайно попадает информация несоответсвующих переменных. Если поставить паузу при выводе строки то строчки одна за другой выводятся верно )

И очень влияет на отображение положение в программе строчки "защелкивания" и строчки включения строки,

копаю дальше

post-152089-0-74635200-1451847989.jpg

Ссылка на комментарий
Поделиться на другие сайты

Протеус показывает вот что:

(в символе "А" верхний левый зажженый бит - лишний, похоже опять что-то "смазывается" или перескакивает, или какой-то зрительный обман- хз. Еще иногда проскакивают подмигивания, как будто на строчки случайно попадает информация несоответсвующих переменных.

а в реале будет так же, если не хуже... так и хочется сказать "тренируйтесь на кошках"... :rake:

прежде чем обновить информацию все строки должны быть погашены....

Ссылка на комментарий
Поделиться на другие сайты

один модуль руки чешутся собрать - убедиться :)

прежде чем обновить информацию все строки должны быть погашены....

это что же- нужно в строчку данных для регистров перед данными забивать последовательность "нулей"?

В железе будет не то что также, будет вообще каша.

в программе где- то в корне что-то неверно, или просто нужно программу "довести до ума" ?
Ссылка на комментарий
Поделиться на другие сайты

это что же- нужно в строчку данных для регистров перед данными забивать последовательность "нулей"?
приплыли... вы данные заносите не в строки а в столбцы... и информацию выводите построчно , вот и гасить нужно строки...
Ссылка на комментарий
Поделиться на другие сайты

в программе где- то в корне что-то неверно, или просто нужно программу "довести до ума" ?

Программу до ума. Собсвенно, "в программе где- то в корне что-то неверно" - тоже самое :)

нужно в строчку данных для регистров перед данными забивать последовательность "нулей"?
Если есть вариант выключить все строки, то лучше его. Если нет - то выключаем столбики.

Дело в том, что когда Вы в программе "включаете нужну строку", в этот момент на столбцах висит информация со старых строк. Протеус этого не покажет, а в железе будет засветка.

Вообще, лучше бы видеть наглядно схему. Вслепую сложно что-то представлять и советовать. Если у регитсров есть OE, то можно задействовать его для гашения.

Ссылка на комментарий
Поделиться на другие сайты

:) схема почти не менялась, OE в регистре есть. Но видимо мне лучше программно "чистку" оформить - более универсально на будущее пригодится.

post-152089-0-40089700-1451850947_thumb.jpg

Изменено пользователем cucumber
Ссылка на комментарий
Поделиться на другие сайты

...OE в регистре есть. Но видимо мне лучше программно "чистку" оформить - более универсально на будущее пригодится.

Не пригодится. Какой смысл очищать регистры, если старые данные можно спокойно заменить новыми. Совет с ОЕ самый оптимальный, т.к. можно еще и управлять яркостью строки.

Ссылка на комментарий
Поделиться на другие сайты

Я так понял, справа у матрицы - столбцы ? А строки (слева у матрицы), как и по схеме вначале, зажигаете через транзисторы и дешифратор ?

да

Ссылка на комментарий
Поделиться на другие сайты

Ну да, гнать 8 байт через все регистры, чтобы погасить столбцы - мазохизм :)

В крайнем случае, поставьте вместо дешифратора регистр. Хотя бы один байт гнать для гашения.

ну тогда проще гасить дешифратор

Кстати, да. Выводы у дешифратора тоже можно гасить. Вот Вам и решение :i-m_so_happy:
Ссылка на комментарий
Поделиться на другие сайты

Т.е., гасите строки -> щелкаете защёлкой -> зажигаете нужную строку.

И ещё. Вы перебираете все 8 строк подряд за 1 ход прерывания, а нужно в каждом прерывании зажигать следующую строку. А то получается, что за одно прерывание Вы создаёте всю динамику, и одна строка горит до следующего прерывания. В железе все строки кроме последней будут еле-еле гореть, а последняя - в полный накал.

Ссылка на комментарий
Поделиться на другие сайты

а нужно в каждом прерывании зажигать следующую строку.

понял, спасибо, я этого не знал!

Вот какой-то странный протеус - на матрице верхний правый вывод (S7) в режиме симуляции не подсвечивается синим или красным, (точнее наверное глюк в модели)

и хз, глюк верхней строчки из-за этого или нет. (верхняя быстрым подмигиванием дублирует остальные строчки)

все перепроверил

сейчас первым делом матрицу на другую поменяю, может что изменится

post-152089-0-11705000-1451853567_thumb.jpg

Изменено пользователем cucumber
Ссылка на комментарий
Поделиться на другие сайты

Вот, как-то так :

void ISR(){
static unsigned char str=0;
unsigned char tmp;
if(++str>=8) str=0;
tmp = buffer[0][str];
for (digit = 0; digit < 8; digit++) //просматриваем разряды
{	
    if (tmp&0x08) // Кстати, так, старшим битом вперёд, будет правильнее. Не будут символы перевёрнуты
 {
		 PORTC.0 = 1; // вывод значения 1 в DATA
 }
 else
 {
		 PORTC.0 = 0; // вывод значения 0 в DATA
 }
 delay_us(1);	 // топчемся на месте
 PORTC.1 = 1;	 // такт 1
 delay_us(1);	 // топчемся на месте
 PORTC.1 = 0;	 // такт 0

 tmp<<=1;		 // Двигаем переменную
} //конец цикла digit "просмотра" битов
PORTD.3=0; // "E" дешифратора.
// передаем сигнал "защелкивания" регистра в STROB
PORTC.2 = 1;
delay_us(1);
PORTC.2 = 0;
//--- включаем нужную строку ---					
PORTD &= ~0x07;
PORTD |= str&0x07;
//------------------------------
PORTD.3=1; // "E" дешифратора.
} // void ISR()

Это для одного индикатора. Для всех 8-ми - добавите ещё цикл и переберёте все 8 массивов.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Сколько лет часам? Может просто батарейка сдохла и все проблемы. В аккумуляторе стоит контроллер, он и решает что и как делать, а здесь ваши домыслы без замеров и прочего.
    • Верно, сымитировать реальную ситуацию. И не от "Кроны", а от более мощного источника, способного дать 2-3А току (нагрузка 4 Ома). Также можно проверить и симисторную защиту, только вместо предохрана включите эл. лампу накаливания на 220В и подайте вольт 40 от усилителя (с шины питания). Фейерверки при тестах как бы не нужны, по понятным причинам.
    • Точило это ногами видимо крутить, оборотов до 200 в мин. А если шлифмашина или заточной станок с оборотами от 2000 и выше то не только разлетается но и травмирует не хило.
    • Правильней будет сказать: никто не видел, чтобы его били. Ещё подсветку проверьте - сильно ли нагревается экранчик от неё?
    • С каких пор микросхема стабилизатора напряжения, включенная по схеме стабилизатора же напряжения, стала работать ещё и ограничителем тока?
    • Ну вот, пока готовил эскиз, на все вопросы ответили :-) Действительно, в 3D моделях DipTrace нет (или не нашёл) модели корпуса ТО220 с распайкой с нижней стороны и креплением к радиатору - по этому и получился такой 3D-портрет платы. Задуманная конструкция выглядит примерно так:  По факту, для наладки, сейчас подключаю транзисторы, закрепленные на радиаторе, проводами.
    • Чтобы потом не допиливать паровоз до истребителя. Заводские варианты схемотехники куда более предсказуемы. Из "вольностей" в первую очередь как-то решать проблему коммутации, подходящий переключатель для режимов искать история долгая и грустная. Что-то там с реле. На диапазоны 6п4н вроде же ?  пг2 хрен найдёшь, п2г тугое неудобство(  Рассыпушный ацп делать, боже упаси. Ну разве что был грешен, побаловался когда-то пнч-ацп. С 1108пп1 и 155 серией
×
×
  • Создать...