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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 17.12.2009, 17:16   #1
GunFighter
Частый гость
 
Регистрация: 16.12.2006
Сообщений: 22
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
GunFighter на пути к лучшему
По умолчанию Pic16F887 аппаратный I2C через MicroC Pro

Подсключил к данному контроллеру часы DS1307, но при запросе на чтение выводятся кракозябры. Экран точно верно работает, проверено другими прошивками. В протеусе диаграммы показывают постоянно +5В на шинах.
Код:
char stroka[2];
unsigned int y,o;
unsigned short x;
void main()
{ 
Delay_ms(500);
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
ANSEL = 0xFF;
TRISA = 0×3F;
TRISE = 0×01;
while(1)
{
I2C1_Init(50000);
I2C1_Start();
o=I2C1_Wr(0xD1);
x=I2C1_Rd(0);
I2C1_Stop();
ShortToStr(x,stroka);
if (o==0)
{
Lcd_Out(1,1,stroka);
}
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
}

}
Реклама:
GunFighter вне форума  
Непрочитано 17.12.2009, 17:30   #2
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Pic16F887 аппаратный I2C через MicroC Pro

Раз шпротеус вы пользовать умеете, начните с I2C дебагера. Он там в инструментах есть. И мануал почитайте на микросхему. Зуб даю, что она время в BCD формате возвращает. Для этого в микроЕ есть дополнительная библиотека для конвертирования. Могу свой пример скинуть. Тоже недавно часы делал. Только у меня на экран 2х20 выводится полная дата и время. До будильника не дошел, терпения не хватило. У меня программа на бейсике, но я вашу спокойно читаю. Вы мою тоже прочтете.
И проверьте подключение монитора. У вас переменная х несет число. Даже если там ноль, его должно быть прекрасно видно на мониторе. А конвертирование и вывод у вас верно написаны.
Вложения:
Тип файла: rar 3 часы на пик.rar (61.4 Кб, 125 просмотров)

Последний раз редактировалось Easyrider83; 17.12.2009 в 17:32.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
GunFighter (17.12.2009)
Непрочитано 17.12.2009, 17:55   #3
GunFighter
Частый гость
 
Регистрация: 16.12.2006
Сообщений: 22
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
GunFighter на пути к лучшему
По умолчанию Re: Pic16F887 аппаратный I2C через MicroC Pro

Простите,не тот код запостил. Про bcd я знаю, меня смущает что MicroC bcd в 16тиразрядный код переводит. Может быть маски использовать для взятия тетрад
Код:
char stroka[2];
unsigned int y,o;
unsigned short x;
void main()
{ 
Delay_ms(500);
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
ANSEL = 0xFF;
TRISA = 0×3F;
TRISE = 0×01;
while(1)
{
I2C1_Init(50000);
I2C1_Start();
o=I2C1_Wr(0xD1);
x=I2C1_Rd(0);
I2C1_Stop();
y=Bcd2Dec16(x);
IntToStr(y,stroka);
if (o==0)
{
Lcd_Out(1,1,stroka);
}
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
}

}
GunFighter вне форума  
Непрочитано 17.12.2009, 18:28   #4
GunFighter
Частый гость
 
Регистрация: 16.12.2006
Сообщений: 22
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
GunFighter на пути к лучшему
По умолчанию Re: Pic16F887 аппаратный I2C через MicroC Pro

Еще вопрос, у вас используется софтверный I2C, а для аппаратного надо ли так же прописывать контакты ?
GunFighter вне форума  
Непрочитано 18.12.2009, 21:29   #5
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Pic16F887 аппаратный I2C через MicroC Pro

Сообщение от GunFighter Посмотреть сообщение
Еще вопрос, у вас используется софтверный I2C, а для аппаратного надо ли так же прописывать контакты ?
Давайте по порядку. Аппаратному контакты прописывать не надо т.к. библиотека знает, на каких контактах он сидит и никуда он оттуда не денется. Это касается всей переферии МК в целом. Преимущество встроенных модулей - буфер, который работает на прием пока исполняется ваша программа. Со встроенным вы не потеряете нужные вам данные.
Софтварные библиотеки не очень хороши. Жрут много памяти, не понятно, как работают с прерываниями, но для простейших задач подходят. Их использовать только при крайней необходимости.
Прерывания с ними обрабатывать сложнее. Но это отдельная тема. Надо, чтобы прерывание вызывалось по тревоге с порта, на котором висит ваш интерфейс. Тогда без буфера можно успевать перехватывать поступающие данные. Но любое прерывание должно быть предусмотрено в программе. Есть моменты, когда на половине вычислений вызывается прерывание, которое начинает эту половинную батву выводить наружу. Тогда начинается полная петрушка. С этим повнимательнее.
Easyrider83 вне форума  
Закрытая тема

Закладки


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

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

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


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


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