Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
109 / 81 / 37
Регистрация: 13.01.2016
Сообщений: 409
1

ATtiny. Reset, как вывод I/O

24.02.2021, 10:22. Показов 2430. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Для работы потребовалась лишняя нога и я решил использовать RESET в качестве выхода. Изначально отладил программу, все дела. После того, как убедился в работоспособности, перенёс логику на RESET и скинул бит RSDISBL в нолик. После таких манипуляций контроллер перестал работать, порт RESET постоянно скачет (ловит 50 Гц отовсюду).
Пока в голове вертится мысль подтянуть порт на землю через резистор.
Как с этим бороться? Буду благодарен за любые советы.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.02.2021, 10:22
Ответы с готовыми решениями:

Выбор правильных вариантов по Git: git reset --hard, git reset --mixed , git reset --soft
1. Выберите верное утверждение: git reset --hard a. сохраняет изменения (и в stage, и в working directory) b. сохраняет изменения...

Attiny24 вывод RESET
Здравствуйте господа! Есть такая AVR-ка. у неё вывод есть вывод ресет/PB3. можно ли после программирования назначить этот вывод как выход и...

В чем отличие warm reset от cold reset?
Вроде я так понял что при warm reset не сбрасывается память......а смысл? программа (или операционка) грузится заново...и то что осталось в...

12
1182 / 657 / 113
Регистрация: 15.05.2012
Сообщений: 4,063
24.02.2021, 15:39 2
Цитата Сообщение от DarkPtect Посмотреть сообщение
Изначально отладил программу
В какой среде? (ну не в железе же.)
Цитата Сообщение от DarkPtect Посмотреть сообщение
мысль подтянуть порт
Тут как-бэ и программа завязана.
0
Эксперт CЭксперт С++
 Аватар для liv
5118 / 4558 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2021, 16:36 3
Цитата Сообщение от DarkPtect Посмотреть сообщение
перенёс логику на RESET
Показывай код, который получился
0
109 / 81 / 37
Регистрация: 13.01.2016
Сообщений: 409
25.02.2021, 12:08  [ТС] 4
МК ATtiny10
Алгоритм работы следующий:
1)ожидание прихода фронта на ногу 1, потом ожидание прихода спада на эту же ногу. По спаду включается таймер.
2)ожидание внешнего прерывания по фронту на ногу 4. По приходе прерывания остановка таймера и сохранение значения счётчика. Запись сохранённых значений в регистр сравнения таймера и перевод таймера в режим счёта вниз.
3)ожидание второго прерывания по ноге 4. По приходе прерывания переход в подпрограмму RUN, понижение частоты тактирования таймера и его запуск.
4)прерывание по обнулению таймера, замыкание ключей на ногах 3 и 6.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
.org 0x0000
rjmp START
 
.org 0x0001
rjmp EXT_INT
 
.org 0x0002
rjmp PC_INT
 
.org 0x0005
rjmp TIM_COMP_INT
 
START:
;переключение такта на 8 МГц
ldi r17, 0x00
ldi r16, 0xD8
out CCP, r16
out CLKPSR, r17
clr r16
clr r17
 
;значение для сравнения
ldi r18, 0x01
 
;3 и 6 ноги - выходы с открытым стоком
ldi r16, (1<<DDB3)|(1<<DDB1)
out DDRB, r16
clr r16
 
;настройка прерываний и таймера
ldi r16, (1<<PCINT0)
out PCMSK, r16
clr r16
 
ldi r16, (1<<PCIE0)
out PCICR, r16
clr r16
 
ldi r16, (1<<ISC01)|(1<<ISC00)
out EICRA, r16
clr r16
 
ldi r16, (1<<INT0)
out EIMSK, r16
clr r16
 
ldi r16, (1<<OCIE0A)|(1<<TOIE0)` 
out TIMSK0, r16
clr r16
 
sei
 
LOOP:
sei
rjmp LOOP
 
;Прерывание по фронту на ноге 4
EXT_INT:
cli
;если значение нулевые, то пропускает RUN, если нет, то переход в RUN
cpse r19, r21
rjmp RUN
;остановка таймера и запись значения счётчика
out TCCR0B, r16
clr r16
in r20, TCNT0H
in r19, TCNT0L
out TCNT0L, r16
out TCNT0H, r16
;если r17 был установлен в прерывании на 1 ноге, то пропуск
cpse r17, r18
rjmp LOOP
;если напряжения на 1 ноге нет, то пропуск
sbic pinb, 0
rjmp LOOP
;открыть ключ на ноге 3
ldi r16, (1<<PORTB1)
out PORTB, r16
clr r16
;переключение таймера на счёт вниз до обнуления
ldi r16, (1<<SM1)|(1<<SE)
out SMCR, r16
clr r16
sei
 
;запись значения в регистр сравнения
out OCR0AH, r20
out OCR0AL, r19
reti
 
;прерывание по фронту и спаду на ноге 1
PC_INT:
cli
;запись единицы для следующей проверки
ldi r17,0x01
;если на 1 ноге всё ещё висит напряжение, то возврат в основной цикл LOOP
sbic pinb, 0
rjmp LOOP
;если на первой ноге напряжения нет, то запуск таймера со счётом вверх
ldi r16, (1<<CS00)
out TCCR0B, r16
clr r16
sei
reti
 
;прерывание по достижении таймером 0
TIM_COMP_INT:
;открытие ключей на 3 и 6
ldi r16, (1<<PORTB3)|(1<<PORTB1)
out PORTB, r16
reti
 
;отсчёт задержки
RUN:
ldi r16, (1<<WGM02)|(0<<CS02)|(1<<CS01)|(1<<CS00)
out TCCR0B, r16
clr r16
rjmp LOOP
Добавлено через 16 минут
Немного ошибся. Переключения на счёт вниз нет. Таймер просто обнуляется, а ранее насчитанное значение сохранятся в регистр сравнения. Далее он считает и сравнивает результат, до достижения этого самого результата.

Добавлено через 3 часа 42 минуты
+К прошлому посту. Среда - Atmel studio 7.0
0
Эксперт CЭксперт С++
 Аватар для liv
5118 / 4558 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
25.02.2021, 13:40 5
DarkPtect, первая ошибка, которую заметил: где инициализация вершины стека?
Assembler
1
2
3
4
5
START:
    ldi     r16, high(RAMEND) ;to top of RAM
    out     SPH, r16
    ldi     r16, low(RAMEND)
    out     SPL, r16
Добавлено через 1 час 3 минуты
Еще непонятные моменты:
2) Разрешение прерывания таймера по переполнению, а вектора отработки нет. Куда попадет?
Assembler
1
2
ldi     r16, (1<<OCIE0A)|(1<<TOIE0)
out     TIMSK0, r16
3) Что это за манипуляция с регистром SMCR? Это регистр Sleep mode, а не регистр таймера!
Assembler
1
2
ldi     r16, (1<<SM1)|(1<<SE)
out     SMCR, r16
3) регистр r7 устанавливается в PC_INT, но нигде не сбрасуется. Так и надо?
О переходах из прерываниях в основной цикл, постоянных cli/sei, обнулениях регистра я уже молчу. Не ошибка, но режет глаз
0
109 / 81 / 37
Регистрация: 13.01.2016
Сообщений: 409
25.02.2021, 22:45  [ТС] 6
1) Для чего это требуется, если не сложно, то разъясните или скиньте литературу, потому что я в программировании МК Алёша. Лучше прям физический смысл этого.
2) Прерывание по переполнению не требуется, при работе в штатном режиме таймер переполнятся не будет. Работа внештатном режиме не предусмотрена.
3) МК переходи в режим sleep после первого внешнего прерывания по 4 ноге.
4) Регистр r17 служит для проверки, поэтому это нормально.

Подправлю по вашим замечаниям и попробую.
Опять же, помечу, что при работе не со сброшенным резетом всё работает хорошо, да, программа требует доработок, но она функционирует.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,423
Записей в блоге: 2
26.02.2021, 00:31 7
не 17
16 часто очищается.
0
109 / 81 / 37
Регистрация: 13.01.2016
Сообщений: 409
26.02.2021, 08:08  [ТС] 8
Ну, кстати, по инициализации стека спасибо огромное. Теперь, действительно, у мк начальное состояние строго определено и работать стало легче. Однако, пин с reset всё равно прыгает туда-сюда. гляну осциллом, чтобы точно знать прыгает ли сам порт или наводится помеха
0
1182 / 657 / 113
Регистрация: 15.05.2012
Сообщений: 4,063
26.02.2021, 09:17 9
Assembler
1
2
3
;открыть ключ на ноге 3
ldi r16, (1<<PORTB1)
out PORTB, r16
Нафига весь порт перерисовывать. Есть изумительные команды sbi и cbi.

Добавлено через 3 минуты
Assembler
1
2
3
4
;3 и 6 ноги - [B]выходы с открытым стоком[/B]
ldi r16, (1<<DDB3)|(1<<DDB1)
out DDRB, r16
clr r16
Разве?
0
 Аватар для Voland_
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
26.02.2021, 11:56 10
..."cli/sei" в прерываниях применять не надо (в вашем случае). Проблема не большая, но... Может, имеет смысл написать программу на Си? Размер получится, скорее всего меньше и эффективнее. А самое главное - не будет иметь ошибок, которые вы уже обсудили.
0
109 / 81 / 37
Регистрация: 13.01.2016
Сообщений: 409
26.02.2021, 13:38  [ТС] 11
cli и sei я расставил везде, где только можно, потому что планировались различные ситуации, когда контроллер выходит из прерываний не по их окончании, а через метку, в таком случае флаги сами не устанавливались. Программа тоже менялась и на момент её написания проще было поставить везде эти штуки.

Ещё заметил такую штуку:
Работа осуществляется на напряжении 3,3 В. Управляющая команда 5 В.
При подаче управляющей команды на порты, которые должны её принимать, на ноге с RESETом напряжение стабилизируется (но только на то время, пока присутствует команда) и при этом уровень становится порядка 4 В.
0
Эксперт по электронике
6049 / 2758 / 292
Регистрация: 28.10.2011
Сообщений: 10,449
Записей в блоге: 6
26.02.2021, 14:12 12
Цитата Сообщение от DarkPtect Посмотреть сообщение
контроллер выходит из прерываний не по их окончании, а через метку
Про стек ничего не слышали?
Не слышали что в прерываниях нужно сохранять/восстанавливать используемые регистры? Используйте лучше ЯВУ. Меньше вероятности допустить ошибку.
0
1182 / 657 / 113
Регистрация: 15.05.2012
Сообщений: 4,063
26.02.2021, 14:45 13
Цитата Сообщение от DarkPtect Посмотреть сообщение
штуки
Всё встало на свои места.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2021, 14:45
Помогаю со студенческими работами здесь

как подключить Attiny+SD?
приветы! требуется связать Attiny84 с SD картой на чтение/запись FAT16/FAT32 помогите советом или сырцом нашел либу на...

как правильно принять DMX сигнал на Attiny?
Здравствуйте, друзья. Возникла необходимость создания светодиодного RGBW диммера/стробоскопа, управляемого по протоколу DMX. Светодиоды...

Reset PC - как выполнить?
Kak sdelat Reset PC?

как сделать Reset
Dim n1, n2, rez As Integer n1 = TextBox1.Text n2 = TextBox2.Text rez = n1 - n2 TextBox3.Text = rez ...

Как делать CMOS reset?
С подключенным питанием или без? Что будет если замкнуть два пина подольше чем задумалось? Как вставлять батарейку обратно?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
Разработка кроссплатформен­­­­ного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru