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

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

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

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

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

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

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

 
Опции темы

mega8 помогите разобраться с кодом

Непрочитано 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.RUN
 
Регистрация: 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,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
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.RUN
 
Регистрация: 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.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: mega8 помогите разобраться с кодом

AGAT0365, нет не так.
"Микроконтролеры AVR семейства Mega руководство пользователя" А.В. Евстегнеев
стр. 324 взять можно сдесь http://avr.ru/docs. Очень рекомендую, я лично в захвате от этой книги. Читай сдесь https://kazus.run/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, время: 04:27.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.