реклама на сайте
подробности

 
 
> Странное поведение DS1302
Pepper
сообщение Dec 21 2007, 10:19
Сообщение #1


Участник
*

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



Прикупил RTC DS1302. хочу подключить ее к МК AVR. использую Attiny2313. подключил 4 7-ми сигментных индикатора и хочу отображать время в режиме ЧЧ:ММ
пишу на ASM`е. написал программную реализацию протокола... и вот тут у меня начались приколы: к примеру, записал в регистр секунд значение 0! и в вечном цикле опрашиваю RTC и вывожу значение секунд на индикатор. на индикаторе идут секунды, все хорошо, но!!! если значение секунд четное то на индикаторе появлятются 00!!! если не четные, то все нормально...
проверял - это касается не только секунд, но и всего остального
пробовал даже записывать данные в RAM - та же история: в ячейку RAM пишу 0х55 - читается как 0х55, записываю в эту же ячейку 0хАА - читается как 0х00! sad.gif
может быть кто нить сталкивался с такой проблемой?
Прощу прощения у модераторов за размещение темы не в нужном месте smile.gif внимания сразу не обратил, а как перенести не нашел smile.gif

Сообщение отредактировал Pepper - Dec 21 2007, 10:37
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Pepper
сообщение Dec 21 2007, 10:54
Сообщение #2


Участник
*

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



Прикупил RTC DS1302. хочу подключить ее к МК AVR. использую Attiny2313. подключил 4 7-ми сигментных индикатора и хочу отображать время в режиме ЧЧ:ММ
пишу на ASM`е. написал программную реализацию протокола... и вот тут у меня начались приколы: к примеру, записал в регистр секунд значение 0! и в вечном цикле опрашиваю RTC и вывожу значение секунд на индикатор. на индикаторе идут секунды, все хорошо, но!!! если значение секунд четное то на индикаторе появлятются 00!!! если не четные, то все нормально...
проверял - это касается не только секунд, но и всего остального
пробовал даже записывать данные в RAM - та же история: в ячейку RAM пишу 0х55 - читается как 0х55, записываю в эту же ячейку 0хАА - читается как 0х00!
может быть кто нить сталкивался с такой проблемой?
функции, реализующие протокол:
.equ CE = PD3
.equ CLK = PD1
.equ IO = PD0

.cseg
InitPort:
sbi DDRD, CE
sbi DDRD, CLK

cbi PORTD, CE
cbi PORTD, CLK
ret

PortToIn:
cbi DDRD, IO
ret

PortToOut:
sbi DDRD, IO
ret

DataWrite:
// Передаем коммандный байт
// r16 - комманда
cli
push r18
push r19
sbi DDRD, CLK
ldi r18, 8 // Счетчик бит
rcall PortToOut // Переключаем порт на выход данных, что бы передать коммандый байт
cbi PORTD, CLK // Подготавливаем RTC к передачи данных
DelayUs 10 // Временная задержка, что бы CLK успел переключится
sbi PORTD, CE // Включием RTC
DelayUs 10 // Временная задержка, что бы CE успел переключится
dw_l1:
mov r19, r16 // Скопируем адрес во временный регистр
andi r19, 0x01 // извлечем 0й бит
tst r19 // проверим на 0
breq dw_l2 // если 0, то перейти
sbi PORTD, IO // иначе записать в порт данных 1
rjmp dw_l3 // продолжить выполнение
dw_l2:
cbi PORTD, IO // Записать лог. 0
dw_l3:
DelayUs 10 // задержка для формирования данных на ноге контроллера
sbi PORTD, CLK // сформировать нарастающий фронт CLK
DelayUs 10 // подержать 10 мкс
cbi PORTD, CLK // сформировать стадающий фронт CLK
lsr r16 // Сдвигаем адрес, что бы получить следующий бит
dec r18 // уменьшить значение переданных бит
brne dw_l1 // если переданы еще не все 8 - перейти

