Страница 1 из 2

TWI+DS1307+Atmega8

Добавлено: Ср окт 09, 2013 19:19:32
king-live
Доброго времени суток! Пишу программу для огромного циферблата на здании. Часы работают пока есть питание, как только питание исчезает понятное дело время обнуляется. Хочу применить девайс DS1307 и применить аппаратное TWI. (в Atmega8). Только вот при подключении библиотек, библиотеку TWI нашёл, а под DS1307 библиотеки нет. Проекты пишу Studio4+WinAVR. На сайтах нашёл похожие проекты, но под CVAVR. Хотелось бы найдти, что нибудь под WinAVR. И написанное доступным для понимания новичка именно в работе с аппаратным TWI. Спасибо.

Re: TWI+DS1307+Atmega8

Добавлено: Ср окт 09, 2013 19:57:23
uk8amk
Вот переносил с программного I2c на TWI в CVAVR. Должно завестись и на WinAVR без плясок с бубном.
bcd.lib содержит ассемблерные функции математики BCD.

Re: TWI+DS1307+Atmega8

Добавлено: Ср окт 09, 2013 21:04:20
king-live
Спасибо! Посмотрел. У меня раньше все проекты умещались в одном файле, без подключаемых файлов. Поэтому трудно мне понять как все файлы разместить и запустить. И потом что за зверь BCD?

Re: TWI+DS1307+Atmega8

Добавлено: Чт окт 10, 2013 06:33:00
vek
самый первый ответ гугла:
http://ru.wikipedia.org/wiki/%D0%94%D0% ... 0%BE%D0%B4

Re: TWI+DS1307+Atmega8

Добавлено: Чт окт 10, 2013 08:15:45
king-live
Ну про гугл понятно(BCD), это я прочёл тему сразу. Не понял откуда он взялся, я потерял последовательность понимания темы. Поэтому и в небольшом тупике. Что это, функция, макрос? Где его описание именно в WinAVR? Спасибо!

Re: TWI+DS1307+Atmega8

Добавлено: Чт окт 10, 2013 08:38:00
uk8amk
С помощью Copy-Paste данную проблему решить несложно. И также несложно получить плохочитаемую, трудноподдерживаемую километровую простыню кода.
king-live писал(а):Что это, функция, макрос?
Откройте bcd.lib блокнотом.

Re: TWI+DS1307+Atmega8

Добавлено: Чт окт 10, 2013 17:00:11
FreshMan
подскажите пожалуйста в какую сторону мне копать дабы найти ошибку
у меня на плате собраны часы: ATmaga8a+DS1307
когда я свой проэкт собираю в CodeVision. компилирую и прошиваю то все работает безупречно, а вот когда я свой проэкт собираю в Eclipse, где подключаю свои библиотеки для работы по TWI, то мои часики работают некоторое время, скажем так несколько минут, а опосля зависают, помогает только выкл-вкл питания
где искать причину ? :dont_know:

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 16:07:09
FreshMan
вот либа

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 18:17:12
phanis
Хотел спросить, по поводу выражения

Код: Выделить всё

 while (!(TWCR & (1<<TWINT)))  {; }
Этот бит TWINT в любом случае изменит свое состояние? Т.е не будет такого что программа зависнет в этом цикле?

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 19:00:17
FreshMan
в теории, насколько я в курсе, этот бит выставляется аппаратно так что по идее там должно быть все ок.

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 19:38:14
phanis
т.е даже не зависимо от того что творится на шине? (замыкания, обрывы, перебои, зависания слейв устройств)

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 19:50:02
king-live
bcd.lib
Что с ним делать? Куда вставлять или копировать?

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 19:51:44
FreshMan
этот флаг, при аппаратном TWI, лишь сигнализирует о том что то задание которое ты дал успешно выполнено
например, ты дал команду сформировать СТАРТ, через некоторое время МК выполнил твое пожелание и поскольку он не владеет человеческой речью, а сообщить тебе о своих успехах ему охота :)) , вот он тебе и делает отмашку флагом, мол так и так, командир, поставленная тобой задача успешно выполнена.

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 19:54:36
phanis
Значит, если команда не выполнена успешна, тогда зависнем в этом цикле, так?

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 20:00:46
uk8amk
phanis писал(а):т.е даже не зависимо от того что творится на шине?
• Bit 7 – TWINT: TWI Interrupt Flag
This bit is set by hardware when the TWI has finished its current job and expects application
software response.
Иными словами говорит, что что-то на шине произошло. А что именно - надо заглянуть в TWI Status
Register (TWSR) и прочитать код состояния. Сбой шины, потеря арбитража, зависание слейва(NACK) - всё определяется через TWSR.
king-live писал(а):
bcd.lib
Что с ним делать? Куда вставлять или копировать?
Подключить к проекту. Либо посмотреть как bcd оформлена у FreshMan.

Re: TWI+DS1307+Atmega8

Добавлено: Пт окт 11, 2013 20:16:49
phanis
Спасибо, если правильно понял, чтобы избежать бесконечного ожидания успешного окончания задачи, нужно добавить какой нибудь счетчик итераций, что то типа этого

Код: Выделить всё

uint count = xxxxx;
  while (!(TWCR & (1<<TWINT))& count--)  {; }

Re: TWI+DS1307+Atmega8

Добавлено: Сб окт 12, 2013 10:11:11
uk8amk
Опять повторюсь:
TWINT в любом случае установится как только на TWI произойдет какое-то событие(например передача START, SLAW и т.д.). А вот обрабатывать состояния иногда бывает полезно.
Например, в табло бегущей строки, в зависимости от пожеланий заказчика, может быть не установлена микросхема часов.
Я написал такой код:

Код: Выделить всё

char twi_status( void )
{
	return (TWSR & TWSR_MASK);
}

uint8_t rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
{
...
twi_start();
twi_write(0xd0);
status = twi_status();
if( (status == TWI_MT_SLAW_NACK) || (status == TWI_MT_DAT_NACK) ||
	(status == TWI_MT_LOST) )
	{//NACK or other BUS ERROR --> no RTC chip
	twi_stop();
	return RTC_FAILURE;
	};
...
twi_stop();
return RTC_OK;
}
Т.о. если на шине какие-то проблемы и чип не отвечает, то обмен данными с ним просто прекращается. А программа получает соответствующий флаг.

Re: TWI+DS1307+Atmega8

Добавлено: Сб окт 12, 2013 10:33:08
FreshMan
uk8amk писал(а):TWINT в любом случае установится как только на TWI произойдет какое-то событие(например передача START, SLAW и т.д.).
даже если мы дали команду СТАРТ по по каким-либо причинам она не выполнилась ?

Re: TWI+DS1307+Atmega8

Добавлено: Сб окт 12, 2013 11:36:01
shads
king-live писал(а):Доброго времени суток! Пишу программу для огромного циферблата на здании. Часы работают пока есть питание, как только питание исчезает понятное дело время обнуляется. Хочу применить девайс DS1307 и применить аппаратное TWI. (в Atmega8). Только вот при подключении библиотек, библиотеку TWI нашёл, а под DS1307 библиотеки нет. Проекты пишу Studio4+WinAVR. На сайтах нашёл похожие проекты, но под CVAVR. Хотелось бы найдти, что нибудь под WinAVR. И написанное доступным для понимания новичка именно в работе с аппаратным TWI. Спасибо.
Глянь несколько моих учебных проектиков, может чтото пригодится..... тоько я везде программный TWI использую... но для часов - думаю не принципиально, какой TWI использовать...
http://asis-kbr.ru/forum/viewtopic.php?f=11&t=175
http://asis-kbr.ru/forum/viewtopic.php?f=11&t=159

Re: TWI+DS1307+Atmega8

Добавлено: Сб окт 12, 2013 12:13:35
uk8amk
FreshMan писал(а):СТАРТ по по каким-либо причинам она не выполнилась ?
С одной стороны:
The TWINT Flag is set in the following situations:
• After the TWI has transmitted a START/REPEATED START condition.
• After the TWI has transmitted SLA+R/W.
• After the TWI has transmitted an address byte.
• After the TWI has lost arbitration.
• After the TWI has been addressed by own slave address or general call.
• After the TWI has received a data byte.
• After a STOP or REPEATED START has been received while still addressed as a Slave.
When a bus error has occurred due to an illegal START or STOP condition.
Но с другой стороны:
• Bit 5 – TWSTA: TWI START Condition Bit
The application writes the TWSTA bit to one when it desires to become a Master on the Twowire
Serial Bus. The TWI hardware checks if the bus is available, and generates a START condition
on the bus if it is free. However, if the bus is not free, the TWI waits until a STOP condition
is detected, and then generates a new START condition to claim the bus Master status.
Иными словами если на шине сопля на землю, то он пожизненно будет ждать STOP.
К счастью такие ситуации редкие и выходом действительно может быть таймаут. Это если любой ценой надо возобновить пусть и ограниченное функционирование девайса.