Слишком низкий уровень напряжения на INT0 у Tiny2313

Обсуждаем контроллеры компании Atmel.
JI0ku
Родился
Сообщения: 14
Зарегистрирован: Чт июн 18, 2015 17:43:47

Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение JI0ku »

День добрый, товарищи.

Столкнулся с такой проблемой: использую ножку INT0 на Tiny2313 как вход. К ней припаяна кнопка на землю. То есть,
DDRD=0x00;
PORTD=0b00000100;
Но после заливки кода и запитывания МК на ножке всего 1,17В. Пробовал разные МК, результат тот же.

Использую Atmel Studio 6.2 и Дудку 3.3.

помогите, пожалуйста.
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение Z_h_e »

Измерьте напряжение на ноге у контроллера не впаянного в плату. Затем помойте плату, поменяйте кнопку, найдите соплю и устраните ее и т.д.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2183
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение watchmaker »

CKOUT не включен?
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение rxstart1 »

Все правильно, командой PORTD=0b00000100; Вы подтягиваете напряжение через внутренний подтягивающий резистор, и на нем происходит падение напряжения. Вы чего хотите, пишите конкретнее, насколько я Вас понял кнопка считается нажатой, если на порт падает 0 :shock:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение mixon46 »

так и происходит. вы ввели порт на вход а так же подтянули внутренний резистор. кнопка на землю. по падению напряжения до нуля кнопка считается нажатой. это ну очень просто. я и то не очень то понимая языка си понимаю как оно действует в железе
Реклама
JI0ku
Родился
Сообщения: 14
Зарегистрирован: Чт июн 18, 2015 17:43:47

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение JI0ku »

1. Измеряю на контактной макетной плате, так что сопли и кривая пайка исключены.
2. SKOUT включен по умолчанию. Может ли он мешать?;
3. В том-то и дело, что кнопка не срабатывает. То есть, при падении с 1,17 до 0 В прерывание не происходит. Ранее я помню, что при включении подтягивающего резистора, потенциал на ножке был примерно равен VCC. А тут, сколько на питание МК ни подавай (3,3-5В), на ножке стабильно 1,17В.

Если в целом, этот МК через порт B управляет сдвиговыми резисторами. Порт D чисто для кнопки. Кнопка работает исправно, кстати. Но надо, чтоб ещё и прерывание работало.
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение akl »

JI0ku писал(а):SKOUT включен по умолчанию. Может ли он мешать?;
Если CKOUT разрешён, то он будет мешать работе лапы PD2/INT0/CKOUT/XCK, но для этого FUSE-бит CKOUT нужно запрограммировать.
JI0ku
Родился
Сообщения: 14
Зарегистрирован: Чт июн 18, 2015 17:43:47

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение JI0ku »

akl писал(а):
JI0ku писал(а):SKOUT включен по умолчанию. Может ли он мешать?;
Если CKOUT разрешён, то он будет мешать работе лапы PD2/INT0/CKOUT/XCK, но для этого FUSE-бит CKOUT нужно запрограммировать.
Только что попробовал с запрещённым и разрешённым SKOUT. Результат идентичен. :(
Последний раз редактировалось aen Пт июн 19, 2015 12:59:50, всего редактировалось 1 раз.
Причина: Нарушение Правил форума п. 2.7
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение Z_h_e »

С питанием то все нормально? Поэксперементируйте с другими пинами. Ваш вольтметр исправен?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение YS »

Я бы для начала попробовал с внешним подтягивающим резистором.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
JI0ku
Родился
Сообщения: 14
Зарегистрирован: Чт июн 18, 2015 17:43:47

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение JI0ku »

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

Я мало что понимаю, но думаю, что где-то программная ошибка, так как если её сделать выходом, даёт стабильные 5В.
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2183
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение watchmaker »

А если не вводить подтяжку в чипе, а подтянуть вручную на плюс резистором порядка 10 кОм?
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Rtmip
Держит паяльник хвостом
Сообщения: 963
Зарегистрирован: Чт апр 03, 2014 23:16:55
Откуда: Россия

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение Rtmip »

JI0ku писал(а):...Я мало что понимаю, но думаю, что где-то программная ошибка, так как если её сделать выходом, даёт стабильные 5В.
Очень возможно. Покажите уже свою программу?
JI0ku
Родился
Сообщения: 14
Зарегистрирован: Чт июн 18, 2015 17:43:47

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение JI0ku »

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

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int s;
#define d1 PORTB |=_BV(2); PORTB |=_BV(0); PORTB &=~_BV(0); PORTB &=~_BV(2);
#define d0 PORTB |=_BV(0); PORTB &=~_BV(0);
#define lch PORTB |=_BV(1); PORTB &=~_BV(1);

ISR(INT0_vect) {
	cli();
	_delay_ms(10);
	if ((PIND&(1<<2))==0)
	{
		if (s>1)
		{
			s=0;
		} 
		else
		{
			s++;
		}
	}
	sei();
}

int main(void)
{
	s=0;
	DDRB=0b00000111;
	DDRD=0b11110111;
	PORTD=0b00001100;
	GIMSK=(1<<INT0);
	MCUCR=(0<<ISC00)|(1<<ISC01);
	sei();
	chk: switch (s) {
		case 0: goto pl1;
		case 1: goto sh1;
               }
}
Вроде, ничего сложного.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение YS »

А куда ведут goto? В switch, кстати, не хватает default. И цикла я тоже в явном виде не вижу, код может вылететь за пределы программы (будет остановлен заглушкой, которую по-умолчанию ставит AVR-GCC).

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

Кстати, рекомендую ткнуться в ножку не мультиметром, а осциллографом. Что-то мне подсказывает, что есть шанс увидеть интересное.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Rtmip
Держит паяльник хвостом
Сообщения: 963
Зарегистрирован: Чт апр 03, 2014 23:16:55
Откуда: Россия

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение Rtmip »

JI0ku писал(а):...использую ножку INT0 на Tiny2313 как вход. К ней припаяна кнопка на землю. То есть,
DDRD=0x00;
PORTD=0b00000100;...
Да, тут PD2 как вход.
JI0ku писал(а):DDRD=0b11110111;
PORTD=0b00001100;
А тут как выход с подтяжкой, зачем так?
И к этому пину еще и кнопку на землю? :dont_know:
------------------------------------------------------------------------------------------------------------------------
YS, приветствую! :beer:
Он вроде CKOUT запретил.
Какая там еще ожидается интрига по этому пину? :)
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение YS »

YS, приветствую!
Здравствуйте, здравствуйте! :) :beer:
Какая там еще ожидается интрига по этому пину?
Мне было лень вдумчиво анализировать код; я поглядел мельком, и мне показалось, что из-за потенциального вылета за пределы основной программы (и последующего сброса) на ножке могут начаться чудеса с переключениями.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18558
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение ARV »

никакого сброса не бывает: после main следует cli и бесконечный jmp сам на себя.
а вот goto с неопределенными метками вообще не скомпилируется, т.е. эта программа в принципе не даст hex-а для прошивки. что там топикстартер прошивает в свой МК и что получает после этого - загадка
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение YS »

никакого сброса не бывает: после main следует cli и бесконечный jmp сам на себя.
Ну, в AVR-GCC это точно так. А вот насчет CVAVR не знаю.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18558
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313

Сообщение ARV »

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

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»