Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> часы реального времени 
V
    Опции темы
ОВиталий
Дата 4.5.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



здравствуйте! помогите кто может....
я собрал в протеусе элементарную схему: МК атмега8, часы реального времени ds1307 и I2C debuger(подключен параллельно с часами). написал черновую программку,  суть которой(идеале) вытягивать время из часов. 
я хотел для начала вытянуть минуты. но почему то когда я пытаюсь передать адрес минут, я получаю секунды (это видно в I2c debuger). знаю что где то ошибка но не знаю где. 
использую WinAvr 

Код

#include<avr/io.h>
#include <avr/delay.h>
#include <util/twi.h>
//------------------------------------
int start_twi(void){
    TWCR = 0xA4;                //  1010 0100(1<<TWINT)|(1<<TWEN)|(1<<TWSTA);
    while (!(TWCR & 0x80));

    if ((TWSR & 0xF8) == 0x08)
        return 0;
    else
        return 1;
}
int sla_r(unsigned char read_addr)
{
    TWDR = read_addr;
    TWCR = 0x84;                //  1000 0100(1<<TWINT)|(1<<TWEN)
    while (!(TWCR & 0x80));

    if ((TWSR & 0xF8) == 0x40)
        return 0;
    else
        return 1;
}
//------------------------------------
int sla_w(unsigned char write_addr){
    TWDR = write_addr;
    TWCR = 0x84;                //  1000 0100(1<<TWINT)|(1<<TWEN)
    while (!(TWCR & 0x80));

    if ((TWSR & 0xF8) == 0x18)
        return 0;
    else
        return 1;
}
//------------------------------------
int read_byte_twi(){
    TWCR = 0xC4;                //  1100 0100(1<<TWINT)|(1<<TWEA)|(1<<TWEN)
    while (!(TWCR & 0x80));

    if ((TWSR & 0xF8) == 0x50)
        return 0;
    else
        return 1;
}
//------------------------------------
void stop_twi(void) {
    TWCR = 0x94;                //  1001 0100(1<<TWINT)|(1<<TWEN)|(1<<TWSTO)

    if (TWSR == 0x00)
        TWCR = 0x90;                //  1001 0000(1<<TWINT)|(1<<TWSTO)
}
//-------------------------
int main(){
int i=0;
i=start_twi();
    i=sla_r(0b11010000);
            i=sla_r(1);
                read_byte_twi();
                    stop_twi();

return 0;
}



буду благодарен за любую помощь. 
PM MAIL   Вверх
cardinal
Дата 4.5.2009, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Особо не вникал, но возможно дело вот в чем:
Цитата

Data is transferred with the most significant bit (MSB) first.

ну и тут посмотри таблицу на 8 стр. внизу
http://datasheets.maxim-ic.com/en/ds/DS1307.pdf


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
ОВиталий
Дата 4.5.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



с этим вопросом считывания разобрался.  спасибо!

НО не могу сформировать СТОП условие. можно ли как нибудь без него обойтись, но что бы потом, если понадобиться мог еще раз воспользоваться часами? 

Это сообщение отредактировал(а) ОВиталий - 4.5.2009, 14:23
PM MAIL   Вверх
cardinal
Дата 4.5.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(ОВиталий @  4.5.2009,  11:26 Найти цитируемый пост)
НО не могу сформировать СТОП условие. можно ли как нибудь без него обойтись, но что бы потом, если понадобиться мог еще раз воспользоваться часами? 

Пожалуйста, один топик - один вопрос.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.