Tiny 13: Не работают кнопки.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение 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);
     }   
    }
 }
}  
Фьюзы не трогал. Как были, так и остались.
Какие могут быть предположения?
Вложения
1.JPG
Вот лок фьюзы
(7.54 КБ) 769 скачиваний
2.JPG
Вот остальные фьюзы
(12.39 КБ) 734 скачивания
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

(PINB.3 != 0x00 & PINB.4 != 0x00)
ошибочка здесь. надо &&
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

ARV писал(а):

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

(PINB.3 != 0x00 & PINB.4 != 0x00)
ошибочка здесь. надо &&
В чем отличие && от & посмотрите в "Си для МК"
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение Seleron »

Если бы все было так просто... :( Кусок программы-то я вырезал с работающего проекта. Поменял я все - не работает... В упор не пойму почему. Попробую припаять мк к плате. Если не получится после этого - возьму другую 13-ую тиньку.
Реклама
Эиком - электронные компоненты и радиодетали
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение 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 кнопок сразу.
Вроде рабочий код.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение 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!
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Попробуй мой вариант. Или только ОДНУ кнопку и светодиод. Кнопку конденсатором 10-50 нФ зашунтируй от дребезга и к входу подключи резистором 200-500 Ом и вход подтяни резистором 10 кОМ к питанию.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43

Сообщение delay »

Здесь я не вижу подтягивающих резисторов на входа. А вообще подобную программу прекрасно можно отладить в AVR Studio. Когда будете уверены в рабочей программе, примите меры против дребезга и опробуете в кристале.
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

delay писал(а):Здесь я не вижу подтягивающих резисторов на входа.
Вот они

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

State4=P State3=P
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43

Сообщение delay »

В комментарии то вижу, а в коде нет.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение Seleron »

Косяк в порте В3. Прозвонил. Соплей нет. Фишка в том, что на ноге РВ4 единца по умолчанию (при питании 3,3В на ней около трех), а на РВ3 - хрень (вместо трех где-то 1,5 В). Может косяк в пуллапе?
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

От платы отсоедини ее и замерь напругу.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43

Сообщение delay »

Вот проектик. Работает и в AVR Studio и в кристале.
Вложения
knpki.rar
(17.12 КБ) 336 скачиваний
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение Seleron »

Отогнул ножки В3 и В4. На обоих 3V. Да вот только работает выход В3 как триггер. Один раз заземлил и все. Хоть на нем после этого опять 3 Вольта, все равно светик горит. На В4 опять же все нормально.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43

Сообщение delay »

Резисторы со светодиодами стоят? В AVR STUDIO отладили прошивку, которую пробуете?
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение Seleron »

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

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

Сообщение Yellow Tiger »

Seleron писал(а):... Если на ножки РВ3 или РВ4 ноль подать (коротить проводом на землю), LED чуть ярче светит. ...
Если яркость возрастает, значит, он до того не горел, а горел/гас на хорошей скорости - так сказать, непрошенная ШИМ получалась. Похоже на то, что какое-то прерывание постоянно возникает - посмотрите на этот выход осциллом, чтобы не гадать. А что с глазеющей собакой у вас? Если WD все время сбрасывает м/к, как раз такое непрошенное мигание и может наблюдаться.
Схемы не вижу (да и программа - вся ли?), но если "PORTB.1=1;" зажигает светодиод, то ооочень похоже, что здесь глазеющая собака порылась.
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение 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, а от нее уже все остальные кнопки и сам МК. Хотя ХЗ что на самом деле не так...
Вложения
tinyProg.GIF
Плата расширения для tiny.
(Зеркальная)
(49.96 КБ) 630 скачиваний
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43

Сообщение delay »

Хорошо было бы посмотреть на точную схему, по которой вы включаете, а не гадать по плате, что вы делали. И еще было бы неплохо, если бы вы прочли состояние фьюзов и показали бы список.
ps. Не забываете ли вы отключить шлейф программатора? И не забудьте про ошибку, которую указал ARV (&&).
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 18, 2007 19:18:49
Откуда: Volgograd

Сообщение Seleron »

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

Вернуться в «Микроконтроллеры и ПЛИС»