Гость химик Опубликовано 26 Сентября, 2010 в 21:17 Жалоба Поделиться Опубликовано 26 Сентября, 2010 в 21:17 (изменено) Наконец то появилось свободное время, написал еще кусок программы. Опять, ошибка в функции Viev_time&term. Теоретически программа должна уже показывать время и температуру, а также реагировать на пульт. В конце недели должен прийти комплект деталей и паяльник для паяльной станции. Хочу собрать её дома, а то моим паяльником корпус МЕГИ16 можно и поплавить. А как только будет готова плата моего проекта, то можно будет пробовать что получилось с прошивкой. Изменено 26 Сентября, 2010 в 21:21 пользователем химик Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 26 Сентября, 2010 в 21:48 Жалоба Поделиться Опубликовано 26 Сентября, 2010 в 21:48 Наконец то появилось свободное время, написал еще кусок программы. Опять, ошибка в функции Viev_time&term. Теоретически программа должна уже показывать время и температуру, а также реагировать на пульт. В конце недели должен прийти комплект деталей и паяльник для паяльной станции. Хочу собрать её дома, а то моим паяльником корпус МЕГИ16 можно и поплавить. А как только будет готова плата моего проекта, то можно будет пробовать что получилось с прошивкой. Сергей, могу ошибатся но вроде бы в имени функции нельзя использовать символ & void Viev_time&term (void){ замени его хотябы на нижнее подчеркивание _ и тогда вылезут остальные ошибки. И я не совсем понимаю смысл этих строк key=KEY_INPUT1; , вернее мне кажется что они используются не так как должны, по смыслу в key сохраняется значение содержащееся в KEY_INPUT1, если так и было задумано, тогда их нужно сначала объявить, и key и все остальные что будут сохранятся в key. Хотя меня терзают смутные сомнения (С) что по логике задумывалось не так, но может я ошибаюсь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 27 Сентября, 2010 в 18:24 Жалоба Поделиться Опубликовано 27 Сентября, 2010 в 18:24 (изменено) Сергей, могу ошибатся но вроде бы в имени функции нельзя использовать символ & void Viev_time&term (void){ замени его хотябы на нижнее подчеркивание _ и тогда вылезут остальные ошибки. И я не совсем понимаю смысл этих строк key=KEY_INPUT1; , вернее мне кажется что они используются не так как должны, по смыслу в key сохраняется значение содержащееся в KEY_INPUT1, если так и было задумано, тогда их нужно сначала объявить, и key и все остальные что будут сохранятся в key. Хотя меня терзают смутные сомнения (С) что по логике задумывалось не так, но может я ошибаюсь. Изменил символ & на _ и сразу выскачили все строчки где есть KEY. Кажется ты мне писал что лучше сделать типа так key=1; key=2; и т.д. , А если я в хидере проекта напишу #define KEY_INPUT5_1 1 #define KEY_INPUT1 2 #define KEY_INPUT2 3 #define KEY_INPUT3 4 #define KEY_STANDBY 6 , И еще, пересмотрел я исходник с которого взял пример управления. Там после цикла while есть такая строка key=key_adc Получается что опять же мы помещаем значение key_adc в переменную key. Но нигде я не нашел объявление этой переменной. Изменено 27 Сентября, 2010 в 18:27 пользователем химик Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 27 Сентября, 2010 в 18:44 Жалоба Поделиться Опубликовано 27 Сентября, 2010 в 18:44 Изменил символ & на _ и сразувыскачили все строчки где есть KEY. Кажется ты мне писал что лучше сделать типа так key=1; key=2; и т.д. , А если я в хидере проекта напишу #define KEY_INPUT5_1 1 #define KEY_INPUT1 2 #define KEY_INPUT2 3 #define KEY_INPUT3 4 #define KEY_STANDBY 6 , Все правильно, ошибки не всегда отображаются все, что есть, бывает встает на первой ошибке, а остальные не показывает, пока ее не исправишь. Теперь по переменным, key по любому нужно объявлять. А вот это #define KEY_INPUT1 2 #define KEY_INPUT2 3 #define KEY_INPUT3 4 #define KEY_STANDBY 6 собственно чем это является? Судя по логике это используется практически как текстовая строка, чисто чтобы знать что она означает, если так то зря это, пусть функция возвращает цифры, гемороя меньше будет, их там не так и много чтоб самому запутатся, а в программе будет правильнее. Это конечно если все так как я описал, елси же в этих значениях что то планируется хранить тогда другое дело. И еще, пересмотрел я исходник с которого взял пример управления. Там после цикла while есть такая строка key=key_adc Получается что опять же мы помещаем значение key_adc в переменную key. Но нигде я не нашел объявление этой переменной. Врядли можно по одной строчке судить о переменных, чтобы понять о чем речь нужно видеть весь исходник, если в проекте присутствует несколько файлов, то эта строка может быть в одном, а переменная объявлена в другом. Вобщем без всего исходного проекта судить о чем то сложно, но переменные перед использованием должны быть объявлены, либо локально в функции, либо глобально. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость borman Опубликовано 6 Октября, 2010 в 10:08 Жалоба Поделиться Опубликовано 6 Октября, 2010 в 10:08 В общем без всего исходного проекта судить о чем то сложно, но переменные перед использованием должны быть объявлены, либо локально в функции, либо глобально. 2 Химик: И тщательно следить за областью видимости, и учитывать возможность статичности для локальных переменных. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 18 Октября, 2010 в 09:21 Жалоба Поделиться Опубликовано 18 Октября, 2010 в 09:21 Ну вот, ошибок вроде бы нету, только пара вонингов. Прошил устройство, а оно ни как не отреагировало. Фьюзы пометил: sut1=0 boden=0 bodlevel=0 Правильно ли я установил их? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 18 Октября, 2010 в 10:54 Жалоба Поделиться Опубликовано 18 Октября, 2010 в 10:54 Ну вот, ошибок вроде бы нету, только пара вонингов. Прошил устройство, а оно ни как не отреагировало. Фьюзы пометил: sut1=0 boden=0 bodlevel=0 Правильно ли я установил их? Этот вопрос обычно актуален когда делаешь чью то конструкцию... А в протеусе проверял? Добавлено после раздумий: Все в прерываниях это наверное круто, но основного цикла программы что совсем нет? И чего собственно ты ждешь от устройства? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 18 Октября, 2010 в 11:28 Жалоба Поделиться Опубликовано 18 Октября, 2010 в 11:28 Этот вопрос обычно актуален когда делаешь чью то конструкцию...А в протеусе проверял? Добавлено после раздумий: Все в прерываниях это наверное круто, но основного цикла программы что совсем нет? И чего собственно ты ждешь от устройства? Не, в протеусе не проверял. Я им пользоваться не умею. На счет основного цикла, Сергей, можеш вкратце объяснить что там нужно писать после while (1) ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 18 Октября, 2010 в 11:58 Жалоба Поделиться Опубликовано 18 Октября, 2010 в 11:58 Не, в протеусе не проверял. Я им пользоваться не умею. Протеусом все же желательно научится пользоватся, он конечно не панацея и не все нужные компоненты в нем есть, но по началу, для отладки программ самое то, чтобы хотябы убедится что программа работает. И начинать отладку желательно сразу, т.е. например, есть в схеме дисплей, создаем функцию вывода на него и сразу же проверяем в протеусе работоспособность, дальше есть энкодер, создаем функцию для его обработки и опять же сразу проверяем. А вот так вот написать всю программу сразу и чтоб с первого раза все заработало... За такими советами не ко мне, я так еще не умею. На счет основного цикла, Сергей, можеш вкратце объяснить что там нужно писать после while (1) ? Ну вообще то не после, а внутри while (1), а что там, основная часть программы, которая крутится в бесконечном цикле, реагирует на какие то события, в зависимости от этих событий запускает соответствующие функции или что то выполняет. Обработка событий по прерываниям это конечно хорошо, но пихать все в прерывания и таймеры мне кажется не разумно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 22 Октября, 2010 в 16:52 Жалоба Поделиться Опубликовано 22 Октября, 2010 в 16:52 Товарищи, ответьте пожалуйста - если после инициализации стоит функция lcd_clear(); значит экран должен очистится полюбому? И еще один вопрос - если добавлен хидер lcd.h, то влияет ли инициализация порта на работу дисплея? Пробовал по разному достучаться до lcd, но он постоянно высвечивает закрашеный первый ряд. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 22 Октября, 2010 в 20:37 Жалоба Поделиться Опубликовано 22 Октября, 2010 в 20:37 (изменено) Товарищи, ответьте пожалуйста - если после инициализации стоит функция lcd_clear(); значит экран должен очистится полюбому? И еще один вопрос - если добавлен хидер lcd.h, то влияет ли инициализация порта на работу дисплея? Пробовал по разному достучаться до lcd, но он постоянно высвечивает закрашеный первый ряд. Ну вообще после инициализации дисплея он и так должен быть "чистым" Теперь, если это дисплей на контроллере HD44780 и программа пишется в CodeVisionAVR, и к тому же если это первая программа, не надо ничего мудрить, в CodeVisionAVR есть генератор начального кода и подключение этого дисплея там поддерживается, достаточно указать на каком порту будет дисплей и количество строк, все остальное генератор сделает сам, и настроит порты МК и добавит lcd.h, и сделает это правильно и без ошибок. Что тут можно посоветовать, создай новый проект, добавь в него через генератор дисплей и выведи одну строку. И когда она заработает можно будет делать дальше. Добавлено после раздумий: А вообще если добавить в твоем проекте после инициализации дисплея добавить следующие строки lcd_gotoxy(0,0); lcd_putsf("0123456789012345"); lcd_putsf("0123456789012345"); то в протеусе они отображаются Изменено 22 Октября, 2010 в 20:35 пользователем hsl Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 23 Октября, 2010 в 03:30 Жалоба Поделиться Опубликовано 23 Октября, 2010 в 03:30 (изменено) Ну вообще после инициализации дисплея он и так должен быть "чистым"Теперь, если это дисплей на контроллере HD44780 и программа пишется в CodeVisionAVR, и к тому же если это первая программа, не надо ничего мудрить, в CodeVisionAVR есть генератор начального кода и подключение этого дисплея там поддерживается, достаточно указать на каком порту будет дисплей и количество строк, все остальное генератор сделает сам, и настроит порты МК и добавит lcd.h, и сделает это правильно и без ошибок. Что тут можно посоветовать, создай новый проект, добавь в него через генератор дисплей и выведи одну строку. И когда она заработает можно будет делать дальше. Добавлено после раздумий: А вообще если добавить в твоем проекте после инициализации дисплея добавить следующие строки lcd_gotoxy(0,0); lcd_putsf("0123456789012345"); lcd_putsf("0123456789012345"); то в протеусе они отображаются В том и дело, что добавил, только в место цифр стоят буквы, а он гад так и не меняет ни че. Хотя я снял его с уже проверенного устройства. Там он работал. Изменено 23 Октября, 2010 в 03:33 пользователем химик Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти