Например TDA7294

Форум РадиоКот • Просмотр темы - Глюк с DS1307
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 01:03:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Глюк с DS1307
СообщениеДобавлено: Вт окт 31, 2017 19:05:44 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 19:27:30
Сообщений: 56
Рейтинг сообщения: 0
Коллеги, пишу прогу для работы с DS1307 для atmega 8. Имею странный глюк, при чтении данных из DS1307 функцией (функция состоит из команд запись и чтения регистров) данные считываются, но затем происходит запись в 7 регистр данных D0 07 90 (этой команды в программе нет вообще). Если команды записи и чтения прописать в функции main, то все работает хорошо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт окт 31, 2017 19:57:10 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
И чо? ошибка у вас где-то.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт окт 31, 2017 19:57:32 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 1
Не совсем понял, как эти данные - три байта - помеещаются в один седьмой регистр.

Последний байт с NOACK читается хоть?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт окт 31, 2017 19:58:54 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 19:27:30
Сообщений: 56
Рейтинг сообщения: 0
Не совсем понял, как эти данные - три байта - помеещаются в один седьмой регистр.

Последний байт с NOACK читается хоть?

последний считается в обоих случаях. Без него все просто останавливалось.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт окт 31, 2017 20:40:46 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
У меня в вопросе ударение было не на "читается", а на "NOACK".
А вообще, гадать на кофейной гуще, не видя кода - смысла мало.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Ср ноя 01, 2017 06:12:41 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 19:27:30
Сообщений: 56
Рейтинг сообщения: 0
Вот код функции. Немного понял, после выхода из функции происходит перезагрузка МК. Из-за чего заново инициализируется DS1307, но вместо байта данных 00 записывается 90. См. лог во вложении.
Сама функция
void rtc_gettime(unsigned char *hour,unsigned char *min,unsigned char *sec){

I2CStart();
if (I2CWriteByte(0xd0));
if (I2CWriteByte(0x00));
//I2CStop();

I2CStart();
if (I2CWriteByte(0xd1));
if (I2CReadByte(*sec,1));
if (I2CReadByte(*min ,1));
if (I2CReadByte(*hour,0));
I2CStop();
}

P.S. разобрался был перезагруз МК из-за другой функции. Хотя странный в ней был switch от 0 до 9. при вводе в процедуру числа 10, был перезагруз, добавил default тоже самое, пришлось сдeлать проверку if.


Вложения:
QIP Shot - Screen 100.png [47.98 KiB]
Скачиваний: 232


Последний раз редактировалось duss1981 Ср ноя 01, 2017 06:50:39, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 06:48:58 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 1
А if() зачем?

Опять же, кода недостаточно. Мы не знаем, например, выделена ли память под указатели *sec, *min и *hour. Вангую, что нет, и от этого и перезагрузки МК.

А вообще красивее было бы иметь структуру для хранения времени, и читать в неё. Т.е. что-то вроде:
Спойлер
Код:
typedef struct {
   uint8_t sec;
   uint8_t min;
   uint8_t hour;
} Time_t;

Time_t time;

void rtc_gettime(Time_t *t)
{
  I2CStart();
  if (I2CWriteByte(0xd0));
  if (I2CWriteByte(0x00));

  I2CStart();
  I2CWriteByte(0xd1);
  I2CReadByte(&t->sec, 1);
  I2CReadByte(&t->min, 1);
  I2CReadByte(&t->hour, 0);
}

int main()
{
  ...
  rtc_gettime(&time);
  ...
}


Последний раз редактировалось WiseLord Ср ноя 01, 2017 06:59:14, всего редактировалось 4 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 06:52:12 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 19:27:30
Сообщений: 56
Рейтинг сообщения: 0
Чтобы сделать проверку что число в диапазоне, говорю default не работает, точнее с ним тоже перезагруз был
ниже пример
switch (digit) {
case 0:
PORTD=0x5F;
break;
case 1:
PORTDIG=0x0C;
break;
case 2:
PORTDIG=0x3B;
break;
case 3:
PORTDIG=0x3E;
break;
case 4:
PORTDIG=0x6C;
break;
case 5:
PORTDIG=0x76;
break;
case 6:
PORTDIG=0x77;
break;
case 7:
PORTDIG=0x1C;
break;
case 8:
PORTDIG=0x7F;
break;
case 9:
PORTDIG=0x7E;
break;
default:
PORTDIG=0x00;
break;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 06:58:47 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Неужели трудно:
а) помещать код в тег [code]?
б) поместить в этот тег ВЕСЬ код целиком, а не жалкие огрызки?

duss1981 писал(а):
Чтобы сделать проверку что число в диапазоне, говорю default не работает, точнее с ним тоже перезагруз был
ниже пример
вот что должно быть мне понятно из этого вашего "примера"? какую цель он преследовал? продемонстрировать ваш навык писать switch методом copy-paste?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 07:35:30 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Очередная тема быдлокодерства, которая, по всей видимости, также как и недавняя, развернётся на 3 страницы экстрасенсорных обсуждений :facepalm:
И опять же, мы вляпываемся в это г...о :))

PS: Пора уже наверное просто начинать игнорить подобные темы. Пусть люди учатся вопросы нормально задавать, со всеми прикреплёнными максимально-необходимыми данными.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 07:57:07 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 19:27:30
Сообщений: 56
Рейтинг сообщения: 0
Я говорю перезагруз был если в switch попадало число более 9, пробовал вводит переменнную более 9.
Вот исправленная процедура получения времени (см. ниже), а вот вызов ее main rtc_get_time(&hour,&min,&sec);.
В процедуру передаются адреса переменных (&sec и т.д.), эти адреса передаются функции I2CReadByte(sec,1) без указателя )
сама функция I2CReadByte(sec,1) берет адрес переменной и записывает туда нужное значение. Если ее вызвать напрямую то получится I2CReadByte(&sec,1). Это конечно все учебниках написано, но каждый учится на своих ошибках.

void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec){
I2CStart();
if (I2CWriteByte(0xd0));
if (I2CWriteByte(0x00));
//I2CStop();

I2CStart();
if (I2CWriteByte(0xd1));
if (I2CReadByte(sec,1));
if (I2CReadByte(min ,1));
if (I2CReadByte(hour,0));
I2CStop();

}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 08:06:22 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Аlex писал(а):
Пора уже наверное просто начинать игнорить подобные темы
пора :beer:

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Глюк с DS1307
СообщениеДобавлено: Ср ноя 01, 2017 08:44:23 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
duss1981 писал(а):
запись в 7 регистр данных D0 07 90 (этой команды в программе нет вообще)
Вот видео демонстрации записи в 7-ой регистр DS1307.
А вот видео демонстрации что default работает.

И действительно
Код:
if (I2CWriteByte(0xd0));
зачем if()?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 54


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y