roboforum.ru

Технический форум по робототехнике.

Нужна помощь с DS1307 и ATMega16

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Нужна помощь с DS1307 и ATMega16

Сообщение DK10000 » 05 апр 2009, 10:37

Помогите. Написал программку для DS1307 и ATMega16 которая должна инициализировать часы, устанавливая бит CH=0 в регистре с номером 0. А так же должна включать генератор на ножке SQWE и установить частоту выхода импульсов в 1 Гц. Это делал путем записи числа 16 ( или двоичное 10000) в регистр часов под номером 07h. Но в протеусе этих импульсов на соответствующей ножке не видно. Что я делаю не так?
Прилагаю программу в CodeVisionAVR и проект Poteus в архиве.
Вложения
DS1307+ATMega 16(TWI).rar
(48.94 КиБ) Скачиваний: 47
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Drunya » 05 апр 2009, 15:19

Я тоже когда-то в этой микросхеме ковырялся: http://roboforum.ru/viewtopic.php?f=2&t=3537&p=67661#p67661

Немного пошаманил с твоим проектом, см. в приложении. Помогло добавление магической задержки в 4 us :D
Вложения
DS1307+ATMega 16(TWI)_mod.rar
модифицированный
(68.84 КиБ) Скачиваний: 55
Глюк по-немецки означает "счастье"...
Аватара пользователя
Drunya
 
Сообщения: 196
Зарегистрирован: 05 июн 2007, 12:20
Откуда: Киев
прог. языки: C/C++, ASSEMBLER

Re: Нужна помощь с DS1307 и ATMega16

Сообщение DK10000 » 05 апр 2009, 16:41

Запустил модифицированный вами проект но на ножке SOUT все равно не видно никаких импульсов :cry:


И еще. А зачем вы удалили строчку:

write_twi(0); // записываем по адресу 0, установленному выше число 0, что включит внутренний генератор часов CH=0 (включаем часы)


Ведь без нее часы не включаться. Ведь вначале отправляют пакет адреса устройства, затем пакет адреса регистра часов и только за тем что в этот регистр записать.

И еще в догонку. А зачем вы вместо 16 записывает в регистр управления часов 10. Ведь дужно установить бит 4(SQWE) а биты RS1 и RS0 сделать 0. Что эквивалентно записи в регистр управления числа 00010000 или 16.
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Нужна помощь с DS1307 и ATMega16

Сообщение DK10000 » 06 апр 2009, 06:50

Странно. Не могу найти ошибку. От разочарования воспользовался встроенными в CodeVision библиотеками I2C (софтовыми, не аппаратными). И отправил часам те же команды что пытался через аппаратный I2C. И на ножке SOUT появились импульсы с частотой 1 Гц. Странно. Команды те же, почему же не работает через аппаратный TWI(I2C).


Если комму интересно вот текст этой проги(через встроенный библиотеки)

#include <mega16.h>
#include <delay.h>
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
void main(void)
{
#asm("wdr")
/* Write logical one to WDTOE and WDE */
WDTCR |= (1 << 4) | (1 << 3);
/* Turn off WDT */
WDTCR = 0x00;
DDRA=255;
i2c_init();
i2c_start();
i2c_write(208);
i2c_write(0);
i2c_write(0);
i2c_stop();

i2c_start();
i2c_write(208);
i2c_write(7);
i2c_write(16);
i2c_stop();
while (1)
{
};
}
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Drunya » 06 апр 2009, 10:18

DK10000 писал(а):Зачем вы удалили строчку:

write_twi(0); // записываем по адресу 0, установленному выше число 0, что включит внутренний генератор часов CH=0 (включаем часы)
Действительно, есть такой бит. Но и в железе и в протеусе все работает и без этого.
DK10000 писал(а):А зачем вы вместо 16 записывает в регистр управления часов 10.
Не 10, а 0x10

Попробуйте так. Не знаю, у меня в протеусе все работает(7.2сп6). Правда смущает то, что нога SOUT дергается с частотой не 1 Гц, а 0.5 Гц, то есть 1 колебание в 2 сек.
Код: Выделить всёРазвернуть
#include <mega16.h>
#include <delay.h>

// Биты
#define   TWINT   7
#define   TWEA      6
#define   TWSTA   5
#define   TWSTO   4
#define   TWEN      2


void start_twi(void)
{
   TWCR |= (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
   while (!(TWCR & (1<<TWINT)));
}

void stop_twi(void)
{
   TWCR |= (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
}

void write_twi(unsigned int data)
{                                                                 
   TWDR  = data;
   TWCR |= (1<<TWINT)|(1<<TWEN);
   while (!(TWCR & (1<<TWINT)));
}

void main(void)
{
   TWBR = 0x20;
   delay_ms(10); // Дать немного времени для запуска

   start_twi();
   write_twi(0xD0);
   write_twi(0);
   write_twi(0);
   stop_twi();
   delay_us(5);

   start_twi();
   write_twi(0xD0);
   write_twi(7);
   write_twi(0x10);
   stop_twi();

   while (1);
}
Глюк по-немецки означает "счастье"...
Аватара пользователя
Drunya
 
Сообщения: 196
Зарегистрирован: 05 июн 2007, 12:20
Откуда: Киев
прог. языки: C/C++, ASSEMBLER

Re: Нужна помощь с DS1307 и ATMega16

Сообщение DK10000 » 06 апр 2009, 14:14

Спасибо :D . Только вот у меня Proteus 7.4 (SP3) и тикает вроде 1 раз в одну секунду. Вот интересно а где у меня косяк в проге то был? Я попробовал поставить твою главную фунцию в свою прогу. Не работало. Потом оставил свою главную фунцию и потавил твои дерективы и фунции (start, stop и write). Заработало. Стал смотреть что я там в фунциях накосячил. И что ты думаешь. Не нашел я отличий. Все то же самое. Только твой код работает а мой нет. Мистика. Я даже интервалы как у тебя сделал. Не в какую.
Короче плюнул и с чистого листа переписал эти фунциии. Заработало. И даже если убрать задержки все равно пашет.


Видимо это косяк Proteusa. В обчем я еще попробую прошить свой старый и твой рабочий код в реальный Mega16 и там станет ясно.


Еще раз Спасибо.
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Master » 06 апр 2009, 14:16

есть программка для сверки файлов, очень удобно тексты программ сравнивать.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Drunya » 06 апр 2009, 15:25

DK10000 писал(а):Стал смотреть что я там в фунциях накосячил. И что ты думаешь. Не нашел я отличий. Все то же самое.
А вот и не все. Там у тебя в какой-то функции вместо TWDR было TWBR. Ты вместо записи в регистр данных менял битрейт :wink:
Глюк по-немецки означает "счастье"...
Аватара пользователя
Drunya
 
Сообщения: 196
Зарегистрирован: 05 июн 2007, 12:20
Откуда: Киев
прог. языки: C/C++, ASSEMBLER

Re: Нужна помощь с DS1307 и ATMega16

Сообщение DK10000 » 06 апр 2009, 16:00

А как называется программа для сверки текстов??

Ошибку заметил :crazy: . Исправил. Все работает :D
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Порфирий » 06 апр 2009, 16:24

DK10000 писал(а):А как называется программа для сверки текстов??


В составе любой системы управления версиями (например, subversion) есть штатные средства для сравнения файлов (или разных версий одного и того же файла). Пример во вложении.
Вложения
vcs.PNG
Аватара пользователя
Порфирий
 
Сообщения: 68
Зарегистрирован: 27 мар 2007, 07:42
Откуда: Екатеринбург

Re: Нужна помощь с DS1307 и ATMega16

Сообщение blindman » 06 апр 2009, 16:56

То что во вложении - не входит в систему контроля версий. Это примочка поверх такой системы, которая в данном случае вообще не в тему. То, что нужно - diff (windiff)

Добавлено спустя 7 минут 48 секунд:
Хотя нет, был не прав, TortoiseSVN - это полноценный клиент subversion. Но в любом случае контроль версий тут не нужен.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Vooon » 07 апр 2009, 03:30

2 blindman: ЕМНИП в тортилле форк kdiff3 используется
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Нужна помощь с DS1307 и ATMega16

Сообщение Порфирий » 07 апр 2009, 07:13

Согласен, контроль версий в данном контексте, строго говоря, лишнее и не совсем по теме. На мой взгляд, люди, задающие вопросы про сравнение файлов, либо не знают совсем, либо только наслышаны про подобные системы и их преимущества при разработке. Мой первый пост - жалкая попытка попиарить эти самые системы.
Аватара пользователя
Порфирий
 
Сообщения: 68
Зарегистрирован: 27 мар 2007, 07:42
Откуда: Екатеринбург


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4