"vitalik_1984" Спасибо за подсказку! Снял галочку с "Include I/O registtrs Bits Definitions" и отладчик перестал ругаться! Но программка все равно не хочет работать! Дату и время не отображает!
Прерывание должно быть максимально коротким, в нем не должно быть вызова функций, на то оно и прерывание - максимум,что там можно - проверить переполнение буфера, поставить флаг, "очередной символ принят" и отвалиться. В основном цикле проверяйте флаг, если он взведен, гасите и проверяйте принятый буфер.
Подскажите почему так тупят часики?! Выкладываю исходник + файл в Протеусе! В посте выше я спрашивал почему коряво отображаются время и дата, ошибку подправил, в Протеусе был косяк, резисторы заменил на Pullup и все заработало, но часы тем не менее жутко отстают от реального времени за два часа работы отставание чуть ли не на 40 минут!
Пока не пробовал! Пытаюсь весь проект смоделировать в Протеусе, а потом уже буду железом обрастать! Задумок много, но увы знаний программирования очень скудны, так что до железа пока далековато!
А может быть проблема в том что в исходнике частота МК не правильно установлена?! Или это будет известно после прошивки МК? Я если честно не совсем понял как частоту кварца 32768 совместить с частотой МК чтобы импульс был частотой в 1Гц!
дык от кварца 32768 работает микросхема часов, а микроконтроллер работает от своего тактового генератора, их никак синхронизировать не надо, от частоты микроконтроллера зависит сколько будет выполняться операций в секунду
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Протеус по ряде причин работает медленее чем реальное время, тоесть секунда в нем длится дольше чем реальная и чем слабее комп тем дольше. Протеус это не панацея точность в нем сверять - это бред! он лишь иногда полезен при отладке в простейших схемах (например плавную смену цифр он уже не покажет).
Уважаемые Коты, подскажите как объединить в один проект две самостоятельные программы! Обе проги рабочие, в Протеусе эмулируются без проблем. Одна программа - таймер на DS1307. вторая термометр на DS18b20. МК - Atmega16. Пытался тупо исходник из одной вставить во второй исходник (вместе с со всеми #include, #define. #asm) менял void main (void), но отладчик в CVAVR ругается! Хотя по отдельности обе программки проходят процедуру отладки без проблем! Вот исходники обеих программ:
float temper; int temper_int,temper_fl,min=0; unsigned long int temper_t; unsigned char lcd_buffer[33];
void temperature(void) // функция по работе с термо-датчиком { temper=ds18b20_temperature(&ds18b20_rom_codes[0][0]); temper_int=temper; if(temper_int>1000) // при отрицательной температуре { temper_fl=(temper-temper_int)*10; temper_t=(long)temper_int*10; temper_t=temper_t+temper_fl; temper_int=40960-temper_t; min=1; }else // при положительной { min=0; temper_fl=(temper-temper_int)*10; temper_int=(temper_int*10)+temper_fl; } }
void main(void) { // Determine the number of DS1820 devices // connected to the 1 Wire bus ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes); ds18b20_init(0,-35,35,DS18B20_12BIT_RES); // переключения термометра в 12 битный режим // LCD module initialization lcd_init(20);
while (1) { // Place your code here delay_ms(500); temperature(); // вызываем функцию температуры lcd_clear(); // очищаем LCD if(min==1) { sprintf(lcd_buffer,"t=-%i.%d\xdfC",temper_int/10,temper_int%10); //вывод отрицательной температуры }else { sprintf(lcd_buffer,"t=+%i.%d\xdfC",temper_int/10,temper_int%10); // вывод положительной } lcd_gotoxy(0,3); lcd_puts(lcd_buffer); // вывод на дисплей }; } Выручайте, а то застопорился я как то!
main во второй проге (Таймер) при слиянии я меняю на void timer (void)? а отладчик ругается на переменные "unsigned char hour, min, sec; // переменные - часы, минуты и секунды" и соответственно на команду "rtc_get_time(&hour, &min, &sec); //считываем время"
Marchello писал(а):main во второй проге (Таймер) при слиянии я меняю на void timer (void)? а отладчик ругается на переменные "unsigned char hour, min, sec; // переменные - часы, минуты и секунды" и соответственно на команду "rtc_get_time(&hour, &min, &sec); //считываем время"
Ну поменять имя функции этого мало, её хотябы нужно гденибудь вызвать чтоб она заработала, будет много ошибок так, как синтаксис нарушен. Нужно не переименовывать а попытатся объеденить, инициализацию вместе, глобальные переменные наверх и т.д. Судя по вашему посту Вам бы лучше с нуля заодно и поучитесь, а мы вам поможем.