Страница 1 из 2
ATtiny13: Очень интересная работа портов
Добавлено: Ср июл 22, 2009 13:34:19
fox15
Привет Мурзатые !
Вот интересная особенность...
void main()
{
// Порты 2, 3, 4, 5 конфигурируем на выход
DDRB = 0b00111100; // set PORTB as Output PB2, PB3, PB4, PB5
PORTB = 0; // Необязательно, для чистоты эксперимента
.....
Кусь.... все несущественное, то что никак не затрагивает порты
.....
State = 0;
while (1)
{
if (PINB.B4) // вот в этих местах самое интересное
State = 1;
if (!PINB.B4 && State)
{
State = 0;
..... Чего-нить можно сделать, засветить светодиодом например
PORTB.B2 ^= 1; // Вообщем инверсия всякий раз
}
}
}
Так вот, Порт B4 был сконфигурирован как выходной согласно кошачьей обучалке (Настройка портов ввода-вывода)
http://radiokot.ru/start/mcu_fpga/avr/06/
...Кусь...
И наоборот, если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
Порты - дело тонкое…
...Кусь...
Почему этот алгоритм работает ?
Прекрасно работает и на вход и на выход
Нажимаю кнопочку, при отпускании срабатывает, тут же можно засветить/погасить светодиод на этом порту (т.к. он сконфигурирован на выход)
Мы же должны обнаружить там 0, как в описании говорилось и тогда первое условие несработает а, стало быть и второе и на PORTB.B2 недолжно быть реакции
1. Кто виновать ?
2. Что делать ?
- Кто подскажет ?
- Кто даст совет ?
- Это наваждение или нет ?
P.S.
И вообще, зачем тогда мне порты настраивать на вход, когда они и так работают ?
Добавлено: Ср июл 22, 2009 13:51:23
ARV
че-то я ничего не понял ваще... напрягитесь и задайте вопрос одним предложением без детских игр в животных.
Добавлено: Ср июл 22, 2009 16:06:24
fox15
ARV писал(а):че-то я ничего не понял ваще... напрягитесь и задайте вопрос одним предложением без детских игр в животных.
Вся наша жизнь - игра ! (азартная

)
И что тут непонятного-то ?
Недолжен PINB.B4 реагировать на нажатие кнопки, т.к. он сконфигурирован на ВЫХОД (в регистре DDR 3-й бит равен 1), а он реагирует (как будто в регистре DDR 3-й бит равен 0)
и мне непонятно почему так.
И в описании сказано:
... если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
Т.е. читая PINB.B4, я всегда должен получать только 0, а я в цикле получаю и 0 и 1.
Добавлено: Ср июл 22, 2009 18:38:42
GP1
fox15 писал(а):
... если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
а вы случаем с PORTD не путаете?
Добавлено: Ср июл 22, 2009 18:58:25
sema
pin это "физическое" состояние вывода, если его закоротить на "землю", то без разницы вход это будет или выход - при чтении из pin всегда будет "0"
ну это если я правильно понял весь этот словесный поток

Добавлено: Ср июл 22, 2009 21:31:05
fox15
GP1 писал(а):fox15 писал(а):
... если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
а вы случаем с PORTD не путаете?
На ATTiny13 нет порта D, есть только B0-B5
Добавлено: Ср июл 22, 2009 21:33:20
fox15
sema писал(а):pin это "физическое" состояние вывода, если его закоротить на "землю", то без разницы вход это будет или выход - при чтении из pin всегда будет "0"
ну это если я правильно понял весь этот словесный поток

Так отож
Еслибы там был чистый 0, как и положено.
Ан нет, и 0 есть и 1 есть, на кнопочку нажимаю, порт работает как на вход
Добавлено: Ср июл 22, 2009 21:41:18
GP1
fox15 писал(а):GP1 писал(а):
а вы случаем с PORTD не путаете?
На ATTiny13 нет порта D, есть только B0-B5
Супер!
Сначала сам пишет
PinD, а потом тыкает мне в нос что у tiny13 нет порта D, просто супер.
Да я tiny13 крайний раз в руках два года назад держал, а при моем склерозе..., помню что у него всего один порт а какой по букве

