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

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

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

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

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

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

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

 
Опции темы
Непрочитано 25.05.2010, 19:50  
AGAT0365
Прописка
 
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
AGAT0365 на пути к лучшему
По умолчанию mega8 помогите разобраться с кодом

Складываю измеритель ширины импульса на mega8 динамическую
индикацию выважу на порт "В",но там же находится вход счётчика/таймера1 вот я и не могу понять как мне менять код не затрагивая РВ0,да конечно можно перенести на другой порт но они заняты
вот.
Реклама:
AGAT0365 вне форума  
Непрочитано 25.05.2010, 20:45  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: mega8 помогите разобраца с кодом

Если собираешся выводить только целые числа без запятой то и нет проблемы PB7...PB1 вполне достаточно. Если всеже запятая нужна то перенеси ее на любой свободный PIN. Если используеш корпус DIP то используй TQFP там есть ADC6 и ADC7 тебе это даст 2 свободных PINа.
7Fantomas7 вне форума  
Непрочитано 25.05.2010, 21:14  
Markusha
Временная регистрация
 
Регистрация: 18.07.2006
Сообщений: 90
Сказал спасибо: 8
Сказали Спасибо 13 раз(а) в 9 сообщении(ях)
Markusha на пути к лучшему
По умолчанию Re: mega8 помогите разобраца с кодом

Сообщение от AGAT0365 Посмотреть сообщение
вот я и не могу понять как мне менять код не затрагивая РВ0
Я так понимаю, менять значение PortB не изменяя PB0?
Асм:
Код:
in tmp,portb;где tmp любой свободный/неиспользуемый регистр
andi tmp,0b00000001;очищаем все биты кроме 0(PB0)
or tmp,r17;в r17 или еще где, должно лежать то что мы выводим в порт B
out portb,tmp
Си
Код:
unsigned char zn;//Это объявление либо в начале функции, либо в начале программы то что пишем в порт
PORTB=PORTB&0x01;
PORTB=PORTB|zn;//Единственный минус, всe ноги кроме 0 на несколько тактов падают в 0
Markusha вне форума  
Непрочитано 25.05.2010, 21:33  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

Я че то не понимаю, а разве можно вобще писать
PORTB=PORTB&0x01;
PORTB=PORTB|zn;
ведь PORTB это регистр вывода, а для ввода есть PINB

Если надо че то записать в отдельный пин порта есть куча способов
например для установки единицы в gcc существует такие команды:
PORTB |=_BV(PB0);//Записать 1 в регистр PORTB по адресу PB0
PORTB |=(1‹‹0); //Записать 1 в регистр PORTB по адресу PB0 (применимо и для Codevision)
PORTB &=~_BV(PB0);//Записать 0 в регистр PORTB по адресу PB0
PORTB &=~(1‹‹0); //Записать 0 в регистр PORTB по адресу PB0 (применимо и для Codevision)
PORTB ^=_BV(PB0);//Инверсия бита по адресу PB0 в регистре PORTB
PORTB ^=(1‹‹0); //Инверсия бита по адресу PB0 в регистре PORTB (применимо и для Codevision)

или например:
unsigned char zn;//Это объявление либо в начале функции, либо в начале программы то что пишем в порт
if (zn) PORTB |=(1‹‹0);//Если значение zn - истинно устанавливаем на PB0 - 1
else PORTB &=~(1‹‹0);//Иначе устанавливаем на PB0 - 0

По такому же принципу можно дергать любой или любые пины порта не цепляя другие

Последний раз редактировалось harchenko_pavel; 25.05.2010 в 21:37.
harchenko_pavel вне форума  
Непрочитано 25.05.2010, 21:44  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

Сообщение от harchenko_pavel Посмотреть сообщение
Я че то не понимаю, а разве можно вобще писать
PORTB=PORTB&0x01;
PORTB=PORTB|zn;
ведь PORTB это регистр вывода, а для ввода есть PINB
Когда последний раз даташит читали?
Цитата:
Three I/O memory address locations are allocated for each port, one each for the Data Register
– PORTx, Data Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins
I/O location is read only, while the Data Register and the Data Direction Register are read/write.
st_1 вне форума  
Непрочитано 25.05.2010, 21:51  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

