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

Вопросы от начинающих по МК


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

DmitryS, Вам же уже сказали - модель индикатора в протеусе цифровая ! А это значит, что она ловит на входах чисто логические уровни и не имеет никакого входного сопротивления (бесконечно максимальное, или обрыв).

А транзистору для работы нужен проходящий через него ток. Пока ток не будет течь, никакого потенциала на нём не будет. Это равносильно тому, что мерить напряжение на "+" батарейки относительно воздуха.

Может какой другой транзистр попробовать ? Что посоветуете ?
Выкиньте транзисторы из схемы, они в протеусе не нужны. И всё будет работать.
Ссылка на комментарий
Поделиться на другие сайты

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

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

DmitryS, Вам же уже сказали - модель индикатора в протеусе цифровая ! А это значит, что она ловит на входах чисто логические уровни и не имеет никакого входного сопротивления (бесконечно максимальное, или обрыв).

А транзистору для работы нужен проходящий через него ток. Пока ток не будет течь, никакого потенциала на нём не будет. Это равносильно тому, что мерить напряжение на "+" батарейки относительно воздуха.

Выкиньте транзисторы из схемы, они в протеусе не нужны.

А как же быть ? Моделировать без транзисторов? В реальной то схеме они работать будут . Неудобно однако .

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

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

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

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

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

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

В реальной то схеме они работать будут . Неудобно однако .
Что неудобно ? Что будут работать в железе ?

И почему бы не моделировать без них ? Что смущает ?

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

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

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

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

Что неудобно ? Что будут работать в железе ?

И почему бы не моделировать без них ? Что смущает ?

Без них нужно изменять код , с транзисторами разряды управляются 0 , а без 1. Изменено пользователем DmitryS
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

У Вас на них собраны повторители.

С каких пор транзисторный каскад с ОЭ является повторителем? В данной схеме, транзисторы инвертируют сигнал - лог.0 подает на индикатор +5В и зажигает индикатор. В симуляторе, чтобы не менять программу можно поставить ЛЮБЫЕ логические инверторы.

Учение - изучение правил. Опыт - изучение исключений.

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

У Вас на них собраны повторители.

С каких пор транзисторный каскад с ОЭ является повторителем? В данной схеме, транзисторы инвертируют сигнал - лог.0 подает на индикатор +5В и зажигает индикатор. В симуляторе, чтобы не менять программу можно поставить ЛЮБЫЕ логические инверторы.

Не успел я отредактировать своё сообщение до того как Вы его прочитали, хотя сделал это в течении секунд 10-ти - 20-ти :) Почему то по памяти думал, что у него эмиттерные повторители стоят. Потом поправился.

Извиняюсь...

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

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

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

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

Так что вопросов у меня будет еще много . ))) Спасибо вам мужики !

Какой то глюк форума , поставил сапсибо Alexeyslav , а спасибо стоит у рекламы ?

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

Да все можно, кто же спорит. Весь вопрос - зачем?

я этого никогда не делаю, я всегда ставлю только нулевой адрес.вектора прерывания копи-паст из даташита...

Попробую объяснить ЗАЧЕМ... Ваша "лень" скажется на вот на чем - компилятор все-равно заполнит неиспользуемые вектора переходами. Но сделает это как-то криво.

Очень часто встречается такая конструкция:

- неиспользуемые вектора содержат переходы на одну метку (дассм) SPM_RDY (Ida так обзывает), в которой содержится переход на SPM_RDY_0. А там уже кроется команда RETI.

Вам это нужно??? Микроконтроллеру точно нет. Зачем мусорить в прошивке.

Вот пример метки (все ссылаются на нее, а она дальше... потом уже идет возврат из прерывания).

 ; public SPM_RDY
SPM_RDY:    ;
 rjmp SPM_RDY_0 ; INT0_
 ; INT1_
 ; TIMER2_COMP
 ; TIMER2_OVF
 ; TIMER1_CAPT
 ; TIMER1_COMPA
 ; TIMER1_COMPB
 ; TIMER1_OVF
 ; SPI_STC
 ; USART_RXC
 ; USART_UDRE
 ; USART_TXC
 ; ADC_
 ; EE_RDY
 ; ANA_COMP
 ; TWI_

Наверное лучше использовать всю таблицу векторов по шаблону.

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

Всей разницы 2 байта (SPM_RDY_0: reti) флеша. На скорость работы это не влияет: неиспользуемые прерывания в программе должны быть запрещены. Кстати, в avr-gcc для этого специальный адрес BADISR_vect, чтобы при переходе по необрабатываемому вектору программа зависла и этим обратила внимание программиста на ошибку. Можно и свой код туда воткнуть.

Дополнительно, возможно имеет смысл ставить *jmp вместо nop/reti из соображений размера команды. В младших моделях это без разницы (что reti, что rjmp, что nop по 2 байта), а в старших разница появляется (jmp уже 4 байта). Разумеется, использование .org решает эту проблему, но загромождает код.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Ваша "лень" скажется на вот на чем - компилятор все-равно заполнит неиспользуемые вектора переходами. Но сделает это как-то криво.

Сразу скажу, я не собираюсь с пеной у рта доказывать, что надо делать только так, как я и никак иначе. Нравится заполнять все возможные вектора reti - ради Бога.

Вот начало ассемблерного кода

.CSEG
; ИНИЦИАЛИЗАЦИЯ ПРОГРАММЫ
.org $00
rjmp start
.org $09
rjmp timer0ofv
.org $0b
rjmp IntRS232RX
.org $0e
rjmp ADC_compl
;=======================================================

;1.НАЧАЛЬНАЯ НАСТРОЙКА ПРОГРАММЫ (start)
start:
;настройка указателя стека
ldi temp, $04
out sph, temp
ldi temp, $5f
out spl, temp
rcall IniProg

Вот этот же дизассемблированный фрагмент

---- Fotoliz_Xe.asm -------------------------------------------------------------------------------
68:	 rjmp start
+00000000: C00E	 RJMP	 PC+0x000F	 Relative jump
---- No Source ------------------------------------------------------------------------------------
+00000001: FFFF	 ???					 Data or unknown opcode
+00000002: FFFF	 ???					 Data or unknown opcode
+00000003: FFFF	 ???					 Data or unknown opcode
+00000004: FFFF	 ???					 Data or unknown opcode
+00000005: FFFF	 ???					 Data or unknown opcode
+00000006: FFFF	 ???					 Data or unknown opcode
+00000007: FFFF	 ???					 Data or unknown opcode
+00000008: FFFF	 ???					 Data or unknown opcode
---- Fotoliz_Xe.asm -------------------------------------------------------------------------------
70:	 rjmp timer0ofv
+00000009: C00C	 RJMP	 PC+0x000D	 Relative jump
---- No Source ------------------------------------------------------------------------------------
+0000000A: FFFF	 ???					 Data or unknown opcode
---- Fotoliz_Xe.asm -------------------------------------------------------------------------------
72:	 rjmp IntRS232RX
+0000000B: C4F4	 RJMP	 PC+0x04F5	 Relative jump
---- No Source ------------------------------------------------------------------------------------
+0000000C: FFFF	 ???					 Data or unknown opcode
+0000000D: FFFF	 ???					 Data or unknown opcode
---- Fotoliz_Xe.asm -------------------------------------------------------------------------------
74:	 rjmp ADC_compl
+0000000E: C012	 RJMP	 PC+0x0013	 Relative jump
@0000000F: start
80:	 ldi temp, $04
+0000000F: E004	 LDI	 R16,0x04	 Load immediate
81:	 out sph, temp
+00000010: BF0E	 OUT	 0x3E,R16	 Out to I/O location
82:	 ldi temp, $5f
+00000011: E50F	 LDI	 R16,0x5F	 Load immediate
83:	 out spl, temp
+00000012: BF0D	 OUT	 0x3D,R16	 Out to I/O location
84:	 rcall IniProg
+00000013: D2AC	 RCALL	 PC+0x02AD	 Relative call subroutine

Сделано в AVR_Studio4.18. Как видите ничем неиспользованные вектора компиллятор не заполняет.

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

Это всего лишь промежуточный вариант дизассемблера, выполненный самой Студией (присутствуют имена меток). Он несколько отличается от окончательного варианта прошивки и последующего дизассемблирования. Никогда не приходилось встречать значения FF в таблице прерываний.

Что касается размеров команд (rjmp, reti, jmp), то манипулировать ими в таблице прерываний бессмысленно, т.к. размер вектора фиксированный и не зависит от применяемой команды перехода. Однако каждый переход влечет за собой еще и работу со стеком, что может его (стек) неожиданно "раздувать" в приложениях с размером используемой флешь "под завязку". С другой стороны, есть ли смысл оставлять по два лишних перехода + возврат, вместо одного возврата, в каждом неиспользуемом векторе, лишь в угоду мнимой удобочитаемости? Так ли часто вам приходится читать таблицу векторов?

Это объяснение было написано для ответа на вопрос ЗАЧЕМ и ПОЧЕМУ, но никак не для принуждения к действию. Мне, например, удобно наблюдать появление события и перехода в таблицу векторов прерываний сразу, без редактирования ее содержимого. Как вам - не знаю. Еще раз повторюсь, делайте, как вам нравится.

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

Вот начало HEX этого проекта,открытого программатором PonyProg. Только не говорите, что для Pony это тоже промежуточный вариант, и что она на самом деле шьет совсем другой код.

post-182036-0-72533600-1433408099_thumb.gif

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

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

Теперь встречая код FF в таблице векторов, я буду вспоминать Вас, Sergey-Ufa. :)

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

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

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

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

Это всего лишь промежуточный вариант дизассемблера, выполненный самой Студией (присутствуют имена меток). Он несколько отличается от окончательного варианта прошивки и последующего дизассемблирования.

Это декодирование выходного .elf-файла (формат исполняемого файла со встроенными отладочными данными) а не дизассемблирование .hex. Но тот же .hex получается именно из .elf командой avr-objcopy например. А декодирование эльфа - командой avr-objdump. Между прочим, подобные команды есть и для "компьютерных" исполняемых файлов.

Что касается размеров команд (rjmp, reti, jmp), то манипулировать ими в таблице прерываний бессмысленно, т.к. размер вектора фиксированный и не зависит от применяемой команды перехода.

Использование чего-либо кроме *jmp, под который заточена таблица прерываний может быть опасно, если не заниматься принудительным выравниванием этих команд, о чем я уже писал. Сэкономить на таблице векторов немного можно, если используются только "верхние" прерывания, Int0 например. Тогда остальные можно отвести под код. Другое дело, что экономия пары десятков байт может быть полезна разве что в самозагрузчике или совсем мелких тиньках (но даже в ATtiny13 флеша целый килобайт).

Однако каждый переход влечет за собой еще и работу со стеком, что может его (стек) неожиданно "раздувать" в приложениях с размером используемой флешь "под завязку". С другой стороны, есть ли смысл оставлять по два лишних перехода + возврат, вместо одного возврата, в каждом неиспользуемом векторе, лишь в угоду мнимой удобочитаемости? Так ли часто вам приходится читать таблицу векторов?

А как стек связан с флешом? Тем более, что *jmp стек не используют. Он используется при возникновении прерывания, неважно что именно там выполняется - nop, reti, jmp. А прыжок на промежуточный адрес может быть сделан для возможности отловить разрешенные прерывания, которых быть не должно (тот же BADISR_vect в avr-gcc о котором я писал). Читаемости это, понятное дело, не добавляет.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Мне нужно подсчитать сколько раз за время 5 cекунд на ножке 2 порта B будет логических 1, и это значение записать в глобальную переменную. Подскажите как это сделать на языке С

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

Подскажите как это сделать на языке С

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

Формулировка задания вообще неверная. лог.1 на входе может быть либо 0 либо 1.

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

Но это получается какое-то глупое задание. неправда ли?

МОЖЕТ имелось в виду что надо посчитать количество импульсов? тогда надо действовать принципиально по другому - надо постоянно считывать состояние этого пина, сравнивать с предыдущим и если текущее = "1" а предыдущее = "0" то засчитать это за импульс. Фишка в том что выполняя этот алгоритм надо параллельно отсчитывать 5 секунд... можно отсчитывать количество циклов проверки и учесть длительность одной проверки и подстроить так чтобы выйти из цикла проверок когда они наберут в сумме 5 секунд. Или. настроить таймер на счет, и после проверки пина проверять еще и переполнение таймера, подсчитывать количество этих переполнений и выйти если оно превысит некоторое число.

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...