LINUX.ORG.RU

Proteus не подтягивает все пины порта к земле в ATmega8

 , ,


0

1

Беда-беда! Чего-то я не догоняю! Вот код на сях для avr-gcc:

#include <avr/io.h>

int main( void )
{

   DDRB = 1;
   PORTB = 0;

   while(1){}
   
   return 0;
}

ставлю порт В на вывод, всем пинам присваиваю ноль. По моему вразумению они все должны подтянуться к земле, а протеус показывает что подтягивается только 0 пин, а остальные остаются в неопределенном сосоянии.

http://i-fotki.info/19/9c547319cabf3ddbfe7ffb7e4f3fb67bb2b914213382659.png.html

Если я правильно помню, когда пробовал на настоящей атмеге — вродь все подтягивалось, вопрос — это протеус так фундаментально тупит или я чего не догоняю?

★★★

А вот если сделать PORTB = 255, тогда к питанию подтягиваются все 8 пинов...

pihter ★★★ ()
Ответ на: комментарий от pihter

Потому что «DDRB = 1» - это сделать PB0 выходом, остальные входами.

alexru ★★★★ ()
Последнее исправление: alexru (всего исправлений: 1)
Ответ на: комментарий от alexru

Машу вать! дак там тоже целый байт? И, через это есть возмжность вообще каждый пин по направлениям настраивать?! спасибо, щас попробую

pihter ★★★ ()
Ответ на: комментарий от pihter

Естественно, все пины могут настраиваться независимо.

alexru ★★★★ ()
Ответ на: комментарий от alexru

Прокатило, камрад! Тоны тебе того что ты там любишь!

pihter ★★★ ()
Ответ на: комментарий от pihter

[в порядке занудства] Выражение «подтягивать к нулю/единице» обычно обозначает подключение линии ввода-вывода к соответствующей шине питания через резистор достаточно большой величины (около 50÷100кОм).

В англоязычной литературе используется термин «pull up» и «pull down».

В Atmega8 на пинах реализованы встроенные подтягивающие к Vdd резисторы, которые включаются при записи 1 в соответствующий бит PORTx и 0 в DDRx.

Так что, читая ОП-пост, я не сразу понял, имелось ли ввиду включение подтягивающего резистора к GND (которого там нет), или же перевод линии ввода-вывода в активное состояние логического «0»

qbe ()
Последнее исправление: qbe (всего исправлений: 1)
Ответ на: комментарий от qbe

Выражение «подтягивать к нулю/единице» обычно обозначает подключение линии ввода-вывода к соответствующей шине питания через резистор достаточно большой величины (около 50÷100кОм).

-- Рычаг в положение D! -- Жнаю -- И не «застрелю башку», а «прострелю башку»! -- Жнаю... -- А-то «застелю башку»....

Корректнее было бы сказать «вешает на землю», грешен, признаю.

В Atmega8 на пинах реализованы встроенные подтягивающие к Vdd резисторы, которые включаются при записи 1 в соответствующий бит PORTx и 0 в DDRx.

-- Жнаю...

я не сразу понял, имелось ли ввиду включение подтягивающего резистора к GND (которого там нет), или же перевод линии ввода-вывода в активное состояние логического «0»

Ну сам же сказал, что знаешь что там нет подтягивающего на землю, так что... а вообще, да — мой косяк

pihter ★★★ ()
1 == 0b00000001 != 0b11111111
1 == 0x01 != 0xff
0 == 0b00000000 == 0x00
minakov ★★★★★ ()

Оффтоп: Proteus у тебя в виртуалке или как?

dvrts ★★★ ()
Ответ на: комментарий от minakov

Да, я уже смекнул, спасибо. Я, грешным делом думал, что DDRB вообще бинарный, а не восьмибитный.

pihter ★★★ ()
Ответ на: комментарий от dvrts

Оффтоп: Proteus у тебя в виртуалке или как?

В виртуалбоксе, да. Кстати, мож кто знает что-нибудь хотя бы около того нативное на онтоп?

pihter ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.