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

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

(PINB.3 != 0x00 & PINB.4 != 0x00)
ошибочка здесь. надо &&

Добавлено: Пт окт 17, 2008 10:57:26
tych
ARV писал(а):

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

(PINB.3 != 0x00 & PINB.4 != 0x00)
ошибочка здесь. надо &&
В чем отличие && от & посмотрите в "Си для МК"

Добавлено: Сб окт 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. Вот такая борода... :)
ЗЫ :idea: Надо пробить, косяк это кнопки РВ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 писал(а):Здесь я не вижу подтягивающих резисторов на входа.
Вот они

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

State4=P State3=P

Добавлено: Сб окт 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, только программатор не менял. На плате расширения стоит только кондер на шине питания - такого бреда от него наврят ли дождешься. Программу менял во всех мыслимых формах - то моргают как попадя (на частоте выдержки, указанных в программе обработки кнопок), то еле-еле светят, загораясь на половину (опять же оба и опять же от любой кнопки не зависимо на какую кнопку я светик определил). Видать МК считает кнопки постоянно нажатыми. Естественно опять менял все и вся и уже не могу на ЭТО смотреть. :shock: Есть еще вариант - отдать знакомому поиграться. Может он чего путного скажет. В общем, нет слов - одни эмоции. :)))

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

Добавлено: Чт окт 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 (в инете схема есть). Теперь будем знать! Хотя подключал разок к отдельному питанию без программера. Но там, видимо, был косяк программы... :)))
Всем премного благодарен! :wink:
Пойду дальше постигать азы электроники. :)