Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/49: Рейтинг темы: голосов - 49, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 151

Проблема с портами ATmega128

26.07.2015, 10:53. Показов 9562. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Делаю устройство для прозвонки шлейфов до 40-ка контактов, на обрыв и короткое замыкание. Взял контроллер ATmega128, решил всё промоделировать в протеусе 8, чтоб наверняка. Сначала порты B,C,D,E,F настраиваю на вход с подтяжкой, потом в главном цикле мне нужно их перевести в высокоомное состояние (то есть отключить подтяжку), перевожу а на выходе все равно единица, и это при том выводы подключены к земле через резисторы.
Code
1
2
3
4
5
6
7
8
9
10
11
//Настраиваем порты на входы
DDRB &= ~(1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3)|
(1 << PB4)|(1 << PB5)|(1 << PB6)|(1 << PB7);
DDRC &= ~(1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3)|
(1 << PC4)|(1 << PC5)|(1 << PC6)|(1 << PC7);
DDRD &= ~(1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|
(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7);
DDRE &= ~(1 << PE0)|(1 << PE1)|(1 << PE2)|(1 << PE3)|
(1 << PE4)|(1 << PE5)|(1 << PE6)|(1 << PE7);
DDRF &= ~(1 << PF0)|(1 << PF1)|(1 << PF2)|(1 << PF3)|
(1 << PF4)|(1 << PF5)|(1 << PF6)|(1 << PF7);
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Все выводы подтянуты
void PortPullUp (void)
{
PORTB |=(1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3)|
(1 << PB4)|(1 << PB5)|(1 << PB6)|(1 << PB7);
PORTC |=(1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3)|
(1 << PC4)|(1 << PC5)|(1 << PC6)|(1 << PC7);
PORTD |=(1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|
(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7);
PORTE |=(1 << PE0)|(1 << PE1)|(1 << PE2)|(1 << PE3)|
(1 << PE4)|(1 << PE5)|(1 << PE6)|(1 << PE7);
PORTF |=(1 << PF0)|(1 << PF1)|(1 << PF2)|(1 << PF3)|
(1 << PF4)|(1 << PF5)|(1 << PF6)|(1 << PF7);
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Все в высокоомном состояние
void PortHiZ (void)
{
PORTB &= ~(1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3)|
(1 << PB4)|(1 << PB5)|(1 << PB6)|(1 << PB7);
PORTC &= ~(1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3)|
(1 << PC4)|(1 << PC5)|(1 << PC6)|(1 << PC7);
PORTD &= ~(1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|
(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7);
PORTE &= ~(1 << PE0)|(1 << PE1)|(1 << PE2)|(1 << PE3)|
(1 << PE4)|(1 << PE5)|(1 << PE6)|(1 << PE7);
PORTF &= ~(1 << PF0)|(1 << PF1)|(1 << PF2)|(1 << PF3)|
(1 << PF4)|(1 << PF5)|(1 << PF6)|(1 << PF7);
}
Где тут ошибка что то не пойму, или это заскоки протеуса?
Подскажите, спасибо!

[148.4 Кб]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2015, 10:53
Ответы с готовыми решениями:

Проблема с UART на Atmega128
Всем доброго времение суток, надеюсь поможете разобраться с проблемой. Предистория: устройство на основе Atmega128 общается с девайсом по...

Проблема с прошивкой Atmega128
Здравствуйте. Проблема возникла следующая. Имеется плата для управления игровым автоматом. Оговорюсь сразу разработка не моя. До сего...

Проблема с I2C (ATMEGA128 + DS50PCI401)
Доброго всем дня ! Вот такая проблемка нарисовалась: Имеется atmega128 и усилитель DS50PCI401 с SMBUS, Пытаюсь записать байт в...

18
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
26.07.2015, 12:07
Не знаю протеус , но в Вашем случае , уж если все порты в третье состояние , то PUD в SFIOR самое милое дело ибо соблюдается условие DDRx==0 PORTx==1 , осталось PUD установить в 1
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 151
26.07.2015, 12:41
Да, так я то же пытался.
Code
1
 SFIOR |= (1 << PUD);
Не чего не изменилось, всё таки наверно это протеус.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
26.07.2015, 23:30
На хрена такие конструкции?
Если весь порт, то и пишите в него:
PORTx = 0;
PORTx = 0xFF;

Если часть пинов заняты, а другую часть сбросить или выставить, то соответствующие маски:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
#elif (TYPE_KEYS==MATRIX)
//========================================================================
#define COL_DDR            DDRC
#define ROW_DDR            DDRC
 
#define COL_PIN            PINC
#define ROW_PIN            PINC
//------------------------------------------------------------------------
#define COL_MASK           (1<<COL_1)+(1<<COL_2)+(1<<COL_3)+(1<<COL_4)
#define ROW_MASK           (1<<ROW_1)+(1<<ROW_2)+(1<<ROW_3)+(1<<ROW_4)
//------------------------------------------------------------------------
 
COL_DDR = COL_MASK;
Пиление одной строки на несколько для более удобного чтения, пример:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//========================================================================
#define MAKE_MENU(Name, Parent, Child, Next, Prev, EnterFunc, MenuFunc, Text) \
extern menu_item __flash Parent;                                              \
extern menu_item __flash Child;                                               \
extern menu_item __flash Next;                                                \
extern menu_item __flash Prev;                                                \
menu_item __flash Name =                                               \
{                                                                             \
(menu_item*)      &Parent,                                              \
(menu_item*)      &Child,                                               \
(menu_item*)      &Next,                                                \
(menu_item*)      &Prev,                                                \
EnterFunc,                                           \
MenuFunc,                                            \
{Text},                                               \
}
//========================================================================
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 151
27.07.2015, 15:10
Цитата Сообщение от dymyurk1978
На хрена такие конструкции?
Если весь порт, то и пишите в него:
PORTx = 0;
PORTx = 0xFF;
Да это понятно так в итоге и сделал, просто проще экспериментировать было когда ошибку искал.
Но проблему это не решает.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
27.07.2015, 17:53
Цитата Сообщение от ORV
Но проблему это не решает.
Хорошо, проблема в протеусе или на железе? Сделайте тестовые программы, заливайте и проверяйте. А то взяли моду, в симуляторе что-то не выходит - проблема вселенского масштаба. Симуляторы - программные продукты. И они зачастую не симулируют 100% все нюансы. Взять ту же AVR-Studyo. Казалось бы програмный продукт самого производителя МК. А некоторые нюансы в симуляторе студии не просимулируешь. Посему, изучайте архитектуру МК AVR тщательно, чтобы от зубов отскакивало. Чтобы вы четко знали, что в железе так-то и так-то работать будет. И неважно, что покажет симулятор.
Я не использую Протеус. Вообще. Попробовал как-то и плюнул на эту галиматью. Основные моменты прогоняю в студии. Потом проверяю уже на железе. Если требуется, с осциллографом. И поверьте, такая методика полностью себя оправдывает. На выходе - обкатанные, работоспособные устройства.
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
27.07.2015, 18:28
А с чего бы это настройка порта на вход-выход делается выводом в порт PORT?
А не в регистр DDR ?
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 151
28.07.2015, 08:11
Цитата Сообщение от dymyurk1978
Цитата Сообщение от ORV
Но проблему это не решает.
Хорошо, проблема в протеусе или на железе? Сделайте тестовые программы, заливайте и проверяйте. А то взяли моду, в симуляторе что-то не выходит - проблема вселенского масштаба. Симуляторы - программные продукты. И они зачастую не симулируют 100% все нюансы. Взять ту же AVR-Studyo. Казалось бы програмный продукт самого производителя МК. А некоторые нюансы в симуляторе студии не просимулируешь. Посему, изучайте архитектуру МК AVR тщательно, чтобы от зубов отскакивало. Чтобы вы четко знали, что в железе так-то и так-то работать будет. И неважно, что покажет симулятор.
Я не использую Протеус. Вообще. Попробовал как-то и плюнул на эту галиматью. Основные моменты прогоняю в студии. Потом проверяю уже на железе. Если требуется, с осциллографом. И поверьте, такая методика полностью себя оправдывает. На выходе - обкатанные, работоспособные устройства.

Мне нужно было быстро продемонстрировать модель. И интересно почему так вдруг кто сталкивался.

Цитата Сообщение от kytikot
А с чего бы это настройка порта на вход-выход делается выводом в порт PORT?
А не в регистр DDR ?
Ну всё правильно в DDR и настроено.
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
28.07.2015, 11:02
.... несущественно...
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
28.07.2015, 13:04
Он не меняет режим ввод-вывод , он переводит порты в высокоомное состояние. В этом режиме DDR - вход.

ORV - у меня есть 128 на макетке - могу посмотреть в железе
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 151
29.07.2015, 15:58
Цитата Сообщение от YTYOUT
Он не меняет режим ввод-вывод , он переводит порты в высокоомное состояние. В этом режиме DDR - вход.

ORV - у меня есть 128 на макетке - могу посмотреть в железе
Буду очень благодарен!

P.S
Наконец то дошли руки промакетировать правда на атмеги16. Не совсем то что я ожидал напряжение около 1 вольта, но это если выводы в воздухе весят.
Интересно что будет с атмегай128, что бы наверняка знать что всё получится.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
30.07.2015, 02:16
Прочитал. Думаю завтра к 12 по МСК сообщу результат
0
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
30.07.2015, 14:23
Цитата Сообщение от ORV
Код:
//Настраиваем порты на входы
DDRB &= ~(1 << PB0)|(1 << PB1)|(1 << PB2)|(1 << PB3)|
(1 << PB4)|(1 << PB5)|(1 << PB6)|(1 << PB7);
DDRC &= ~(1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3)|
(1 << PC4)|(1 << PC5)|(1 << PC6)|(1 << PC7);
DDRD &= ~(1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|
(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7);
DDRE &= ~(1 << PE0)|(1 << PE1)|(1 << PE2)|(1 << PE3)|
(1 << PE4)|(1 << PE5)|(1 << PE6)|(1 << PE7);
DDRF &= ~(1 << PF0)|(1 << PF1)|(1 << PF2)|(1 << PF3)|
(1 << PF4)|(1 << PF5)|(1 << PF6)|(1 << PF7);

Где тут ошибка что то не пойму, или это заскоки протеуса?
Подскажите, спасибо!У вас тут опечатки нет? Если у вас в программе именно так, как вы показали, то непонятно как у вас порты на вход настраиваются.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
30.07.2015, 15:27
Цитата Сообщение от Bytt
...
Я ему уже писал об этом, он говорит, что убирал эту странную конструкцию и выводил как положено, DDRx = 0; И все то же самое.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
30.07.2015, 15:45
В-общем твердый нуль. И через PUD и через PORTx=0 . Смотрел тестером и осцилом
0
OtVyk
30.07.2015, 20:18
Не доверяйте протеусу... очень глючная софтина. Обзаведитесь макетной платой и тестируйте всё на ней. На железе [на самой атмеге] проверьте, чтобы фьюз совместимости с атмегой 103 был снят !!! (по умолчанию он установлен, что влечет за собой некоторые подводные камни связанные с портами Е и F). Попробуйте проверить работу каждого из портов по отдельности: Берёте порт А и соединяете 0-й пин с 4-м, 1-й с 5 и т.д. А далее просто подайте сигналы отдельно и посмотрите, реагирует ли контроллер на них. Например посылаете на вывод 0 единицу, проверяете, что по мнению контроллера находится на пине 4 спустя ~ 1 мкс.
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
30.07.2015, 20:25
Да это повальное увлечение протеусом. Паять не надо, лепота...
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 151
30.07.2015, 22:48
Цитата Сообщение от YTYOUT
В-общем твердый нуль. И через PUD и через PORTx=0 . Смотрел тестером и осцилом
Спасибо, теперь я спокоен.
Ну вот выявлен ещё один глюк протеса, на первый взгляд в простой задачи.
Тему можно считать закрытой, всем спасибо.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
30.07.2015, 23:17
Ваша ошибка в данной ситуации - полагаться на сторонний симулятор МК AVR. Если уж продукт ATMEL порой не все симулирует, что тогда говорить о протуесе? И вывод вы должны вынести из этой ситуации - изучать архитектуру МК. Зная архитектуру, вы будете четко знать и понимать чего ожидать от МК. И будете исходить из этой информации, а не информации на основе глюка симулятора.
Купите книгу, Вольфганг Трамперт "AVR-RISC микроконтроллеры фирмы ATMEL", очень хорошая книга, толково расписано. Практически вся информация актуальна и пой сей день. Единственное, что, упоминаются снятые с производства МК. Но, система команд, основа архитектуры - все актуально. Других авторов книги нужно внимательно просматривать, насколько толково написано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2015, 23:17
Помогаю со студенческими работами здесь

Проблема с третьим таймером-счетчиком на Atmega128
Всем привет. Друзья нужна ваша помощь. Работаю с: Atmega128 в CodeVision AVR (2.04.4a). Запустил первый счетчик на измерение...

Проблема с портами ВВ на AVR
Добрый день. Возникла проблема при работе с портами ввода-вывода на модуле AVR Pinboard II. Написал простенькую программку - зажигать диод...

ATMega16 проблема с портами ввода PINx
Хочу подключить к МК несколько кнопок, к порту &quot;D&quot;, и чтобы при нажатии на них светились разные светодиоды порта &quot;A&quot;. Написал в...

модуль STM32, проблема с портами ввода-вывода ?
Всем привет, не давно купил Pinboard 2, с модулем STM32. Установил CoIDE, с помощью программы CoFtosh прошил пример (gpio_rtos_cmsis.bin)...

Проблема с портами
Тут такое дело. Решил создать сервер для игры Counter Strike. Для этого нужно включить порт 27015 на модеме. Сам я юзаю модем DSL 2500U...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru