Страница 2 из 2
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 14:58:01
Prosperous
как происходит прием/передача по SPI я вроде разобрался. Но все равно спасибо

Вопрос немного в другом. Почему когда есть строка
по нажатии кнопки первая нога порта F не меняет свое состояние (т.е. не правильно работает), а когда эта строка закоментирована, то состояние ноги меняется при нажатии кнопки (как и должно быть). Они же никак не связаны вроде
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 15:06:10
pyzhman
Как может меняться состояние ноги, если управление ею отсутствует? Программа у вас крутится в ожидании приема байта. Когда комментируете строку, то ожидания нет и программа крутится в управлении ногой.
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 15:22:06
phanis
Можно так попробовать, а лучше обработчик прерывания по приему организовать.
Код: Выделить всё
#include <spi.h>
unsigned char SPI_receive(void)
{
unsigned char data;
while(!(SPSR & (1<<SPIF)));
data = SPDR;
return data;
}
void main(void)
{
PORTB=0x00;
DDRB=0x08;
PORTC=0x00;
DDRC=0x00;
PORTE=0x00;
DDRE=0xFF;
PORTF=0x00;
DDRF=0x01;
SPCR=0x40;
SPSR=0x00;
// PORTF= SPI_receive();
while (1)
{
while(!(SPSR & (1<<SPIF)))
{
PORTF= PINC & 1;
//PORTF= (~PINC) & 1;// инверсное дейсвие
}
PORTE = SPDR;
};
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 15:44:13
Prosperous
Спасибо

Похоже, то, что надо )
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 15:45:29
pyzhman
<Терпеть не можу когда из-за спины начинают подсказывать. Особенно в Spider.>

Ан нет! Нравится.
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 15:53:01
Prosperous
Прошу прощения за оффтоп: 2pyzhman в смысле? )))
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 16:17:10
pyzhman
Забудь, это про смысл существа бытия.
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 16:25:01
phanis
Если это по поводу меня, прошу прощения, больше не повторится..
Re: Не меняется состояние вывода.
Добавлено: Сб мар 03, 2012 16:29:42
pyzhman
Да нет, дружище phanis. Сколько не гоняй, все равно найдется кто-нибудь, кто считает своим долгом испакостить весь кайф. Хотя считает, что делает одолжение. Или думает, что умнее/эрудированнее/расчетливее. Или хочет просто похвастаться.
Хотя могу и ошибаться. Может вопрошающий ждет именно решения и ему сам процесс познания не так уж и важен.
Re: Не меняется состояние вывода.
Добавлено: Вт мар 06, 2012 18:48:30
ukr823f
Ув. опытные коты, я уже начинаю потихоньку сума сходить с этими портами ввода\вывода.
Собрал в протеусе схемку с одной кнопкой и светодиодом Написал программку, но в ответ тишина. Нехочет МК понимать что я нажимаю кнопку. Хотя в протеусе даже видно что на ножке PINB0 - появляется 0.
пишу в десятичной системе, может тут ошибка?
для получения статуса кнопки может нужно использовать битовую операцию (которые я вообще немогу понять....) (REGISTR & (1<<N))
вот код и файл протеуса. Подскажите где я ошибся, а то это уже тихий ужас...
Код: Выделить всё
#include <avr/io.h> // Хотим использовать порты ввода/вывода
#include <util/delay.h> // Хотим использовать функции задержек
int main()
{
DDRB = 0;
DDRD = 255;
PORTB = 255;
PORTD = 0;
while(1)
{
if (PINB0==1)
{
PORTD=(0<<0);
_delay_ms(1000);
PORTD=(1<<0);
_delay_ms(1000);
}
else
{
PORTD=0;
}
}
}
Re: Не меняется состояние вывода.
Добавлено: Вт мар 06, 2012 18:54:31
ukr823f
Мне в этом плане больше нравиться CodeVisionAVR.
Там понятно можно описывать. Но как я понял синтаксис как в AVR studio более правильный и именно его нужно использовать.
И вообще есть ли у CAVR недостатки перед AVR Studio?
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 07:15:25
pyzhman
так в порт d все время 0 засылается.
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 09:21:18
ukr823f
А почему всё время 0 засылается.? это в какой строке кода происходит?
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 09:29:26
pyzhman
Код: Выделить всё
int main()
{
DDRB = 0;//здесь установили 0
DDRD = 255;
PORTB = 255;
PORTD = 0;
while(1)
{
if (PINB0==1)
{
PORTD=(0<<0);//здесь установили 0
_delay_ms(1000);
PORTD=(1<<0);//здесь установили 0
_delay_ms(1000);
}
else
{
PORTD=0;//здесь установили 0
}
}
}
Гидэ адын?
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 10:37:34
ukr823f
Код: Выделить всё
{
PORTD=(0<<0);//здесь установили 0
_delay_ms(1000);
PORTD=(1<<0);//здесь установили 1 (в коментарии ошибка была.)
_delay_ms(1000);
}
PORTD=(1<<0); - вот тут - Мы же устанавливаем 1 в нулевой пин порта D
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 10:44:03
ploop
Тут мы устанавливаем все пины порта D в ноль. Надо (0<<1). Тогда все в ноль, а нулевой в 1
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 11:09:36
ukr823f
ув. опытные коты.
Ну а если допустим
мне вот в этом выражении нужно выставить пины 0,3,6 в 1, а остальные в ноль
Код: Выделить всё
if (PINB0 == 0) // если кнопка нажата и на ноге PINB0 - лог ноль
{
PORTD...... // делаем на пинах 0,3,6 - единицу а на остальных пинах ноль
}
Просто уже и в интернете сколько страниц пересмотрел, везде попадаются то примеры под CodeVision, то вообще ничего непонятно.
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 11:19:22
pyzhman
или
Применять операторы надо с умом, а не тягать,не думая. Разберитесь, как работает << или >>, и тогда применяйте. А до тех пор просто устанавливайте/сбрасывайте лапки порта.
Re: Не меняется состояние вывода.
Добавлено: Ср мар 07, 2012 11:31:54
Мастер Ломастер
ukr823f писал(а):мне вот в этом выражении нужно выставить пины 0,3,6 в 1, а остальные в ноль
Просто уже и в интернете сколько страниц пересмотрел, везде попадаются то примеры под CodeVision, то вообще ничего непонятно.
а вот это читали?
Re: Не меняется состояние вывода.
Добавлено: Чт мар 08, 2012 13:36:28
phanis
ukr823f писал(а):для получения статуса кнопки может нужно использовать битовую операцию (которые я вообще немогу понять....) (REGISTR & (1<<N))