Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Сообщение amd9800 »

"Engineer_Keen" - огромное спасибо

На данном этапе решил поработать с LCD дисплеями. Но тут я понял что мне надо использовать данные типа string. В высокоуровневых языках как java там все ясно. А в "С" столкнулся с определенными моментами. Как такого типа string нету и надо использовать массив char и еще работать с указателями да еще для функций LCD надо учитывать в какой памяти хранятся данные. Отдельная функция в зависимости от типа данных.

Если честно немного запутался.
На экране мне надо выводить часть текст - это информативная часть.
А вторая часть это сами данные которые меняются - обычно это цифры.

Например - Voltage = 5.02V
Таким образом "Voltage = " и "V" не меняются, а "5.02" может принимать разные значения.
Для фиксированной части вроде определил что объявляю переменную указатель

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

flash unsigned char *vv="Voltage "
lcd_putsf(vv);
Но вот вопрос как вывести на экран само значение "5.02" ?

также пробовал выводить на экран по одному символу

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

unsigned char *s="C";
lcd_puts(s);

Но если вывожу на экран символы по коду тогда после самого символа появляется еще и пробел.

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

unsigned char cc=66;
unsigned char *cj;

сj=&cc;
lcd_puts(cj);
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

ARV,
ARV писал(а): 1. вы представляете, для чего вы делаете запрет и последующее разрешение прерываний в обработчике прерывния?
2. вы представляете себе последствия таких действий?
3. это на самом деле необходимо для вашего алгоритма?
4. DEBUGER - это функция? вы представляете себе последствия вызова функций из обработчика прерываний?
1. Я исключал версию что данный глюк возникает из за нарушения атомарности работы с регистрами ADCW
2. Прерывание от таймера может не сработать по этому там одну строчку и запрещал что бы было всё быстро.
3. В таймере крутится программная реализации протокола 1-wire написанная в духе конечных автоматах. По этому могут быть маленькие задержки.
4. Да функция написана мною. Она заносит указатель на строку в буфер и ADCW. в главном цикле из этого буфера всё передаётся. Последствия вызова функций в обработчике не очень представляю разве что переполнения стэка может случится
в исходной версией программы этой функции не будет.
я так думаю, что 300-500 ваших тактов на обработчик - исключительно следствие того, что вы смутно представляете себе ответы на эти вопросы.
Что-то вчера вечером перемудрил не так померил в основном (с выкл прерываниями) это 250 тактов (оно так и есть 200 nop 30 вход/выход из прерываний и 20 на 5-10 операций остаётся).
а при включенных прерываниях доходит до того что таймер два раза успевает обработчик АЦП прервать. Соответственно обработчик АЦП растягивается до 600 тактов.
ну и вообще, ваш код весьма "грязный" - подумайте над его упрощением. как правило, лаконичный код проще понимать и отлаживать, да и чаще всего он меньше проблем вызывает...
А вот про это можно по подробней ? что не так ? что не читабельно ? В CV можно всё по сворачивать =)) и он получается компактный.

Engineer_Keen, Про функцию DEBUGER выше написал пункт 4 (вроде как в 40 тактов укладывается )
Частота 10 МГц это 833 такта на обработку АЦП. так что есть ещё запас около 300 тактов

Возник ещё один вопрос после того как изменили регистр MUX во время преобразования суда из даташита он заблокирован и не переключится а переключится на последнем такте АЦП перед завершением преобразования. Т.е почти перед входом в следующий обработчик прерывания ?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Физически в какой памяти у АВРок хранятся фьюзы? Сколько раз их можно перешивать?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Вроде как во флеше. Их даже можно из самой программы прочитать через LPM. Значит и ресурс как у флеша (10к).
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

pokk
Программные задержки в прерывании - это не просто плохой стиль программирования, это плохо выбранная структура программы.
Никакие CLI/SEI там не нужны.
1. Зашли в прерывание, считали результат.
2. установили следующий канал.
3. Пнули запуск АЦП.
4. Если надо изменили машину состояний.
На всё пару-тройку десятков машинных тактов если писать на Си.
Когда имеются более приоритетные критические по времени процессы, то опрос АЦП можно вынести в функцию main.

В вашем случае скорее всего также ошибка в выборе режима Free running.
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

isx писал(а):Блин. Почему-то всегда, когда я произвожу обращение к порту "А", диод начинает тупо светиться.
пробовал строку PORTA = ((PORTA & 0b11110000) | mpxbutt); обхватить таким образом:

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

delay_ms(1000);
 PORTA = ((PORTA & 0b11110000) | mpxbutt);
delay_ms(1000);
СД сначала нормально реагирует на потенцимометр. Через секунду он начинает тупо светиться. Ещё через секунду, всё снова работает нормально - и так по кругу.
Это вообще лечиться?? :(
http://radiokot.ru/forum/viewtopic.php? ... tart=10700

Неделя в пустую. Так и не нашёл причину затупов АЦП (который находится на порту А) при обращении к I/O пинам порта А.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1499
Зарегистрирован: Ср сен 03, 2008 21:42:17
Откуда: Ленинградская область,пос.Красный Остров

Сообщение WatchCat »

Можно я мелкий вопрос про ПЛИС задам,чисто из любопытства?
Сам с ними имел дело только на уровне использования готовых прошивок.
А интересует вот что: преобразование Фурье на чем быстрее будет считаться - на соответствующим образом запрограммированной ПЛИС или
на видеокарте настольного компа? В предположении что преобразование одинаково,а стоимость видеокарты и используемой плис близка.
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Сообщение amd9800 »

Смотря какая видеокарта!!!

Но если использовать последние модели видеокарт радеон, тогда видеокарта.
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Сообщение amd9800 »

AI_Disable писал(а):...МК UART организован аппаратно, т.е. вам фактически ничего не нужно делать: "бери и используй".
скажите пож. для UART нужно чтоб 0(земля) этих двух устройств была одна и та же или это совсем не важно.

Одно работает от одной батарейки, другое устройство от другой.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Конечно земля для них должна быть общей, иначе относительно чего они будут читать логические уровни?
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Engineer_Keen писал(а):Их даже можно из самой программы прочитать через LPM.
Эээ... Да ладно. А поподробней, как? Что-то я кроме тинек не видел адрес фьюзов.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Надо в Z положить 0001 (0002 или 0003, смотря какие фьюзы), выставить BLBSET+SPMEN в регистре SPMCR, ну и считать через LPM, сам не пробовал, но в даташитах пишут...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, при отладке по jtag флэш микроконтроллера не изменяется?
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Сообщение slavokhire5 »

baghear писал(а):Добрый день, при отладке по jtag флэш микроконтроллера не изменяется?
Нет =)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, установил quartus, при создании проекта не выводит список поддерживаемых устройств, скачал sp, у него расширение .qdz.
Куда его надо установить?
Chettuser

Сообщение Chettuser »

А какую версию Вы скачали?
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Не перепутайте пробную и бесплатную (web edition) версию.
Бесплатная качается вот отсюда http://dl.altera.com/?edition=web


К стати, кто-нибудь подскажите с какой версии квартуса перестали поддерживать MAX-ы серий 3000 и 7000? Какая последняя с их поддержкой?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Chettuser

Сообщение Chettuser »

У меня стоит 9-я, есть поддержка 3000 и 7000. Вполне устраивает.
А вообще, судя по https://www.altera.com/download/sw/dnl-sw-index.jsp поддержка аж до 13-й версии.
Не качал 10 и 11 принципиально - из за распухшего кода и поддержки недоступных для меня, простого человека, чипов (Старше Cyclone 2 всё очень дорого, даже на aliexpress)
Родился
Сообщения: 1
Зарегистрирован: Вс фев 07, 2010 00:30:44

Сообщение Alexlisp »

Сразу извиняюсь за, возможно, глупые вопросы - я всё же новичок хобби-класса. Играюсь с pic16f628a и юзаю Си.

Вопрос #1:
Нужно ли делать паузу при изменения сигналов при управлении 74hc595?

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

//8 светодиодом подключено к сдвиг. рег.
PORTA = 0;
__delay_ms(5);
  for (i = 0; i < 8; i++ ){
    PORTA = 2;
    __delay_ms(5);
    PORTA = 2 + 1;
    __delay_ms(5);
  }
//Синхронизация
PORTA = 4;
__delay_ms(5);
PORTA = 0
__delay_ms(5);
Т.е. является ли вызов __delay_ms() избыточным? Могу ли я убрать эти строки и быть спокойным?

Вопрос #2:
Могу ли я сделать плавную анимацию(например,потухание без мерцаний) светодиодов с этими компонентами, или это слишком мелкокалиберный пик? Прошу поделитесь обучающими кодом/ссылками, а то беглый поиск не дал толковых результатов. Теорий много прочил и в голове стало понятно как RGB 8x8 матрицу подсветить от сдвиговых и ULN2803, но интересует подбор таймингов, сам код и прочие нюансы.
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Alexlisp писал(а):Нужно ли делать паузу при изменения сигналов при управлении 74hc595?
Ваш ПИК может работать на тактовой частоте до 20 МГц, а 595 — до 30 МГц минимум при питании от 4,5 В и свыше 100 МГц в идеале.
Так нужно ли ставить задержку в 5 мс? :o
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «Разные вопросы по МК»