Codevision Avr. Или как начинающему потоптаться на граблях

Знакомство с микроконтроллерами у меня состоялось из- за желания сделать градусник. Насколько я понял, по количеству вариантов реализаций таких проектов, термометр на МК это уже как мультивибратор. Нашел проект с исходным кодом в этом самом кожевижне, вытравил плату, спаял, прошил 5-ю проводками и начал радоваться, параллельно ковыряя исходник. Ковырять в кодвижне оказалось очень просто, если бы не некоторые проблемы. Не полная совместимость версии это еще пол беды, самая интересная беда это следующий мой проект: часы на ds1307, вот о нем и будет этот пост.

С созданием проекта сложностей нет, среда мне показалась, да и кажется до сих пор, очень юзер френдли, однако собранные часы у меня ходить не собирались. Запустить их удалось только многократным дерганьем ресета, и пошел разбор полетов. Полный код приводить смысла не вижу, так как пользовался стандартными библиотечными функциями. Я, как начинающий бегло осмотрел даташит на ds-ку, и обнаружил там интереснный абзац:

CLOCK AND CALENDAR
The time and calendar information is obtained by reading the appropriate register bytes. The RTC
registers are illustrated in Figure 3. The time and calendar are set or initialized by writing the appropriate
register bytes. The contents of the time and calendar registers are in the BCD format. Bit 7 of register 0
is the clock halt (CH) bit. When this bit is set to a 1, the oscillator is disabled. When cleared to a 0, the
oscillator is enabled.
Please note that the initial power-on state of all registers is not defined. Therefore, it is important
to enable the oscillator (CH bit = 0) during initial configuration.
Таак, смотрим теперь в стандартную библиотеку кодвижна и видим инициализацию часиков:

void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
{
rs&=3;
if (sqwe) rs|=0x10;
if (out) rs|=0x80;
i2c_start();
i2c_write(0xd0);
i2c_write(7);
i2c_write(rs);
i2c_stop();
}


Странно, тут нет ничего про этот бит. Конечно посмотреть в библиотеку я догадался далеко не сразу, ведь как- то часы пытались ходить, тем более после установки времени (в остановленные- то часы) они запускались:

void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write(bin2bcd(sec));
i2c_write(bin2bcd(min));
i2c_write(bin2bcd(hour));
i2c_stop();
}


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

Решение мое конечно кривое, но на данном этапе его все- таки можно записать в победу

rtc_init(0,1,0);
    val = rtc_read(0x00);   //Проверка бита старта часов
    delay_ms(1);
    if(val > 127)
    {
    rtc_write(0x00, 0x00); //запуск, если первый бит равен 1
    }


да, прямо после инициализации делаем проверку и стартуем, если надо.

Мой пост конечно же не претендует на какую- либо информативность, да и полезным его можно назвать наверное с натягом, но, надеюсь, может он и будет полезен таким же начинающим как и я.

inb4: Да, я понимаю, что кодевижен очень проблемная среда, однако как тут часто говорится, «порог вхождения» с ней оказался для меня практически нулевым, открыв чужой исходник, мне хватило пары часов с «0» понять примерно что и как.
  • +3
  • 12 ноября 2012, 11:43
  • serge962

Комментарии (16)

RSS свернуть / развернуть
Может схему хотя б вложете, а то и вправду статья не несет ни какой информативности и нагрузки на мозги. Да и вобще, тут такие статьи негзя публиковать, а то грозит холиваром, так как статьи про ардуину.
0
Заметка о том, что библиотека из CVAVR (не указанной версии, правда) неправильно работает с часиками DS1307. Какая тут схема нужна? Два провода I2C от контроллера до часиков?
0
Именно, статья о том, что в стандартной библиотеке не предусмотрен, во всяком случае явно, старт часов.
Насчет версии. текущая 2.05, но библиотека ds1307 одинаковая во всех, которые удалось обнаружить
Вот схема, раз уж так, но в статье она не нужна
0
2.хх я гневно снес, обнаружив, что оно при каждом запуске записывает на себя кучу расширений (включая .c, .h, .lib, .obj, .map) и это не отключается. Не возникает проблем с этим?
Вот схема, раз уж так
Как и ожидалось — две микросхемы и два провода.
0
С кучей расширений оно меня тоже напугало, но так как из- за ограничения по размеру кода мне пришлось немного пошаманить), то вопрос решился копирование целиком папки с программой с последующим удалением. Т.е. пользуюсь им не устанавливая, вручную привязав к .prj.
0
А в том и проблема, что оно не в установщике ассоциации корежит, а в самой софтине. Пару раз вернув ассоциации ручками я понял, что что-то тут не так и в третий поправил уже снеся CVAVR нахрен. Более приличный поведением 1.25.8 пока стоит, но запускал я его вроде один-два раза, ради прошивалки. Если уж юзать С — то самый кошерный. GCC или IAR. В качестве абы чего попроще можно и более простой паскаль задействовать, благо последние версии mikroPascal AVR компилируют более-менее корректно.
0
Хм, у меня такой проблемы нет. Стоит 2.04.4a, не обновлял за ненадобностью. Ассоциации не портит. Сишные файлы по прежнему открываются блокнотом. Уже не помню, но возможно я ещё при установке сказал не трогать ассоциации и оно слушается?
0
Если бы там такое было — я бы тоже указал не менять. Ставил я вроде 2.05.6.
Да и не нужно оно мне, на самом деле. Из любопытства поставил.
0
Специально проверил дома. Скопированный кодевижн не лезет со своими привязками. Сам назначил ему только .prj, .c, .asm открываются блокнотом
0
У меня он не при каждом запуске ассоциации портил. Так и не понял, с чем это было связано.
0
Стоит 2 месяца без установки, ни разу не переписывал). А вот установленный, это да.
0
Мой пост конечно же не претендует на какую- либо информативность, да и полезным его можно назвать наверное с натягом, но, надеюсь, может он и будет полезен таким же начинающим как и я.

Думаю, начинающий не догадается куда эти провода вести, или же сломает себе голову и бросит затею.
0
Это не о часиках статья, а о граблях в библиотеке. Как подключить I2C часики и так на каждом углу.
Доработать в статье есть что, но по софтовой части. Хардвер здесь незачем.
0
Вот и правда холивар близится. Кстати i2c у меня софтовый, так что к каким именно портам он подключен не важно вообще. Это кстати одна из причин выбора кодвижна, там генератор начального кода очень уж приятный. Тем более статья не про ds-ку, а про глюки кодвижна, к железу имеющие весьма посредственное отношение. Статей про эти часы целое море, а вот про бит старта часов не видел ни где. Поэтому и пишу именно про этот бит, а не про часы
0
Раз тема про кодевижн хоть как- то интересна, сообщу еще одну интересную его особенность, может она всем и известна, но я не видел: при прошивке из него программатором stk200/300/5 проводков в настройках программатора есть окошко выбора задержки
Если поставить больше 15, то можно прошивать МК, в которых кривыми руками (или по надобности) выставлена низкая частота тактирования. Мною были восстановлены фьюзы на тиньке прошитой на 128 кгц.
0
лично для меня кодвижн приятен именно нормальным кодом. ранее пробовал и iar, и winavr. в итоге остановился на кодвижне. но при этом генератором кода пользуюсь только тогда, когда надо вспомнить что писать :) есть в нём и генератор кода для жки, но даже когда учился — сам писал код по ДШ контроллера жки. особо не доверяю всем этим визардам, да и сделав вручную с нуля больше узнаешь.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.