|
Странное поведение DS1302 |
|
|
|
Dec 26 2007, 14:04
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 21-12-07
Из: г.Астрахань
Пользователь №: 33 511

|
Я кажется понял где грабли: у меня моя железка питается от мощьного блока питания. я выдернул щас из нее силовой кабель и напряжение питания начало медленно падать... так вот в какой-то момент времени, перед тем, как экран погаснет, там появлись четные числа... питание от +5В. завтра буду пробовать подключить RTC через линейный преобразователь напряжения на 3,3 В... мне почему то кажется, что это решение проблемы
|
|
|
|
|
Dec 27 2007, 05:44
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Маленький совет по динамической индикации:Во время отображения, особенно если цифра отсутствует или какойто сегмент отключен, может наблюдаться еле заметная подсветка сегмента. Дело тут в следующем: Ваш код, смотрите сначала в "t0_l4" Вы выключаете "LED4", а при следующем прерывании в"t0_l1"сначало включаете "LED1".. а через несколько команд выключаете "LED4". Это может быть видно на диодах сегментного индикатора: Цитата(Pepper @ Dec 21 2007, 13:35)  t0_l1: cbi PORTD, LED1 sbi PORTD, LED2 sbi PORTD, LED3 sbi PORTD, LED4 lds r17, DisplayNum rjmp t0_l5 t0_l2: sbi PORTD, LED1 cbi PORTD, LED2 sbi PORTD, LED3 sbi PORTD, LED4 lds r17, DisplayNum + 1 rjmp t0_l5 t0_l3: sbi PORTD, LED1 sbi PORTD, LED2 cbi PORTD, LED3 sbi PORTD, LED4 lds r17, DisplayNum + 2 rjmp t0_l5 t0_l4: clr r16 sbi PORTD, LED1 sbi PORTD, LED2 sbi PORTD, LED3 cbi PORTD, LED4 lds r17, DisplayNum + 3 решение простое: Код t0_l1: sbi PORTD, LED1//сначало все выключим sbi PORTD, LED2 sbi PORTD, LED3 sbi PORTD, LED4
cbi PORTD, LED1//а потом включим нужный сегмент sbi PORTD, LED2 sbi PORTD, LED3 sbi PORTD, LED4 lds r17, DisplayNum rjmp t0_l5
Сообщение отредактировал adc - Dec 27 2007, 05:45
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 27 2007, 06:03
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 21-12-07
Из: г.Астрахань
Пользователь №: 33 511

|
Цитата(adc @ Dec 27 2007, 08:44)  Маленький совет по динамической индикации:Во время отображения, особенно если цифра отсутствует или какойто сегмент отключен, может наблюдаться еле заметная подсветка сегмента. Дело тут в следующем: Ваш код, смотрите сначала в "t0_l4" Вы выключаете "LED4", а при следующем прерывании в"t0_l1"сначало включаете "LED1".. а через несколько команд выключаете "LED4". Это может быть видно на диодах сегментного индикатора: решение простое: Код t0_l1: sbi PORTD, LED1//сначало все выключим sbi PORTD, LED2 sbi PORTD, LED3 sbi PORTD, LED4
cbi PORTD, LED1//а потом включим нужный сегмент sbi PORTD, LED2 sbi PORTD, LED3 sbi PORTD, LED4 lds r17, DisplayNum rjmp t0_l5  Спасибо за дельное замечание. исправил
|
|
|
|
|
Dec 27 2007, 06:37
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Скажите, а в схеме у Вас батарейный элемент питания стоит? зы: я не просто спрашиваю.. уже сам прошелся по этим граблям. http://electronix.ru/forum/index.php?showt...37842&st=30
Сообщение отредактировал adc - Dec 27 2007, 06:39
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 27 2007, 06:39
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 21-12-07
Из: г.Астрахань
Пользователь №: 33 511

