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

Различается Работа В Симуляторе И В Реальной Схеме. Attiny2313A


Tokes

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

Боюсь утонет быстро. Так что пока не наберет критическую массу, незачем ей на форуме быть.

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

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

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

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

kobraz,

автор топика тоже не имеет понятия, что и как у него "под капотом". Отсюда и такое обращение с линиями порта. Даже если ему удасться получить значение PINB (кстати, только для чтения) указанное в условии, то он тут же снимет подтяжку входной линии порта (PB4), отключая работоспособность программы в дальнейшем. Наверное он это делает по незнанию того, что регистр PORT выполняет двойную функцию. Устанавливает выходной уровень, когда линии порта настроены на выход и включает/отключает подтяжку внутренних резисторов, когда линии порта настроены на вход. Вот он и побоялся на входной линии (кнопки) установить значение регистра PORTB, равном 1, когда переключал светодиоды.

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

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

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

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

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

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

kobraz, я там уже привел пару примеров, которые без знаний асма будет трудно реализовать. И две задачки на понимание архитектуры (korsaj и __alexander на них уже ответили, причем, насколько позволяют мои знания, правильно). Может все-таки попытаете силы?

Точно такая же ситуация например в линуксах - все гентушники поголовно щитают остальных линуксоидов ламерами.... Все юниксоиды ламерами щитают всех линуксоидов....
Как где-то писали, "все мы в чем-то ламеры".
И вот из-за этого весь сыр-бор. :)
Эй, а как же DDRB настроить! Я бы как-то так делал

ldi r16,(1<<2|1<<3)
out DDRB,r16
ldi r16,(1<<2)
sbic PINB,4
lsl r16
ori r16,~(1<<2|1<<3)
out PORTB,r16

Геннадий, мало ли, вдруг там внешний резистор

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

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

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

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

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

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

COKPOWEHEU

Разве мы говорим о том трудно или нет?

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

Дайте мне такую задачу? Заодно я проверю свои силы!

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

коплю на мечту - Днепр К750

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

Эй, а как же DDRB настроить! Я бы как-то так делал...

Я настройку специально убрал, чтобы не акцентировать на ней внимание.

А можно еще короче.

Код оценил. Это лишний раз подтверждает, что на Ассме можно решать одну и ту же задачу многими способами (за что мне и приглянулся этот "мамонт", который я изучил последним).

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

Да пожалуйста. Практическая задача: разрабатывается устройство на ATmega8, для универсальности захотелось "отучить" его от внутрисхемного программатора. То есть разъем там есть, только тянуться до него неудобно. Зато "на борту" переходник UART - RS232 для связи с внешним миром. Кварц 16 МГц, скорость UART 9600. Поскольку 8 кБайт флеша это сравнительно немного, хотелось бы обойтись минимальным загрузчиком. Это 128 слов или 256 байт. Учитывая, что в такой объем запихать реализацию протокола STK500 будет трудно, пусть будет самописный прошивальщик со стороны компа. Однако, поскольку порт используется не только для программирования, надо предусмотреть какую-нибудь защиту (лично я отправлял "m8" и размер страницы флеша), а поскольку помехи в работе RS232 тоже случаются, да и мало ли, кабель разболтается, стоит проверять и сами данные даже в режиме программирования (я использовал LRC-контрольную сумму, как в hex-файлах, не CRC, конечно, но в большинстве случаев этого достаточно). Далее, поскольку bootloader это всего лишь опция для самого разработчика, да и для универсальности, надо придумать какой-то другой способ входа в секцию загрузчика (я делал, чтобы сразу после запуска стартовал загрузчик, а если в течении 5 сек по UART ничего не придет, переходил в основную программу).

Разумеется, разрабатывать прошивальщик для этой штуки я не прошу, достаточно составить ему алгоритм.

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

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

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

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

Вам же уже дали :)

Нужно просто назвать ошибки, и всё :) Особенно, первый пример очень достойный :)

Простите, но зачем мне пример в котором нужно искать ошибку?

Кто-то написал на С код с ошибкой которую нужно найти...

