Jump to content

Goodefine

Members
  • Posts

    1565
  • Joined

  • Last visited

Posts posted by Goodefine

  1. 1.Вы сравниваете компиляторы - я продукт в целом

    Сравнивайте корректно, не надо превращать WinAvr в @aвно мамонта, якобы забытое. Atmel просто купил лицензию у Билла на студию и прикрутил к ней два тулчейна, с одинаковым компилятором.

    Оба на основе пакета WinAvr. В этом смысле 6 ничем не отличается от 4.

    2. Вы профессиональный радио мастер...

    Кто вам такое сказал (про меня)?

    3. Я пишу уроки не по теме сравнения IDE

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

    Странно...

    Главное в ide для программирования - это компилятор (самая интеллектуальноемкая часть), оттестированный и отлаженный.Это годы труда большого community. Остальное - мишура и красивости. IDE практически всегда бесплатна, а вот компиляторы, тем более хорошие, практически всегда стоят денег.

    Странно, что человек НЕ ПИШУЩИЙ уроки, не понимает, что мешает

    спорами не о чем.

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

  2. Уверен!

    ... не дает нам права говорить о компиляторе 6 студии как о ВинАВР

    Тогда откройте секрет, какой компилятор используется в 6-й студии? А линкер? WinAvr - пакет программ, добрая половина из которых по прежнему используется. Поменялась только морда.

    Хватит уже мусолить безсмысленную тему! ВинаВР прекрасный проект - и если он опять будет развиваться и поддерживаться может быть я перейду на него! Но на сей момент пользоваться ПО остановившем своей развитие 4 года назад в сфере где развитие идет семимильными шагами - это не самый разумный подход!

    Единственное (помимо отладки) различие между новой студией и "ПО остановившем своей развитие 4 года назад" -это редактор кода. Странно, что человек пишущий уроки этого не понимает

  3. Угу, но помоему эта команда лищена какого либо лог. смысла. А именно из-за конструкции (1<<0), которая на окончательный результат вообще не влияет.

    Это называется первый класс вторая четверть. Так пишут для унификации, PORTB^=(1<<1) - тоже не имеет смысла? А еще лучше так PORTB^=(1<<PB1);

  4. Простыню не заменял потому что учусь и оно так как-то лучше воспринимаеться. И пример наглядный.

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

    Всеравно не засыпает.

    Настройки взял отсюда из таблицы http://samou4ka.net/...ontrollerov-avr

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

    По поводу задержки

    Пытался так, но не канает...

    Что значит "не канает"? Не компилируется или не то время получается или еще что?

  5. Не забыли что данные на пинах надо в регистре PIN смотреть? и не используйте никогда сравнение типа if(PORTD == (1 << 0)) - если любой бит порта, кроме нулевого будет равен 1, то оно не выполниться никогда. Биты проверяются через логическое И учтите еще, что при нажатии на кнопку на пине будет 0.

    if(!(PIND& (1 << 0)))//условия входа в спящий
    {
    asm("sleep");
    }
    
    
    

    Выше было сказано, что простыни типа

    if(PORTB == (0 << 0))//проверяем состояние PB0
    {
    PORTB = (1 << 0);//если PB0 = 0, ставим 1
    }
    else
    {
    PORTB = (0 << 0);//иначе - 0
    }
    

    Легко заменяются на

    PORTB^=1<<0;
    

    Тогда имеем

    #include <avr/io.h>
    #include <avr/interrupt.h>
    ISR(INT0_vect)
    {
    PORTB^=1<<0;
    }
    int main(void)
    {
    PORTD = 0xFF;
    DDRB = 0xFF;
    MCUCR |= (0<<ISC01)|(0<<ISC00)|(1 <<SE)|(0 << SM2)|(1 << SM1)|(0 << SM0) ;//разрешаем спящий режим, выставлчем его как Power Down
    EIMSK |= (1<<INT0);
    sei();
    while(1){
    if(!(PIND& (1 << 0)))//условия входа в спящий
    {
    asm("sleep");
    }
    //мигалка. Просто для отслеживания спящего
    PORTB^=1<<1; //не забудьте что без задержки в цикле моргать будет очень быстро, может казаться что диод просто горит
    }
    }
    

    Правильность настроек не смотрел

  6. Советую его освоить, ибо в протеусе не видно содержание регистров, портов PINx, DDRx; PORTx и т.д.

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

    А пацаны то не знают...

    post-20311-0-49029500-1393710633_thumb.gif

    if(PORTB == (0 << 0))//проверяем состояние PB0
    {
    PORTB = (1 << 0);//если PB0 = 0, ставим 1
    }
    else
    {
    PORTB = (0 << 0);//иначе - 0
    }
    

    Сколько понаписано, вместо

    PORTB^=1<<0;
    

  7. Или это типа понты. Сам не знаю, поэтому и не скажу?

    Знаю и скажу - ошибки у вас еще даже не с МК - с языком. Непонимание обычного Си, потому с него и надо начинать. Это несложно, достаточно нескольких дней вдумчивого чтения и опробования чисто си-шных примеров и таких детских ошибок не будет. Тем более желание есть.

    Конкретно по спящему режиму, примеры для меги48 и тиньки2313: когда-то делал спящий в игрушке - посмотрите, авось поможет, там не сложно.

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

  9. АСМ - это путь к познанию архитектуры. Если человек любознателен, то к Си он придет ЛОГИЧНО и эффективно . Сам.

    У того языка, к которому он придет после асма, общим с языком Си будет только синтаксис написания некоторых ключевых слов. Мощь и красота этого языка окажется не раскрытой. Я хотел бы ошибаться, но множество примеров кода на Си, из открытых и популярных проектов, да и просто из практики говорят об обратном. АСМ - это путь к сломанному мышлению, причем в один конец. Есть люди, которые не написав не строчки кода в жизни, интуитивно уже умеют программировать, но это скорее говорит о развитом мышлении и умении строить абстракции в других областях, ибо алгоритмы решения отвлеченных задач и алгоритмы программирования в чем то схожи. Им действительно все равно с чего начинать. Другая крайность, в силу разных причин человек никогда не сможет писать, на любом языке - тоже все равно ))) А вот для серединки, без хорошего наставника трудно будет что в асме, что в Си. Но язык высокого уровня даже своей организацией будет наталкивать на правильное написание кода, в то время в асме не так все явно. Все зависит от человека конечно, но вот вижу, что при необходимости (а она бывает не частой, кто бы что не говорил) Си->Асм - нормально, наоборот - тихий ужас в коде. Может только у меня такое видение, но оно есть :unknw:

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

  11. Вы меня не верно поняли...

    ...

    Проблема бывает от НЕОПРЕДЕЛЕННЫХ РЕАЛЬНЫХ СИГНАЛОВ, когда и моделировать непонятно что и отладчик не дает инструмента захвата бага....

    Мало того, порой софт фиксирует АППАРАТНЫЙ баг, что еще более затрудняет его поиск.

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

    Ну и что тут искать в симуляторе? Лишние -0,2 вольта....?

    Тут ничего конечно, бывает и такое

  12. Пошаговая отладка в Протеусе дает лишь ВИДИМОСТЬ обнаружения бага, поскольку если МОДЕЛИ входных сигналов соответствуют видению эмбеддера, то и бага не будет (иначе чем он там занимался?). То есть возможность "остановить время" с лихвой "компенсируется" искусственностью моделей....

    В данном случае видение эмбеддера как раз подвело - симулятор сформировал более правильную модель входного аналогового сигнала с цифровой обратной связью (микросекунды, милливольты, остановись мгновенье..). Я не знаю насколько модели пик-ов близки к реальности, но схемы с авр-ми можно симулировать с вполне достаточной для многих задач степенью достоверности. Иногда бывают нюансы, например в этом случае использовалось УВХ АЦП меги, запоминание напряжения происходит на конденсаторе после 1,5 такта АЦП с момента запуска преобразования. Модель же считает напряжение в конце цикла преобразования, момент существенный, но если знать о нем то ничего.

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

  13. По нынешним временам использование 60-рублевого PIC18F25K20 и PICkit2 к нему - практически идентично, а местами и предпочтительней, чем Mega8...

    В нашем колхозе упомянутый пик стоит 10 уе, мега8 - 2уе. Проблема колхоза конечно, но осадок имеется ))

    Преимущество PICов в таком раскладе - легкая и доступная ОТЛАДКА в реальной схеме (PICkit не только программатор, но и отладчик, а упомянутые МК имеют возможность отладки). Для начинающего это очень важно.

    Этим же преимуществом обладают и stm-ки, начать можно и с восьмерки, все блага архитектуры присутствуют, включая dma. Цены просто демпинговые

    Использование Протеуса для таких целей - убого, непредсказуемо по результату и ограничено наличными в Протеусе моделями комплектации....

    Насчет последнего соглашусь - очень не хватает там stm. Насчет первых двух - пожалуй нет, недавно был пример... Отладчик бы точно не помог, либо голова, либо симулятор. Голова после праздников как-то не очень (тем более далеко не очевидный момент был), хотя без нее и симулятор не помог бы ))

  14. Небольшое обновление к статье Дистанционное ИК управление компьютером по USB - улучшена работа серверной части ПО под Win7 (CDC вариант). Тем не менее, CDC будет требовать подписывания на x64 системе. Поэтому, чтобы избежать тестового режима на win7 x64 лучше применять HID прошивку (да и на win7 x32 тоже). Для HID приложена новая версия библиотеки lib-usb не требующая подписывания - достаточно подключить устройство и запустить визард из папки bin. Дальше все интуитивно понятно.

    P.S. Просьба к админу прикрепить данные файлы к статье

    IRServer_Win7_Compatible.rar

    libusb-win32-bin-1_2_6_0.rar

  15. А что не так в стиле и коде? Я только начинаю программировать и было бы очень хорошо учиться сразу правильно, чтобы потом не переучиваться.

    Если хотите сразу правильно, то мое мнение (без претензии на истину):

    -имена функций и переменных - маленькими буквами, информативно (тогда и комментарии не нужны часто)

    -имена макроподстановок, перечислений - большими буквами

    -не использовать константы в коде в числовой форме (только через макроподстановки сделанные один раз)

    -не использовать компиляторозависимые конструкции, например PORTD.=1;

    -каждую функциональную сущность (дисплей, клавиатура и прочее) оформлять в виде модуля. Модуль состоит из двух файлов: xxx.h и xxx.c В хидере описываются макроподстановки, перечисления, ПРОТОТИПЫ функций (но никак не сами функции) в обрамлении исключающем повторное включение файла. Получается аналог с++ класса - в хидере интерфейс, в с-файле - реализация функций. Можно также оформлять и прерывания. В главном модуле только логика работы устройства в целом. В его хидере - настройки в виде констант и прочего.

    -главный цикл желательно выполнять в виде автомата состояний

    -крайне желательно делать слой hal - для миграции между платформами

    -другие моменты, которые придут с опытом )))

    В качестве примера (как раз с динамической индикацией на 4-ре цифры) можете посмотреть этот проект. Там, конечно, не все так, как описано выше, но примерно

×
×
  • Create New...