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

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


cucumber

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

спасибо, сейчас изучу.

поменял матрицу - глюк верхней строки исчез!

сделал вывод каждой новой строчки в каждом новом прерывании,

при паузе в программе (delay_ms(300)) - протеус показвает корректно, медленно, но корректно.

Паузу убрать - ничего не видно))

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

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

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

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

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

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

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

это все надо вкурить

а внесение пауз delay разве это хорошо? слышал, типа это неправильно, или здесь только так?

а void ISR(){ -- это запись не для CVAVR?

а static unsigned char str=0; - это чтобы переменная записалась во флэш память ?

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

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

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

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

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

Подскажу идейку (на будущее) которой сам пользуюсь. Гнать ничего не надо. Достаточно сформировать импульс сброса и импульс записи в параллельные регистры. Вся линейка будет обнулена.

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

и здесь кажется 0x70:

PORTD &= ~0x07;

PORTD |= str&0x07;

и вот эту строчку нужно вынести из прерывания:

static unsigned char str=0;

я прав?

еще не очень понимаю что значит static

еще так и не попробовал этот вариант, но мне очень понравилось каким образом это описано, спасибо

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

и здесь кажется 0x70:

PORTD &= ~0x07;

PORTD |= str&0x07;

Нет, не правильно :)
и вот эту строчку нужно вынести из прерывания:

static unsigned char str=0;

я прав?

Не обязательно. Она статическая, а значит, её значение сохраняется до следующего входа в функцию. Т.е., область её видимости - локальная, а время жизни - глобальное.

а void ISR(){ -- это запись не для CVAVR?

а staticunsignedchar str=0; - это чтобы переменная записалась во флэш память ?

Не видел эти вопросы, Вы пост изменили после того, как я его прочитал.

ISR - это я условно обозначил обработчик прерывания от таймера. Он у Вас уже есть, просто нужно туда закинуть этот код (без ISR{} естественно) и всё.

Static - квалификатор для статической переменной. Он сохраняет жизнь переменной при выходе из функции.

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

привет всем, добрался до компа наконец. Попробовал ваш вариант,

если написать так

if(++str>=8) str=0;

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

В результате я str++ вынес в конец подпрограммы.

И результат могу увидеть только в пошаговой работе Протеуса, или если поставить

в программе delay_ms (200) то процесс отображения верен,

а если убрать все паузы то ничего не показывает - мигает что-то.

пришел пока к тому же.

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

Эта пауза нужна чтоб дать светодиодам набрать яркость. Но, чем больше пауза тем медленнее будут перебираться строки. В той теме что я давал ссылку это обсуждалось. И Геннадий ( пользователь форума ) посоветовал сделать все это дело с помощью таймера, и сделать так чтоб всё табло обновлялась с частотой 60 кадров в секунду. Геннадий мне скидывал пример как это будет работать, но он на ассемблере. Я повторил это на Си, но к сожалению этого проекта нет, жесткий диск накрылся. Ну и как мне советовали ребята, чтоб дать погореть светодиодам и при этом использовать минимальную задержку, нужно в регистры пропихивать данные не гася строку, потом гасим строку, защелкиваем данные для следующей строки и зажигаем эту самую строку. И того получается, пока данные пропихиваются, у вас светится строка, и на делеи требуется меньше времени. Ну лучше с помощью таймера.

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

вот что сейчас получается:

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
unsigned char digit; //для разрядов переменных
static unsigned char str = 0; // переменная для строк массива
// вывод информации в порты
if(str>=8) str=0;
for (digit = 0; digit < 8; digit++) //просматриваем разряды
{	
 if ((buffer[0][str] &(1 << digit )) !=0) //если разряд в переменной массива равен 1
 {
	 PORTC.0 = 1; // вывод значения 1 в DATA
	 delay_us(1); // топчемся на месте				
 }
 else
 {
	 PORTC.0 = 0; // вывод значения 0 в DATA
	 delay_us(1); // топчемся на месте
 }		
	 PORTC.1 = 1; // такт
	 delay_us(1); // топчемся на месте
	 PORTC.1 = 0; // такт
} //конец цикла digit "просмотра" битов
PORTD.3=0; // "E" дешифратора.
// передаем сигнал "защелкивания" регистра в STROB
PORTC.2 = 1; // такт
delay_us(1); // топчемся на месте
PORTC.2 = 0;
//--- включаем нужную строку ---							
PORTD &= ~0x07;
PORTD |= str&0x07;
//------------------------------
PORTD.3=1; // "E" дешифратора.
delay_ms(30); //даем СД разгореться
str++;//следующая строка
}

вот эта delay_ms(30) разве не может на первых порах служить той самой паузой?

только невозможно добиться верного отображения - пауза маленькая - все мигает, пауза большая - слишком медленно

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

Там вообще никаких пауз не должно быть.

Попробуйте в протеусе выкинуть транзисторы. Да и вообще, старайтесь как можно меньше в нём использовать аналоговую часть.

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

не, не показывает))

массив:

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;

если установить делитель на таймер то начинает мерцать и мигать в Протеусе, вообщем лажа

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

Тактировать камень нужно от кварца 16МГц, для гибкости. Все должно работать, на собственном опыте знаю. Делей не даст вам то что вы хотите.

Не знаеш как? Спроси у Google'а !!!

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

Странно... не должно быт такого. По коду, вроде, всё в порядке.

Делей выкиньте и добивайтесь, чтобы всё работало без него. Нечего ему там делать, в прерывании.

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

И убирите все топтышки где вы на месте топчитесь, без них все работает без сбоев. Проверено в железе

Ах да, по поводу динамической индикации в протеусе: лажа полная, не успевает протеус её отрабатывать, это факт

Не знаеш как? Спроси у Google'а !!!

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

Ах да, по поводу динамической индикации в протеусе: лажа полная, не успевает протеус её отрабатывать, это факт

Вы хотите сказать, что можно собирать в железе?:)

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

Ну вы на макетке соберите хотябы, или на худой конец навесным монтажом, для проверки так сказать. А там видно будет. И вообще в железе удобнее отлаживаться, все косяки которые протеус не показывает, сразу всплывут.

Не знаеш как? Спроси у Google'а !!!

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

Не, по 1 микросекунде надо оставить, микросхемы тоже не сверхзвуковые :)

Раза в два шустрее МК. => 30МГц при 5В.

Никаких микросекунд им не требуется. Проверено не на 1 тысяче штук. Сбоев не было.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Наверное существуют, но как реализовать данный алгоритм для самодельной конструкции ?
    • Переменный и пульсирующий постоянный ток- не одно и то же.
    • Я не плавную регулировку тока. Я про увеличить ток заряда с 6 до 10 ампер, и всё. Подобрать ёмкости C14/C15 - по каким параметрам? Поменять ключи на более низкоомные - я хотел поставить например BUV48A или 2SC3320. Пойдут на замену 2SC2335 которые сейчас стоят? А вот этот самый "резистор обмоток связи R19" уже достал! На всех зарядках он набран из 8, бывает из 10 SMD резисторов под которыми выгорает текстолит. Падла греется до 150 градусов. В этом экземпляре, стыдно даже писать его название, Striver PW-150 всё по другому. Зарядка собрана этажеркой, да так криво и нелепо, что выглядит в 100 раз хуже многих самоделок. Так вот этот "резистор обмоток связи R19" тут стоит обычный на 1 или 2 Вт - кетайский, его хрен поймёшь. Я поставил керамический - цементный на 5 Вт - нагрев 75 градусов при 5 амперах. Что ж туда ставить то? 10-20 ваттные проволочные? А вот с делителем R4/R5/R6 я не согласен! Тут за пороги вкл-выкл циклов заряд - пауза отвечает другая часть микросхемы. В этом я уже убедился, регулировку порогов делаю подстроечным резистором на 2 ноге 393. В этих зарядках и схемах часто перепутаны компараторы. Ваше утверждение про 5, а точнее 6 ногу относиться к другим схемам и зарядкам.  Резистором R7 определяется разница между напряжением окончания и начала зарядки. А вот это ценная информация - никак не мог понять как сократить минимальный и максимальный порог заряда.
    • Вообщем буду моделировать цепи включения и авто выключения 
    • @Less Если между собой созванивать контактные площадки мест под конденсаторы, то в обе стороны, и созванивается на GND. В районе антенны блютуз подозрения сняты, там проходит жёлтая дорожка, это не КЗ Остаётся подозрение на конденсатор в районе диодов, они звенят в обе стороны 196, сниму и проверю позднее. Резистор звенящий в 003 не звенит на GND.
    • Да скорость в модуле я сразу переключил на 9600 при помощи терминала из компа.  
    • Для таких целей существуют фотоамперметры.  В основе  лампочка , световой поток которой при прохождении тока сложной формы фиксируется фотоэлементом. Затем неизвестный ток заменяется известным и добиваются тех же показаний фотоэлемента, но  уже при токе , измеренным обычным амперметром.
×
×
  • Создать...