Страница 1 из 2
Tiny 13: Не работают кнопки.
Добавлено: Пт окт 17, 2008 09:52:05
Seleron
День дорбрый всем Котам! Мучаюсь с одной схемой на tiny 13. Схема проста - две кнопки (PB3 и PB4) регулируют частоту на одном выходе (PB1). Столкнулся с проблемой, что кнопки вообще не действуют. Микруха в SO-8, тупо приложил к плате программатора, да прижал прищепкой. Долго мучился с программными выдержками времени для антидребезга (думал в них проблема). Потом плюнул и начал без них просто землить ноги перемычкой - ни че го...

Прикинул, что может ножки внутри надломились - сделал их выходом и вывел на них единицу. Все работает, светодиоды светят. Уже не знаю в чем дело. Вот простешая программа, которая тоже не катит.
Код: Выделить всё
#include <tiny13>
#include <delay>
#include <stdio>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
// State5=T State4=P State3=P State2=T State1=0 State0=T
PORTB=0x18;
DDRB=0x02;
while (1)
{
PORTB.1=1;
delay_ms(100);
PORTB.1=0;
delay_ms(100);
while (PINB.3 != 0x00 & PINB.4 != 0x00); // Poka ne najata knopka
if (PINB.3 == 0x00)
{
delay_ms(1);
if (PINB.3 == 0x00)
{
PORTB.1=0;
delay_ms(20);
}
}
if (PINB.4 == 0x00)
{
delay_ms(1);
if (PINB.4 == 0x00)
{
PORTB.1=1;
delay_ms(20);
}
}
}
}
Фьюзы не трогал. Как были, так и остались.
Какие могут быть предположения?
Добавлено: Пт окт 17, 2008 10:11:25
ARV
Добавлено: Пт окт 17, 2008 10:57:26
tych
ARV писал(а):ошибочка здесь. надо
&&
В чем отличие
&& от
& посмотрите в
"Си для МК"
Добавлено: Сб окт 18, 2008 12:26:58
Seleron
Если бы все было так просто...

Кусок программы-то я вырезал с
работающего проекта. Поменял я все - не работает... В упор не пойму почему. Попробую припаять мк к плате. Если не получится после этого - возьму другую 13-ую тиньку.
Добавлено: Сб окт 18, 2008 12:36:52
tych
Дак упрости прогу до отражения уровня на ножке кнопки на другую ногу со светодиодом да проверь.
Или вот так попробовать
Код: Выделить всё
while (1) {
if (!PINB.3)
{
delay_ms(20);
if (!PINB.3)
{
PORTB.1=0;
}
}
else{
if (!PINB.4)
{
delay_ms(20);
if (!PINB.4)
{
PORTB.1=1;
}
}
}
}
else - убирает неопределенность при нажатии 2 кнопок сразу.
Вроде рабочий код.
Добавлено: Сб окт 18, 2008 13:18:43
Seleron
Упростил!
Код: Выделить всё
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In
// State5=T State4=P State3=P State2=0 State1=0 State0=T PORTB=0x18;
DDRB=0x06;
while (1)
{
PORTB.1=0;
PORTB.2=0;
if (PINB.3 == 0x00)
{
PORTB.1=1;
}
if (PINB.4 == 0x00)
{
PORTB.2=1;
}
}
}
Не знаю в чем косяк, но LED на PB1 горит постоянно. Если на ножки РВ3 или РВ4 ноль подать (коротить проводом на землю), LED чуть ярче светит. А с РВ2 все нормально, светит тока при нуле на РВ4. Вот такая борода...

ЗЫ

Надо пробить, косяк это кнопки РВ3 или выхода РВ1!
Добавлено: Сб окт 18, 2008 13:40:17
tych
Попробуй мой вариант. Или только ОДНУ кнопку и светодиод. Кнопку конденсатором 10-50 нФ зашунтируй от дребезга и к входу подключи резистором 200-500 Ом и вход подтяни резистором 10 кОМ к питанию.
Добавлено: Сб окт 18, 2008 13:55:21
delay
Здесь я не вижу подтягивающих резисторов на входа. А вообще подобную программу прекрасно можно отладить в AVR Studio. Когда будете уверены в рабочей программе, примите меры против дребезга и опробуете в кристале.
Добавлено: Сб окт 18, 2008 13:58:56
tych
delay писал(а):Здесь я не вижу подтягивающих резисторов на входа.
Вот они
Добавлено: Сб окт 18, 2008 14:04:16
delay
В комментарии то вижу, а в коде нет.
Добавлено: Сб окт 18, 2008 14:06:32
Seleron
Косяк в порте В3. Прозвонил. Соплей нет. Фишка в том, что на ноге РВ4 единца по умолчанию (при питании 3,3В на ней около трех), а на РВ3 - хрень (вместо трех где-то 1,5 В). Может косяк в пуллапе?
Добавлено: Сб окт 18, 2008 14:09:08
tych
От платы отсоедини ее и замерь напругу.
Добавлено: Сб окт 18, 2008 14:44:02
delay
Вот проектик. Работает и в AVR Studio и в кристале.
Добавлено: Сб окт 18, 2008 16:02:16
Seleron
Отогнул ножки В3 и В4. На обоих 3V. Да вот только работает выход В3 как триггер. Один раз заземлил и все. Хоть на нем после этого опять 3 Вольта, все равно светик горит. На В4 опять же все нормально.
Добавлено: Сб окт 18, 2008 22:54:31
delay
Резисторы со светодиодами стоят? В AVR STUDIO отладили прошивку, которую пробуете?
Добавлено: Чт окт 23, 2008 21:05:23
Seleron
Всё! Идей больше нет. Мозг кипит - схема убрана подальше (так ее выкинуть хочецца...

). Пробовал и прошивку от
delay - моргает по неизвестному закону, жму на кнопку (любую) - светят оба. Перепробовал все, что в голову приходило. Менял МК, толку нет. Переустанавливал CVAVR, только программатор не менял. На плате расширения стоит только кондер на шине питания - такого бреда от него наврят ли дождешься. Программу менял во всех мыслимых формах - то моргают как попадя (на частоте выдержки, указанных в программе обработки кнопок), то еле-еле светят, загораясь на половину (опять же оба и опять же от любой кнопки не зависимо на какую кнопку я светик определил). Видать МК считает кнопки постоянно нажатыми. Естественно опять менял все и вся и уже не могу на
ЭТО смотреть.

Есть еще вариант - отдать знакомому поиграться. Может он чего путного скажет. В общем, нет слов - одни эмоции.
PS А по поводу резюков пуллапнутых - в проге они есть. Просто когда ее сюда кидаешь на странице их не видно почему-то (бывало, что при перетаскивании проги часть ее вообще съедалась). А светики стоят на макетке, специально для МК сделанной. Стоят в обнимку с резисторами в 1кОм. Живут они уже долго и счастливо, и помирать не собираются.

Добавлено: Чт окт 23, 2008 22:03:45
Yellow Tiger
Seleron писал(а):... Если на ножки РВ3 или РВ4 ноль подать (коротить проводом на землю), LED чуть ярче светит. ...
Если яркость возрастает, значит, он до того не горел, а горел/гас на хорошей скорости - так сказать, непрошенная ШИМ получалась. Похоже на то, что какое-то прерывание постоянно возникает - посмотрите на этот выход осциллом, чтобы не гадать. А что с глазеющей собакой у вас? Если WD все время сбрасывает м/к, как раз такое непрошенное мигание и может наблюдаться.
Схемы не вижу (да и программа - вся ли?), но если "PORTB.1=1;" зажигает светодиод, то ооочень похоже, что здесь глазеющая собака порылась.
Добавлено: Пт окт 24, 2008 08:57:23
Seleron
WD спит, спал и будет спать. Проги ведь я писал наипростейшие для нахождения причин неправильной работы. ШИМ, WD и прочие функции слил сразу. Пробовал прогу от
delay
Код: Выделить всё
#include <tiny13>
#include <delay>
void main(void)
{
PORTB=0x18;
DDRB=0x06;
while (1)
{
if (!PINB.3)
{
delay_ms(20);
if (!PINB.3)
PORTB.1 = 1;
}
else{
PORTB.1 = 0;
if (!PINB.4)
{
delay_ms(20);
if (!PINB.4)
PORTB.2 = 1;
}
else
PORTB.2 = 0;
}
};
}
Сам писал еще
Код: Выделить всё
while(1)
{
PORTB.1=0;
PORTB.2=0;
while (PINB.3 != 0x00 & PINB.4 != 0x00);
if (PINB.3 == 0x00)
{
delay_ms(4);
if (PINB.3 == 0x00)
{
PORTB.1=1;
delay_ms(20);
}
}
if (PINB.4 == 0x00)
{
delay_ms(4);
if (PINB.4 == 0x00)
{
PORTB.2=1;
delay_ms(20);
}
}
Пробовал упрощать, без задержек ставил, писал обнуление портов в цикле do {} - результат один и тот же. По поведению МК предполагаю, что глючит нога B.3, а от нее уже все остальные кнопки и сам МК. Хотя ХЗ что на самом деле не так...
Добавлено: Пт окт 24, 2008 20:04:08
delay
Хорошо было бы посмотреть на точную схему, по которой вы включаете, а не гадать по плате, что вы делали. И еще было бы неплохо, если бы вы прочли состояние фьюзов и показали бы список.
ps. Не забываете ли вы отключить шлейф программатора? И не забудьте про ошибку, которую указал ARV (&&).
Добавлено: Ср окт 29, 2008 22:01:53
Seleron
Нашел таки причину!

Программатор, за ногу его, творил что-то с ногой РВ3. Ошибка, по-сути, ламерская - всегда питал МК от программатора при тесте. Раньше косяков не было, вот и надеялся, что он все порты отключает сам при окончании программирования. Кстати, программатор на меге8 собранный,
AVR / 89S совместимый с AVR910 (в инете схема есть). Теперь будем знать! Хотя подключал разок к отдельному питанию без программера. Но там, видимо, был косяк программы...
Всем премного благодарен!
Пойду дальше постигать азы электроники.
