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

 
 
> Странное поведение 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   Странное поведение 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
|- - Pepper   и снова вы правы, но опять не помогло поставил зад...   Dec 21 2007, 12:14
||- - 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 Текстовая версия Сейчас: 31st July 2025 - 04:38
Рейтинг@Mail.ru


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