Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.05.2010, 00:26  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

Сообщение от andries5 Посмотреть сообщение
Чтобы правильно горели цифры, можно делать в два этапа:
Проще в один.
Код:
#define SEG_MASK (~0xFE) // ~0b11111110, для исключения изменения PB0
#define DIGIT_1 0xC0 // 0b11000000

PORTB = (PORTB & SEG_MASK)|DIGIT_1;
Можно это в макрос обернуть или инлайновой функцией сделать:
Код:
static inline OutSym(unsigned char sym)
{
PORTB = (PORTB & SEG_MASK)|sym;
}
// и вызывать в коде:
OutSym(DIGIT_1);
Реклама:
kison вне форума  
Эти 2 пользователя(ей) сказали Спасибо kison за это сообщение:
7Fantomas7 (11.05.2010), andries5 (11.05.2010)
Непрочитано 11.05.2010, 06:05  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

Огромное спасибо.
Вроде начинаю понимать.
andries5
Цитата:
1 Погасить все катоды. PORTB |= 0b11111110;
Да я действительно гашу все катоды, такая рекомендация есть в примере на основании которого я и изучаю этот процес.
Но если изначальное значение PORTB=0x01; т.е. 00000001
То операция PORTB= 0b11111111; (гасим все катоды) по сути никак бит0 не меняет в весь порт записали число, а бит 0 как был 1 так и остался 1.
Если зажигаем цифру 0 например так PORTB= 0b10000001 то бит0 опять не меняется 1 был да так и остался. Другими словами в знакогенераторе достаточно во всех цифрах бит0 сделать 1 и все шито крыто.
Подскажите правильно ли я понимаю и как постоянная перезапись 1 отразится на работе PB0 как входа, не будет ли мешать.
И еще подскажите если можно такую вещь. Я гдето помоему читал об возможности записи числа в регистр по маске (помоему так) т.е. например зписать в регистр 3 старших разряда, или биты №х №х №х, но так как литературы по этому делу перелопатил уйму то не помню где. Где про это можно почитать и как правильно это называется.

Последний раз редактировалось 7Fantomas7; 11.05.2010 в 06:13.
7Fantomas7 вне форума  
Непрочитано 11.05.2010, 08:57  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,799
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

Сообщение от 7Fantomas7 Посмотреть сообщение
То операция PORTB= 0b11111111; (гасим все катоды)
Будьте внимательны! Не PORTB= 0b11111111;, а PORTB |= 0b11111110;, т.е. используется операция ИЛИ. А у Вас приравнивание. А это ошибка.
andries5 вне форума  
Сказали "Спасибо" andries5
7Fantomas7 (11.05.2010)
Непрочитано 11.05.2010, 09:18  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,799
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

kison, Вы правы, так писать удобнее. Я лишь написал как можно делать, но у Вас опыта больше.
А почему инлайновая функция, а не простая?

Последний раз редактировалось andries5; 11.05.2010 в 09:22.
andries5 вне форума  
Непрочитано 11.05.2010, 09:55  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

andries5,
Я согласен, Вы правы безспорно. Я знаю побитовые операции но для меня важно понть принцип. Почему нельзя сделать приравнивание? если значение нужного бита не меняется. Мы ведь DDRB=0xFE; не трогаем и вывод PB0 по идее должен оставаться входом.

Последний раз редактировалось 7Fantomas7; 11.05.2010 в 09:58.
7Fantomas7 вне форума  
Непрочитано 11.05.2010, 09:59  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,799
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

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

Последний раз редактировалось andries5; 11.05.2010 в 11:17.
andries5 вне форума  
Сказали "Спасибо" andries5
7Fantomas7 (11.05.2010)
Непрочитано 11.05.2010, 11:12  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

Сообщение от 7Fantomas7 Посмотреть сообщение
И еще подскажите если можно такую вещь. Я гдето помоему читал об возможности записи числа в регистр по маске (помоему так) т.е. например зписать в регистр 3 старших разряда, или биты №х №х №х,
Я выше как раз и дал пример с маской. Там замаскирован PB0, но ничто не мешает замаскировать любые разряды в любом порядке. Надо всего лишь изменить дефайн SEG_MASK.
Сообщение от andries5 Посмотреть сообщение
А почему инлайновая функция, а не простая?
Функция маленькая, ее выгоднее встраивать в код. Так быстрее работает.
При обычной:
1 - переместить данные в Call Used регистр
2 - вызвать функцию
3 - отработав выполнить ret
А при инлайне этого оверхеда нет. Теряем 4 байта, но почти в два раза быстрее работает.
kison вне форума  
Сказали "Спасибо" kison
7Fantomas7 (11.05.2010)
Непрочитано 11.05.2010, 15:09  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

andries5,
Цитата:
он и будет входом
другими словами постоянная перезапись 1 никак не влияет на состояние
Цитата:
но вход может быть подключен к подтягивающему резистору или нет
в моем случае подключен к подтягивающему резистору и меня очень интерисует что произойдет если мы опять будем писать туда 1 прямо вот так в момент перезаписи что будет происходить?, не будет ли "дребезга" на входе.
7Fantomas7 вне форума  
Непрочитано 11.05.2010, 16:00  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,799
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

Сообщение от 7Fantomas7 Посмотреть сообщение
не будет ли "дребезга" на входе.
Не знаю, но думаю что не будет. А с другой стороны зачем? Выше kison обьяснил:
вначале обьявите define
#define SEG_MASK (~0xFE) // ~0b11111110, для исключения изменения PB0
#define DIGIT_0 0b10000001
#define DIGIT_1 0b11110011
#define DIGIT_2 0b01001001
и т.д.
ниже обьявите
static inline OutSym(unsigned char sym)
{
PORTB = (PORTB & SEG_MASK)|sym;
}
а в ходе программы высвечивайте нужную цифру
OutSym(DIGIT_1);
и не будете думать о дребезге или других последствиях.
andries5 вне форума  
Сказали "Спасибо" andries5
7Fantomas7 (11.05.2010)
Непрочитано 11.05.2010, 16:23  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AT Mega8 вольтметр прошу помочь

Сообщение от 7Fantomas7 Посмотреть сообщение
если мы опять будем писать туда 1 прямо вот так в момент перезаписи что будет происходить?, не будет ли "дребезга" на входе.
Не будет - это триггер по сути. Перезапись того же состояния никаких "иголок" не вызывает.
kison вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АЦП в mega8 FlashAck Микроконтроллеры, АЦП, память и т.д 29 29.01.2010 17:50


Часовой пояс GMT +4, время: 03:07.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot