saa1064-ds18x20-DS130
- Войдите на сайт для отправки комментариев
Уважаемые Гуру программного кода помогите пожалуйста!
Собрал в железе часы DS1307 на I2C, подцепил датчик температуры DS18B20 и все это отправлял на индикаторы через SAA1064 на I2C - все работает. Проблема в установке часов с кнопок!!! А теперь по порядку:
ЦЕЛЬ: собрать часы с градусником в ВЗГ исполнении и подарить отцу на Новый Год, он живет в деревне, они на улице будут не лишние (железо собрано и работает, но нет установки времени с кнопок).
ИМЕЕТСЯ: платка с ATMEGA_8L ( 8Kbytes Flash, 0 - 8MHz (ATmega8L)), на ней SAA1064 с индикаторами. К ним прикручены DS1307 и DS18B20.
ПРОБЛЕМА: иногда, часики сбиваются и их нужно программировать. Я написал отдельный скетч для одной кнопки посимвольной установки и понял, что если я их соединю - памяти не хватит. Уже давно в пути 328Р но к Новому году не поспеют!!! Проблема №2 -очень немного понимаю как программировать, пользоваться операторами if и for немного могу (написал ведь), оператором switch case пока не могу :( не разобрался... и так еще много с чем...
ПРОСЬБА: сильно не ругать - это мой первый проект. Помогите соединить 2 скетча, чтоб хватило 7к памяти!
ЗЫ: ATMEGA_8L - зашивал уже не раз через ARDUINO_UNO_R3... Внес блокировки по питанию и экран на часики, но раз есть проблема - лучше прикрутить установку с кнопок...
Не понимаю почему, но код не вставляется :(
помогло простое копирование... а не для форума...
К сожалению здесь не крепятся библиотеки, а где я их брал , наверное, уже не смогу найти....
Первое, что приходит в голову, избавлятся от библиотеки DS1307 и делать на wire.
http://arrduinolab.blogspot.ru/2014/10/blog-post.html
Попробуйте, если разберетесь. Сам пока не юзал, но на будущее запомнил. Памяти я думаю под 1К высвободите.
Первое, что приходит в голову, избавлятся от библиотеки DS1307 и делать на wire.
уже ковыряю и выкидываю куски не используемые в моем случае - ака месяц, год и день недели... пока идет туго..
Первое, что приходит в голову, избавлятся от библиотеки DS1307 и делать на wire.
уже ковыряю и выкидываю куски не используемые в моем случае - ака месяц, год и день недели... пока идет туго..
Вы описание DS1307 хорошее поищите, том структуры команд приведены. Сразу проще станет.
Ну вот как-то вопрос решился, комменты в коде, кому интересно - используйте на свой страх и риск :)
там еще огромный плацдарм для оптимизации:
С delay() вы сильно погорячились. Их не просто много, а очень много. Почитайте http://arduino.ru/tutorials/BlinkWithoutDelay и попробуйте переделать под него. И вам руку набить, и код будет без рывков работать. Деление на десятки и единицы не оптимальнее делать перед выводом, а все арифметические операции проводить с целыми числами?
С delay() вы сильно погорячились. Их не просто много, а очень много. Почитайте http://arduino.ru/tutorials/BlinkWithoutDelay и попробуйте переделать под него. И вам руку набить, и код будет без рывков работать. Деление на десятки и единицы не оптимальнее делать перед выводом, а все арифметические операции проводить с целыми числами?
Спасибо за совет. Понимаю, что код пока не мой конек :) . delay (i) кушает 8 байт, подпрограмма delay (), которая обращается к delay (1000), кушает 2 байта, в этом моменте я возможно выиграл место (смотреть нужно, не уверен). unsigned long currentMillis = millis();несомненно съест больше. По поводу деления на единицы и десятки могу сказать одно, мне нужно было отправить 4 байта символов последовательно, причем каждому числу соотнести его код отображения на индикаторах (digits[16]={63, 6, ..., 113};) - сделал так как понимаю это в данный момент. Строки с 060 по 063 конечно же написаны с ошибкой, но это я сейчас только понял, хотя это не повлияло на конечный результат (мне немного повезло), должен был везде поставить %10. Несомненно char и byte сократили бы мне вес кода - это тоже еще нужно мне обдумывать, где и что использовать.
ЗЫ подарок уже отправлен, может и будет время его подправить, но не в этот раз. Сейчас я "ваяю" второй "шедевр" на AD22100 st зацепив его на А1, тут у меня времени немного побольше, вот и потренируюсь...
С delay() вы сильно погорячились. Их не просто много, а очень много. Почитайте http://arduino.ru/tutorials/BlinkWithoutDelay и попробуйте переделать под него. И вам руку набить, и код будет без рывков работать. Деление на десятки и единицы не оптимальнее делать перед выводом, а все арифметические операции проводить с целыми числами?
Спасибо за совет. Понимаю, что код пока не мой конек :) . delay (i) кушает 8 байт, подпрограмма delay (), которая обращается к delay (1000), кушает 2 байта, в этом моменте я возможно выиграл место (смотреть нужно, не уверен). unsigned long currentMillis = millis();несомненно съест больше. По поводу деления на единицы и десятки могу сказать одно, мне нужно было отправить 4 байта символов последовательно, причем каждому числу соотнести его код отображения на индикаторах (digits[16]={63, 6, ..., 113};) - сделал так как понимаю это в данный момент. Строки с 060 по 063 конечно же написаны с ошибкой, но это я сейчас только понял, хотя это не повлияло на конечный результат (мне немного повезло), должен был везде поставить %10. Несомненно char и byte сократили бы мне вес кода - это тоже еще нужно мне обдумывать, где и что использовать.
ЗЫ подарок уже отправлен, может и будет время его подправить, но не в этот раз. Сейчас я "ваяю" второй "шедевр" на AD22100 st зацепив его на А1, тут у меня времени немного побольше, вот и потренируюсь...
С delay() дело не в объемах памяти. Пока работает этот оператор, программа вообще ничего не делает, фактически висит. Пока это 1сек может и не заметно, когда наберется 20-30сек станет грустно.
С delay() дело не в объемах памяти. Пока работает этот оператор, программа вообще ничего не делает, фактически висит. Пока это 1сек может и не заметно, когда наберется 20-30сек станет грустно.
Согласен, но в моем алгоритме так поступить мне было выгоднее - МК маленкий. millis требует операций инкримента или инкримента по условию, а это дополнительные переменные для хранения nextmillis в 4 байта и еще кучу прелестей типа переполнения через 50 дней или обнуление в конце цикла всех переменных (глобальных и локальных). Единственный жЫрный плюс - это проверка кнопки установки времени, других я не увидел.