Добрый день, купил микроконтроллер ATtiny84, стал пробовать прошить его через arduino uno - проблем не было (делал всё по инструкции), прошивка нормально заливается, а вот в плане функциональности что-то у меня не клеится. 1) Как бы не пытался обращаться к пинам - всегда попадаю видимо на digital пины, т.е. PA1 или просто 1 приводит на 3ю ногу, PA2 (2) приводит на 5ую ногу и т.д. Варианты A1-A7 вообще не работают. По названиям PB1 и PB2 можно попасть всё на те же 1 и 2 цифровые пины. 2) На 2ой и 11ой ногах вообще никакой реакции нет. 3) Не получается сделать чтение с пина: Код (Text): // Номер пина для светодиода #define ledPin 3 // Номер аналогового пина #define analogPin 7 // В эту переменную считываем значение с аналогового входа int val = 0; void setup() { // Настраиваем пин светодиода на выход pinMode(ledPin, OUTPUT); // set pin as input pinMode(analogPin, INPUT); } void loop() { // Считываем значение val = analogRead(analogPin); // val содержит значение из диапазона 0..1023, а диапазон значений для analogWrite // 0..255. Для этого делим val на 4 analogWrite(ledPin, val / 4); } Собственно помогите, пожалуйста, разобраться что же тут не так и как всё таки читать с аналоговых пинов?
Насколько я понимаю, PBх и PАх относятся к регистрам B и A соответственно. А константы предназначены для маскирования соответствующих битов в соответствующем регистре. PORTA |= _BV(PA1); //PA1=HIGH PORTA &= ~_BV(PA2); //PA2=LOW Насчет нумерации пинов для digitalWrite. Если рассматривать реализацию digital_pin_to_bit_mask_PGM и digital_pin_to_port_PGM для Tiny84, то, скорее всего, она идет так: 0 - B0 1 - B1 2 - B2 3 - A7 4 - A6 5 - A5 6 - A4 7 - A3 8 - A2 9 - A1 10 - A0 Еще есть набор констант вида PIN_Ax PIN_Bx из которых следует, что еще есть B3, который есть пин 11, но он RESET, потому трогать его не надо. Распиновка же Tiny84 по пинам PBx и PAx вроде такая: Код (Text): // // 1| |14 // PB0 2| |13 // PB1 3| |12 PA1 // PB3 4| |11 PA2 // PB2 5| |10 PA3 // PA7 6| |9 PA4 // PA6 7| |8 PA5 Нумерация аналоговых пинов для analogRead вроде должна быть такой Начиная с номера, следующего за последним цифровым (PB3), т.е. 11+1 Т.е A0 - 12, A1 - 13, A2 - 14, и т.д. до A7 - 19
Спасибо, разобрался. В итоге, если соотносить с: Код (Text): // ATMEL ATTINY84 / ARDUINO // // +-\/-+ // VCC 1| |14 GND // (D 0) PB0 2| |13 AREF (D 10) // (D 1) PB1 3| |12 PA1 (D 9) // PB3 4| |11 PA2 (D 8) // PWM INT0 (D 2) PB2 5| |10 PA3 (D 7) // PWM (D 3) PA7 6| |9 PA4 (D 6) // PWM (D 4) PA6 7| |8 PA5 (D 5) PWM // +----+ то получается что: цифры 0 - 10 соответствуют D0 - D10 константы PIN_A1-PIN_A7 соответствуют PA1-PA7, для порта B - аналогично для analogRead - как вы и написали соответствие PA0 (AREF) - 12, PA1 - 13, PA2 - 14, и т.д. до PA7 - 19 Единственное - это нормально, что если к пину вообще ничего не подключено, то analogRead читает это значение как 1024 видимо (диод ярко светится), но как только подключаю потенциометр, который даёт по идее тот же ноль - диод гаснет и работает уже нормально? Так же, можно как-то вылечить шим на PA6 и PA5? На них шим достаточно низкий, из-за чего моргание диода хорошо различимо глазом и сильно раздражает.