Мы говорим о задаче которая не решается на С без знания Асма - вот я и прошу дать такую задачу. Если я не найду для нее решения на сях - тогда да, без асма никак! Но если найду - то докажу свою точку зрения. Но код - писать буду я. Ибо в данном случае получается что - Вот я написал кривой код на сях - поэтому без знаний асма никак...

Может проблема не в знании АСма а в умении писать на С?

коплю на мечту - Днепр К750

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

Вот в дополнение моих слов.

.equ green =0b11110111
.equ red =0b11111011
ldi r16,(1<<2|1<<3)
out DDRB,r16
main:
sbic PINB,4
ldi r16,green
sbis PINB,4
ldi r16,red
out PORTB,r16
rjmp main

Решение в лоб, но вполне имеет право на жизнь.

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

Код оценил.

Можно и еще на одну команду сократить, но есть мизерный шанс, что может не загореться ни один из диодов:

ldi r16,(1<<2|1<<3)
out DDRB,r16
ldi r16,~(1<<2|1<<3)
out PORTB,r16
sbic PINB,4
sbi PORTB,3
sbis PINB,4
cbi PORTB,2

Кстати, идея ТСа с "включением" подтяжки через MCUCR=(0<<PUD); весьма оригинальна :-)

Ы, код почти один в один с Вашим!

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

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

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

COKPOWEHEU

Собственно я получил ответ на свой вопрос. Благодарю.

Вам без асма никуда! Мне асм не нужен! Ибо уровень наших с вами задач и решений сильно отличается.

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

Итого после двухдневного срача имеем:

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

Благодарю за увлекательную дискуссию :)

коплю на мечту - Днепр К750

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

...вот я и прошу дать такую задачу...

Напишите ШИМ-контроллер для пуш-пула с мертвым временем и стабилизацией напряжения (один канал), наподобие TL494.

Кстати, идея ТСа с "включением" подтяжки через MCUCR=(0<<PUD); весьма оригинальна :-)

После сброса PUD устанавливается автоматически и без PORTx не активен, а вот отключить подтяжку не взирая на PORTx им можно.

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

Напишите ШИМ-контроллер для пуш-пула с мертвым временем и стабилизацией напряжения (один канал), наподобие TL494.

В ATtiny25-85 оно аппаратно реализуется, так неинтересно.

После сброса PUD устанавливается автоматически и без PORTx не активен, а вот отключить подтяжку не взирая на PORTx им можно.

Во-во, это было "отключение отключения подтяжки" а не ее включение.

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

Ладно, другая задача, собственно тот самый код с ошибкой. Пусть есть какая-то достаточно сложная программа, сейчас не важно, какая. В нее надо добавить отсчет времени и каждые 5 часов посылать по программному интерфейсу байт, через 5 сек после посылки этого байта отправлять другой, а еще через 32 мин - третий. Отправка байта длится долго, но программа должна оперативно реагировать на внешние события (пусть на прерывания INT0, ADC, UART). Выдерживать интервалы между "долгими" посылками надо как можно точнее, хотя и не в ущерб внешним событиям. Пусть для определенности, отправка байта по медленному интерфейсу называется slow_transmit(char data), а бесконечный цикл состоит из while(1){any_other_proc();}. Свободный таймер есть, пусть для определенности, Timer1, 16-разрядный, тактируемый от часового кварца (32768 Гц). Процедура any_other_proc() может длиться пару секунд (заранее не известно сколько именно), вот эта задержка для передачи по медленному интерфейсу не страшна. Расписывать инициализации не нужно, достаточно комментарием указать, скажем, режим таймера, или предделитель, или модуль счета.

Еще раз о медленном интерфейсе: на старте slow_transmit(data1); через 5 секунд slow_transmit(data2), еще через 32 секунды slow_transmit(data3), еще через (5 часов - 5 сек - 32 мин, то есть ровно через 5 часов после slow_transmit(data1)) снова послать slow_transmit(data1) и так по кругу.

Объем кода не ограничен, практического применения именно этой задачи я не знаю. В принципе, решается строк в 20, главное не допустить две напрашивающихся ошибки (разумеется, если будете решать моим способом, в Вашем может быть по-другому).

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

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

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

Кто-то написал на С код с ошибкой которую нужно найти...

Мы говорим о задаче которая не решается на С без знания Асма - вот я и прошу дать такую задачу.

Опять двадцать пять :)

Вам предложили решить задачу (увидеть ошибку в коде - тоже задача), которая без знаний АСМа не решается ! Не зная "потрохов", оставляемых компилятором, зачастую скрываются подводные камни.

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

Ну и могу пару задач просто на сообразительность, там что асм, что Си, особой разницы нет.

Есть две переменные по байту каждая, надо в прерывании за 3 такта поменять их местами без использования третьей переменной. Желательно обойтись минимальным объемом памяти. Я знаю, как это сделать в 4 команды (включая reti) на ассемблере и в 3 - на Си (но там развернется в ту еще монструозию).

В зависимости от значения одной переменной (в диапазоне 0-15) вызвать одну из 16 процедур небольшого объема. Для обработки скриптов полезно бывает.

При возникновении внешней ошибки (пусть, по прерыванию INT0) надо сохранить текущее состояние контроллера и переключиться на коррекцию этой ошибки. Причем чтобы было возможно быстро восстановить сохраненное состояние. Критерий - минимальное время перехода между этими двумя режимами.

В контроллере ATmega2561 в зависимости от принятого по UART0 символа ('A', 'B',...'G') в соответствующем порту выставить второй бит (1<<2 если так понятнее). Процедуру приема символа писать не надо, только саму команду.

.

Кстати, в том "коде с ошибкой" эту ошибку отловить проще, нет отвлекающих факторов. В реальности в ту сторону будете смотреть в последнюю очередь.

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

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

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

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

Геннадий sbic PINB,4 - лишняя команда (была после main)

.equ green =0b11110111
.equ red =0b11111011
 ldi r16,(1<<2|1<<3)
 out DDRB,r16
main:
 ldi r16,green
 sbis PINB,4
 ldi r16,red
 out PORTB,r16
 rjmp main

А это дизассемблированный сишный код (тот что я слал) с первой страницы, главный цикл:

SBIS 0x16,4
RJMP PC+0x0003
OUT 0x18,R25
RJMP PC-0x0003
OUT 0x18,R24
RJMP PC-0x0005
CLI
RJMP PC-0x0000

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

Это придется еще флаг С отдельно выставлять, для ror'а

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

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

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

Смысл? Все примеры - частные случаи, не учитывающие состояния всех линий порта, кроме требуемых. При первом проходе главного цикла, младший бит вытесняется во флаг С и остается там, т.к. других операций, воздействующих на него (флаг С) не применяется.

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

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

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

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

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

Ноль бегать не будет, т.к. каждый раз загружается значение "Green" (в котором никакие линии порта, кроме требуемых не учитываются), т.е. все возвращается в начало и только флаг С остается поднятым. Однако сдвиг через перенос (ROR R16) можно заменить арифметическим сдвигом (ASR R16), где вместо флага переноса используется старший бит регистра. В этом случае поднимать С не требуется и ноль на старшем входе не появится даже на один проход главного цикла. Еще раз повторюсь, это частные случаи. При других схемных решениях потребуется корректировка кода.

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

Вариант с ASR мне нравится. Впрочем действительно, работать оно (пожалуй все наши ассемблерные куски) будут лучше, чем кусок из 1 поста. Так что наверное хватит уже решений именно того недоразумения, оно того не стоит :-)

Между прочим, еще Syltetooy успешно решил задачки на поиск ошибок.

А korsaj - на обмен байтов.

Спешите присоединиться к узкому кругу достигших просветления! :-)

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

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

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

Так еще можно,

post-135787-0-53397900-1405535228.png

хорош тем, что не портится ни один регистр, удобно мигать светодиодом, например, задавая частоту мигания таймером.

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

Вставка кода делается не картинкой, а кнопочкой "код", 12-я во втором ряду при написании сообщения. Странно, что после двух тысяч написанных Вами сообщений это является откровением.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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