Добавлено: Ср июл 22, 2009 21:43:23
__Alexander
fox15 писал(а):
Еслибы там был чистый 0, как и положено.
Ан нет, и 0 есть и 1 есть, на кнопочку нажимаю, порт работает как на вход
Почитайте в даташитах про работу портов, прежде чем задавать глупые вопросы.
А еще лучше, почитайте про полевые транзисторы, и как они в связке работают в режимах вход, выход и третье состояние.
Добавлено: Ср июл 22, 2009 23:04:19
Krik99
Дык вроде как все AVR которые 8 лапные у них тока PB, так как пины ISP всегда стоят на PB.
Добавлено: Ср июл 22, 2009 23:50:20
fox15
__Alexander писал(а):
Почитайте в даташитах про работу портов, прежде чем задавать глупые вопросы.
Глупых вопросов небывает, бывают глупые ответы, вроде этого.
Я на форум обратился потому как предполагаю, что может у кого-то была подобная проблема. Информации начального уровня у меня достаточно и по портам и по прерываниям.
И вообще я не электронщик, а программист, разработчик баз данных.
А микроконтроллеры в данный момент это хобби, которым я занимаюсь в свободное время и никак немогу знать электротехнику на уровне электронщика профессионала.
А форум создан, чтобы задавать вопросы и делиться опытом.
Добавлено: Ср июл 22, 2009 23:59:20
fox15
GP1 писал(а):
Супер!
Сначала сам пишет
PinD, а потом тыкает мне в нос что у tiny13 нет порта D, просто супер.
Да я tiny13 крайний раз в руках два года назад держал, а при моем склерозе..., помню что у него всего один порт а какой по букве

Я не тыкал никому ничего в нос.
Надо быть внимательнее, это пример статьи, которая размещена здесь же на этом сайте и ссылку привел (в самом первом сообщении).
В этой статье описана работа портов на примере порта D.
http://radiokot.ru/start/mcu_fpga/avr/06/
Может быть такой режим работы микроконтроллера может возникать при определенных условиях, типа ошибки ?

Добавлено: Чт июл 23, 2009 05:19:29
sema
порт настроен на выход (любой) и в него записан "0" и висит в воздухе - читаем pin, на нем "0". подключаем эту ножку к +5В, читаем pin - "1"
пишем в него "1", нога в воздухе, читаем pin - "1", подключаем его к корпусу, читаем pin - "0", с настройкой на вход (с подтягивающим резистором) такая ситуация
читайте кроме нашей обучалки еще и книжки

Добавлено: Чт июл 23, 2009 07:10:05
ARV
sema писал(а):порт настроен на выход (любой) и в него записан "0" . . . подключаем эту ножку к +5В, читаем pin - "1"
и при этом сильно-сильно перегружаем внутренний буфер МК, так что скорее всего через пару секунд порт выгорит
Добавлено: Чт июл 23, 2009 09:45:04
fox15
sema писал(а):порт настроен на выход (любой) и в него записан "0" и висит в воздухе - читаем pin, на нем "0". подключаем эту ножку к +5В, читаем pin - "1"
пишем в него "1", нога в воздухе, читаем pin - "1", подключаем его к корпусу, читаем pin - "0", с настройкой на вход (с подтягивающим резистором) такая ситуация
читайте кроме нашей обучалки еще и книжки

Ok !
У меня так: нога через резистор на землю, параллельно эта нога на кнопку, кнопка на +5V
(Отладочный стенд EasyAVR5A)

Добавлено: Чт июл 23, 2009 10:18:40
ARV
fox15 писал(а):У меня так: нога через резистор на землю, параллельно эта нога на кнопку, кнопка на +5V
(Отладочный стенд EasyAVR5A)

Я С ВАС БАЛДЕЮ! с этого и надо было начинать! и вас еще удивляет, что порт, настроенный на выход, не может "перетянуть" питание, подаваемое на пин снаружи!

если на кнопку нажимали часто и подолгу - думаю, порт вы выжгли...
Добавлено: Чт июл 23, 2009 12:51:17
fox15
ARV писал(а):Я С ВАС БАЛДЕЮ! с этого и надо было начинать! и вас еще удивляет, что порт, настроенный на выход, не может "перетянуть" питание, подаваемое на пин снаружи!

