nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 03:46



Reply to topic  [ 13 posts ] 
Arduino в Proteus 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Модели Arduino в Proteus появились уже довольно-таки давно... где-то с версии 7.6 ... 7.7 или даже раньше.
Основаны они были на avr2.dll, ну различные глюки в них имели место быть.

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

Image

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

И вот тут выяснилось, что автор моделей Arduino в Proteus свои модели обновил! :roll:
Attachment:
ArduinoAll.png
ArduinoAll.png [ 980.08 KiB | Viewed 5249 times ]

Arduino Library for Proteus V2.0.

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

Arduino Projects - The Engineering Projects

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

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

Я и его старые-то модели перекомпилировал в своё время, почистив от излишней графики: :wink:
Attachment:
ArduinoN1.png
ArduinoN1.png [ 9.13 KiB | Viewed 5249 times ]


Ну а что касается прерываний, которые меня интересовали, и на старой и на новой моделях Arduino Nano
INT0 и INT1 вроде как работают вполне корректно... :-?

 Демонстрационный скетч обработки прерываний
Code:
// РАБОТА 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

_________________
iLavr


19 Jul 2022 14:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Две интересных практически конструкции с Ардуиной, которые привлекли моё внимание:

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

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

Эти два проекта показались мне наиболее близкими по идее, и первый из них я под Proteus протестировал.
Attachment:
DuinoP232_3.PNG
DuinoP232_3.PNG [ 13.94 KiB | Viewed 5178 times ]
Attachment:
ARDUPROG.zip [26.64 KiB]
Downloaded 130 times

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

А вот хотя бы с двунаправленным шинным формирователем в связке - можно попытаться.

_________________
iLavr


23 Jul 2022 22:13
Profile
Doomed

Joined: 10 Aug 2022 07:27
Posts: 351
Reply with quote
Lavr wrote:
резюме пока такое, что голая Ардуина даже
на шине К580ВМ80А на частоте 2 МГц устройством работать не успеет.
Несмотря на её 16 МГц, не будет она успевать освобождать шину процессору без дополнительной обвески.

Тормозить CPU нужно, хотя это и "не спортивно").


14 Aug 2022 21:51
Profile
Supreme God
User avatar

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

Вот как раз тормозить-то и не нужно! Где вы видели, чтобы, к примеру, UART 8251 тормозил процессор на частоте 2 МГц? :roll:
Нужно как раз:"выстрелил и забыл" и желательно без предварительных настроек...

_________________
iLavr


15 Aug 2022 13:46
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
emax wrote:
А почему не успеет?
Потому что Ардуина не успевает переключаться, поскольку работает с шиной побитно.
Ни одного целого 8-битного порта у неё к большому сожалению нет.
И программная среда Ардуины формирует весьма медленный код.

_________________
iLavr


15 Aug 2022 13:50
Profile
Senior
User avatar

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

ps. Простите за отсутствие пруфов! Обленился на старости лет :mrgreen:


15 Aug 2022 18:59
Profile
Doomed

Joined: 10 Aug 2022 07:27
Posts: 351
Reply with quote
Lavr wrote:
Потому что Ардуина не успевает переключаться, поскольку работает с шиной побитно.

Что мешает работать НЕ побитно?
Lavr wrote:
Ни одного целого 8-битного порта у неё к большому сожалению нет.

Ардуино разные бывают. Но даже классика (на Мега328) имеет 8-битный PORTD.
Lavr wrote:
И программная среда Ардуины формирует весьма медленный код.

Больше никому об этом не говорите.) Компилятор, используемый Ардуино (GCC), формирует компактный, оптимизированный код. Только у IAR может быть лучше. Вас никто не заставляет использовать функции Ардуино (digitalRead/digitalWrite), вы можете вообще не работать с framework-ом Ардуино, а напрямую работать с портами. Более того, ничто не мешает использовать ассемблерные вставки в критических местах.


15 Aug 2022 23:00
Profile
Doomed

Joined: 10 Aug 2022 07:27
Posts: 351
Reply with quote
Icer wrote:
на картинке разглядел у нано полноценный порт PC0-PC7

Это обман зрения.) Старшие 2 бита только АЦП.( Но у наших восточных друзей есть и другие Ардуино на клонах AVR, пошустрее (подешевле!) и с полноценным PORTC (хотя там тоже не всё хорошо).


15 Aug 2022 23:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Mondx wrote:
Lavr wrote:
Потому что Ардуина не успевает переключаться, поскольку работает с шиной побитно.

Что мешает работать НЕ побитно?
Lavr wrote:
Ни одного целого 8-битного порта у неё к большому сожалению нет.

Ардуино разные бывают. Но даже классика (на Мега328) имеет 8-битный PORTD.

Ну да... давайте везде засунем даже Мега328... не смешите мои тапки! :wink:
На котором можно целиком эмулировать 2-МГц проц. - Никому об этом не говорите больше, ибо смешно! :lol:
Mondx wrote:
Lavr wrote:
И программная среда Ардуины формирует весьма медленный код.
Больше никому об этом не говорите.)

Лучше вы не давайте мне и другим глупых советов в стиле Григория Остера... :wink:
Я посмотрел этот код и имею полное право говорить о том, что видел...

Нет, можно всё написать на ассемблере... и т.д. но нафига тогда нужна эта распиаренная Ардуина?

_________________
iLavr


16 Aug 2022 01:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
emax wrote:
когда звуковые карты для PC были редкостью, делал аналог Tandy карты для шины ISA из 8048 и AY. Все успевало, хотя ISA 8 Мгц.

И какой из портов 8048 у вас висел прямо непосредственно на шине?

_________________
iLavr


16 Aug 2022 01:39
Profile
Doomed

Joined: 10 Aug 2022 07:27
Posts: 351
Reply with quote
Lavr wrote:
Ну да... давайте везде засунем даже Мега328... не смешите мои тапки! :wink:
На котором можно целиком эмулировать 2-МГц проц. - Никому об этом не говорите больше, ибо смешно! :lol:

Не надо ничего никуда засовывать. У Ардуино на Мега8/88/168/328 ЕСТЬ 8-ми битный порт.

Lavr wrote:
Лучше вы не давайте мне и другим глупых советов в стиле Григория Остера... :wink:
Я посмотрел этот код и имею полное право говорить о том, что видел...

ОК. И я имею такое же право. И не надо ссылаться на каких то персонажей.

Lavr wrote:
Нет, можно всё написать на ассемблере... и т.д. но нафига тогда нужна эта распиаренная Ардуина?

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


16 Aug 2022 07:37
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
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


21 Aug 2022 05:34
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Просьба оставаться в рамках темы

_________________
:dj: https://mastodon.social/@Shaos


02 Sep 2022 20:41
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 13 posts ] 

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.