кнопка на пин AIN1 вешает контроллер atmega328p

sasken
Offline
Зарегистрирован: 28.10.2015

Здравствуйте. подскажите, пожалуйста.

повесил кнопку на пин D7 atmega328p (+3.3v - резистор 10К - кнопка - земля, от резистора и кнопки идет на пин AIN1).

При нажатии кнопки все это вешает контроллер.

Возможно ли исправить ситуацию программно? т.е. сделать, что бы пин  AIN1 использовать как цифровой вход для кнопки.

b707
Offline
Зарегистрирован: 26.05.2017

Так какой пин то - 7 или ain1?

sasken
Offline
Зарегистрирован: 28.10.2015

пин PD7 он же AIN1 (негатив вход компаратора).

Вроде решение проблемы:

1. пин AIN0 настроить от опорного 1.1 вольт.

2. пин AIN1 оставить на кнопке как есть.

получается, что на выходе компаратора всегда 1, как только кнопка нажата и пин притянулся к земле, то выход компаратора изменит свое состояние на 0.
только как это описать программно?

RG22EM
Offline
Зарегистрирован: 27.08.2016

что-то вы замудрили, настройте пин на вход и читайте

pinMode(button_relay, INPUT_PULLUP);

void setRelay(){
  if (flag_button == 1 && digitalRead(button_relay) == 1){ // кнопка отжата
      delay(20);
      flag_button = 0;
  }
  if (flag_button == 0 && digitalRead(button_relay) == 0){ // кнопка нажата
      delay(20);
      flag_button = 1;
      digitalWrite(relay,!digitalRead(relay));
  }
}

 

sasken
Offline
Зарегистрирован: 28.10.2015

так я так и делаю. у меня несколько кнопок. есть экранчик tft.
все работает замечательно, все нажимается и все картинки идут как надо.
КРОМЕ ОДНОЙ КНОПКИ, которую я по дурости подключил к пину AIN1. при нажатии на эту кнопку у меня все мгновенно виснет.

p.s. у меня питание 3.3 вольт. резистор подтяжка кнопки 10К. ток на пин камня получается 0,33 мА. Может это много для пина компаратора?

nik182
Offline
Зарегистрирован: 04.05.2015

AIN1 нет такого входа, пока не активирован компаратор. Ни чем не отличается от других входов. Ресетить может только если он настроен как выход, на него подана единица и в этот момент его кнопкой притянуть к земле. Где программа?

sasken
Offline
Зарегистрирован: 28.10.2015

как это нет такого входа, если он же PD7, он же 7 пин адруины на атмега328 и он же AIN1 и компаратор все время включен по умолчанию.

Схема реально огромная. мне скинуть как кнопку подключил?
настроен он как вход:
  pinMode(BUTTON1, INPUT);

RG22EM
Offline
Зарегистрирован: 27.08.2016

sasken пишет:

как это нет такого входа, если он же PD7, он же 7 пин адруины на атмега328 и он же AIN1 и компаратор все время включен по умолчанию.

Схема реально огромная. мне скинуть как кнопку подключил?
настроен он как вход:
  pinMode(BUTTON1, INPUT);

подтяните вверх, а кнопкой тяните на землю, заработает?

sasken
Offline
Зарегистрирован: 28.10.2015

У  меня так и сделано

 

кнопка настроена так:
  pinMode(BUTTON1, INPUT);

обработчик так:
 

if( digitalRead(BUTTON1) == LOW && AllWorkEnable && !button_state && ( ms - ms_button ) > 50 ){ // кнопка1 жмата
      button_state = true;
      ms_button = ms;
     delay(3000);
     StartWork();
   }
if( digitalRead(BUTTON1) == HIGH && AllWorkEnable && ( ms - ms_button ) > 50  ){ // кнопка1 НЕ жмата
      ms_button = ms;
      button_state = false;

   }

при нажатии кнопки 3х секунд не проходит, а все виснет сразу же. и это только с кнопкой на пине AIN1. переназначал на другие кнопки - все нормально, но нажимая на ту, которая идет на AIN1 - все сразу виснет

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

sasken пишет:

как это нет такого входа, если он же PD7, он же 7 пин адруины на атмега328 и он же AIN1 и компаратор все время включен по умолчанию.

По умолчанию компаратор выключен если только вы сами его не включили. Проверьте бит ACD в регистре ACSR. Единица означает что выключен.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

sasken пишет:

 все виснет сразу же. и это только с кнопкой на пине AIN1. переназначал на другие кнопки - все нормально, но нажимая на ту, которая идет на AIN1 - все сразу виснет

Может просто контроллер битый? На другом не пробовали?

sasken
Offline
Зарегистрирован: 28.10.2015

хмммм. я его сейчас принудительно выключаю:
void setup() {
  ACSR &= ~(1 << ACIE);
  ACSR |= (1 << ADC);

 

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

nik182
Offline
Зарегистрирован: 04.05.2015

Замкните кнопку миллиамперметром и посмотрите ток. Согласно Вашей схемы ток должен быть около 0.5 мА. Если больше, то ищите черепах. 

sasken
Offline
Зарегистрирован: 28.10.2015

nik182 пишет:

Замкните кнопку миллиамперметром и посмотрите ток. Согласно Вашей схемы ток должен быть около 0.5 мА. Если больше, то ищите черепах. 

замкнул. ток 0,32 мА. как и должен быть

nik182
Offline
Зарегистрирован: 04.05.2015

Таким током заресетить МК сложно. Если в программе нет никаких багов, ко скорее всего  битая МС.

sasken
Offline
Зарегистрирован: 28.10.2015

ну я уже тоже склоняюсь к мысли, что камушек битый. хотя купил в Чип_и_Дип, а не с али заказывал.

b707
Offline
Зарегистрирован: 26.05.2017

ну значит в коде что-то намудрили. Что включает пин 7 (по программе)? - проверяйте не может ли оно  завесить МК

nik182
Offline
Зарегистрирован: 04.05.2015

Проверьте напряжение на ноге reset при нажимании кнопки?

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

ну значит в коде что-то намудрили. Что включает пин 7 (по программе)? - проверяйте не может ли оно  завесить МК

нифига он не включает. он обьявлен как :
 

#define BUTTON1 7 // пин кнопочки 1
#define BUTTON2 4 // пин кнопочки 2
#define BUTTON3 3 // пин кнопочки 2

просто пин кнопочки.
посмотрите по обработчику. там стоит delay(3000), а виснет мгновенно. т.е. дело какое-то аппаратное, а не программное.

sasken
Offline
Зарегистрирован: 28.10.2015

nik182 пишет:

Проверьте напряжение на ноге reset при нажимании кнопки?

как было 3.3 так и остается при нажатии

ZXPirate
Offline
Зарегистрирован: 18.02.2020

А что с таймером или прерываниями ?

закомментируй delay(); и проверь.

sasken
Offline
Зарегистрирован: 28.10.2015

не понимаю, а они тут причем?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Два десятка постов, а кода так и нет. Ещё один копираст?

Выделите минимальный код и минимальную схему, на которых проблема проявляется и покажите нам, наконец код и схему целиком, а не кусочками.

Иначе вероятность решения проблемы мало отличается от нуля.

sasken
Offline
Зарегистрирован: 28.10.2015

схема

 

 

 

код:

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Fonts/FreeMonoBold24pt7b.h>
#define maxString 31 //для функции вывода русских букв
char target[maxString + 1] = ""; //для функции вывода русских букв
#define TFT_DC 9 //пин для управления экраном
#define TFT_CS 10 //пин для управления экраном
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); //управление экраном

#define BUTTON1 7 // пин кнопочки 1
#define BUTTON2 4 // пин кнопочки 2
#define BUTTON3 3 // пин кнопочки 2
#define BUTTON4 5 // пин ключа-бирки
bool     button_state = false;  // маркер нажатия кнопки 1
bool     button_state1 = false; // маркер нажатия кнопки 2
bool     button_state2 = false; // маркер нажатия кнопки 3
bool     button_state3 = false; // маркер нажатия кнопки 4
uint32_t ms_button = 0;  // время учета дребезга контакта кнопки 1
uint32_t ms_button1 = 0; // время учета дребезга контакта кнопки 2
uint32_t ms_button2 = 0; // время учета дребезга контакта кнопки 3
uint32_t ms_button3 = 0; // время учета дребезга контакта кнопки 4

void setup() {
  tft.begin(); //инициализация экрана
  delay(20);
  tft.cp437(true); //инициализация русского алфавита для экрана
  tft.setRotation(1);
  delay(20);
  tft.setFont();
  tft.fillScreen(ILI9341_BLACK);
  tft.setCursor(70, 10);
  tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
  tft.print("hello");
}

void loop(void) {
  uint32_t ms = millis();

  if( digitalRead(BUTTON1) == LOW && !button_state && ( ms - ms_button ) > 50 ){ // кнопка1 жмата
      button_state = true;
      ms_button = ms;
     delay(3000);

       tft.setCursor(70, 30);
       tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
       tft.print("qwerty");
     
   }
if( digitalRead(BUTTON1) == HIGH && ( ms - ms_button ) > 50  ){ // кнопка1 НЕ жмата
      ms_button = ms;
      button_state = false;
   }

}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это минимальная схема? На более простых проблема не проявляется? 

Это минимальный код? На более простых (без TFT, например) проблема не проявляется?

b707
Offline
Зарегистрирован: 26.05.2017

кнопка не описана как ИНПУТ - в принципе не влияет, но неакууратненько

а что за хрени квадратные на схеме на кнопках нарисованы? вы же писали, что кнопка подключена через резистор к +3.3в и все? -

ZXPirate
Offline
Зарегистрирован: 18.02.2020

Там еще mosi с reset соединен для чего-то.

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

а что за хрени квадратные на схеме на кнопках нарисованы?

это и есть кнопка. просто она выводная. а эта "хрень" разъем для подключения кнопки, но параллельно еще кнопка маленькая впаяна, что бы удобно было тестировать плату, а не подключать навесные кнопки.

sasken
Offline
Зарегистрирован: 28.10.2015

ZXPirate пишет:

Там еще mosi с reset соединен для чего-то.

не соединены. инфа 146%

b707
Offline
Зарегистрирован: 26.05.2017

ZXPirate пишет:

Там еще mosi с reset соединен для чего-то.

и почему-то МК перегружается?? :)))

sasken
Offline
Зарегистрирован: 28.10.2015

ЕвгенийП пишет:

Это минимальная схема? На более простых проблема не проявляется?

куда проще то? разъем для tft экрана + стандартная обвязка + 4 кнопки

b707
Offline
Зарегистрирован: 26.05.2017

sasken пишет:

ZXPirate пишет:

Там еще mosi с reset соединен для чего-то.

не соединены. инфа 146%

то есть схема неверна? -

Интрига - "кто же врет?"

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

и почему-то МК перегружается?? :)))

 

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

Интрига - "кто же врет?"

сказал же - не соединен. ну либо покажите мне на картинке - где соединение?

b707
Offline
Зарегистрирован: 26.05.2017

sasken пишет:

куда проще то? разъем для tft экрана + стандартная обвязка + 4 кнопки

вот и ответ - вы нажимаете на кнопку, в ответ идет вывод на экран, экран подключен по SPI, сигналы по MOSI перезапускают контроллер...

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

вот и ответ - вы нажимаете на кнопку, в ответ идет вывод на экран, экран подключен по SPI, сигналы по MOSI перезапускают контроллер...

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

b707
Offline
Зарегистрирован: 26.05.2017

sasken пишет:

сказал же - не соединен. ну либо покажите мне на картинке - где соединение?

а , тут еще интереснее - не на MOSI, а на SS. Но сценарий тот же

На экране есть отдельный пин РЕСЕТ, вот его и надо с РЕCЕТом МК соединять, а не SS

b707
Offline
Зарегистрирован: 26.05.2017

sasken пишет:

и как это вяжется с тем, что я переназначил кнопки и все равно завис возникал на кнопке, которая подключена к AIN1.

слушайте, вам же уже пять человек обьяснили, что никакого входа AIN1 у вас нет. Есть пин D7, ровно такой же, как соседние 6 или 8

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

а , тут еще интереснее - не на MOSI, а на SS. Но сценарий тот же

нифига не понял. ss? это ж пин программатора. когда устройство работает - программатора нет. т.е. пин ss висит в воздухе. он туда подключается, когда я прошиваю камень.

b707 пишет:

На экране есть отдельный пин РЕСЕТ, вот его и надо с РЕCЕТом МК соединять, а не SS

так он именно так и соединен. внизу справа разъем под tft экран, а сверху разъем для программирования камня. я думал - это не надо обьяснять

sasken
Offline
Зарегистрирован: 28.10.2015

b707 пишет:

слушайте, вам же уже пять человек обьяснили, что никакого входа AIN1 у вас нет. Есть пин D7, ровно такой же, как соседние 6 или 8

ок. согласен. пин 7 . он же PD7, он же AIN1 как хотите, так и называйте.

вы обьясните, пожалуйста вот эти ваши слова:

b707 пишет:

вот и ответ - вы нажимаете на кнопку, в ответ идет вывод на экран, экран подключен по SPI, сигналы по MOSI перезапускают контроллер...

 

b707
Offline
Зарегистрирован: 26.05.2017

sasken пишет:

 я думал - это не надо обьяснять

а я думал иначе.

Ладно, поиграли в угадайку, ничего не угадали...

RG22EM
Offline
Зарегистрирован: 27.08.2016

а на PB0 что?

sasken
Offline
Зарегистрирован: 28.10.2015

RG22EM пишет:

а на PB0 что?

Пин управляющий ресетом экрана

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Схема нормальная, с точки зрения ресета. И код тоже. Тут, скорее всего или контроллер глючный или, скорее, сопля на плате. Посмотрите нет ли коротыша АIN c ресетом. 

RG22EM
Offline
Зарегистрирован: 27.08.2016

а в протеусе всё пучком?

sasken
Offline
Зарегистрирован: 28.10.2015

RG22EM пишет:

а в протеусе всё пучком?

не моделил. тут всяких преобразователей навалом. тут большая аналоговая часть. это в протеусе фигово моделить. а проблем с экраном никогда не было. взял камень 328, взял на этом форуме библиотеку и все завелось с первого раза. и все нормально работало. а тут засада такая.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Ардуина какая-нибудь есть под рукой? Подключите к ней кнопку к D7 и запустите ваш код. И убедитесь, что ничего не ресетится.

sasken
Offline
Зарегистрирован: 28.10.2015

asam пишет:

Ардуина какая-нибудь есть под рукой? Подключите к ней кнопку к D7 и запустите ваш код. И убедитесь, что ничего не ресетится.

хорошая идея. спасибо. но уже не сегодня. пора домой

ZXPirate
Offline
Зарегистрирован: 18.02.2020

sasken пишет:

не понимаю, а они тут причем?

Ну может у тебя таймер0 остановлен или прерывания запрещены и программа не выйдет из делэя никогда, или изменена частота и делэй длится дольше заданного раз так в 16.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sasken пишет:

ЕвгенийП пишет:

Это минимальная схема? На более простых проблема не проявляется?

куда проще то? разъем для tft экрана + стандартная обвязка + 4 кнопки

Вы на вопрос-то ответьте. И про скетч тоже самое.

А "куда проще", ну я вот хочу запустить Ваш скетч у себя, увидеть проблему и помочь Вам её решить. Вот и скажите мне - без FTF она (проблема) не проявляется? Или мне искать такой же экран для начала? Вы догадываетесь в каком случае вероятность того, что я этим плотно займусь, выше?