РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

Форум на ЭЛВО


РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ



  • Страница 1 из 1
  • 1
Архив - только для чтения
Порты ввода\вывода на Atmega8 как в ArduinoIDE
Сообщение # 1        
gurlogrod
аватар
  Постов: 1   U 
Всем привет дорогие радиолюбители!
Думаю будет полезно для начинающих программистов микроконтроллеров.

Многите те кто начинали свой путь с Ардуино привыкли к настройке пинов через pinMode(Номер пина, режим работы).
Когда они чувствуют что пора рости и переходят на голые микроконтрллеры, то скорее всего их выбор падает на Atmega8.
Конечно настройка портов тут вполне легкая, но думаю надйдуться те кто будут испытывать трудности с этим)
Я сделал свою библиотеку для более привычного объявления портов ввода\ввыода, по типу того как это реализованно в ArduinoIDE.

Работа с библиотекой довольно проста:
pinModex (Номер пина, режим работы) (Гле Х - имя порта (pinModeD(0,1)))

Номер пина - довольно понятно - это цифра 0-7 (кроме порта С (0-5))
Режим работы (1 - на ввывод, 0 на вход)
digitalWritex(Номер пина, значение)
Значение: если пин до этого был сконфигурирован на выход, то при 1 будет 5в, при 0 0в
Если пин до этого был сконфигурирован на вход, то при 1 будет подтянут к 5в, при 0 будет висячим.
digitalReadx(Номер пина): при условии что пин был до этого установлен на вход. Функция вернет значение на пине.
Если пин был до этого подтянут к 5в, то чтоб получить 1, нужно будет делать инверсию (x = !digitalReadD(1))

Грубо говоря вся суть работы библиотеки - это подрожание работы в ArduinoIDE.

P.S. - это моя первая публикация, так что прошу указать на мои ошибки и жду отзывов)

Добавлено (05.03.2020, 16:13)
---------------------------------------------
https://drive.google.com/open?id=1yv8Eo2yBfTIZc7JDxXIRUeIPtPtWpbeu

Сообщение # 2        
nolpofaze
аватар
  Постов: 442   Друзья 
gurlogrod, а почему у Вас на порт B и D - 7 ног, если их там 8?
Код
int digitalReadD(int number)
{    int x;
    switch (number)
    {
  case 0: x = 0x01;
  break;
  case 1: x = 0x02;
  break;
  case 2: x = 0x04;
  break;
  case 3: x = 0x08;
  break;
  case 4: x = 0x10;
  break;
  case 5: x = 0x20;
  break;
  case 6: x = 0x40;
  break;
    }
    if((x & PIND) == 0) return 0;
    else return 1;    
}

что я получу если использую a=digitalReadD(7) - читаю цифровой вход порта D, нога 7 (есть такая нога PD7)?
  • Страница 1 из 1
  • 1
Поиск:

Внимание! Форум переехал на Tehnodium.ru



© 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA