Есть контроллер 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);
}
}
Первая проблема - в постановке задачи.
Состояния двух контактов дают 4 комбинации. Описана только одна из них. Три остальные - нет.
При такой постановке правильным и наиболее экономичным решением будет:
Беда в том, что Вы, не понимая, что Вы делаете, пошли круговым путем, поэтому не получили диагностики в том месте, где Вы что-то неправильно делаете.
Начните с того, чтобы залить в Атмегу прошивку кнопкой IDE, минуя ручные операции с HEX.
Не, PDx - это лишь именованная константа номера в порту D.
Например, PD4 = 4.
Если у него используется MiniCore (иначе я не знаю как под Atmega8 в среде ардуино писать), то ему нужно использовать макросы PIN_PDx для порта D.
Например, PIN_PD2. И я бы вообще вот так сделал:
ну зачем ты учишь плохому, если загрузчик будет жив то пин 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);
}
}