реклама на сайте
подробности

 
 
> Ввод/Вывод, помогите прозреть =)
GIGAWAT
сообщение Feb 15 2007, 23:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 9-02-07
Из: Санкт-Петербург
Пользователь №: 25 221



Уважаемые товарищи 8) Помогите прозреть.
Я не первый, и не последний с подобным вопросом.
Итак, исходные данные:
1) Моя плата http://smileymicros.com/download/Butterfly..._position=62:62

2)Схемка подключения переферии


3)Программка 8)
======================================
#include <avr/io.h>
#include <avr/delay.h>

int main (void)
{
DDRD = 0xFF;
DDRB = 0xFF; // Настройка порта D и B для вывода
unsigned char temp;

while (1)
{
cbi(PORTB,PB1);
_delay_ms(0.485);
sbi(PORTB,PB1);
_delay_ms(0.065);

temp=PINB;
if (temp)
{

cbi(PORTD,PD0);
_delay_ms(0.240);
}
else
while(1)
{
sbi(PORTD,PD0);
}
}

}
=========================================
Суть: Диод поключенный к PD0 никак нихочет гореть когда я закорачиваю PB1 на землю :?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GIGAWAT
сообщение Feb 15 2007, 23:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 9-02-07
Из: Санкт-Петербург
Пользователь №: 25 221



Собственно я прочитал в книге "Применение микроконтроллеров AVR. Схемы, алгоритмы, программы (Баранов В.Н.)".
Там написано:

Прикрепленное изображение


Вот...
Порт вроде не сжог, ибо проверял на осцилографе уровни сигналов.

Цитата(beer_warrior @ Feb 15 2007, 23:32) *
Цитата
Код
DDRD = 0xFF;    DDRB = 0xFF; // Настройка порта D и B для вывода

1.И что вы хотите прочитать с PINB?
2.Анализ идет по всему PINB. а не по биту.

Ну вроде так:
PINB в temp
если (temp (истина, не ноль)) {дога нуль на порт с диодом} иначе {единицу на порт с диодом}
или я неправ cranky.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 16 2007, 00:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(GIGAWAT @ Feb 16 2007, 00:46) *
Собственно я прочитал в книге "Применение микроконтроллеров AVR. Схемы, алгоритмы, программы (Баранов В.Н.)".
Там написано:

Прикрепленное изображение


Вот...
Порт вроде не сжог, ибо проверял на осцилографе уровни сигналов.


Это ещё один и не самый яркий пример, как цитата вырванная из контекста вводит в заблуждение начинающих программеров. smile.gif

Итак. То что там написано (как не странно) совершенно правильно. Но это совсем не означает, что так надо и делать. Смысл написанного сводится к тому, что данные регистры имеют различный смысл. А чтобы это понять надо было полностью прочитать описание порта. Короче при выводе 1 в порт и закоротке её на землю ток по данной ноге будет стремится к бесконечности и будет ограничен лишь мощностью ноги порта (может быть свыше 40ма правда), сопротивлением контакта кнопки, мощностью источника. Что данная нога выйдет из строя - нет ни каких сомнений. Это лишь вопрос времени. Ещё раз привожу правильную инициализацию порта

DDRB = 0xfe; // B0 на ввод
PORTB != 1; // Кнопку подпереть


Цитата
Цитата(beer_warrior @ Feb 15 2007, 23:32) *

Цитата
Код
DDRD = 0xFF;    DDRB = 0xFF; // Настройка порта D и B для вывода

1.И что вы хотите прочитать с PINB?
2.Анализ идет по всему PINB. а не по биту.

Ну вроде так:
PINB в temp
если (temp (истина, не ноль)) {дога нуль на порт с диодом} иначе {единицу на порт с диодом}
или я неправ cranky.gif


if((PINB & 1) == 0) то кнопка нажата
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016