Перейти к содержанию

Помогите пожалуйста в написании исходного текста...


Гость химик

Рекомендуемые сообщения

В том и дело, что добавил, только в место цифр стоят буквы, а он гад так и не меняет ни че. Хотя я снял его с уже проверенного устройства. Там он работал.

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

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 72
  • Создана
  • Последний ответ
Потому что в протеусе с твоей прошивкой нижняя строка моргает, что то не так значит и как это в железе сказывается хз.

Ну могу предположить, что мерцает

из-за того, что я по ошибке поставил строку #asm(''wdr'') сразу после инициализации сторожевой собачки. Это исправлено.

 

 

Сейчас тыкал вольтметром в порт А. Картина такая

RS=1

R/W=0

E=0

D4, D5, D6, D7 =1

Так же 1 на линиях SDA и SCL.

Хотел проверить осцилографом сигнал на выводе дисплея Е, но ноль есть ноль. Наверно это и есть моя проблема?

 

 

Еще интересный факт. Чиркал щупом осцилографа по выводу XTAL1, результат - при каждом касании произвольно вспыхивали светодиоды, в разном порядке. И на дисплее при первом касании:

верхняя строка тухнет,

нулевое знакоместо мигает меняя закрашенное знакоместо на подчерк.

При каждом следующем касании предыдущее место остается закрашено и мерцать начинает следующее.

Такое ощущение что не работает передача данных.

Ссылка на комментарий
Поделиться на другие сайты

Ну могу предположить, что мерцает

из-за того, что я по ошибке поставил строку #asm(''wdr'') сразу после инициализации сторожевой собачки. Это исправлено.

Сброс таймера в том месте врядли на что то может повлиять.

 

Сейчас тыкал вольтметром в порт А. Картина такая

RS=1

R/W=0

E=0

D4, D5, D6, D7 =1

Так же 1 на линиях SDA и SCL.

Хотел проверить осцилографом сигнал на выводе дисплея Е, но ноль есть ноль. Наверно это и есть моя проблема?

 

 

Еще интересный факт. Чиркал щупом осцилографа по выводу XTAL1, результат - при каждом касании произвольно вспыхивали светодиоды, в разном порядке. И на дисплее при первом касании:

верхняя строка тухнет,

нулевое знакоместо мигает меняя закрашенное знакоместо на подчерк.

При каждом следующем касании предыдущее место остается закрашено и мерцать начинает следующее.

Такое ощущение что не работает передача данных.

Не работает передача данных это последствия, а причина как мне кажется кроется в том что МК просто стоит. А вот почему он стоит, тут я вижу две возможные причины (это исключая возможные ошибки монтажа), первая это по какой то причине не запускается внешний кварц, вторая это ошибки в программе, не в написании, а в логике работы, поскольку практически все сидит в прерываниях, то любой косяк заклинит МК и он будет тупо стоять либо доходить до какого то места и опять же вставать. Обе причины проверяемы, как проверить я уже описывал выше, возможные проблеммы с запуском кварца проверяются переключением на внутренний генератор с такой же частотой. Косяки в программе и в прерываниях проверяются написанием программы с нуля, вернее только части программы отвечающей за вывод строки на дисплей, больше там ничего не должно быть. Причем создать новый проект обязательно, при копировании из существующего можно перетащить и косяки. Вот когда это будет проделано и будут или не будут какие то результаты, можно будет рассуждать дальше.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Сергей(xsl), делал все как ты писал, переставил фьюзы на внутренний генератор, написал новую программу для дисплея. В функции main() написал:

 

lcd_init(16);

lcd_gotoxy(0,0);

lcd_putsf(''0123456789012345'');

lcd_putsf(''0123456789012345'');

 

Прошил. Экран очистился и все. Переключил на внутренний генератор, тоже самое.

 

После этого переключил обратно на кварц и прошил исправленную полную прошивку. На дисплее стали по очереди мерцать обе закрашенные строки с частотой около 1 секунды. И в такт им светодиод, порт которого установлен в 0. По идее он должен просто гореть.

Грешу на крякнутую CodeVisionAVR 2.04.3a. Так как уже наблюдал глюк.

Сергей, если можеш проверь пожалуйста в Протеусе как будет себя вести дисплей.

Изменено пользователем химик
Ссылка на комментарий
Поделиться на другие сайты

...Сергей, если можеш проверь пожалуйста в Протеусе как будет себя вести дисплей...

Выводит на дисплей надпись "привет хозяин" (латинскими буквами), через какое то время в верхней строке пишет "романов сергей" а в нижней какие то цифры и все это переодически моргает. А потому что не надо вот здесь очищать дисплей

void Standby (void){
 
 if(standby_1==0){
   OUT_Standby=0;
   LED_Standby=0;
   
   lcd_clear(); <---------------------------------------------------------
   lcd_gotoxy(1,0);
   lcd_putsf("Romanov Sergey");
   lcd_gotoxy(1,1);
   lcd_puts(lcd_buffer);

} else { 
   OUT_Standby=1;
   LED_Standby=1;
   
   lcd_clear(); <-----------------------------------------------------------
   lcd_gotoxy(0,0);
   lcd_putsf("Master		  ");
   lcd_gotoxy(1,1);
   lcd_puts(lcd_buffer);
   };
}

 

 

...Грешу на крякнутую CodeVisionAVR 2.04.3a. Так как уже наблюдал глюк...

Не туда грешишь, с прошивкой, скомпилированой на твоей версии CodeVisionAVR вывод на дисплей идет.

 

Сергей(xsl), делал все как ты писал, переставил фьюзы на внутренний генератор, написал новую программу для дисплея. В функции main() написал:

 

lcd_init(16);

lcd_gotoxy(0,0);

lcd_putsf(''0123456789012345'');

lcd_putsf(''0123456789012345'');

 

Прошил. Экран очистился и все. Переключил на внутренний генератор, тоже самое.

После этого переключил обратно на кварц и прошил исправленную полную прошивку...

Включим логику, если даже ЭТО на дисплей не выводится, какой смысл пытатся выводить что то еще???

Хочешь найти проблемму, разберись сначала с этими 4-мя строчками. А вернее с дисплеем, если исключить ошибки подключения и неисправные элементы, возможно проблеммы с контрастностью, если покрутить подстроечник, что нибудь меняется?

Ссылка на комментарий
Поделиться на другие сайты

:smile: Ура!!! работает, иногда даже как надо.

 

Проблема была в проводе идущему к выводу R/W.

Теперь другая проблема, прога доходит до строки #asm(''wdr'') и сбрасывается. Идет прерывание RESET. В ISIS работает нормально.

Когда пинцетом касаюсь к выводам данных дисплея, то прога идет дальше и показывает температуру, только заниженную. И через несколько секунд опять ресет.

Ещё, время должно высвечиваться в формате 00:00, а у меня 0:0.

Ссылка на комментарий
Поделиться на другие сайты

...прога доходит до строки #asm(''wdr'') и сбрасывается...

Если в протеусе работает то как ты в железе определил что сбрасывается именно на #asm(''wdr'')? Вообще не стыкуется, это команда сброса сторожевого таймера, логичнее предположить, что в программе есть циклы которые длятся дольше времени ожидания сторожевого таймера и в этих циклах нет его сброса, поэтому и идет общий сброс.

Ссылка на комментарий
Поделиться на другие сайты

Если в протеусе работает то как ты в железе определил что сбрасывается именно на #asm(''wdr'')...

Прошу прощения,

доходит не до #asm(''wdr''), а до #asm(''sei'').

Сторожевой таймер я пока отключил.

Ссылка на комментарий
Поделиться на другие сайты

Ну тогда какая то хрень в прерываниях, точнее не скажу, не знаю.

Все что могу посоветовать, я уже советовал, начни проект сначала и делай по частям. Там много разных устройств, входных/выходных сигналов. Сделай сначала что то одно, добейся чтоб все работало, потом уже добавляй что то еще. Я смог бы разобратся только так, иначе я в твоей программе мало что понимаю. Ну либо подожди, может кто более сведующий в этих делах посоветует, что то более дельное.

Ссылка на комментарий
Поделиться на другие сайты

Ну тогда какая то хрень в прерываниях, точнее не скажу...

Ура! работает.

Сергей, проблема оказалась не в прерываниях а в кварце, что то с выводом. Нашел новый кварц, поставил и цикл пошел. Есть пара проблем:

1. Не срабатывает прерывание от ИК приемника. На выходе приемника сигнал есть (мерил осцилографом), наверно неправильно инициализировал его. Буду с этим разбираться. Без пульта не могу запустить часы.

2. Температура отображается не правильно, показывает 3 градуса. Если замыкаю пинцетом кварц, то температура становится 23 градуса, как положено, а цикл значительно замедляется. Наверное частота большая для этого датчика. Попробую проверять температуру с помощью таймера.

 

Ну а так всё в порядке, уже начал писать функции для управления звуковыми процессорами РТ2323 и РТ2322. Пока что (теоретически) есть переключение входов, дальше буду пробовать регулировать звук.

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

куски туда.

 

И еще, Сергей, подскажи пожалуйста, как записать содержимое переменной в еепром и как после считать от туда.

Home_Sinema.rar

Изменено пользователем химик
Ссылка на комментарий
Поделиться на другие сайты

...Сергей, проблема оказалась не в прерываниях а в кварце, что то с выводом. Нашел новый кварц, поставил и цикл пошел. Есть пара проблем:...

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

 

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

Писать так свою первую программу, ну ты даешь, я бы так не смог.

 

...И еще, Сергей, подскажи пожалуйста, как записать содержимое переменной в еепром и как после считать от туда...

 

Так вроде в примере который я давал это было.

Объявляешь переменную нужного вида, только дописываешь что это будет находится в епром, вот так например:

eeprom unsigned char data1=1;  
eeprom unsigned char data2;

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

В том то и дело что переключался, только кварц

не выпаивал. И устройство вело себя во всех случаях одинаково.

Что само интересно, до того как первый раз переключал на внутренний генератор, при замыкании кварца вся схема тухла, а при размыкании цикл начинался с начала. Теперь же когда замыкаю кварц, цикл просто затормаживается, но идет дальше.

Такое чувство как будто фьюзы перестали влиять на переключение (то что они не изменяются исключено, перед каждым программированием и после я их считую).

 

Так вроде в примере который я давал это было.

Объявляешь переменную нужного вида, только дописываешь что это будет находится в епром, вот так например:

eeprom unsigned char data1=1;  
eeprom unsigned char data2;

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

Именно так и сделал, но при

компилировании вылетает ошибка, чтото типа нелегальное использование переменной.

Писал так

 eeprom unsigned char input_ADDR=0xc7; 
eeprom bit standby_2=0;

сначала пишет, что ошибка в переменной input_ADDR, после

того, как я убираю слово eeprom, ошибка переходит на следующую переменную.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...