// Передача адреса закончена, переходим к передаче данных
ldi r18, 8 // Снова инициализируем счетчик бит
dw_l4:
mov r19, r17 // Скопируем данные во временный регистр
andi r19, 0x01 // извлечем 0й бит
tst r19 // проверим на 0
breq dw_l5 // если 0, то перейти
sbi PORTD, IO // иначе записать в порт данных 1
rjmp dw_l6 // продолжить выполнение
dw_l5:
cbi PORTD, IO // Записать лог. 0
dw_l6:
DelayUs 10 // задержка для формирования данных на ноге контроллера
sbi PORTD, CLK // сформировать нарастающий фронт CLK
DelayUs 10 // подержать 10 мкс
cbi PORTD, CLK // сформировать стадающий фронт CLK
lsr r17 // Сдвигаем данные, что бы получить следующий бит
dec r18 // уменьшить значение переданных бит
brne dw_l4 // если переданы еще не все 8 - перейти
// Адрес и данные переданы, завершаем
DelayUs 10 // Задержка
cbi PORTD, CE // Выключаем RTC
DelayUs 10 // Подержим немного 0
rcall PortToIn // Переключим порт на вход
cbi DDRD, CLK
pop r19
pop r18
sei
ret

DataRead:
// Передаем адрес
cli
push r18
push r19
sbi DDRD, CLK
ldi r18, 8 // Счетчик бит
rcall PortToOut // Переключаем порт на выход данных, что бы передать коммандый байт
cbi PORTD, CLK // Подготавливаем RTC к передачи данных
cbi PORTD, IO // Подготавливаем RTC к передачи данных
DelayUs 10 // Временная задержка, что бы CLK успел переключится
sbi PORTD, CE // Включием RTC
DelayUs 10 // Временная задержка, что бы CE успел переключится
dr_l1:
mov r19, r16 // Скопируем адрес во временный регистр
andi r19, 0x01 // извлечем 0й бит
tst r19 // проверим на 0
breq dr_l2 // если 0, то перейти
sbi PORTD, IO // иначе записать в порт данных 1
rjmp dr_l3 // продолжить выполнение
dr_l2:
cbi PORTD, IO // Записать лог. 0
dr_l3:
DelayUs 10 // задержка для формирования данных на ноге контроллера
sbi PORTD, CLK // сформировать нарастающий фронт CLK
DelayUs 10 // подержать 10 мкс
cbi PORTD, CLK // сформировать стадающий фронт CLK
lsr r16 // Сдвигаем адрес, что бы получить следующий бит
dec r18 // уменьшить значение переданных бит
brne dr_l1 // если переданы еще не все 8 - перейти

// Передача адреса закончена, переходим к приему данных
rcall PortToIn // Переводим порт на вход
ldi r18, 8 // Инициализация счетчика бит
clr r17 // Очищаем регистр выходных данных
dr_l4:
lsr r17 // Сдвигаем вправо на 1 бит
sbis PIND, IO // Проверяем бит на входе
rjmp dr_l5 // переход, если = 0
ori r17, 0x80 // Если 1, то устанавливаем 1 в старший разряд выходного регистра
dr_l5:
DelayUs 10 // задержка для формирования данных на ноге контроллера
sbi PORTD, CLK // сформировать нарастающий фронт CLK
DelayUs 10 // подержать 10 мкс
cbi PORTD, CLK // сформировать стадающий фронт CLK
dec r18 // уменьшить счетчик бит на 1
brne dr_l4 // Если переданы не все 8, то переход

// Адрес и данные переданы, завершаем сеанс
DelayUs 10 // Задержка
cbi PORTD, CE // Выключаем RTC
rcall PortToIn // Переводим порт на вход
DelayUs 10 // Задержка
cbi DDRD, CLK
pop r19
pop r18
sei
ret

Сообщение отредактировал Pepper - Dec 21 2007, 11:05
Go to the top of the page
 
+Quote Post
Pepper
сообщение Dec 21 2007, 12:14
Сообщение #3


Участник
*

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



и снова вы правы, но опять не помогло
поставил задержку в 10 мкс, думаю более чем достаточно, что бы RTC успел среагировать на перепад уровней...
я в мануале еще нашел вот такую строчку
When reading or writing the time and date registers, secondary (user) buffers are used to prevent errors when the internal registers update. When reading the time and date registers, the user buffers are synchronized to the internal registers the rising edge of CE.

как ее использовать я не пойму... может быть стоит после каждой комманды дергать CE?
может быть это данные не записываются во внутренние регистры?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Pepper   Странное поведение DS1302   Dec 21 2007, 10:19
- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 13:19) Прику...   Dec 21 2007, 10:26
|- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 13:26) н...   Dec 21 2007, 10:35
|- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 13:35) Код//...   Dec 21 2007, 11:48
||- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 14:48) с...   Dec 21 2007, 11:57
||- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 14:57) в том...   Dec 21 2007, 12:13
||- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 15:13) п...   Dec 21 2007, 12:18
|- - adc   Маленький совет по динамической индикации:Во время...   Dec 27 2007, 05:44
|- - Pepper   Цитата(adc @ Dec 27 2007, 08:44) Маленьки...   Dec 27 2007, 06:03
|- - Pepper   Принял на заметку... исправил... не помогло... во...   Dec 21 2007, 11:32
||- - adc   Цитата(Pepper @ Dec 21 2007, 14:32) //Уст...   Dec 21 2007, 12:06
||- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 15:14) и сно...   Dec 21 2007, 12:51
||- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 15:51) р...   Dec 21 2007, 12:57
||- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 15:57) согла...   Dec 21 2007, 13:12
||- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 16:12) д...   Dec 21 2007, 13:21
||- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 16:21) к сож...   Dec 21 2007, 13:27
||- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 16:27) п...   Dec 21 2007, 14:12
||- - sergik_vrn   Цитата(Pepper @ Dec 21 2007, 17:12) тогда...   Dec 21 2007, 14:24
||- - Pepper   Цитата(sergik_vrn @ Dec 21 2007, 17:24) с...   Dec 21 2007, 14:30
|- - adc   Цитата(Pepper @ Dec 21 2007, 13:54) // Пе...   Dec 21 2007, 12:15
|- - Pepper   Цитата(adc @ Dec 21 2007, 15:15) Все хоро...   Dec 21 2007, 12:24
- - adc   пожалуйста код в студию. Обращаю Ваше внимание на...   Dec 21 2007, 11:10
- - adc   эээ приведите код где у вас массив "Digits...   Dec 21 2007, 12:35
|- - Pepper   Цитата(adc @ Dec 21 2007, 15:35) эээ прив...   Dec 21 2007, 12:40
- - adc   Цитата(Pepper @ Dec 21 2007, 15:40) там в...   Dec 21 2007, 13:02
|- - Pepper   Цитата(adc @ Dec 21 2007, 16:02) да.. дол...   Dec 21 2007, 13:13
|- - sergik_vrn   Цитата(adc @ Dec 21 2007, 16:02) Что Вы п...   Dec 21 2007, 13:15
- - Pepper   только что обнаружил еще более странный глюк: при ...   Dec 26 2007, 11:53
|- - adc   Цитата(Pepper @ Dec 26 2007, 14:53) тольк...   Dec 26 2007, 12:20
|- - Pepper   Цитата(adc @ Dec 26 2007, 15:20) Выложите...   Dec 26 2007, 12:36
- - Pepper   Я кажется понял где грабли: у меня моя железка пит...   Dec 26 2007, 14:04
- - adc   Скажите, а в схеме у Вас батарейный элемент питани...   Dec 27 2007, 06:37
|- - Pepper   Цитата(adc @ Dec 27 2007, 09:37) Скажите,...   Dec 27 2007, 06:39
- - adc   В начале программы хорошо бы сделать инициализацию...   Dec 27 2007, 08:58
- - Pepper   у меня стоит начальная инициализация: Код// Сброс...   Dec 27 2007, 11:30
- - adc   Цитата(Pepper @ Dec 27 2007, 13:59) разоб...   Dec 27 2007, 11:32
- - Pepper   Цитата(adc @ Dec 27 2007, 14:32) Странно?...   Dec 27 2007, 11:59
- - adc   Цитата(Pepper @ Dec 27 2007, 14:59) в общ...   Dec 27 2007, 13:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016