Страница 1 из 2 12 Последняя
Показано с 1 по 20 из 27

Тема: Помогите пожалуйста.. MEGA3290P

  1. #1
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Помогите пожалуйста.. MEGA3290P

    Здравствуйте уважаемые.
    Понравился мне этот микроконтроллер своей многолапостью,
    да вот проблема с исходником. Как только назначяю PINH или PINJ сразу выдает ошибку...
    Назначиваю как PINF либо PORTF. Либо как то иначе все работает и компилятор не ругается...
    может я чего с кодом накосячил, не пойму...
    И еще у меня меню должно сохраняться при изменении в еепром, а оно мало того не сохраняется, так еще сначало бред отображает..... чего в программе я не указывал.
    Выкладываю исходник и файл Proteusa. Помогите мне разобраться с проблемой...
    Я только начал заниматься программированием.
    С ув. Артем

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

Название:	проект контрол&#10.JPG 
Просмотров:	149 
Размер:	564.1 Кб 
ID:	114950   Нажмите на изображение для увеличения. 

Название:	проект контрол&#10.JPG 
Просмотров:	133 
Размер:	761.3 Кб 
ID:	114951  
    Вложения Вложения
    • Тип файла: rar 3290P.rar (91.2 Кб, Просмотров: 116)
    Последний раз редактировалось artos; 18.02.2011 в 19:27.
    Нет ничего лучше того, что сделано собственными руками.

  2. #2
    Завсегдатай Аватар для Grigori G.
    Регистрация
    13.05.2006
    Адрес
    Estonia
    Возраст
    45
    Сообщений
    1,561

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Это в CVAVR?
    Тогда порты далее какого-то адреса так писать нельзя. Там в хелпе дажне про это написано.
    нет ничего более вечного, чем то, что замотано синей изолентой...

  3. #3
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,461

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    Либо как то иначе все работает и компилятор не ругается...
    Надо взять нормальный компилятор, и изучить Си.

    ---------- Добавлено в 13:14 ---------- Предыдущее сообщение в 13:10 ----------

    Цитата Сообщение от artos Посмотреть сообщение
    Понравился мне этот микроконтроллер своей многолапостью,
    Хм, вообще его "любят" за то что он напрямую LCD управляет, и что у него есть даун и ап версии по программной памяти (169 и 649).
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  4. #4
    Завсегдатай Аватар для Grigori G.
    Регистрация
    13.05.2006
    Адрес
    Estonia
    Возраст
    45
    Сообщений
    1,561

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    artos, почитай в хелпе "Bit level access to the i/o registers", там есть такая ремарка:
    It is important to note that bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can’t be used for SRAM access.
    Возможно в этом все дело.
    нет ничего более вечного, чем то, что замотано синей изолентой...

  5. #5
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Здравствуйте, спасибо за ответ Вам всем.
    Возможно в этом и проблема....
    но я толком не понял той строки...
    я так понимаю компилятор не обрабатывает тех портов?
    А если поставить новее версию компилятора?

    ---------- Добавлено в 21:13 ---------- Предыдущее сообщение в 21:12 ----------

    Цитата Сообщение от Grigori G. Посмотреть сообщение
    Это в CVAVR?
    Тогда порты далее какого-то адреса так писать нельзя. Там в хелпе дажне про это написано.

    Все , я понял.... И как быть в этом случае?

    ---------- Добавлено в 21:20 ---------- Предыдущее сообщение в 21:13 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    Надо взять нормальный компилятор, и изучить Си.

    ---------- Добавлено в 13:14 ---------- Предыдущее сообщение в 13:10 ----------


    Хм, вообще его "любят" за то что он напрямую LCD управляет, и что у него есть даун и ап версии по программной памяти (169 и 649).

    А какой Вы посоветуете? IAR? Мне Code Vision нравится тем что он для меня понятнее других....

    Так и как теперь быть? Мне надо те порты запрограммировать для выхода....
    А если новее версию Code vision поставить? Не хочется мне время тратить на изучение новой программы..... =(
    Что Вы мне посоветуете?

    ---------- Добавлено в 21:21 ---------- Предыдущее сообщение в 21:20 ----------

    Тогда порты далее какого-то адреса так писать нельзя. Там в хелпе дажне про это написано.


    А как писать нужно?=)
    Нет ничего лучше того, что сделано собственными руками.

  6. #6
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,461

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    А какой Вы посоветуете? IAR?
    Разумеется.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  7. #7
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    А для бедняков есть халявная версия?=))
    Нет ничего лучше того, что сделано собственными руками.

  8. #8
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,461

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    А для бедняков есть халявная версия?=))
    Есть "таблэтка"

    Но если хочется совсем халявной - тогда не IAR а GCC.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  9. #9
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Так а зачем тогда code vision ? Тем более от производителя... Что ж его так атмел криво разработал?
    А мне программа эта понравилась...
    Она для меня очень одобная....=(
    А она по синтаксису существенно отличается от GCC или IAR?
    Я хочу прочно войти в азы программирования...
    Нет ничего лучше того, что сделано собственными руками.

  10. #10
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,461

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    Так а зачем тогда code vision ?
    А шоб булО. У Микрочипа вон для 12/18 тоже свой компайлер есть, только все нормальные пользуются не им а ХайТечем. Хотя для 18-х и далее - Микрочипы и сами уже сделали нормальный.

    Цитата Сообщение от artos Посмотреть сообщение
    Что ж его так атмел криво разработал?
    Атмел вообще кривая фирма Хоть чипы некоторые делают неплохие. Иногда.
    Точнее - иногда неплохо делают неплохие чипы...
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  11. #11
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Атмел вообще кривая фирма Хоть чипы некоторые делают неплохие. Иногда.
    Точнее - иногда неплохо делают неплохие чипы...

    А какой с Атмела посоветуете изучать контроллер?
    Стоит париться с этой микросхемой?
    Или может выбрать например Мега16 или Мега162 ? Какой будет перспективнее и надежнее? Как видно с проекта мне надо для лед индикаторов... и для управления нагрузками.
    я-бы сделал и на малоногом чипе так вот увы не пойму я как применять сдвиговый регистр.... я-то принцип знаю а как код написать не соображу....

    ---------- Добавлено в 01:04 ---------- Предыдущее сообщение в 00:40 ----------

    В общем перезаказал вместо мега3290 на мегу128
    думаю достойная замена... памяти немерено, и с переферией неплохо=)

    ---------- Добавлено в 01:06 ---------- Предыдущее сообщение в 01:04 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    А шоб булО. У Микрочипа вон для 12/18 тоже свой компайлер есть, только все нормальные пользуются не им а ХайТечем. Хотя для 18-х и далее - Микрочипы и сами уже сделали нормальный.
    Alex, А стоит вообще париться над изучением микрочипов? Мне они какието сложные кажутся....
    Мне как то сразу атмел по душе стал..

    ---------- Добавлено в 01:07 ---------- Предыдущее сообщение в 01:06 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    иногда неплохо делают неплохие чипы...
    Alex , я думаю это мега128 верно?

    ---------- Добавлено в 01:10 ---------- Предыдущее сообщение в 01:07 ----------

    У меня кстати тинни2313 пошабашило уже с пол десятка "реальный брак" программируются с ошибками либо вовсе не программируются...
    а прошивка одна и таже "термометр-термостат" на Далласовском датчике. подпаиваю контакты правильно...
    просто они в смд корпусе в программатор не втулишь...
    Нет ничего лучше того, что сделано собственными руками.

  12. #12
    Завсегдатай Аватар для Grigori G.
    Регистрация
    13.05.2006
    Адрес
    Estonia
    Возраст
    45
    Сообщений
    1,561

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    Так а зачем тогда code vision ?
    Это лишь один из компиляторов, имеет право на жизнь как и любой другой

    Цитата Сообщение от artos Посмотреть сообщение
    Так а зачем тогда code vision ? Тем более от производителя... Что ж его так атмел криво разработал?
    Кодвижн не Атмелевский. Это сторонняя разработка.
    По поводу кривизны, ну так данный момент это не кривизна.
    Обращение к портам в виде PORTx.y и PINx.y это просто фича конкретного данного компилятора, для простоты и удобства, и ограничения описаны в хелпе. В общем случае можно обращаться к портам традиционно, так, как и в любом другом Си компиляторе, и видимо ко всем портам (но я не проверял, просто однажды сам столкнулся с этими граблями, когда баловался с Мега128).

    ---------- Добавлено в 14:29 ---------- Предыдущее сообщение в 14:28 ----------

    Цитата Сообщение от artos Посмотреть сообщение
    У меня кстати тинни2313 пошабашило уже с пол десятка "реальный брак" программируются с ошибками либо вовсе не программируются...
    А какой программатор?
    нет ничего более вечного, чем то, что замотано синей изолентой...

  13. #13
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от Grigori G. Посмотреть сообщение
    Кодвижн не Атмелевский.
    Не знал=))

    Цитата Сообщение от Grigori G. Посмотреть сообщение
    В общем случае можно обращаться к портам традиционно
    А как обращаться традиционно?
    Я начинающий и не знаю как писать...


    Цитата Сообщение от Grigori G. Посмотреть сообщение
    просто однажды сам столкнулся с этими граблями, когда баловался с Мега128).
    Я сегодня тоже на эти грабли попал... Перезаказал микросхему 3290 на мега128 так теперь
    в этом компайлере не хочет обрабатывать PORTF .....
    Задолбался я уже....
    как мне вписать порт F чтоб не ругался компилятор? И как обозначить PINF традиционно? и PORTF и как обращаться к конкретному пину данного порта?
    Помогите мне пожалуста.
    Переходить на другой компилятор пока не хочу, так как в целом месяц как занимаюсь микроконтроллерами


    Цитата Сообщение от Grigori G. Посмотреть сообщение
    А какой программатор?
    пробовал в Uniprof
    Цитата Сообщение от Grigori G. Посмотреть сообщение
    По поводу кривизны, ну так данный момент это не кривизна.
    Ну получается так=))
    Нет ничего лучше того, что сделано собственными руками.

  14. #14
    Завсегдатай Аватар для Grigori G.
    Регистрация
    13.05.2006
    Адрес
    Estonia
    Возраст
    45
    Сообщений
    1,561

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    И как обозначить PINF традиционно?
    Попробуй как-то так:
    if (PINF & (1 << n)) ... // если на пине n порта F единица ...
    if((~PINF)&(1 << n))... // если на пине n порта F ноль ...

    Цитата Сообщение от artos Посмотреть сообщение
    PORTF и как обращаться к конкретному пину данного порта?
    PORTF++; // добавить 1 в значение регистра PORTF
    PORTF = 123; // записать 123 (десятичное) в регистр PORTF (двоичный)
    PORTF ^= (1 << n); // изменить бит n в регистре PORTF

    ЗЫ я конечно могу ошибаться, может Alex поправит если что. Сам я избалован кодвижновским способом обращения к портам...
    нет ничего более вечного, чем то, что замотано синей изолентой...

  15. #15
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,461

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    А какой с Атмела посоветуете изучать контроллер?
    AT91SAM***

    Для простых целей - Мегу8, этот кристалл я нежно люблю - он продается по демпинговой цене
    В общем, все зависит от того - "для чего изучать". И "почему именно атмел"? Атмел хорош своим простым и дешевым программатором, и наличием DIP-корпусов. Потому он так и популярен у любителей.
    Тот-же Тексас (MSP430) почему-то менее популярен, хотя программатор для него тоже не сложный. С DIP-корпусами правда сложнее- они там есть только у нескольких моделей.

    Цитата Сообщение от artos Посмотреть сообщение
    Какой будет перспективнее
    Я не очень понимаю этого термина в данном контексте.

    Цитата Сообщение от artos Посмотреть сообщение
    Alex, А стоит вообще париться над изучением микрочипов? Мне они какието сложные кажутся....
    Учитывая что у Микрочипа документация - лучшая в мире, а у Атмелов - худшая (хотя у Тексаса тоже не подарок), сложность кристалла не влияет
    Кроме того, она вовсе не более сложная, а бы сказал даже что более простая.


    Цитата Сообщение от artos Посмотреть сообщение
    иногда неплохо делают неплохие чипы...
    Alex , я думаю это мега128 верно?
    Нет, это вообще не микроконтроллеры Самое лучшее что делает Атмел - это память.

    Цитата Сообщение от artos Посмотреть сообщение
    я-бы сделал и на малоногом чипе так вот увы не пойму я как применять сдвиговый регистр.... я-то принцип знаю а как код написать не соображу....
    Дык, элементарно - одной ножкой по биту данные выплевывать, другой - их тактировать. Если в контроллере есть аппаратные SPI, то все еще проще.
    Последний раз редактировалось Alex; 13.02.2011 в 21:54.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  16. #16
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от Alex Посмотреть сообщение
    AT91SAM***
    Читал я за них, хорошие

    Цитата Сообщение от Alex Посмотреть сообщение
    Я не очень понимаю этого термина в данном контексте.
    Ну я имел ввиду нормальный по функционалу и быстродействию
    и по объёму памяти

    Цитата Сообщение от Alex Посмотреть сообщение
    Нет, это вообще не микроконтроллеры Самое лучшее что делает Атмел - это память.
    не знал=)
    а почему микроконтроллеры плохие?

    Цитата Сообщение от Alex Посмотреть сообщение
    Учитывая что у Микрочипа документация - лучшая в мире, а у Атмелов - худшая (хотя у Тексаса тоже не подарок), сложность кристалла не влияет
    Кроме того, она вовсе не более сложная, а бы сказал даже что более простая.
    А мне вообще кажется что микрочип контроллеры и по надежности лучше. Их убить практически не реально.

    Цитата Сообщение от Alex Посмотреть сообщение
    Дык, элементарно - одной ножкой по биту данные выплевывать, другой - их тактировать. Если в контроллере есть аппаратные SPI, то все еще проще.
    Как это программно реализовать?
    Я то понимаю теоретически а как сделать программно не пойму..
    Цитата Сообщение от Grigori G. Посмотреть сообщение
    Попробуй как-то так:
    if (PINF & (1 << n)) ... // если на пине n порта F единица ...
    if((~PINF)&(1 << n))... // если на пине n порта F ноль ...


    Цитата Сообщение от Grigori G. Посмотреть сообщение
    PORTF++; // добавить 1 в значение регистра PORTF
    PORTF = 123; // записать 123 (десятичное) в регистр PORTF (двоичный)
    PORTF ^= (1 << n); // изменить бит n в регистре PORTF
    Оооо, теперь я врубился=) Спасибо вам большое!


    Цитата Сообщение от Grigori G. Посмотреть сообщение
    ЗЫ я конечно могу ошибаться, может Alex поправит если что. Сам я избалован кодвижновским способом обращения к портам...
    А можно еще и так:
    if((PINF & 0b00000001)==0) // Прочитать 0 с пина С. 0 бита
    if(PINF & 0b00000001) // Прочитать 1 с того же пина

    В общем буду разбираться.
    Потом отпишу результаты.

    ---------- Добавлено в 21:57 ---------- Предыдущее сообщение в 21:51 ----------
    Последний раз редактировалось artos; 14.02.2011 в 00:34.
    Нет ничего лучше того, что сделано собственными руками.

  17. #17
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,461

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от artos Посмотреть сообщение
    Ну я имел ввиду нормальный по функционалу и быстродействию
    и по объёму памяти
    А это от задачи зависит. Для одной пол килобайта програмной памяти и десяток байт ОЗУ вполне достаточно, а другая и в пол мегабайта с трудом влазит...
    Цитата Сообщение от artos Посмотреть сообщение
    А мне вообще кажется что микрочип контроллеры и по надежности лучше. Их убить практически не реально.
    Да, у меня тоже есть такой опыт - в условиях сильных помех, при высокой температура (за сто), никаких проблем не наблюдалось, причем статистика - сотни тысяч.


    Цитата Сообщение от artos Посмотреть сообщение
    не знал=)
    а почему микроконтроллеры плохие?
    не, кристаллы хорошие, фирма говеная
    слишком часто меняет кристаллы не предупредив, снимают с производства. а их внедренцы да продавцы - вруны паталогические.

    Цитата Сообщение от artos Посмотреть сообщение
    Как это программно реализовать?
    например так:
    Код:
    void Send8SPI(byte d){  // send 8 bit, MSB first
     byte i;
          CS=0;
          for (i=0; i < 8; i++) {
               CLK = 0;
               SDA= ((d & 0x80) == 0) ?  0 : 1;
               d <<= 1;
               CLK=1;
          }
          CLK=0; SDA=0; 
          CS=1;
    }
    если это сдвиговый регистр - возможно (в зависимости от типа) надо будет поменять полярность клока, летча, и состояние выводов CLK, SDA, CS в неактивном состоянии (когда не идет передача).
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  18. #18
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Сегодня занялся переделкой кода под мега128 и не пойму почему не работает эта строка:

    void menu_act_0() {
    if (BTN_MENU==0) { //Если кнопка нажата
    menu=2; //Переходим к меню 1
    while (BTN_MENU==0); //Ждем пока отпустят кнопку
    }
    if (PINE.5==0) { // режим тишина, ____эта строка не работает...
    PORTF ^= (1<<2);
    while (PINE.5==0);
    }
    if (BTN_ERROR0==0) { // опрос входов ошибок
    menu=5;
    }
    if (BTN_ERROR1==0) {
    menu=6;
    }
    if (BTN_ERROR2==0) {
    menu=7;
    }
    if (BTN_ERROR3==0) {
    menu=8;
    }
    if (BTN_ERROR4==0) {
    menu=9;
    }
    }

    ---------- Добавлено в 01:54 ---------- Предыдущее сообщение в 01:52 ----------

    Опрос входов ошибок работает нормально и срабатывает при низком логическом уровне
    Еще не пойму почему не пашет таймер...
    Нет ничего лучше того, что сделано собственными руками.

  19. #19
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    в общем проблема с меню вроди решилась
    как только заменил микроконтроллер.
    Наверное то был глюк Proteus...
    Есть проблема с таймером 1,2,3 в коде не работает...
    И проблема с режимом тишина (Mute)
    =((
    Вложения Вложения
    Нет ничего лучше того, что сделано собственными руками.

  20. #20
    Частый гость
    Автор темы
    Аватар для artos
    Регистрация
    03.05.2008
    Адрес
    Украина Сумская обл. г.Ахтырка
    Возраст
    39
    Сообщений
    464

    По умолчанию Re: Помогите пожалуйста.. MEGA3290P

    Цитата Сообщение от Alex Посмотреть сообщение
    void Send8SPI(byte d){ // send 8 bit, MSB first
    byte i;
    CS=0;
    for (i=0; i < 8; i++) {
    CLK = 0;
    SDA= ((d & 0x80) == 0) ? 0 : 1;
    d <<= 1;
    CLK=1;
    }
    CLK=0; SDA=0;
    CS=1;
    }

    А как вывести например 0b010101111 такое на индикатор если в сдвиговом регистре заранее знаем какие пины подключены к индикатору и как ?
    Мне главное понять как это делать..
    Я так понял с Вашего кода, что он просто инициализирует SPI . Верно?

    ---------- Добавлено в 02:17 ---------- Предыдущее сообщение в 02:04 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    не, кристаллы хорошие, фирма говеная
    слишком часто меняет кристаллы не предупредив, снимают с производства. а их внедренцы да продавцы - вруны паталогические.
    Я тоже это заметил=)

    Кстати по поводу пиков.. Пришлось мне работать с микроконтроллером PIC10F200
    в корпусе SOT23.6 прошивал накидая провода на дорожки программатором Тритон и когда прошивал третий МК припаял шлейф шиворот на выворот
    и соответственно пытался як щирий Украинець=))) раз десять запрограммировать этот чип... не получилось. Но после устранения косяка, микроконтроллер нормально запрограммировался и отлично работает.
    А программа к тритону Выдала последний раз ошибку "сработала защита по питанию" при такой ошибке атмелы уже умирали....

    ---------- Добавлено в 03:46 ---------- Предыдущее сообщение в 02:17 ----------

    А как мне правильно оформить управление меню 1?
    Мне нужно чтоб при выборе 1,2 или три в меню 1 выводило PORTF. 2 . 3 и 4 соответственно единици...

    пробовал по всякому только так компилятор не ругается, но реально программа не работает так как я хочу

    void menu_show_1() {
    led_buff[0]=led_table[20];
    led_buff[1]=led_table[0];
    led_buff[2]=led_table[21];
    led_buff[3]=led_table[12];
    led_buff[4]=led_table[11];
    led_buff[5]=led_table[temp1];
    if (temp1==1){
    PORTF = (1<<2);
    PORTF = (0<<3);
    PORTF = (0<<4);
    }
    if (temp1==2) {
    PORTF = (0<<2);
    PORTF = (1<<3);
    PORTF = (0<<4);
    }
    if (temp1==3) {
    PORTF = (0<<2);
    PORTF = (0<<3);
    PORTF = (1<<4);
    }

    }

    void menu_act_1() {
    if (BTN_MENU==0) {
    menu=3;
    while (BTN_MENU==0);
    }
    if (BTN_PLUS==0) {
    if (temp1<3) temp1++; else temp1=1;
    while (BTN_PLUS==0);
    }
    if (BTN_MINUS==0) {
    if (temp1>1) temp1--; else temp1=3;
    while (BTN_MINUS==0);
    }

    }
    //--------------- END MENU 2 --------------------

    ---------- Добавлено в 03:48 ---------- Предыдущее сообщение в 03:46 ----------

    А так впринципе уже за 3часа клацанья в компиляторе, все проблемы порешал, осталось только меню и регулировку громкости сделать и все =)

    ---------- Добавлено в 03:49 ---------- Предыдущее сообщение в 03:48 ----------

    и потом париться с устройством в железе...

    ---------- Добавлено в 04:15 ---------- Предыдущее сообщение в 03:49 ----------

    Получилось настроить меню=)
    так только работает:

    void menu_act_1() {
    if (BTN_MENU==0) {
    menu=3;
    while (BTN_MENU==0);
    }
    if (BTN_PLUS==0) {
    if (temp1<3) temp1++; else temp1=1;

    while (BTN_PLUS==0);
    }
    if (BTN_MINUS==0) {
    if (temp1>1) temp1--; else temp1=3;
    while (BTN_MINUS==0);
    }
    if (temp1==1){
    //PORTF = 0b00000100;

    PORTF = (0<<3);
    PORTF = (0<<4);
    PORTF = (1<<2);
    }
    if (temp1==2) {
    //PORTF = 0b00001000;
    PORTF = (0<<2);
    PORTF = (0<<4);
    PORTF = (1<<3);
    }
    if (temp1==3) {
    //PORTF = 0b00010000;
    PORTF = (0<<2);
    PORTF = (0<<3);
    PORTF = (1<<4);
    }

    }
    //--------------- END MENU 2 --------------------

    Нужно сначала обнулять биты а потом устанавливать.
    Теперь проблема...
    после отключения устройства и последующем включении не сохраняется конфигурация пинов Порта F ...
    востанавливается только после того как я зайду опять в меню
    Как сделать чтоб сохраняло конфигурацию?
    Еще одну переменную EEP_Temp создать?

    ---------- Добавлено в 04:19 ---------- Предыдущее сообщение в 04:15 ----------

    Вот исходник который более мение работает в симуляторе.
    Код:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V1.25.9 Standard
    Automatic Program Generator
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : Pocessor amplifier
    Version : 1.0
    Date    : 13.02.2011
    Author  : Ugrimov                           
    Company : UAA                          
    Comments: 
    
    
    Chip type           : ATmega128
    Program type        : Application
    Clock frequency     : 8,000000 MHz
    Memory model        : Small
    External SRAM size  : 0
    Data Stack size     : 1024
    *****************************************************/
    
    #include <mega128.h>
    #include <m8_128.h>
    //#include <mega128_bits.h>
    //#include <STDIO.H>
    
    // 1 Wire Bus functions
    #asm
       .equ __w1_port=0x1B ;PORTA
       .equ __w1_bit=0
    #endasm
    #include <1wire.h>
    
    // DS1820 Temperature Sensor functions
    #include <ds18b20.h>
    
    
    // maximum number of DS1820 devices
    // connected to the 1 Wire bus
    #define MAX_DS1820 8
    // number of DS1820 devices
    // connected to the 1 Wire bus
    unsigned char ds1820_devices;
    // DS1820 devices ROM code storage area,
    // 9 bytes are used for each device
    // (see the w1_search function description in the help)
    unsigned char ds1820_rom_codes[MAX_DS1820][9];
    
    
    //*****************************************
    
    
    
    
    #include "delay.h"
    
    #define EPP_SING 0x5a
    #define LED_DIG_COUNT 6
    #define LED_DOT_MASK 0x7f
    #define BTN_PLUS PINE.2
    #define BTN_MENU PINE.3
    #define BTN_MINUS PINE.4
    #define BTN_MUTE PINE.5
     
    #define BTN_ERROR0 PINA.7 // опрос входов ошибок
    #define BTN_ERROR1 PINA.2
    #define BTN_ERROR2 PINA.3
    #define BTN_ERROR3 PINA.4
    #define BTN_ERROR4 PINA.5
    #define BTN_ERROR5 PINA.6 // сброс защиты
    
    
    typedef unsigned char byte;
    
     //--------------- 0-9 10 ........... 18 символов
    //Символы для LED (0-9, ,-,t,L,A,r,d,b,DP)
    flash byte led_table[23]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x87,0xC7,0x88,0xAF,0xA1,0x83,0x7F,0x8C,0xC6,0xC1,0x86};
     //                        0     1    2    3    4    5    6    7    8    9    10  11   12   13   14   15   16   17   18   19   20   21    22
     //                                                                           []  -     t    L    A    r    d    b    Dp   P    C    U    E
     
    byte menu=0; //Индек меню
    byte menu_tmr=0;
    byte menu_tmr2=0;
    byte menu_tmr3=0; //Счетчик в меню
    byte led_dig=0; //Отображаемый разряд LED
    byte led_buff[LED_DIG_COUNT]; //Буфер дял LED
    
    byte temp1; //обьявление переменных
    byte temp2;
    byte temp3;
    
    eeprom byte epp_sing=EPP_SING; //Сигнатура корректности еепром
    eeprom byte epp_temp1=1;//Загрузка значения в Еепром
    eeprom byte epp_temp2=1;
    eeprom byte epp_temp3=1;
    
    void epp_load() { //Загрузка данных с еепром
        if (epp_sing==EPP_SING) { //Если сигнатура прявельнаяб читаем данные с еепром 
            temp1=epp_temp1; // загрузка из еепром при выходе из меню
            temp2=epp_temp2;
            temp3=epp_temp3;
        }else{
            temp1=1; // если сигнатура битая 
            temp2=1; // грузим единици.
            temp3=1;
        }
    } 
    
    void epp_save() { //Сохранение данных в еепром
        epp_temp1=temp1; // Запись данных темп в Еепром
        epp_temp2=temp2;
        epp_temp3=temp3;
        epp_sing=EPP_SING;// сигнатура соответствия Еепром
    } 
    
    void clear_leds() {  //функция очистки лед.
    byte i; // переменная
    for (i=0;i<LED_DIG_COUNT;i++) led_buff[i]=led_table[10]; //прибавляем единицу гоняем пустой знак по дисплею
    }
    //-----------------ERROR CHANEL---------------------
    // отображение активных ошибок 
    // и блокировка работы реле
    void error_5 () {
    if (BTN_ERROR1==0){
    
            led_buff[0]=led_table[22]; //Заполняем буфер разрядов
            led_buff[1]=led_table[15]; // индикация Error ток выхода
            led_buff[2]=led_table[15];
            led_buff[3]=led_table[20];
            led_buff[4]=led_table[11];
            led_buff[5]=led_table[0];
            
            menu=5; 
            } 
        if (PINE.6==0){ // сброс защиты
     menu=0; 
     while (PINE.6==0) ;
            }
           
            }
      
    
    void error_6 () {
    if (BTN_ERROR2==0){
            led_buff[0]=led_table[22]; //Заполняем буфер разрядов
            led_buff[1]=led_table[15]; // индикация ошибки Error напряжение входа
            led_buff[2]=led_table[15];
            led_buff[3]=led_table[21];
            led_buff[4]=led_table[11];
            led_buff[5]=led_table[1];
            //PORTF ^= 0b00000110;
            menu=5;  
            }
            if (PINE.6==0){ // сброс защиты
     menu=0; 
     while (PINE.6==0) ;
            }
    
    }
             
    
    void error_7 () {
    if (BTN_ERROR3==0){
            led_buff[0]=led_table[22]; //Заполняем буфер разрядов
            led_buff[1]=led_table[15]; // индикация ошибки Error напряжение выхода
            led_buff[2]=led_table[15];
            led_buff[3]=led_table[21];
            led_buff[4]=led_table[11];
            led_buff[5]=led_table[0];
            //PORTF ^= 0b00000110;
            //menu=5;  
            }
     if (PINE.6==0){  // сброс защиты
     menu=0; 
     while (PINE.6==0) ;        
            } 
    }       
    
    void error_8 () {
    if (BTN_ERROR4==0){
            led_buff[0]=led_table[22]; //Заполняем буфер разрядов
            led_buff[1]=led_table[15]; // индикация ошибки Error напряжение питания
            led_buff[2]=led_table[15];
            led_buff[3]=led_table[21];
            led_buff[4]=led_table[11];
            led_buff[5]=led_table[19]; 
            
            menu=5; 
            }
    if (PINE.6==0){  // сброс защиты
     menu=0; 
     while (PINE.6==0) ;
            }
    }           
    
    
    void error_9 () {
     if (BTN_ERROR5==0){
            led_buff[0]=led_table[22]; //Заполняем буфер разрядов
            led_buff[1]=led_table[15]; // индикация ошибки Error нагрузка выхода
            led_buff[2]=led_table[15];
            led_buff[3]=led_table[13];
            led_buff[4]=led_table[11];
            led_buff[5]=led_table[0];
            //PORTF ^= 0b00000110; // изменить два бита порта F
            menu=5; 
            }
            if (PINE.6==0){   // сброс защиты
     menu=0; 
     while (PINE.6==0) ;
            }
            }
            
            // индикация ошибки
            
    void led_error () {
    if (menu_tmr3==4) {
    PORTB.1 = 1;
    //PORTB |= (1 << 1); // установить бит 4 порта F
    }
    if (menu_tmr3==5) {
    PORTB.1 = 1;
    //PORTB |= (1 << 1);
    }
    if (menu_tmr3==6) {
    PORTB.1 = 1;
    //PORTB |= (1 << 1);
    } 
    if (menu_tmr3==7) {
    PORTB.1 = 1;
    //PORTB |= (1 << 1);
    } 
    
    else {
    PORTB.1 = 0;
    //PORTB ^= (1 << 1); // изменить бит 4 порта F
    }
    } 
    
    
    
    //---------------END ERROR-----------------------
    //-----------------READY-------------------------
    // мигалка - это индикация о нормальной работе микроконтроллера
    void menu_shou_5 () {
    if (menu_tmr3==5) {
    PORTB.0 = 1; 
    }
    if (menu_tmr3==6) {
    PORTB.0 = 1;
    } 
    if (menu_tmr3==7) {
    PORTB.0 = 1;
    }
    
    else {
    PORTB.0 = 0;
    }
    }
    
    //---------------END READY-----------------------
    //-----------------LOAD--------------------------
    void menu_show_4 () { 
    // индикация загрузки и управление реле
    
    if (menu_tmr2==3) { //если таймер достиг.... вывести на индикатор следующее...
            led_buff[0]=led_table[10]; //Заполняем буфер разрядов
            led_buff[1]=led_table[10]; // индикация пустого меню
            led_buff[2]=led_table[10];
            led_buff[3]=led_table[10];
            led_buff[4]=led_table[10];
            led_buff[5]=led_table[10]; 
            PORTB.2=1;
        }
    if (menu_tmr2==5) { //если таймер достиг.... вывести на индикатор следующее...
            led_buff[0]=led_table[10]; //Заполняем буфер разрядов
            led_buff[1]=led_table[10]; //индикация пустого меню
            led_buff[2]=led_table[10];
            led_buff[3]=led_table[10];
            led_buff[4]=led_table[10];
            led_buff[5]=led_table[10];
            PORTB.3=1;
        }
    if (menu_tmr2==8) { //если таймер достиг.... вывести на индикатор следующее...
            led_buff[0]=led_table[10]; //Заполняем буфер разрядов
            led_buff[1]=led_table[10]; //индикация пустого меню
            led_buff[2]=led_table[10];
            led_buff[3]=led_table[10];
            led_buff[4]=led_table[10];
            led_buff[5]=led_table[10];
            PORTB.4=1;
        } 
    else       {
            led_buff[0]=led_table[13]; //индикация LOAD
            led_buff[1]=led_table[0];
            led_buff[2]=led_table[14];
            led_buff[3]=led_table[16];
            led_buff[4]=led_table[10];
            led_buff[5]=led_table[10];
        
        }      // таймер отсчитывает за секунду примерно 20 значений tmr2
       } 
        
       // при достижении таймера заданого значения перейти в следующее (рабочее) меню  
    void menu_act_4 () {  
        if (menu_tmr2==9) {
        menu=1;
        }
        }
    //-----------------END---------------------------    
    
    //----------------- MENU 1 ----------------------
    void menu_show_0 () {
        {  // режим работа ЕРР
            led_buff[0]=led_table[14];
            led_buff[1]=led_table[19];
            led_buff[2]=led_table[19];
            led_buff[3]=led_table[10];
            led_buff[4]=led_table[10];
            led_buff[5]=led_table[10];
        }  // режим тишина индикация
        if (PORTE & 0b10000000) { //если на 4пине лог.1 вывести на индикатор следующее...
            led_buff[0]=led_table[21]; //Заполняем буфер разрядов
            led_buff[1]=led_table[12]; // отображение режима тишина
            led_buff[2]=led_table[22];
            led_buff[3]=led_table[14];
            led_buff[4]=led_table[10];
            led_buff[5]=led_table[10];
        }    
    } 
    
    
    void menu_act_0() {
        if (BTN_MENU==0) { //Если кнопка нажата
            menu=2; //Переходим к меню 1
            while (BTN_ERROR0==0); //Ждем пока отпустят кнопку
        }
        if (BTN_MUTE==0) {   // режим тишина, 
        PORTE.7 = ~PORTE.7;
            while (BTN_MUTE==0);
            }
        if (BTN_ERROR0==0) {  // опрос входов ошибок
         menu=5;
        }
        if (BTN_ERROR1==0) {
         menu=6;
        }
        if (BTN_ERROR2==0) {
         menu=7;
        }
        if (BTN_ERROR3==0) {
         menu=8;
        }
        if (BTN_ERROR4==0) {
         menu=9;
        }   
    } 
    //--------------- END MENU 1 --------------------
    
    //----------------- MENU 2 ----------------------
    void menu_show_1() {
        led_buff[0]=led_table[20];
        led_buff[1]=led_table[0];
        led_buff[2]=led_table[21];
        led_buff[3]=led_table[12];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[temp1];
        /*if (temp1==1){
        PORTF  = 0b00000100;
        //PORTF  = (0<<3);
        //PORTF  = (0<<4);
        }
        if (temp1==2) { 
        PORTF  = 0b00001000;
        //PORTF  = (1<<3);
        //PORTF  = (0<<4);
        }
        if (temp1==3) {
        PORTF  = 0b00010000;
        //PORTF  = (0<<3);
        //PORTF  = (1<<4);
        }    */
        
    }
    
    void menu_act_1() {
        if (BTN_MENU==0) {
            menu=3;
            while (BTN_MENU==0);
        }
        if (BTN_PLUS==0) {
            if (temp1<3) temp1++; else temp1=1;
           
            while (BTN_PLUS==0);
        }
        if (BTN_MINUS==0) {
            if (temp1>1) temp1--; else temp1=3;
            while (BTN_MINUS==0);
        }  
        if (temp1==1){
        //PORTF  = 0b00000100;
       
        PORTF  = (0<<3);
        PORTF  = (0<<4);
        PORTF  = (1<<2);
        }
        if (temp1==2) { 
        //PORTF  = 0b00001000;
        PORTF  = (0<<2);
        PORTF  = (0<<4);
        PORTF  = (1<<3);
        }
        if (temp1==3) {
        //PORTF  = 0b00010000;
        PORTF  = (0<<2);
        PORTF  = (0<<3);
        PORTF  = (1<<4);
        }
        
    }
    //--------------- END MENU 2 --------------------
    
    //----------------- MENU 3 ----------------------
    void menu_show_2() {
        led_buff[0]=led_table[19];
        led_buff[1]=led_table[15];
        led_buff[2]=led_table[0];
        led_buff[3]=led_table[12];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[temp2];
    }
    
    void menu_act_2() {
        if (BTN_MENU==0) {
            menu=4;
            while (BTN_MENU==0);
        }
        if (BTN_PLUS==0) {
            if (temp2<3) temp2++; else temp2=1;
            while (BTN_PLUS==0);
        }
        if (BTN_MINUS==0) {
            if (temp2>1) temp2--; else temp2=3;
            while (BTN_MINUS==0);
        }
    }
    //--------------- END MENU 3 --------------------
    
    //----------------- MENU 4 ----------------------
    void menu_show_3() {
        led_buff[0]=led_table[12];
        led_buff[1]=led_table[3];
        led_buff[2]=led_table[10];
        led_buff[3]=led_table[temp3];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
    }
    
    void menu_act_3() {
        if (BTN_MENU==0) {
            menu=1;
            epp_save(); //Сохраняем в еепром
            while (BTN_MENU==0);
        }
        if (BTN_PLUS==0) {
            if (temp3<4) temp3++; else temp3=1;
            while (BTN_PLUS==0);
        }
        if (BTN_MINUS==0) {
            if (temp3>1) temp3--; else temp3=4;
            while (BTN_MINUS==0);
        }
    }
    //--------------- END MENU  --------------------
    
    void menu_show() { //Список вывода на LED, в зависимости от меню 
        switch (menu) {
            case 0:menu_show_4();break;
            case 1:menu_show_0();break;
            case 2:menu_show_1();break;
            case 3:menu_show_2();break;
            case 4:menu_show_3();break;
            case 5:led_error();break;
        }
    }
    
    void menu_act() { //Список обработки кнопок, в зависимости от меню 
        switch (menu) { 
            case 0:menu_act_4();break;
            case 1:menu_act_0();break;
            case 2:menu_act_1();break;
            case 3:menu_act_2();break;
            case 4:menu_act_3();break;
           
        }
        }
    
    
    
    interrupt [TIM0_OVF] void timer0_ovf_isr() {
    
        PORTC&=0xc0; //Отключаем все разряды LED
        PORTD=led_buff[led_dig]; //Загружаем в порт данные текущего разряда
        PORTC|=1<<led_dig; //Отображаем нужный разряд
        led_dig++; //Счетчик разрядов
        if (led_dig>(LED_DIG_COUNT-1)) led_dig=0;
    
    }
    
    
    
    
    
    
    //*****************************************
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
    PORTA=0b11111101;
    DDRA=0b00000010;
    
    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTB=0x00;
    DDRB=0xFF;
    
    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTC=0x00;
    DDRC=0xFF;
    
    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 
    PORTD=0xFF;
    DDRD=0xFF;
    
    // Port E initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
    PORTE=0b01111111;
    DDRE=0b10000000;
    
    // Port F initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTF=0x00;
    DDRF=0xFF;
    
    // Port G initialization
    // Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTG=0x00;
    DDRG=0x1F;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    ASSR=0x00;
    
    TCNT0=0xFD;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // OC1C output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    // Compare C Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    OCR1CH=0x00;
    OCR1CL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    TCCR2=2;
    TCNT2=0x00;
    OCR2=0x00;
    
    // Timer/Counter 3 initialization
    // Clock source: System Clock
    // Clock value: Timer 3 Stopped
    // Mode: Normal top=FFFFh
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // OC3A output: Discon.
    // OC3B output: Discon.
    // OC3C output: Discon.
    // Timer 3 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    // Compare C Match Interrupt: Off
    TCCR3A=0x00;
    TCCR3B=0x00;
    TCNT3H=0x00;
    TCNT3L=0x00;
    ICR3H=0x00;
    ICR3L=0x00;
    OCR3AH=0x00;
    OCR3AL=0x00;
    OCR3BH=0x00;
    OCR3BL=0x00;
    OCR3CH=0x00;
    OCR3CL=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    // INT3: Off
    // INT4: Off
    // INT5: Off
    // INT6: Off
    // INT7: Off
    EICRA=0x00;
    EICRB=0x00;
    EIMSK=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x01;
    ETIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // SPI initialization
    // SPI Type: Slave
    // SPI Clock Rate: 2000,000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    //SPCR=0x40;
    //SPSR=0x00;
    
    // Determine the number of DS1820 devices
    // connected to the 1 Wire bus
    ds1820_devices=w1_search(0xf0,ds1820_rom_codes);
    
    
    epp_load(); //Загружаем данные с еепром
        clear_leds();
        #asm("sei") //Разрешаем все прерывания
         TCCR0=2; // вкл. таймер 0
    
    
    while (1)
          {
          menu_act(); //Опрашиваем кнопки меню
            menu_show(); //Отображаем меню
            error_5 ();
            error_6 ();
            error_7 ();
            error_8 ();
            error_9 ();
        
            
            delay_ms(50);
            menu_shou_5 (); //Пауза для опроса кнопок и отображения меню, 20 раз в секунду
            menu_tmr++; //Считает до 20 примерно за 1 секунду
            if (menu_tmr>100) menu_tmr=0;
            menu_tmr2++; // считает до 10
            if (menu_tmr2>10) menu_tmr2=0;
            menu_tmr3++;
            if (menu_tmr3>15) menu_tmr3=0;
    
    
          };
    }
    Нет ничего лучше того, что сделано собственными руками.

Страница 1 из 2 12 Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •