Нет выхода 5 вольт (HIGH) с контакта Atmega8

Здравствуйте.

Есть контроллер Atmega8, суть в том, запрограммировать три контакта так (например 30, 31, 32), чтобы если на двух контактах (31 и 32) был высокий уровень, то на контакте 30 будет тоже высокий уровень (5в).
Скетч написан в среде Arduino, скомпилирован в HEX. После записи HEX в Atmega8, программатором USBAsp, и запуска схемы на контакте 30 нет высокого уровня (5в).
Подскажите в чём беда?

Контроллер Atmega8 подключены контакты
Vcc и AVcc = 5в
GND
31 и 32 = 5в
30 = 0в ???

Atmega8 без внешнего кварца, работает от внутреннего генератора.
Программировал, с фьюзами по умолчанию и с фьюзами рекомендованными на просторах интернета, ни так ни так не работает.

Скетч и фото с фьюзами прилагаю.

const int IN_1 = 32;
const int IN_2 = 31;
const int OUT = 30;

void setup() 
{
    pinMode(IN_1, INPUT);
    pinMode(IN_2, INPUT);
    pinMode(OUT, OUTPUT);
}

void loop() 
{
 if (digitalRead(IN_1) == HIGH && digitalRead(IN_2) == HIGH)
 {
  digitalWrite(OUT,HIGH);
 }
  else
 { 
  digitalWrite(OUT,LOW);
 } 
}


Погугли, чем отличается номер вывода микросхемы от GPIO

1 лайк

как бы делал я:

  1. установил аддон miniCore
  2. выбрал чип atmega8
  3. выбрал тактирование от внутреннего генератора 8 мегагерц
  4. Залил (через ISP) бутлоадер (это установит фьюзы)
  5. Залил (через ISP) прошивку, это снесёт бутлоадер но оставит фьюзы и программу

Скетч не смотрел, но два вывода просто определить INPUT_PULLUP это установит на входах 1

1 лайк

Называй порты правильно

Первая проблема - в постановке задачи.
Состояния двух контактов дают 4 комбинации. Описана только одна из них. Три остальные - нет.
При такой постановке правильным и наиболее экономичным решением будет:

void setup() {
  pinMode(30, OUTPUT);
  digitalWrite(30, HIGH);
}

void loop {}

Беда в том, что Вы, не понимая, что Вы делаете, пошли круговым путем, поэтому не получили диагностики в том месте, где Вы что-то неправильно делаете.
Начните с того, чтобы залить в Атмегу прошивку кнопкой IDE, минуя ручные операции с HEX.

и…начал прямо подсказывать так попинай за использование портов TX-RX не по назначению

Не, PDx - это лишь именованная константа номера в порту D.
Например, PD4 = 4.
Если у него используется MiniCore (иначе я не знаю как под Atmega8 в среде ардуино писать), то ему нужно использовать макросы PIN_PDx для порта D.
Например, PIN_PD2. И я бы вообще вот так сделал:

#define IN_1 = PIN_PD2;
#define IN_2 = PIN_PD1;
#define OUT  = PIN_PD0;

Но есди ядро не MiniCore, то надо смотреть что там в конкретном ядре определено. Может и не сработать :smiley:

Если в схеме нет uart, то и «пофигу мороз».

ну зачем ты учишь плохому, если загрузчик будет жив то пин TX будет сконфигурирован на выход, а если ты его закоротишь то получишь волшебный дым как максимум, а как минимум сожжёшь порт, АВАНГАРДИСТ?

Если да кабы…
Схемы ТС я не видел (он не представил), но утверждать что использовать порты RX/TX совсем нельзя - без основательное ограничение.

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

СКЕТЧ: (как мне видится)

/*
  const int Pin_1 = 2;   // 32;
  const int Pin_2 = 1;   // 31;
  const int Pin_OUT = 0; // 30;
*/

const int Pin_1 = 4;   // 2;
const int Pin_2 = 3;   // 1;
const int Pin_OUT = 2; // 32;

void setup()
{
  pinMode(Pin_1, INPUT_PULLUP);
  pinMode(Pin_2, INPUT_PULLUP);
  pinMode(Pin_OUT, OUTPUT);
}

void loop()
{
  if (digitalRead(Pin_1) == HIGH && digitalRead(Pin_2) == HIGH)
  {
    digitalWrite(Pin_OUT, HIGH);
  }
  else
  {
    digitalWrite(Pin_OUT, LOW);
  }
}

Так тоже пробовал не пошло

То что Rx, Tx видел, но их же можно не по назначению использовать, на порты PC0-…, тоже менял, ни чего не изменилось.

По фьюзам так ни кто не подсказал, если я использую контроллер без внешнего кварца, а от внутреннего генератора, правильно выставляю галочки?

я тебе скетч привёл, рабочий, ядро miniCore, если у тебя не работает, значит см. пост выше, как надо сделать, по пунктам

Хорошо, спасибо, буду пробовать.

Остаётся открытый вопрос по фьюзам

тебе шашечки или ехать, если шашечки, прошей бутлоадер из IDE ну а дальше считай фьюзы и смотри, что ты там сделал не так

Значит так не получится, только через саму программу Arduino, программировать надо?

выбери свой программатор в IDE и через него из IDE шьёшь!