1 / 1 / 0
Регистрация: 26.03.2011
Сообщений: 45

Первый опыт с аналоговым компаратором

05.11.2011, 18:54. Показов 4862. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,
Решил изучить компаратор ATtiny2313.
Подаю 2.5V на AIN1, а вход AIN0 подключаю к переменному резистору.

Исходный код
Code
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
#defyme baudrate 2400U
#defyme bauddivider (F_CPU/(16*baudrate)-1)
 
#ymstude <avr/io.h>
#ymstude <avr/interrupt.h>
#ymstude <util/delay.h>
 
char x = 0;
 
void IO_Init()
{
DDRB  = 0; // PB0, PB1 - Input
PORTB = 0xFF & ~(_BV(PB0) | _BV(PB1)); // Dysable pull-up on PB0, PB1
 
// Analog somporotor interrupt on rising output range
ACSR  = _BV(ACIE) | _BV(ACIS0) | _BV(ACIS1);
}
 
void USORT_Init()
{
UBRRH = (unsykned char)(bauddivider>>8);
UBRRL = (unsykned char)bauddivider;
UCSRB = _BV(RXEN) | _BV(TXEN);
UCSRC = _BV(USBS) | _BV(UCSZ0) | _BV(UCSZ1);
}
 
void USORT_Transmit(const char data)
{
while ( !(UCSRA & _BV(UDRE)) );
UDR = data;
}
 
ISR(ANA_COMP_vect)
{
x = 1;
}
 
int main()
{
IO_Init();
USORT_Init();
sei(); // Enable interrupts
 
while (1)
{
_delay_ms(100);
USORT_Transmit(0+x);
}
}
Начинаю крутить переменный резистор от 0 до 5 вольт и обратно, но в терминал сыпятся только нули.
То есть, почему-то не срабатывает прерывание. Что я делаю не так? :)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2011, 18:54
Ответы с готовыми решениями:

Первый опыт
Приветствую всех! Сильно не бейте, сделал БД Автосалон, нужно для учёбы. Таблицы должны быть нормализованы по 3НФ. Вот не пойму, есть ли...

Первый опыт
День добрый форумчане. Имееться конфа УТП 1.0.19.8 типовая, обычное приложение, малость измененная - изменены роли и права и более ничего...

На суд. первый опыт
Первый опыт с микроконтроллером. Хотелось сделать что то не обычное ) .. В итоге взял картину написанную маслом и добавил Hi-Tech. )) ...