|
Цитата(adc @ Dec 27 2007, 09:37)  Скажите, а в схеме у Вас батарейный элемент питания стоит? зы: я не просто спрашиваю.. уже сам прошелся по этим граблям. http://electronix.ru/forum/index.php?showt...37842&st=30батарейка стоит. новая CR2032 на 3В.
|
|
|
|
|
Dec 27 2007, 08:58
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
В начале программы хорошо бы сделать инициализацию ds1303. А именно установку в "0" 7-го бита "CH" (CLOCK HALT FLAG) и "WP"(WRITE-PROTECT BIT)в "0". Попробуйте изменить кусок кода чтения байта из мс. У Вас получается после прохождения цикла лишний такт (восьмой) а по даташиту их получается семь т.к. установка по по спадающему фронту. ну к примеру так: Код ... // Передача адреса закончена, переходим к приему данных rcall PortToIn // Переводим порт на вход DelayUs 10 // Задержка ldi r18, 7 // Инициализация счетчика бит clr r17 // Очищаем регистр выходных данных DelayUs 10 sbis PIND, IO // Проверяем бит на входе rjmp dr_l4 // переход, если = 0 ori r17, 0x80 // Если 1, то устанавливаем 1 в старший разряд выходного регистра dr_l4: DelayUs 10 sbi PORTD, CLK // сформировать нарастающий фронт CLK DelayUs 10 // подержать 10 мкс cbi PORTD, CLK // сформировать стадающий фронт CLK DelayUs 10 // подержать 10 мкс lsr r17 // Сдвигаем вправо на 1 бит sbis PIND, IO // Проверяем бит на входе rjmp dr_l5 // переход, если = 0 ori r17, 0x80 // Если 1, то устанавливаем 1 в старший разряд выходного регистра dr_l5: dec r18 // уменьшить счетчик бит на 1 brne dr_l4 // Если переданы не все 8, то переход // Адрес и данные переданы, завершаем сеанс .....
Сообщение отредактировал adc - Dec 27 2007, 09:28
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 27 2007, 11:30
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 21-12-07
Из: г.Астрахань
Пользователь №: 33 511

|
у меня стоит начальная инициализация: Код // Сбросить защиту от записи ldi r16, 0x8E ldi r17, 0x00 rcall DataWrite и CH сбрасывается при установке секунд Код // Установить секунды ldi r16, 0x80 ldi r17, 0x00 rcall DataWrite код переписал с учетом ваших рекомендаций - стало еще хуже... на экране откуда-то взялось число 57, причем оно меняется на 12, и 25. закономерность не пойму. откоментировал код инициализации, там выставлено время 12:30. записываю его в МК - тот же результат, 57, 12, 25... попробовал переделать на 3,3 В, не помогло... в общем ясно, что это глюк RTC нужно покупать новую разобрался в чем дело!!!!!!!! подключаю основное питание, запскаю контроллер, он инициализирует RTC. на экране чёрти чё... отключаю основное питание. батарейка на месте, и на экране и четные значения, и идут и все как положено... в общем это, я так понимаю, все таки RTC бракованная походу блин, вот гемор... не думал, что могут возникнуть такие проблемы...
|
|
|
|
|
Dec 27 2007, 11:32
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Цитата(Pepper @ Dec 27 2007, 13:59)  разобрался в чем дело!!!!!!!! yeah.gif Странно?! такое разве может быть?.. т.е. стабильное питание необходимо для мс RTS? Если после изменения кода произошли изменения в отображении, значит всетаки глюки в программе есть..это факт. Надо копать глубже! 12 это "1100", а 25 -"11001".. очень похоже на интерфейсные дела.. с чтением. Увеличивайте везде задержки, для чистоты эксперимента! зы: на счет другой мс я использовал DS1307.
Сообщение отредактировал adc - Dec 27 2007, 11:43
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 27 2007, 11:59
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 21-12-07
Из: г.Астрахань
Пользователь №: 33 511

|
Цитата(adc @ Dec 27 2007, 14:32)  Странно?! такое разве может быть?.. т.е. стабильное питание необходимо для мс RTS? Если после изменения кода произошли изменения в отображении, значит всетаки глюки в программе есть..это факт. Надо копать глубже! 12 это "1100", а 25 -"11001".. очень похоже на интерфейсные дела.. с чтением. Увеличивайте везде задержки, для чистоты эксперимента! зы: на счет другой мс я использовал DS1307. забыл уточнить: эти цифры появлялись на 2 версиях кода процедуры чтения. вашем и поем... т.е. дело не в нем... я решил взять DS3234 - у нее кварц интегрянный, и есть датчик температуры для компенсации ухода часов... стоит 140 рублей... а эту я брал за 90... в общем спасибо за помощь, думаю тему можно закрывать
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|