Сообщение от st_1 Посмотреть сообщение
Когда последний раз даташит читали?
Сори не прав, век живи век учись!
harchenko_pavel вне форума  
Непрочитано 25.05.2010, 22:09  
Markusha
Временная регистрация
 
Регистрация: 18.07.2006
Сообщений: 90
Сказал спасибо: 8
Сказали Спасибо 13 раз(а) в 9 сообщении(ях)
Markusha на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

Сообщение от urry Посмотреть сообщение
я чего-то не понимаю ?
Так, наглядно и понятно
Markusha вне форума  
Непрочитано 26.05.2010, 00:15  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

AGAT0365,
Здесь практически рабочая схема с исходником где PB0 свободен, прикрученая к симулятору протеус 7.6. sp4 индикация выведена на PB7...PB1 покрутиш в протеусе все увидиш. Это вольтметр, отключиш АЦП, подключиш чего надо, в динамичке не работает ER в принципе если заинтерисует то я ее к понедельнику докончу отдам в исправленом виде, вобшето PB0 планирую как и ты использовать. Будут вопросы, отвечу. Исходник написан в CodeVisionAVR в принципе можеш рихтовать хоть в блокноте, а вот скомпилировать пардон. Исходник с подробнейшими коментариями, писал для себя потому как сам только изучаю.
Вложения:
Тип файла: zip Prog.zip (108.9 Кб, 52 просмотров)
7Fantomas7 вне форума  
Непрочитано 26.05.2010, 17:02  
AGAT0365
Прописка
 
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
AGAT0365 на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

7Fantomas7, unsigned char sym[]={
0b10000000, //(0)0
0b11110010, //(1)1
Видишь хоть порт РВ0 вход, ты всё равно в него записываешь "0".А мне
надо так что бы он вообще не учавствовал, так как на него приходит

импульсный сигнал.Хоть я могу ошибаться. На другом порту работает,
как только переписываю на порт В программа зависает,так как работает по

прерыванию по нарастающему и спадающему фронту.
AGAT0365 вне форума  
Непрочитано 26.05.2010, 18:21  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

AGAT0365, нет не так.
"Микроконтролеры AVR семейства Mega руководство пользователя" А.В. Евстегнеев
стр. 324 взять можно сдесь http://avr.ru/docs. Очень рекомендую, я лично в захвате от этой книги. Читай сдесь https://kazus.ru/forums/showthread.php?t=18094 именно на эту тему общался, были предложения побитовые операции сделать, именно от их осталась маска порта #define seg_mask (0b00000001) //Маска порта B
все побитовые операции снес в силу того что так и не понял разницы. А запись "0" в PB0 никак не изменяет направление работы пина, он как был входом так и остается вобшем читай книжку за полчаса разберешся, хочеш побитовых операций я тебе указал где читать там мне народ очень доходчиво объяснил.
Цитата:
программа зависает,так как работает по прерыванию по нарастающему и спадающему фронту
Смотри в протеусе что происходит в переменных и регистрах мне помогло очень. Кстати вольтметр дописал до окончательного варианта уже выводит все. Смотри построчно обработчик прерываний очень хорошо все видно. Наверняка косяк там.

Последний раз редактировалось 7Fantomas7; 26.05.2010 в 18:27.
7Fantomas7 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться в схеме микросхемы koiah Электроника - это просто 85 14.05.2010 17:53
Блок питания 0....30В, помогите разобраться!! d.a.denisov Источники питания и свет 33 14.05.2010 09:23
Помогите разобраться с прошивкой Edinolichnik Микроконтроллеры, АЦП, память и т.д 5 26.04.2010 22:24
Помогите разобраться с работой ЖКИ Gonchar Микроконтроллеры, АЦП, память и т.д 8 23.04.2010 17:45
Помогите разобраться с кодом Micro C for AVR deeman30rus Электроника - это просто 7 09.02.2010 11:46


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


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