Перейти к содержанию

Cvavr


serg

Рекомендуемые сообщения

Снова столкнулся с явно простой проблемой! но поскольку я начинающий, незнаю как её решить! Научите меня работать с отдельными битами переменной. Мне нужно считать бит с ножки, и записать его в нулевой бит переменной, потом сдвинуть переменную влево, и снова повторить тоже (в цикле!)

Так инициализирую переменную

register unsigned char bufer;

А на эту строку матерится кодевижн

bufer.0=PIND.0;

с портами ввода\вывода такой код работает, а с переменными нехочет :(

I love AVR;

Народ! все кто с города Кременчуг добавляйтесь в друзья!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А на эту строку матерится кодевижн..

На нее матерится не только он... Скажите, это не Вам писали?..

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Мне) но тут же другое надо сделать! тогда надо было проверять заданный бит переменной, а в этот раз нужно записывать с пина ввода\вывода в заданый бит переменной Невижу связи между тем что мне надо и теми строками

I love AVR;

Народ! все кто с города Кременчуг добавляйтесь в друзья!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вот это можт пойдет:

if (PIND.x)

bufer|=(1<<x)

else

bufer&=0xff^(1<<x)

насчет скорости выполнения - не знаю

Изменено пользователем Dan'nah
Ссылка на комментарий
Поделиться на другие сайты

Спасибо! завтра со свежей головой буду дальше програмировать, и проверю этот код, щас уже сил нет :(

I love AVR;

Народ! все кто с города Кременчуг добавляйтесь в друзья!

Ссылка на комментарий
Поделиться на другие сайты

Невижу связи...

Тогда тренируйте абстрактное мышление:

#define INPUT_PORT PORTD /*задаем входной порт*/
#define INPUT_PIN 0 /*задаем входной пин*/
#define X 10 /*задержка*/
//...
unsigned char read_pin; //число приемник
//...
// функция чтения:
unsigned char recieve_byte(){
unsigned char recieve; //локальный  приемник
unsigned char  i;   //счетчик
for (i=0;i<8;recieve|=(INPUT_PORT&(1<<INPUT_PIN))? 1:0,recieve<<1,++i) delay_ms(X) /*если нужна задержка*/;
return recieve;				   }
//...
read_pin=recieve_byte(); //пример использования

В железе не проверял, но должно работать. В любом случае доделаете. Потому как читать обычно нужно по СОБЫТИЮ (фронт или еще чего) а не тупо в цикле. Хотя иногда и такое нужно. Поясните...

И в качестве упражнения, разберите как работает такой код:

(последовательно выводит на ножку биты из переменной, направление можно менять)

unsigned char byte; 
//...
void transmit_byte(unsigned char const *byte, unsigned char direct){
  unsigned char  mask;
   for (mask=(direct)? 1:0x80;mask;mask=(direct)? mask<<1:mask>>1)
			  {PORTW=(*byte&mask)? PORTW|(1<<BIT):PORTW&~(1<<BIT);/*delay_us(X)*/;}
																						}
//...
//пример:
transmit_byte(&byte,0);
//или
transmit_byte(&byte,1);

Разберетесь - значит урок закреплен и под себя без труда переделаете. Если нет, то тогда как завещал великий...

Изменено пользователем Goodefine

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Спасибо) буду учить и тренировать мышление)

Еще оч интересно сколько времени будет выполнятся такой код, так как у меня все работает по прерыванию инт0, и нужно чтобы код успел выполнится пока не наступит следующее прерывание по инт0, у меня инт0 это вход клока, а еще один вывод - вход данных

ответы нашол еще на одном сайтике, такчто вопрос закрыт,завтра буду продолжать кодить),

цитата с сайта:

Установка бита осуществляется при помощи двоичного ИЛИ этой переменной и числом, в котором установлен нужный бит. Например:

var = var | 0x40; // установка 6-го бита в 1.

Проще всего получить число с установленным нужным битом при помощи операции логического сдвига:

var = var | (1<<6);

Сброс бита осуществляется при помощи операции двоичного И между переменной и числом, в котором все биты, кроме нужного, равны 1, а нужный бит равен нулю:

var = var & 0xF7; // обнуление 4-го бита

Изменено пользователем Гуня

I love AVR;

Народ! все кто с города Кременчуг добавляйтесь в друзья!

Ссылка на комментарий
Поделиться на другие сайты

Еще раз спасибо всем за помощ! Завтра (тоесть уже сегодня но после того как высплюсь :D ) буду проверять скорость выполнения данного кода!

I love AVR;

Народ! все кто с города Кременчуг добавляйтесь в друзья!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Здравствуйте уважаемые!

задам еще тут вопрос:

Помогите мне пожалуйста...

А как отправлять отдельные биты по SPI ?

Или так нельзя делать?

Пробовал , не получается обычными методами...

мне надо так: у меня например 1,2 и 3 биты установлены и не трогая их установить 6 и 7бит и наоборот чтоб я мог сбрасывать биты

Хочу понять как управлять этой микросхемой..

http://www.analog.co...eets/AD1955.pdf

и как понять table1 , table2...

что это за таблици такие?

работаю в CVAVR

разьясните мне пожалуйста что да как делать...

С ув. Артем.

Из даташита видно что надо отправлять 42 бита.

Первых 16бит, 0 регистр. Вторые 10бит 1 регистр. И второй регистр 16бит контролируем громкость.

Как по SPI оперировать отдельными битами? Какой алгоритм?

Прикрепляю фрагмент из даташита для ясности проблемы.

post-59941-0-10946400-1302211826_thumb.png

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Как по SPI оперировать отдельными битами? Какой алгоритм?

Аппаратно - у AVR никакого. Но кто мешает реализовать программный SPI?

Демократия лишь укрепляет наш родной крепостнический строй! (с)

Ссылка на комментарий
Поделиться на другие сайты

> Но кто мешает реализовать программный SPI?

Как? :)

Не имею представления как оперировать отдельными битами...

Как не пробовал , все равно двигает остальные биты...

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Отдельные биты собираем в байты и далее работаем с ними

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

#define INPUT_PORT PORTD /*задаем входной порт*/
#define INPUT_PIN 0 /*задаем входной пин*/
#define X 10 /*задержка*/
//...
unsigned char read_pin; //число приемник
//...
// функция чтения:
unsigned char recieve_byte(){
unsigned char recieve; //локальный  приемник
unsigned char  i;   //счетчик
for (i=0;i<8;recieve|=(INPUT_PORT&(1<<INPUT_PIN))? 1:0,recieve<<1,++i) delay_ms(X) /*если нужна задержка*/;
return recieve;                            }
//...
read_pin=recieve_byte(); //пример использования

блин.... нифига не пойму... разжуйте пожалуйста тупому! Очень хочу научиться :)

а то немного продвинулся вперед и все... тормознул. :(

и этот код не понятен...

unsigned char byte; 
//...
void transmit_byte(unsigned char const *byte, unsigned char direct){
  unsigned char  mask;
          for (mask=(direct)? 1:0x80;mask;mask=(direct)? mask<<1:mask>>1)
                                 {PORTW=(*byte&mask)? PORTW|(1<<BIT):PORTW&~(1<<BIT);/*delay_us(X)*/;}
                                                                                                                                                                                       }
//...
//пример:
transmit_byte(&byte,0);
//или
transmit_byte(&byte,1);

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...