Выплескивание эмоций

Тема в разделе "Флудилка", создана пользователем alp69, 15 окт 2016.

  1. SergeiL

    SergeiL Оракул Модератор

    Забрал вчера заказанные в Чипе Меги328P в DIP корпусе.
    Вечером поменял Мегу8 на Мегу328P. По выводам в DIP-28 Мега328P полностью совместима с Мега8.
    Fuse биты перешил под кварц 11,059 МГц - откликается, запускается частота правильная (про CKDIV8 не забыл), проверено.

    Естественно управляющие регистры, регистры таймеров, UART, АЦП - отличаются как по названиям, так и, частично, по назначению битов.
    Поправил по-быстрому названия регистров, значения.

    Индикатор засветился, информация появилась, подсветка - горит.
    Управление контрастностью LCD 2x8 и яркостью подсветки - сделаны полу-аппаратно, через ШИМ на первом таймере. (выходы OC1A, OC1B)
    Таймер 1 работает правильно.

    А кнопки не работают пока совсем, информация на дисплее не меняется. :(
    Видимо с инициализацией нулевого таймера что-то не так.
    В выходные буду разбираться.

    Вот вам и разница в написании на Си под конкретный МК и средой Ардуино, где все регистры спрятаны в инклудники и библиотеки, и нужно только определить плату в менеджере плат. :) И все будет работать!

    Вот как новичкам отлаживаться? UART на плате подцеплен к драйверу RS-485, для вывода через UART нужен RS-485 <--> USB конвертор.
    Можно правда еще на индикатор выводить отладочную информацию.


    IMG_5364.jpg IMG_5366.jpg
     
    issaom, ZAZ-965 и Un_ka нравится это.
  2. parovoZZ

    parovoZZ Гуру

    На дурине вообще отладка не предусмотрена.
    А как там у новичков - мне лично все равно. Хочет постичь дзен в интересной области - пусть читает учебники и даташиты. Дурина - это в любом случае завуалированная система, которая формирует ложные представления о предмете.
     
  3. SergeiL

    SergeiL Оракул Модератор

    Ну тут я не согласен.
    Дзен бывает разный, и разного уровня.

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

    Тут, наверное, главный момент в том, что при "опускании" с Си+МК на Ардуино, очень даже все просто, и все досконально понятно.
    А вот с нуля начинать писать код для Ардуино - сложнее, потому что не хватает понимания, и базовых знаний, как это все работает.
     
    issaom и DetSimen нравится это.
  4. Airbus

    Airbus Радиохулиган Модератор

    Сто раз уже обсуждали. Видимо год прошел и снова хочется поспорить. Ардуино удачный проект как в плане железа так и в плане среды разработки. Иначе не был бы так коммерчески успешен. И не продавался бы за такую конскую цену хоть на Али хоть в Чипе. А остался бы такой экзотикой как Тини 441. И вряд ли меня старого консерватора можно было бы стащить с Кодвижн на Ардуино IDE. А возвращаться обратно это как пересаживаться с А320 на Ан24. Ну или с КиоРио на ВАЗ2106 если более понятно. Как уже говорил ИгорьК лучше взять железо помощнее и ни в чем себе не отказывать чем впихивать невпихуемое. Да и впихнуть можно только на асме. А тут реально это умеет пожалуй только а1000. Позже расскажу как делал акваконтроллер года три назад когда еще помнил ассемблер. Не лез код в Мегу 8 и все тут. Что только не делал но на асме впихнул. А потом посмотрел— накуя? Ведь он прекрасно влазит в Мегу 328 полностью с ней совместимую по выводам.
    Сереж а почему кнопки не работают? Должны вроде? Они совместимы лоб в лоб. В 328 есть больше ШИМов. Опрос кнопок из прерываний идет али как?
     
  5. SergeiL

    SergeiL Оракул Модератор

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

    Если в проекте под Мега8 просто изменить инклудник контроллера
    Код (C++):
    //#include <iom8v.h>
    #include <iom328pv.h>
    C:\iccv7avr\bin\imakew -f THERMOSTAT.mak
    iccavr -c -e -D__ICC_VERSION=723 -D__BUILD=21 -DATMega8 -l -v -g -MHasMul -MEnhanced -Wa-W Termo.c
    Copyright (C) 1994 - 2009 ImageCraft Creations Inc.
    ImageCraft, 706 Colorado Ave., Suite 10-88, Palo Alto, CA 94303
    info@imagecraft.com, phone (650) 493-9326 FAX (650) 493-9329
    http://www.imagecraft.com
    lcc source code (C) 1995, by David R. Hanson and AT&T. Reproduced by permission.
    Release version 7.23
    C:\iccv7avr\bin\icppw.exe -D_AVR -D__IMAGECRAFT__ -e -D__ICC_VERSION=723 -D__BUILD=21 -DATMega8 -IC:/iccv7avr/include Termo.c Termo.i
    C:\iccv7avr\bin\iccomavr.exe -e -g -MHasMul -MEnhanced -lTermo.c Termo.i Termo.s
    !E C:\iccv7avr\-Work-\Termo\08_11_21\uart.c(66): undeclared identifier `UCSRB'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\uart.c(66): undeclared identifier `UDRIE'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\uart.c(74): undeclared identifier `UCSRB'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\uart.c(74): undeclared identifier `UDRIE'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(317): undeclared identifier `UCSRA'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(318): undeclared identifier `UCSRB'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(319): undeclared identifier `UCSRC'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(320): undeclared identifier `UBRRL'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(321): undeclared identifier `UBRRH'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(325): undeclared identifier `RXEN'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(344): undeclared identifier `TCCR0'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(432): undeclared identifier `TCCR2'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(537): undeclared identifier `TCCR2'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(540): undeclared identifier `OCR2'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(553): undeclared identifier `UCSRA'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(556): undeclared identifier `UDR'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(567): undeclared identifier `UDR'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(582): undeclared identifier `UCSRB'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(582): undeclared identifier `RXEN'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(589): undeclared identifier `UDR'
    !E C:\iccv7avr\-Work-\Termo\08_11_21\Termo.c(593): too many errors
    C:\iccv7avr\bin\imakew.exe: Error code 1
    C:\iccv7avr\bin\imakew.exe: 'Termo.o' removed.
    Done: there are error(s). Exit code: 1. Fri Jan 14 15:53:48 2022

    Приходится править названия регистров. Причем это не все, правишь эти - вываливаются остальные.
    Например в Меге8 регистр UCSRB, а в Меге328 UCSR0B.
    Управляющих регистров таймера в Меге8 - один TCCR0, а в Меге328 - два TCCR0A и TCCR0B.
    Соответственно нужно меня код настройки регистров.
    Ну и так далее..

    В выходные посмотрю, если будет время.
    Зато занято только 25% памяти :), а было 97% в Меге8
     
  6. parovoZZ

    parovoZZ Гуру

    он не успешен. Вообще. Ибо не коммерческий.

    очень неудачный. Кто занимается серьёзно электроникой, про дурину знать ничего не хочет. На профильных форумах всех вопрошающих по дурине отправляют на ардуино.ру. Профильных форумов по электронике - тьма, по дурине - два -три.
     
  7. issaom

    issaom Гуру

    пошел за попкорном....
     
    Andrey12 и Airbus нравится это.
  8. Airbus

    Airbus Радиохулиган Модератор

    Ну да.Не успешен.А благодаря чему столько Форумов?Благодаря тебе чтоли?
    [​IMG]
     
    issaom, SergeiL и Рокки1945 нравится это.
  9. parovoZZ

    parovoZZ Гуру

    Ну и сколько форумов по дурине?
     
  10. SergeiL

    SergeiL Оракул Модератор

    Заработали кнопки. :)
    Как и думал - таймер 0 не запускался.
    Поправил, инициализацию регистров - теперь все работает!

    А то жалко было прототип, он проработал на даче более 10 лет в "stand alone" режиме.
    Остальные контроллеры работают на Меге32, там 32КБ памяти, пиши - не хочу.
     
  11. Рокки1945

    Рокки1945 Гуру

    Прошу подсказать что такое модуль в программировании - общие понятия. Спасибо.
     
  12. parovoZZ

    parovoZZ Гуру

    От этого поста я пришёл в неописуемый восторг:
    Это при том, что на радиокоте дурину любят так же, как и я ее))
     
  13. Airbus

    Airbus Радиохулиган Модератор

    А чего тогда на Ардуино—форуме трешься? ЧСВ потешить? Лучше напечатай мне Миньона на 3D принтере—заплачу
     
    Последнее редактирование: 15 янв 2022
    Andrey12, issaom и Ariadna-on-Line нравится это.
  14. Рокки1945

    Рокки1945 Гуру

    Всегда пожалуйста :):D
     
  15. Un_ka

    Un_ka Гуру

    Пусть лучше разработает теорию прочности/жёсткости/устойчивости укструдированных материалов. Для расчета прочности деталей, состоящих из нитей, имеющих максимальную прочность в продольной оси, предётся находить тензор напряжений в каждой точке...
    Вот тогда ЧСВ взлетит до бесконечности.
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Мене этого не нада! Мне миньон нужен
     
    Andrey12 нравится это.
  17. SergeiL

    SergeiL Оракул Модератор

    Добил код. Работает как нужно на Меге328P.

    Вот вроде совместимы они с Мегой8 по выводам, а внутренние отличия есть, и как выясняется - не мало.
    Просто заменив контроллер, и залив старый код - работать не будет, нужно править код.

    1) Изменились фьюзы, в сравнении с Мегой8, например, добавился CKDIV8, по умолчанию он выставлен и тактовая делится на 8, не забываем его снять.
    2) Понятное дело, регистры по другому называются, появились дополнительные регистры, часть управляющих битов переехала в дополнительные регистры.
    3) Изменилась таблица векторов прерываний. Номера векторов изменились. Если вектора определены стандартными константами, то все в норме, может придется поменять имя, если цифрами - все съедет, причем без всяких предупреждений.
    4) У Меги328P внутренний референс АЦП 1.1В, в Меге8, Меге32 - 2.56В. Мультиплексором, вход можно подключить на внутренний опроник. У Меги328P он 1.1В, у Меги8,32 он 1.23В.

    Думаю еще можно будет добавить...
     
  18. DetSimen

    DetSimen Гуру

    Это другая, более старая линейка, Atmega8-Atmega16-Atmega32
    Полностью совместимы по выводам, регистрам, таймерам Atmega88-Atmega168-Atmega328
     
  19. Рокки1945

    Рокки1945 Гуру

    @parovoZZ - как отличить провод из качественной меди и фигни?
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Попробовать на зуб. Как пираты золото проверяли
     
    Последнее редактирование: 16 янв 2022
    Рокки1945 нравится это.