Страница 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

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;
А тут как выход с подтяжкой, зачем так?
И к этому пину еще и кнопку на землю?

------------------------------------------------------------------------------------------------------------------------
YS, приветствую!
Он вроде CKOUT запретил.
Какая там еще ожидается интрига по этому пину?

Re: Слишком низкий уровень напряжения на INT0 у Tiny2313
Добавлено: Вс июн 21, 2015 15:33:04
YS
YS, приветствую!
Здравствуйте, здравствуйте!
Какая там еще ожидается интрига по этому пину?
Мне было лень вдумчиво анализировать код; я поглядел мельком, и мне показалось, что из-за потенциального вылета за пределы основной программы (и последующего сброса) на ножке могут начаться чудеса с переключениями.
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-овский