Arduino в Proteus

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Arduino в Proteus

Post by Lavr »

Модели Arduino в Proteus появились уже довольно-таки давно... где-то с версии 7.6 ... 7.7 или даже раньше.
Основаны они были на avr2.dll, ну различные глюки в них имели место быть.

Я тоже как-то делал на них проект с шахматами и помучиться мне пришлось. :-?

Image

По ряду причин я вновь к моделям Arduino обратился с целью выяснить насколько корректно они обрабатывают
аппаратные прерывания. Не все модели микроконтроллеров в Proteus умеют это делать корректно... :-?

И вот тут выяснилось, что автор моделей Arduino в Proteus свои модели обновил! :roll:
ArduinoAll.png
Arduino Library for Proteus V2.0.

А также добавил к собственным моделям ряд демонстрационных проектов:

Arduino Projects - The Engineering Projects

Автор обещает, что новые модели стали более быстрыми (хотя в основе их всё та же avr2.dll).
Но вроде как он ушел от схематической модели Arduino и переписал всё на чистом С++ ...

Я скачал - попробовал модель Arduino Nano... что сказать, существенного приращения прямо-таки
сильно - не отметил.
Тем паче, на мой взгляд, автор перегружает свои модели графикой, а это тормозит симуляцию в Proteus.

Я и его старые-то модели перекомпилировал в своё время, почистив от излишней графики: :wink:
ArduinoN1.png
Ну а что касается прерываний, которые меня интересовали, и на старой и на новой моделях Arduino Nano
INT0 и INT1 вроде как работают вполне корректно... :-?

 Демонстрационный скетч обработки прерываний

Code: Select all

// РАБОТА ARDUINO ПО АППАРАТНЫМ ПРЕРЫВАНИЯМ
// ПРЕРЫВАНИЕ INT0 В МОДЕЛИ РАБОТАЕТ ВЕРНО
// ПРЕРЫВАНИЕ INT1 В МОДЕЛИ РАБОТАЕТ ВЕРНО
//
#define ledPin 13
#define interruptPin 3 // Кнопка между цифровым пином 3 (вход INT1) и GND
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP); // Подтягиваем третий пин к питанию
//   EICRA &= ~(1 << ISC00); // Сбрасываем ISC00
//   EICRA |= (1 << ISC01);  // Устанавливаем ISC01 - отслеживаем FALLING на INT0
// Значения битов ISC00 и ISC01 определяют события какого типа приводят к генерации прерывания INTx:
// 00 - при наличии сигнала низкого уровня;
// 01 - при изменении сигнала от высокого уровня к низкому и наоборот;
// 10 - при изменении сигнала от высокого уровня к низкому;
// 11 - при изменении сигнала от низкого уровня к высокому.
// Назначение битов ISC10 и ISC11 аналогично ISC0x с той разницей,
// что они определяют тип событий для прерывания INT1.
// https://static.chipdip.ru/lib/549/DOC001549488.pdf
//
  EICRA &= ~(1 << ISC10); // Сбрасываем ISC10
  EICRA |= (1 << ISC11);  // Устанавливаем ISC11 - отслеживаем FALLING на INT1
//EIMSK &= ~(1 << 1); // Сбрасываем прерывание INT0
  EIMSK |= (1 << INT1);  // Разрешаем прерывание INT1(2) INT0(1)
}

void loop() {
  digitalWrite(ledPin, state);
}

ISR(INT1_vect) {
  state = !state;
}

Весьма толковое описание работы с прерываниями в среде Arduino есть здесь:
Прерывания в Ардуино. Часть 1
Прерывания в Ардуино. Часть 2

Если кто этим всем интересуется, может понадобиться Техническое руководство ATmega328/Р -
лежит здесь: https://static.chipdip.ru/lib/549/DOC001549488.pdf
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Arduino в Proteus

Post by Lavr »

Две интересных практически конструкции с Ардуиной, которые привлекли моё внимание:

Программатор для EPROM на Arduino
и
Союз Arduino и классического процессора

Честно говоря, заинтересовала меня мысль, может ли Ардуина быть устройством на шинах микропроцессорной системы?
Ну, к примеру, может ли она побыть интеллектуальным UART вместо i8250 или i8251 и иже с ними...

Эти два проекта показались мне наиболее близкими по идее, и первый из них я под Proteus протестировал.
DuinoP232_3.PNG
ARDUPROG.zip
Во втором проекте я посмотрел прикидки по времени... резюме пока такое, что голая Ардуина даже
на шине К580ВМ80А на частоте 2 МГц устройством работать не успеет.
Несмотря на её 16 МГц, не будет она успевать освобождать шину процессору без дополнительной обвески.

А вот хотя бы с двунаправленным шинным формирователем в связке - можно попытаться.
You do not have the required permissions to view the files attached to this post.
iLavr
Mondx
Doomed
Posts: 500
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Arduino в Proteus

Post by Mondx »

Lavr wrote: резюме пока такое, что голая Ардуина даже
на шине К580ВМ80А на частоте 2 МГц устройством работать не успеет.
Несмотря на её 16 МГц, не будет она успевать освобождать шину процессору без дополнительной обвески.
Тормозить CPU нужно, хотя это и "не спортивно").
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Arduino в Proteus

Post by Lavr »

Mondx wrote:
Lavr wrote: резюме пока такое, что голая Ардуина даже
на шине К580ВМ80А на частоте 2 МГц устройством работать не успеет.
Несмотря на её 16 МГц, не будет она успевать освобождать шину процессору без дополнительной обвески.
Тормозить CPU нужно, хотя это и "не спортивно").
Вот как раз тормозить-то и не нужно! Где вы видели, чтобы, к примеру, UART 8251 тормозил процессор на частоте 2 МГц? :roll:
Нужно как раз:"выстрелил и забыл" и желательно без предварительных настроек...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Arduino в Proteus

Post by Lavr »

emax wrote:А почему не успеет?
Потому что Ардуина не успевает переключаться, поскольку работает с шиной побитно.
Ни одного целого 8-битного порта у неё к большому сожалению нет.
И программная среда Ардуины формирует весьма медленный код.
iLavr
User avatar
Icer
Senior
Posts: 163
Joined: 21 Aug 2018 07:39
Location: Кемеровская обл.

Re: Arduino в Proteus

Post by Icer »

Как насчет асма? Надеюсь программная среда Ардуины не самоцель.
Встречал на аврках контроллер клавы ps/2 и эмулятор AY, с небольшим нюансом типа "разгон" 24-25MHz.
Lavr wrote:Ни одного целого 8-битного порта у неё к большому сожалению нет.
на картинке разглядел у нано полноценный порт PC0-PC7

ps. Простите за отсутствие пруфов! Обленился на старости лет :mrgreen:
Mondx
Doomed
Posts: 500
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Arduino в Proteus

Post by Mondx »

Lavr wrote:Потому что Ардуина не успевает переключаться, поскольку работает с шиной побитно.
Что мешает работать НЕ побитно?
Lavr wrote:Ни одного целого 8-битного порта у неё к большому сожалению нет.
Ардуино разные бывают. Но даже классика (на Мега328) имеет 8-битный PORTD.
Lavr wrote:И программная среда Ардуины формирует весьма медленный код.
Больше никому об этом не говорите.) Компилятор, используемый Ардуино (GCC), формирует компактный, оптимизированный код. Только у IAR может быть лучше. Вас никто не заставляет использовать функции Ардуино (digitalRead/digitalWrite), вы можете вообще не работать с framework-ом Ардуино, а напрямую работать с портами. Более того, ничто не мешает использовать ассемблерные вставки в критических местах.
Mondx
Doomed
Posts: 500
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Arduino в Proteus

Post by Mondx »

Icer wrote:на картинке разглядел у нано полноценный порт PC0-PC7
Это обман зрения.) Старшие 2 бита только АЦП.( Но у наших восточных друзей есть и другие Ардуино на клонах AVR, пошустрее (подешевле!) и с полноценным PORTC (хотя там тоже не всё хорошо).
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Arduino в Proteus

Post by Lavr »

Mondx wrote:
Lavr wrote:Потому что Ардуина не успевает переключаться, поскольку работает с шиной побитно.
Что мешает работать НЕ побитно?
Lavr wrote:Ни одного целого 8-битного порта у неё к большому сожалению нет.
Ардуино разные бывают. Но даже классика (на Мега328) имеет 8-битный PORTD.
Ну да... давайте везде засунем даже Мега328... не смешите мои тапки! :wink:
На котором можно целиком эмулировать 2-МГц проц. - Никому об этом не говорите больше, ибо смешно! :lol:
Mondx wrote:
Lavr wrote:И программная среда Ардуины формирует весьма медленный код.
Больше никому об этом не говорите.)
Лучше вы не давайте мне и другим глупых советов в стиле Григория Остера... :wink:
Я посмотрел этот код и имею полное право говорить о том, что видел...

Нет, можно всё написать на ассемблере... и т.д. но нафига тогда нужна эта распиаренная Ардуина?
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Arduino в Proteus

Post by Lavr »

emax wrote:когда звуковые карты для PC были редкостью, делал аналог Tandy карты для шины ISA из 8048 и AY. Все успевало, хотя ISA 8 Мгц.
И какой из портов 8048 у вас висел прямо непосредственно на шине?
iLavr
Mondx
Doomed
Posts: 500
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Arduino в Proteus

Post by Mondx »

Lavr wrote: Ну да... давайте везде засунем даже Мега328... не смешите мои тапки! :wink:
На котором можно целиком эмулировать 2-МГц проц. - Никому об этом не говорите больше, ибо смешно! :lol:
Не надо ничего никуда засовывать. У Ардуино на Мега8/88/168/328 ЕСТЬ 8-ми битный порт.
Lavr wrote: Лучше вы не давайте мне и другим глупых советов в стиле Григория Остера... :wink:
Я посмотрел этот код и имею полное право говорить о том, что видел...
ОК. И я имею такое же право. И не надо ссылаться на каких то персонажей.
Lavr wrote:Нет, можно всё написать на ассемблере... и т.д. но нафига тогда нужна эта распиаренная Ардуина?
Каждый сам решает на чём писать и для чего она ему нужна.
Для многих ассемблер основной язык и ничего.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Arduino в Proteus

Post by Lavr »

Mondx wrote:
Lavr wrote:Ну да... давайте везде засунем даже Мега328... не смешите мои тапки! :wink:
На котором можно целиком эмулировать 2-МГц проц. - Никому об этом не говорите больше, ибо смешно! :lol:
Не надо ничего никуда засовывать. У Ардуино на Мега8/88/168/328 ЕСТЬ 8-ми битный порт.
Так покажите мне его? :roll:
Mondx wrote:
Lavr wrote:Лучше вы не давайте мне и другим глупых советов в стиле Григория Остера... :wink:
Я посмотрел этот код и имею полное право говорить о том, что видел...
ОК. И я имею такое же право. И не надо ссылаться на каких то персонажей.
Почему бы не сослаться на известных персонажей, в стиле которых вы раздаёте опрометчивые и ничем не подкреплённые советы?
Право все имеют, но надо чем-то подкреплять свои категоричные высказывания! :wink:
Mondx wrote:
Lavr wrote:Нет, можно всё написать на ассемблере... и т.д. но нафига тогда нужна эта распиаренная Ардуина?
Каждый сам решает на чём писать и для чего она ему нужна.
Для многих ассемблер основной язык и ничего.
Никто не против ассемблера, но Ардуина получила столь широкое распространение не благодаря ассемблеру,
а благодаря тому, что разработчики соединили довольно мощный сам по себе микроконтроллер со средством
быстрой разработки - С-подобным ЯВУ.

Собственно так примерно и выглядят "вредные советы" Григория Остера... :D
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Arduino в Proteus

Post by Shaos »

Просьба оставаться в рамках темы
Я тут за главного - если что шлите мыло на me собака shaos точка net