Страница 1 из 3

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

Добавлено: Чт июн 18, 2015 17:49:38
JI0ku
День добрый, товарищи.

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

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

помогите, пожалуйста.

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

Добавлено: Чт июн 18, 2015 20:10:15
Z_h_e
Измерьте напряжение на ноге у контроллера не впаянного в плату. Затем помойте плату, поменяйте кнопку, найдите соплю и устраните ее и т.д.

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

Добавлено: Чт июн 18, 2015 20:32:36
watchmaker
CKOUT не включен?

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

Добавлено: Чт июн 18, 2015 20:33:21
rxstart1
Все правильно, командой PORTD=0b00000100; Вы подтягиваете напряжение через внутренний подтягивающий резистор, и на нем происходит падение напряжения. Вы чего хотите, пишите конкретнее, насколько я Вас понял кнопка считается нажатой, если на порт падает 0 :shock:

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

Добавлено: Чт июн 18, 2015 21:12:03
mixon46
так и происходит. вы ввели порт на вход а так же подтянули внутренний резистор. кнопка на землю. по падению напряжения до нуля кнопка считается нажатой. это ну очень просто. я и то не очень то понимая языка си понимаю как оно действует в железе

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

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

Если в целом, этот МК через порт B управляет сдвиговыми резисторами. Порт D чисто для кнопки. Кнопка работает исправно, кстати. Но надо, чтоб ещё и прерывание работало.

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

Добавлено: Пт июн 19, 2015 11:15:33
akl
JI0ku писал(а):SKOUT включен по умолчанию. Может ли он мешать?;
Если CKOUT разрешён, то он будет мешать работе лапы PD2/INT0/CKOUT/XCK, но для этого FUSE-бит CKOUT нужно запрограммировать.

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

Добавлено: Пт июн 19, 2015 12:00:19
JI0ku
akl писал(а):
JI0ku писал(а):SKOUT включен по умолчанию. Может ли он мешать?;
Если CKOUT разрешён, то он будет мешать работе лапы PD2/INT0/CKOUT/XCK, но для этого FUSE-бит CKOUT нужно запрограммировать.
Только что попробовал с запрещённым и разрешённым SKOUT. Результат идентичен. :(

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

Добавлено: Пт июн 19, 2015 16:55:22
Z_h_e
С питанием то все нормально? Поэксперементируйте с другими пинами. Ваш вольтметр исправен?

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

Добавлено: Пт июн 19, 2015 17:12:30
YS
Я бы для начала попробовал с внешним подтягивающим резистором.

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

Добавлено: Пт июн 19, 2015 22:15:34
JI0ku
Ставил подтягивающий внешний резистор - толку нет.
Вольтметр исправен, кроме него светодиодами проверял - не светят.

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

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

Добавлено: Пт июн 19, 2015 22:58:58
watchmaker
А если не вводить подтяжку в чипе, а подтянуть вручную на плюс резистором порядка 10 кОм?

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

Добавлено: Сб июн 20, 2015 01:31:12
Rtmip
JI0ku писал(а):...Я мало что понимаю, но думаю, что где-то программная ошибка, так как если её сделать выходом, даёт стабильные 5В.
Очень возможно. Покажите уже свою программу?

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

Добавлено: Сб июн 20, 2015 08:41:43
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;
               }
}
Вроде, ничего сложного.

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

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

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

Кстати, рекомендую ткнуться в ножку не мультиметром, а осциллографом. Что-то мне подсказывает, что есть шанс увидеть интересное.

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

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

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

Добавлено: Вс июн 21, 2015 15:33:04
YS
YS, приветствую!
Здравствуйте, здравствуйте! :) :beer:
Какая там еще ожидается интрига по этому пину?
Мне было лень вдумчиво анализировать код; я поглядел мельком, и мне показалось, что из-за потенциального вылета за пределы основной программы (и последующего сброса) на ножке могут начаться чудеса с переключениями.

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

Добавлено: Вс июн 21, 2015 17:26:56
ARV
никакого сброса не бывает: после main следует cli и бесконечный jmp сам на себя.
а вот goto с неопределенными метками вообще не скомпилируется, т.е. эта программа в принципе не даст hex-а для прошивки. что там топикстартер прошивает в свой МК и что получает после этого - загадка

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

Добавлено: Вс июн 21, 2015 18:17:59
YS
никакого сброса не бывает: после main следует cli и бесконечный jmp сам на себя.
Ну, в AVR-GCC это точно так. А вот насчет CVAVR не знаю.

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

Добавлено: Вс июн 21, 2015 18:28:21
ARV
исходник был WinAVR-овский