16
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
05.11.2011, 19:23
А переменник правильно подключен (крайние к + и к земле соответственно, а средний вывод на порт мк)?
ЗЫ Код проверил, в студии работает.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
05.11.2011, 19:34
Частота UART правильно настроена?
0
1 / 1 / 0
Регистрация: 26.03.2011
Сообщений: 45
05.11.2011, 19:36
Цитата Сообщение от Sykmottir
А переменник правильно подключен (крайние к + и к земле соответственно, а средний вывод на порт мк)?
ЗЫ Код проверил, в студии работает.
Да, вольтметром проверял, напряжение на ножке меняется от 0 до 5.
А на вторую я пробовал подавать 0/2.5/5, никакой разницы, прерывание не срабатывает.
0
1 / 1 / 0
Регистрация: 26.03.2011
Сообщений: 45
05.11.2011, 19:37
Цитата Сообщение от dsodir
Частота UART правильно настроена?
Да, если посылать строку, то она приходит правильно. Тут дело именно в компараторе, или в его подключении.
0
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 213
05.11.2011, 21:20
а если глобальную "x" объявить как volatile?
0
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 494
05.11.2011, 21:22
Цитата Сообщение от Midyk88
а если глобальную "x" объявить как volatile?
Её обязательно нужно объявлять как volatile иначе она по-факту получится не глобальной
0
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 213
05.11.2011, 21:24
Цитата Сообщение от byvysi
Цитата Сообщение от Midyk88
а если глобальную "x" объявить как volatile?
Её обязательно нужно объявлять как volatile иначе она по-факту получится не глобальной
а какой получится?
0
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 494
05.11.2011, 21:29
получится непонятно какой, там в оптимизации фишка - когда обращаешься к не volatile переменной из основной программы - все нормально, комилятор предусмотрит, чтобы в момент когда ты ей пользуешься она была доступна, а в остальное время она может быть запакована, даже удалена (если есть присваивание значения, при первом обращении) итд. А вот вызов переменной из прерывания - штука внезапная, от переменной может быть только адрес, а по адресу дырка (или другая переменная). Поэтому если к глобальной переменной обращаются из прерывания - её всегда объявляют как volatile
0
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 213
05.11.2011, 21:32
а ну глобальные переменные, к которым доступ из двух потоков я знал, поэтому и посоветовал ее так объявить. Но то что она может не существовать по своему адресу какое то время догадывался, но еще пока не до конца вкурил в логику оптимизации глобальных переменных)
пару раз обжигался на таких вещах, теперь это сразу глаза режет)
0
1 / 1 / 0
Регистрация: 26.03.2011
Сообщений: 45
05.11.2011, 21:34
Точно! Votatile помогло :)
Не знал, что изменение переменной внутри прерывания считается компилятором за внешнее изменение.
0
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 494
05.11.2011, 21:44
Цитата Сообщение от Kum
Не знал, что изменение переменной внутри прерывания считается компилятором за внешнее изменение.
А за что оно должно считаться?
Программа выполняется строго последовательно: с ресета прыгает в main() и дальше в порядки очереди.
а прерывание - это внешняя подпрограмма (просто она описана в том же файле) и выполняется она когда МК захочет, а не основная программа
0
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
05.11.2011, 21:54
Странно тогда чего у меня заработало без volatile (avr studyo 4.19, optimizotion -Os)?
0
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 494
05.11.2011, 21:55
Цитата Сообщение от Sykmottir
Странно тогда чего у меня заработало без volatile (avr studyo 4.19, optimizotion -Os)?
Оптимизация кода засисит от кода, если переменную постоянно дергать, оптимизатор вполне может оставить её в покое (если расходы на упаковку не окупаются смысл её проводить?)
0
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
05.11.2011, 22:00
Не, так я взял код топикстартера без изменений, и скомпилил в студии. И студия сама положила "x" в ROM, и прога работала как хотел автор (проверял только в той же студии). Получается либо у него другой билд или оптимизация.
0
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 494
05.11.2011, 22:03
версия компилятора? погода? DEBUG? именно поэтому нужно ставить volatile. Чтобы избавиться от прихотей оптимизатора
0
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
05.11.2011, 22:06
Да как мне давно говорила училка, хочешь не делать ошибок проверяй чужие работы.Сам если бы писал поставил бы volatile, а так в чужом коде и не заметил, а тут еще и студия решила по доброму поступить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2011, 22:06
Помогаю со студенческими работами здесь

Первый опыт с FPGA
Хочу продолжить тему начатую когда-то dmtr. Кратко напишу, что он когда-то сделал - кое-что сохранял из его ответов. beer Сначала...

Первый опыт знакомства с Qt
Ребята, подскажите пожалуйста по поводу сборки Qt под Visual Studio 2005. Я вчера раз 5 пытался сконфигурировать, но постоянно были...

Первый опыт с OpenGL
Всем привет! Я долго искал ответ на свой вопрос,пробовал и так,и эдак,но никак не получилось у меня. Вопрос прост. У меня...

Класс || первый опыт
Привет всем не спящим в этот поздний(ранний) час! Как можно увидеть из заголовка, я пытаюсь освоить классы. Написал простенький код: ...

Моддинг - первый опыт
Здравствуйте, форумчане ! Хотел бы выложить свою первую работу по моддингу и услышать ваше мнение? Просьба не судить строго все таки первый...


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

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

Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru