AVR и светодиодный индикатор
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: AVR и светодиодный индикатор
при проблемах в коде дин. индикации сегмент светится не по всему экрану, а только на следующем (по ходу "развертки") разряде...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Реклама
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: AVR и светодиодный индикатор
Вот это и проверим.... А дальше - вольтметр в руки и смотреть, чего там творится...
Re: AVR и светодиодный индикатор
goldenandy алгоритм понял, спасибо. По результатам отпишусь. Разъяснили доходчиво 
Re: AVR и светодиодный индикатор
Добрый вечер, уважаемые форумчане! Наконец получилась добраться до схемы. По Вашему совету, goldenandy, написал код вывода на индикатор
Сначала отключил все разряды и сегменты, фото ниже

А потом поочередно зажигал по одному разряду

Понимаю, что проблема в плате. Но не могу врубиться, как ее отследить. Почему при выводе 4 и 3 разрядов, паразитной засветки 2 и 1 нет. А при выводе 1 и 2, паразитная засветка 3 и 4 есть
На последнем фото припаял резисторы обратно, и вывожу в первый разряд

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

Код: Выделить всё
#include <avr/io.h>
int main(void)
{
DDRC |= (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
DDRD |= (1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7);
PORTC |= (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
PORTD &= ~((1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7));
while (1)
{
}
}
А потом поочередно зажигал по одному разряду
Понимаю, что проблема в плате. Но не могу врубиться, как ее отследить. Почему при выводе 4 и 3 разрядов, паразитной засветки 2 и 1 нет. А при выводе 1 и 2, паразитная засветка 3 и 4 есть
На последнем фото припаял резисторы обратно, и вывожу в первый разряд
Вот запустил таймер, паразитной засветки нет, правда сегменты светятся слабее, чем одиночный разряд
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: AVR и светодиодный индикатор
Так.
На первой фотке слабо светятся все сегменты.
Проверяйте напряжения на эммитерах транзисторов, на базах и на выходах порта Ц.
Где-то есть напряжение, которое приоткрывает транзисторы.
Поочередное зажигание как ? динамической индикацией или кодом выше, только в порте Ц только один бит в 1 ?
На первой фотке слабо светятся все сегменты.
Проверяйте напряжения на эммитерах транзисторов, на базах и на выходах порта Ц.
Где-то есть напряжение, которое приоткрывает транзисторы.
Поочередное зажигание как ? динамической индикацией или кодом выше, только в порте Ц только один бит в 1 ?
- Реклама
Re: AVR и светодиодный индикатор
Поочередное зажигание делал статикой, как в коде выше, только убирал поочереди вывод 1 на каждом разряде.
Вопрос такой, мне нужно отключить плату индикации и измерить напряжение на выводах сегментов и разрядов? Потому что при подключении платы индикации к другому контроллеру все работает нормально. Згачит проблема в основной плате. Какую программу следует записать в контроллер, которая тушит все разряды?
Вопрос такой, мне нужно отключить плату индикации и измерить напряжение на выводах сегментов и разрядов? Потому что при подключении платы индикации к другому контроллеру все работает нормально. Згачит проблема в основной плате. Какую программу следует записать в контроллер, которая тушит все разряды?
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: AVR и светодиодный индикатор
нет. нужно измерять при подключенной плате и искать, откуда появляется напряжение, открывающее транзисторы.
Re: AVR и светодиодный индикатор
На выходах порта С - 3,27В, на базах транзисторов - 4,31В, на эмиттерах - 4,99В, на коллекторах - 4,79В. Программа запущена таймера, выводится время.
Re: AVR и светодиодный индикатор
Если при выводе "по одному на весь дисплей" свечение индикатора отличается от работы в режиме "несколько цифр одновременно", то проблема явно в алгоритме программы.
Яркость свечения не зависит от того, сколько позиций активно.
Все сегменты должны иметь одинаковую яркость, независимо от того,сколько сегментов светятся одновременно.
В то же время суммарная яркость ессно зависит от количества одновременно светящихся сегментов.
Чем сегментов одинаковой яркости больше - тем суммарная яркость выше.

Яркость свечения не зависит от того, сколько позиций активно.
Все сегменты должны иметь одинаковую яркость, независимо от того,сколько сегментов светятся одновременно.
В то же время суммарная яркость ессно зависит от количества одновременно светящихся сегментов.
Чем сегментов одинаковой яркости больше - тем суммарная яркость выше.
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: AVR и светодиодный индикатор
Мерять нужно в статике, когда у вас работает вот этот код
У вас же даже при этом коде наблюдается свечение индикаторов, хотя они не должны гореть. И ищите, соответственно, почему у вас на базах транзисторов напряжение ниже питания. Хотя должно быть почти равно.
И да, проверьте, что у вас на питании контроллера. Точно ли +5 вольт приходят на Vcc и AVcc. Порт Ц питается от AVcc, проверьте, может там непропай и порт не может "вытянуть" положенные 5 вольт...
Код: Выделить всё
PORTC |= (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
PORTD &= ~((1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3)|(1 << PD4)|(1 << PD5)|(1 << PD6)|(1 << PD7));
while (1) { }И да, проверьте, что у вас на питании контроллера. Точно ли +5 вольт приходят на Vcc и AVcc. Порт Ц питается от AVcc, проверьте, может там непропай и порт не может "вытянуть" положенные 5 вольт...
Re: AVR и светодиодный индикатор
Спасибо, вечером проверю и отпишусь.
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: AVR и светодиодный индикатор
господа все проше идавно извесно проблема начала вылезать еше в калках НА ВЛИ потом ва часах на них-она чисто авпаратная отсутствие запирания по сеткам и подтяжки анодоф на минус питания ВЛИ кроме неприятности в темноте оно жрет ресурс индюка
в грамоттных КБ проблему сразу поняли и пофиксили установкой подтяжек хотя они и жрут часть энерги зря
а тупые поделки навроде старта таковое не имели да и не парился никто для самосборщикоф... с переходом на диоды проблема сначала не стояла изз низкой чуйки диодоф тех лет но сейчас когда индюк притоке 0,5ма светит весма заметно ве просто и заметно
начну с того что ключ ОЭ не идеален кроме утечек стть паразитные емкостя БЭ Кби эфект милера! поэтому ключик не пешит закрытся если подтяжка есть оно ослаабляет эфект
кроме того плохой тон не делать подтяжку бэ в транз. особеноключевых !gj [jhjotve управлять ключом нало через rcr цепь но я такое встречал толко парк раз
но вот подтяжку в промсхемах принято было делать всегда для этого даже разработали 4 и 8 ризисторные сборки и их широко применяют в пром устройствах
тоесть проблема медленых ключей чисто апаратная имет место быть ее частично можно
решить програмно как колега писал введением дедтайма между разрядами ну или поставит легкие мосфты вместо биполяра
но не то не другое не убирет апаратные утечки транзистороф и емкостя монтажа толко подтяжка апаратная их решает -внутреняя подтяжка кристала бесполезна!
номинал подтяжки дне должен превышать 4,7к!!! иначе она не эфективна
те бэ -обязателны если их нет это конструктивный косяк кстати к емкости транзюлей добавляется емкостя монтажа без подтядек еей не успеть разрядится за мертвое время
в грамоттных КБ проблему сразу поняли и пофиксили установкой подтяжек хотя они и жрут часть энерги зря
а тупые поделки навроде старта таковое не имели да и не парился никто для самосборщикоф... с переходом на диоды проблема сначала не стояла изз низкой чуйки диодоф тех лет но сейчас когда индюк притоке 0,5ма светит весма заметно ве просто и заметно
начну с того что ключ ОЭ не идеален кроме утечек стть паразитные емкостя БЭ Кби эфект милера! поэтому ключик не пешит закрытся если подтяжка есть оно ослаабляет эфект
кроме того плохой тон не делать подтяжку бэ в транз. особеноключевых !gj [jhjotve управлять ключом нало через rcr цепь но я такое встречал толко парк раз
но вот подтяжку в промсхемах принято было делать всегда для этого даже разработали 4 и 8 ризисторные сборки и их широко применяют в пром устройствах
тоесть проблема медленых ключей чисто апаратная имет место быть ее частично можно
решить програмно как колега писал введением дедтайма между разрядами ну или поставит легкие мосфты вместо биполяра
но не то не другое не убирет апаратные утечки транзистороф и емкостя монтажа толко подтяжка апаратная их решает -внутреняя подтяжка кристала бесполезна!
номинал подтяжки дне должен превышать 4,7к!!! иначе она не эфективна
те бэ -обязателны если их нет это конструктивный косяк кстати к емкости транзюлей добавляется емкостя монтажа без подтядек еей не успеть разрядится за мертвое время
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Re: AVR и светодиодный индикатор
musor скорее всего так и есть, правда смущал момент, что на другом контроллере, паразитной засветки не было.
Но я попробовал проверить напряжения при выключенных индикаторах. Но так как они засвечиваются равномерно, то перекоса по напряжениям не было.
Но я попробовал проверить напряжения при выключенных индикаторах. Но так как они засвечиваются равномерно, то перекоса по напряжениям не было.
Re: AVR и светодиодный индикатор
Разница между МК разве что в режиме включения подтягивающих резисторов на выводах портов возможна.
И то ... лишь в случае, когда имеется отдельный бит конфигурации, который одновременно ВСЕ подтяжки вырубает
да к тому же тот бит прораммно недоступен - ставится программатором (тогда от пересадки одной и той же прожки независимо будет).

И то ... лишь в случае, когда имеется отдельный бит конфигурации, который одновременно ВСЕ подтяжки вырубает
да к тому же тот бит прораммно недоступен - ставится программатором (тогда от пересадки одной и той же прожки независимо будет).
Re: AVR и светодиодный индикатор
Если изменить схемку, то усе нормально будет и даже в протеусе
с общим анодомс общим катодом
Спойлер
с общим анодом
Код: Выделить всё
/*активный уровень сегмента 0 или 1*/
#define IND_ACTIVE_LEVEL_SEG 0
/*активный уровень разряда 0 или 1*/
#define IND_ACTIVE_LEVEL_DIG 1Код: Выделить всё
/*активный уровень сегмента 0 или 1*/
#define IND_ACTIVE_LEVEL_SEG 1
/*активный уровень разряда 0 или 1*/
#define IND_ACTIVE_LEVEL_DIG 0Re: AVR и светодиодный индикатор
Добрый вечер, уважаемые коты! Хотел задать вопрос по организации кода в проекте. Я для хранения значений таймеров и состояния таймеров использую массив структур. И меня смущает момент обращения к полям структуры для сохранения измененных значений. Так как у меня используется 4 таймера, соответственно используются разные пункты меню для изменения значений настройки таймеров. И этот фрагмент кода написан неправильно.
//Настройка таймера t1
if (menu == 11000) {
time[0].on_hour = EditHour(time[0].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].on_hour, time[0].on_hour);
}
if (menu == 11001) {
time[0].on_min = EditMinute(time[0].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].on_min, time[0].on_min);
}
if (menu == 11010) {
time[0].off_hour = EditHour(time[0].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].off_hour, time[0].off_hour);
}
if (menu == 11011) {
time[0].off_min = EditMinute(time[0].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].off_min, time[0].off_min);
}
if (menu == 1102) {
if (button == BTN_SHRT_RIGHT) {
if (time[0].work == 0) time[0].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[0].work == 1) time[0].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[0].work, time[0].work);
}
//Настройка таймера t2
if (menu == 11100) {
time[1].on_hour = EditHour(time[1].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].on_hour, time[1].on_hour);
}
if (menu == 11101) {
time[1].on_min = EditMinute(time[1].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].on_min, time[1].on_min);
}
if (menu == 11110) {
time[1].off_hour = EditHour(time[1].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].off_hour, time[1].off_hour);
}
if (menu == 11111) {
time[1].off_min = EditMinute(time[1].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].off_min, time[1].off_min);
}
if (menu == 1112) {
if (button == BTN_SHRT_RIGHT) {
if (time[1].work == 0) time[1].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[1].work == 1) time[1].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[1].work, time[1].work);
}
//Настройка таймера t3
if (menu == 11200) {
time[2].on_hour = EditHour(time[2].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].on_hour, time[2].on_hour);
}
if (menu == 11201) {
time[2].on_min = EditMinute(time[2].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].on_min, time[2].on_min);
}
if (menu == 11210) {
time[2].off_hour = EditHour(time[2].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].off_hour, time[2].off_hour);
}
if (menu == 11211) {
time[2].off_min = EditMinute(time[2].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].off_min, time[2].off_min);
}
if (menu == 1122) {
if (button == BTN_SHRT_RIGHT) {
if (time[2].work == 0) time[2].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[2].work == 1) time[2].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[2].work, time[2].work);
}
//Настройка таймера t4
if (menu == 11300) {
time[3].on_hour = EditHour(time[3].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].on_hour, time[3].on_hour);
}
if (menu == 11301) {
time[3].on_min = EditMinute(time[3].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].on_min, time[3].on_min);
}
if (menu == 11310) {
time[3].off_hour = EditHour(time[3].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].off_hour, time[3].off_hour);
}
if (menu == 11311) {
time[3].off_min = EditMinute(time[3].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].off_min, time[3].off_min);
}
if (menu == 1132) {
if (button == BTN_SHRT_RIGHT) {
if (time[3].work == 0) time[3].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[3].work == 1) time[3].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[3].work, time[3].work);
}
Может кто-то подскажет, как бы его было написать более правильно. Так как используются разные пункты меню, то соответственно пришлось по каждому параметру настройки таймера делать отдельный код. Хотя фактически он повторяется
Спойлер
if (fConf) {//Настройка таймера t1
if (menu == 11000) {
time[0].on_hour = EditHour(time[0].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].on_hour, time[0].on_hour);
}
if (menu == 11001) {
time[0].on_min = EditMinute(time[0].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].on_min, time[0].on_min);
}
if (menu == 11010) {
time[0].off_hour = EditHour(time[0].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].off_hour, time[0].off_hour);
}
if (menu == 11011) {
time[0].off_min = EditMinute(time[0].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[0].off_min, time[0].off_min);
}
if (menu == 1102) {
if (button == BTN_SHRT_RIGHT) {
if (time[0].work == 0) time[0].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[0].work == 1) time[0].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[0].work, time[0].work);
}
//Настройка таймера t2
if (menu == 11100) {
time[1].on_hour = EditHour(time[1].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].on_hour, time[1].on_hour);
}
if (menu == 11101) {
time[1].on_min = EditMinute(time[1].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].on_min, time[1].on_min);
}
if (menu == 11110) {
time[1].off_hour = EditHour(time[1].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].off_hour, time[1].off_hour);
}
if (menu == 11111) {
time[1].off_min = EditMinute(time[1].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[1].off_min, time[1].off_min);
}
if (menu == 1112) {
if (button == BTN_SHRT_RIGHT) {
if (time[1].work == 0) time[1].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[1].work == 1) time[1].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[1].work, time[1].work);
}
//Настройка таймера t3
if (menu == 11200) {
time[2].on_hour = EditHour(time[2].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].on_hour, time[2].on_hour);
}
if (menu == 11201) {
time[2].on_min = EditMinute(time[2].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].on_min, time[2].on_min);
}
if (menu == 11210) {
time[2].off_hour = EditHour(time[2].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].off_hour, time[2].off_hour);
}
if (menu == 11211) {
time[2].off_min = EditMinute(time[2].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[2].off_min, time[2].off_min);
}
if (menu == 1122) {
if (button == BTN_SHRT_RIGHT) {
if (time[2].work == 0) time[2].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[2].work == 1) time[2].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[2].work, time[2].work);
}
//Настройка таймера t4
if (menu == 11300) {
time[3].on_hour = EditHour(time[3].on_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].on_hour, time[3].on_hour);
}
if (menu == 11301) {
time[3].on_min = EditMinute(time[3].on_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].on_min, time[3].on_min);
}
if (menu == 11310) {
time[3].off_hour = EditHour(time[3].off_hour, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].off_hour, time[3].off_hour);
}
if (menu == 11311) {
time[3].off_min = EditMinute(time[3].off_min, button);
if (eeprom_is_ready())
eeprom_update_byte(&t[3].off_min, time[3].off_min);
}
if (menu == 1132) {
if (button == BTN_SHRT_RIGHT) {
if (time[3].work == 0) time[3].work = 1;
}
if (button == BTN_SHRT_LEFT) {
if (time[3].work == 1) time[3].work = 0;
}
if (eeprom_is_ready())
eeprom_update_byte(&t[3].work, time[3].work);
}
Re: AVR и светодиодный индикатор
Добрый день, что-то все молчат. Может кто-то посоветует, как лучше все таки сохранять настройки таймеров. А то при изменение минут и часов каждого таймера приходится писать слишком много разного кода, как бы это все дело оптимизировать?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR и светодиодный индикатор
Описали структуру с параметрами таймера.
Создали массив таких структур.
Создали функцию, которая получает на входе указатель на структуру таймера (или номер этой структуры в массиве), и изменяет эту структуру.
Вызываете эту функцию из пунктов меню с нужным указателем (или номером).
В чем проблема?
Создали массив таких структур.
Создали функцию, которая получает на входе указатель на структуру таймера (или номер этой структуры в массиве), и изменяет эту структуру.
Вызываете эту функцию из пунктов меню с нужным указателем (или номером).
В чем проблема?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: AVR и светодиодный индикатор
Сколько условий, кошмар ...
Сделайте лучше через switch-case, быстрее код будет выполняться.
По поводу таймеров и оптимизации кода - не понятно. Что Вы хотите соптимизировать ?
Хоть и код в условиях примерно одинаковый, условия то разные. Единственное, что напрашивается, - таблица с перебором в цикле. Но, время выполнение такого кода будет даже больше текущего варианта.
Сделайте лучше через switch-case, быстрее код будет выполняться.
По поводу таймеров и оптимизации кода - не понятно. Что Вы хотите соптимизировать ?
Хоть и код в условиях примерно одинаковый, условия то разные. Единственное, что напрашивается, - таблица с перебором в цикле. Но, время выполнение такого кода будет даже больше текущего варианта.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR и светодиодный индикатор
да, кстати... проверку eeprom_is_ready() перед вызовом функций работы с EEPROM делать не надо - она там уже встроена. эта проверка требуется только в случаях работы с EEPROM в обработчиках прерываний и/или перед тем, как перевести МК в режим SLEEP_POWER_DOWN.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!





