Технический форум по робототехнике.
petrov1962 » 28 мар 2017, 13:47
Eruman писал(а):
И еще почему
#include "../Wire/Wire.h"
Какая-то другая библиотека wire.h используется?
Eruman » 28 мар 2017, 19:06
Пример рабочий 100%. Ошибки могут возникать при несовместимости библиотек, например, из-за разных версий. IDE 1.6.9 Скопировал из текстового поля в сообщении
forum86/topic16626-30.html#p357516Все собралось корректно.
А первая версия, без EEPROM, собирается?
petrov1962 » 28 мар 2017, 20:28
Eruman писал(а):Пример рабочий 100%. Ошибки могут возникать при несовместимости библиотек, например, из-за разных версий. IDE 1.6.9 Скопировал из текстового поля в сообщении
forum86/topic16626-30.html#p357516Все собралось корректно.
А первая версия, без EEPROM, собирается?
Первая версия без ПЗУ собирается без проблем.
Можно попросить вас выложить библиотеки Wire и C24LC16B, которые вы используете?
То что текст программы правильный, я не сомневаюсь.
Такая же катавасия происходит при компиляции оригинального TinyBasic с поддержкой SD карты,
при чем, что отдельные скетчи SD карту видят и работают с ней.
Eruman » 29 мар 2017, 13:39
Wire стандартный, по умолчанию.
Вторую либу прилагаю. Позже я от нее, кстати, отказался. Все силами стандартных библиотек получилось. Позже выложу, если интересно, там чуть замороченнее.
- Вложения
-
c24LC16B.rar
- (1.76 КиБ) Скачиваний: 0
petrov1962 » 29 мар 2017, 14:19
Спасибо за библиотеку, по крайней мере теперь компилируется без ошибок,
вечером попробую загрузить в мегу.
Эта либа немного отличается от той, на которую идет ссылка в теле файла TinyBasicEruman02.ino.
Может, поправить ссылку на нее в теле скетча?
В новой либе используются Wire.write вместо Wire.send и
Wire.read вместо Wire.receive.
Вот у меня из-за этого ошибки и сыпались.
Интересно посмотреть, как вы обошлись стандартными либами.
Eruman » 29 мар 2017, 18:24
Действительно, вспомнил, я правил в либе эти строки. Просто машинально, автозаменил, и в памяти не отложилось

В заголовке пишу
- Код: Выделить всё • Развернуть
//#define needEEPROM 1 // подключать ли внешнюю ППЗУ? (1 - внешняя, 0 - ПЗУ МК)
//#define sizeROM_over16 1 // ППЗУ>2K? ( 1 для 24с64, 0 для 24с16)
//...
#ifdef needEEPROM
#include <Wire.h>
#else
#include <EEPROM.h>
#endif
В программе обращения настроены на две функции работы с ППЗУ
- Код: Выделить всё • Развернуть
void writeEEPROM(unsigned int eeaddress, byte data )
{
#ifdef needEEPROM
Wire.beginTransmission(disk1);
#ifdef sizeROM_over16
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
#else
Wire.write((int)(eeaddress));
#endif
Wire.write(data);
Wire.endTransmission();
//delay(15);
#else
EEPROM.write((int)eeaddress,(byte)data);
#endif
}
byte readEEPROM(unsigned int eeaddress )
{
byte rdata = 0xFF;
#ifdef needEEPROM
Wire.beginTransmission(disk1);
#ifdef sizeROM_over16
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
#else
Wire.write((int)(eeaddress));
#endif
Wire.endTransmission();
Wire.requestFrom(disk1, 1);
// if (Wire.read()) rdata = Wire.read();
rdata = Wire.read();
#else
rdata = EEPROM.read( (int)(eeaddress) );
#endif
return rdata;
}
В заголовке раскомментируем нужные строки, и пользуемся. Так можно настроить на разные микросхемы ППЗУ и вообще пользоваться внутренней ПЗУ атМеги.
petrov1962 » 29 мар 2017, 22:34
Eruman писал(а):Действительно, вспомнил, я правил в либе эти строки.
В программе обращения настроены на две функции работы с ППЗУ
Поправил библиотеку - все заработало.
В какую часть программы надо вставить эти две функции работы с ППЗУ?
Пытаюсь найти в теле программы что надо изменить для Меги328, поскольку она обладает в 2 раза больше памятью.
При применении ППЗУ большей емкости количество блоков по 256 байт можно увеличить?
Eruman » 30 мар 2017, 01:19
Первая в заголовок (перед setup()), вторая - в конце листинга, там где идет обращение к ППЗУ. После удаления предыдущей функции работы с ППЗУ и библиотеки c24lc16b все обращения будут видны как ошибки. заменить после этого старые обращения на новые автозаменой.
Можно увеличить. И поправить строку "static unsigned char bmemory[312];" в большую сторону
Eruman » 21 апр 2017, 08:24
Запустил Бейсик на stm32f103. Брал тут:
https://ru.aliexpress.com/item/Free-Shipping-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Forarduino/32473214083.html.
Оперативной памяти 20К, флеш шикарен. Только нет ППЗУ, и пятивольтовые микросхемы подключать нельзя, но это решаемо. В общем, рекомендую.

Madf » 21 апр 2017, 12:33
STM - неинтересно, там памяти до уопы и нет такой массовости (дуни на нах не дешевые). Вся прелесть проекта на атмеге, что из г+палки получаем аля виртуальную машину, вообще с таким подходом можно и денди эмулировать и много чего (где не требуется производительность или она меньше..).
Eruman » 21 апр 2017, 19:05
104р. - дорого? массовости нет?

Может быть я не ясно выразился, но её программировал в Arduino IDE.
Мне понравилось, прикрутил к ней SD-карту, и вообще красота, Бейсик с кладовочкой

petrov1962 » 08 май 2017, 23:23
Еще интересный проект на Ардуино. Tiny Basic запускается из под эмулируемой ОС CP/M.
https://acdc.foxylab.com/node/76
Eruman » 09 май 2017, 11:48
Классный проект, однако без ОЗУ - только эксперимент, не более.
Angel71 » 09 май 2017, 14:48
basic и pascal давно померли, не тратьте время на них.
ATLab » 09 май 2017, 16:24
Добавит FRAM, будет эмуляция ОЗУ, а проект действительно интересный.
Eruman писал(а):Запустил Бейсик на stm32f103.
Я тоже запустил Бейсик на STM32F103C8T6, в основе лежит проект
https://github.com/robinhedwards/ArduinoBASICКое-что пришлось подрихтовать под STM32, попутно добавил Beep - генерцию звука.
Спасибо всем, что подкинули идею, теперь представляю как можно сделать свой интерпретатор.