|
Странное поведение DS1302 |
|
|
|
Dec 21 2007, 10:19
|
Участник

Группа: Новичок
Сообщений: 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!  может быть кто нить сталкивался с такой проблемой? Прощу прощения у модераторов за размещение темы не в нужном месте  внимания сразу не обратил, а как перенести не нашел
Сообщение отредактировал Pepper - Dec 21 2007, 10:37
|
|
|
|
|
 |
Ответов
|
Dec 21 2007, 10:54
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|