если на кнопку нажимали часто и подолгу - думаю, порт вы выжгли...
Нет, порт целый.
Ну не моими же "корявыми" ручками создан стенд EasyAVR5A.
Думаю они позаботились об этом и простым нажатием на кнопку микросхему неиспортить (ну там резистор какой-нить)
Я могу конфигурировать стенд, можно кнопку переключать или на землю или на VCC
А вообще, когда нажимаю на кнопку и:
Порт настроен на ВЫХОД (напряжение на ножке)
Vmax = 4.00V
Vavg = 3.91V
Vmin = 3.80V
Vrms = 3.91V
Порт настроен на ВХОД (напряжение на ножке)
Vmax = 5.08V
Vavg = 4.93V
Vmin = 4.84V
Vrms = 4.93V
И еще интересная деталь.
Думаю тут имеется небольшой грех компилятора MicroC от Mikroelektronika, потому как при редактировании программы этот эффект то пропадает, то появляется, хотя при редактировании я незатрагиваю именно этот порт. Может соседние порты влияют ?
Хотя, вероятно Вы правы, надо пересмотреть схему, компилятор скорее всего непричем.
Я был вынужден в EasyAVR5A кнопку переключить с земли на VCC, т.к. у меня есть второй стенд 8051 на AT89S8253, с него я беру тестовый сигнал, а его кнопочки, в силу определенных причин, были сконфигурированы на VCC
Добавлено: Чт июл 23, 2009 16:29:48
sema
ARV писал(а):sema писал(а):порт настроен на выход (любой) и в него записан "0" . . . подключаем эту ножку к +5В, читаем pin - "1"
и при этом сильно-сильно перегружаем внутренний буфер МК, так что скорее всего через пару секунд порт выгорит
все верно (писал утром опаздывая на работу поэтому для большей доходчивости так утрировал), хотя мк довольно живучие, вот если несколько ног в порте так закоротить то наверняка сгорит
Добавлено: Чт июл 23, 2009 18:19:57
__Alexander
fox15 писал(а):
И вообще я не электронщик, а программист, разработчик баз данных.
А форум создан, чтобы задавать вопросы и делиться опытом.
Правду говорят, что любой инженер может стать программистом, но не каждый программист может стать инженером.
Если уже ARV ниче не понял из вашего кода.... то куда там поделиться опытом.
fox15 писал(а):
Ну не моими же "корявыми" ручками создан стенд EasyAVR5A.
Думаю они позаботились об этом и простым нажатием на кнопку микросхему неиспортить (ну там резистор какой-нить)
Нет, они не могут позаботиться о всех корявых руках, которыми пишутся корявые программы. Ну дайте ему на порт 220, и хрен с ним. А потом спрашивайте почему они не позаботились об этом. А лучше кислотки, серной, прям на плату...
-------
Добавлено: Чт июл 23, 2009 20:13:50
fox15
__Alexander писал(а):fox15 писал(а):
И вообще я не электронщик, а программист, разработчик баз данных.
А форум создан, чтобы задавать вопросы и делиться опытом.
Правду говорят, что любой инженер может стать программистом, но не каждый программист может стать инженером.
Если уже ARV ниче не понял из вашего кода.... то куда там поделиться опытом.
fox15 писал(а):
Ну не моими же "корявыми" ручками создан стенд EasyAVR5A.
Думаю они позаботились об этом и простым нажатием на кнопку микросхему неиспортить (ну там резистор какой-нить)
Нет, они не могут позаботиться о всех корявых руках, которыми пишутся корявые программы. Ну дайте ему на порт 220, и хрен с ним. А потом спрашивайте почему они не позаботились об этом. А лучше кислотки, серной, прям на плату...
-------
Вы странный человек __Alexander, позволяете себе судить квалификацию того, кого совсем незнаете и делать утверждения ни на чем неоснованные типа кто кем может стать, а кто неможет.
Кто Вам сказал такие глупости ?
Программа как раз прекрасно работает, все проблемы решены.
Я просто хочу разобраться и понять работу AVR.
По моим личным наблюдениям в форумах подобные заявления делают простые дилетанты, которые себя считают профессионалами. Они немогут ответить по существу проблемы, но считают своим долгом написать какую-нибудь глупость вроде этой.
Вы написали пару сообщений в этой теме, совершенно бессмысленных.
Зачем Вам это надо, неужели больше нечем заняться ?
Как Вы думаете, эти Ваши сообщения несут в себе хоть какую-нибудь полезную информацию, кроме глупых, детских насмешек ?
Или это такая форма самоутверждения, что характерно для подросткового возраста.

А мои вопросы на форумах адресованы профессионалам, специалистам и тем кто сталкивался с подобными проблемами.
