Страница 2 из 2
Re: Помогите с кодом для PCF8583
Добавлено: Чт июл 08, 2010 17:15:47
Andrew_7
Danko, я возобновил изучение СИ.. Просто не сразу всё даётся.. Спасибо за помощь

Re: Помогите с кодом для PCF8583
Добавлено: Чт июл 08, 2010 21:58:30
Andrew_7
.. с выводом года так не получается..
Re: Помогите с кодом для PCF8583
Добавлено: Чт июл 08, 2010 21:59:19
Andrew_7
Может быть кто - нибудь порекомендует книги по программированию на СИ AVR контроллеров? Буду признателен!
Re: Помогите с кодом для PCF8583
Добавлено: Чт июл 08, 2010 22:21:24
Danko
Andrew_7 писал(а):книги по программированию на СИ AVR контроллеров
Си для AVR ?
Прошу прощения Си он и в Африке Си.
Любая книга по Си будет Вам в помощь в которой есть примеры не под винду, а под старой добрый DOS. Можно и под UNIX.
А вообще у каждого Сишника должна быть книга авторов:
Брайен В. Керниган и
Деннис М. Ричи .
Re: Помогите с кодом для PCF8583
Добавлено: Чт июл 08, 2010 22:47:11
Andrew_7
Danko, вы не подскажите, с чего копать, чтоб докапать до вывода норального года? ))
У меня пока не получается вывести в правильной последовательности год..
Re: Помогите с кодом для PCF8583
Добавлено: Пт июл 09, 2010 09:00:01
Danko
в месте с датой
Код: Выделить всё
rtc_get_time(0, &my_hour, &my_min, &my_sec, &my_hsec); // прочесть из часов время
rtc_get_date(0, &my_date, &my_month, &my_year); // и дату
sprintf(lcd_buffer, "%02u:%02u:%02u.%02u \n%02u-%02u-%u",
my_hour, my_min, my_sec, my_hsec, my_date, my_month, 2008+my_year); // отпечатать в переменную (буфер)
небольшое замечание: дата будет верна только еще один год т.к. PCF8583 года считает от 0 до 3.
високосный год это 0.
для правильной работы константу
2008 нужно заменить переменной и организовать счетчик.
Re: Помогите с кодом для PCF8583
Добавлено: Сб июл 10, 2010 15:06:36
Andrew_7
Danko, спасибо больше за помощь!
Спасибо всем!
Re: Помогите с кодом для PCF8583
Добавлено: Ср фев 16, 2011 20:43:39
OSTIN89
Здравствуйте!
портировал проект в Протеусе с меги 32 на мегу 8, но не получилось - вместо времени оно пишет нули, в чем может быть проблема?
Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 10:36:07
OSTIN89
даже когда проэкте выложеном
Danko переставляю дисплей на другой порт, указывая в коде програмы (где вставка асемблера) код порта куда подключен дисплей, то в итоге показывает какие-то караказяблики.

Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 11:22:31
Vov123
А так?
Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 11:36:40
OSTIN89

все работает

, но не могу найти отличий. как у вас так получилось?

Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 11:39:30
Vov123
В игрушке по названию "Протеус",всё-же надо FUSE для проца устанавливать.
Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 11:50:16
OSTIN89
Vov123 писал(а):В игрушке по названию "Протеус",всё-же надо FUSE для проца устанавливать.
Спасибо! а то сам еще бы несколько дней сидел думал бы

Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 15:57:20
OSTIN89
Vov123, не подскажите что за полтергейст, я в исправленом вами проекте удаляю одну пустую строку между двумя строками кода
Код: Выделить всё
rtc_get_time(0, &my_hour, &my_min, &my_sec, &my_hsec);
sprintf(lcd_buffer, "%u:%u:%u.%u", my_hour, my_min, my_sec, my_hsec);
компилирую и в итоге протеус опять выводит на экран только нули

Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 16:26:28
Vov123
Наверное у Вас что-то с soft-ом.У меня CVAVR(1.25.9) и прот(v.7.5 SP3)
Re: Помогите с кодом для PCF8583
Добавлено: Чт фев 17, 2011 17:06:41
OSTIN89
Выручаете! поставил CVAVR 1.25.9, раньше была CVAVR 1.25.7 beta и все скомпилировалось и заработало, спасибо!
Re: Помогите с кодом для PCF8583
Добавлено: Пт дек 02, 2011 22:13:46
vovan128
не избежал наступления на грабли и я. методом последовательного приближения и научно-обоснованного тыка запустил я таки часы на PCF8593 - это почти то же самое, что и PCF8583. Практически во всех примерах приводится пример из CVAVR с использованием
rtc_get_time(); sprintf(); lcd_puts();
sprintf() безбожно жрёт пространство програмной памяти, хотя функция очень мощная, но за её вездесущность приходится расплачиваться ресурсом AVR.
Есть другая функция
itoa(), она преобразовывает целое число в строку, а в часах дробных чесел и нет:
Пример использования с часами:
Код: Выделить всё
char j;
char lcd_buf[2];
unsigned char my_hour, my_min, my_sec, my_hsec;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void main(void)
{
init (); //инициализация всего, что надо
#asm("sei")// Global enable interrupts
// C Y K L L O O P ******************************************************************************
while (1)
{
rtc_get_time(1, &my_hour, &my_min, &my_sec); // прочесть из часов время
lcd_gotoxy(0,0); // очистить экран и установить координаты 0:0
itoa(my_hour, lcd_buf); //преобразовать в строку
if (my_hour<10){j=lcd_buf[0];lcd_buf[0]=48;lcd_buf[1]=j;} //приписать 0
lcd_puts(lcd_buf); //вывести на LCD стоку
lcd_putsf(":"); //вывести на LCD двоеточие
itoa(my_min, lcd_buf); //преобразовать в строку
if (my_min<10){j=lcd_buf[0];lcd_buf[0]=48;lcd_buf[1]=j;} //приписать 0
lcd_puts(lcd_buf); //вывести на LCD стоку
lcd_putsf(":"); //вывести на LCD двоеточие
itoa(my_sec, lcd_buf); //преобразовать в строку
if (my_sec<10){j=lcd_buf[0];lcd_buf[0]=48;lcd_buf[1]=j;} //приписать 0
lcd_puts(lcd_buf); //вывести на LCD стоку
}//скобка while
}//скобка main
к одноразрядным часам, минутам и секундам при выводе в переди выводится 0, т.е так. 03:06:08
Экономия програмной памяти раза в 3 .