Страница 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
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, то мои часики работают некоторое время, скажем так несколько минут, а опосля зависают, помогает только выкл-вкл питания
где искать причину ?

Re: TWI+DS1307+Atmega8
Добавлено: Пт окт 11, 2013 16:07:09
FreshMan
вот либа
Re: TWI+DS1307+Atmega8
Добавлено: Пт окт 11, 2013 18:17:12
phanis
Хотел спросить, по поводу выражения
Этот бит
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.
К счастью такие ситуации редкие и выходом действительно может быть таймаут. Это если любой ценой надо возобновить пусть и ограниченное функционирование девайса.