Перейти к содержанию

Делаю библиотеку для расширения возможностей EEPROM


Гость Игорь Плессер

Рекомендуемые сообщения

  • Ответов 59
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Вот, Вы адрес проверяете везде как "address <>0".

А если address = -10, то такой адрес пройдет проверку, и запись произойдёт в неправильное место в памяти.

И, потом, логическое "ИЛИ" тут совсем неправильно

(address <= maxValue) or (address <> 0)

Получается, что любой ненулевой адрес годится! Даже address = maxValue+100 !

Изменено пользователем Yurkin2015
Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер

в нулевом адресе записано значение FE  как маркер конца еепром, когда вызывается функция измерения она считывает значения еепром с нулевого адреса, до конца и при окончании еепром возвращается на нулевой адрес который равен FE и выходит из цикла, убирает лишний бит и выводит значение!

На счет address <> 0 я сейчас с этим работаю...

вот такое выражение я сделал

(address <= maxValue) or (address > minValue)

где minValue константа равная 0x01

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Гость Игорь Плессер

Вот такой адрес address = 342 пройдет проверку если например maxValue = 512, minValue = 1(const)! А на вашем примере вы прибавляете 100 к максимальному значению т.е. значение будет больше допустимого и не пройдет проверку!!  

p.s. на прошлом сообщении не or а and

Изменено пользователем Игорь Плессер
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Гость Игорь Плессер

сейчас напишу одну из функций
function EEPROM_ReadBytes(address:integer):integer;
var dat:integer;
begin
if (address <= maxValue) and (address > minValue) then
begin
dat:=EEPROM_Read(address);
result:=dat;
end else
begin
result:=0;
end;
end;

Ссылка на комментарий
Поделиться на другие сайты

1. например, размер памяти maxValue = 512, то максимальный  допустимый адрес = 511, а адрес 512 уже выйдет за пределы памяти.

2. Во второй части проверки - просто "больше нуля".

3. Переменная dat не нужна, читайте сразу в result.

4. Если проверка адреса не прошла, то возвращайте минус 1.

Ссылка на комментарий
Поделиться на другие сайты

Мое категорическое мнение: писать функцию, которая ИЩЕТ размер EEPROM путем записи какого-то маркера в какую-то ячейку, а затем перебирает последовательно ячейки до момента нахождения маркера - ЭТО КАТЕГОРИЧЕСКИ ОТВРАТИТЕЛЬНО!

Во-первых, что ваша функция сделает с EEPROM, которое не очищено изначально? Испортит первую ячейку? Найдет конец где-то в середине случайных данных?

Во-вторых, когда такая функция может потребоваться? В момент создания кода ВЫ УЖЕ ЗНАЕТЕ, каков объем EEPROM, т.к. выбираете конкретный тип МК. Если вы пишите универсальный код, который будет работать на любом МК, то БЕЗ ПЕРЕКОМПИЛЯЦИИ его все равно невозможно использовать, а в момент компиляции - см. выше: ВЫ ЗНАЕТЕ размер EEPROM.

Где-то в паскалевских системных юнитах ДОЛЖНЫ БЫТЬ определены константы, определяющие размер EEPROM текущего выбранного кристалла. И точка. Изучайте документацию.

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер
3 часа назад, ARV сказал:

Мое категорическое мнение: писать функцию, которая ИЩЕТ размер EEPROM путем записи какого-то маркера в какую-то ячейку, а затем перебирает последовательно ячейки до момента нахождения маркера - ЭТО КАТЕГОРИЧЕСКИ ОТВРАТИТЕЛЬНО!

Во-первых, что ваша функция сделает с EEPROM, которое не очищено изначально? Испортит первую ячейку? Найдет конец где-то в середине случайных данных?

Согласен!Но во первых я не нашел другого способа, во вторых я переделал функцию она выполняется 1 раз при запуске и записывает значение(размер) в maxValue, потом присваивает биту 0х00 значение 0xFF, после чего бит может дальше использоваться, в третьих эта функция нужна т.к. без нее значение address может выйти за пределы и данные могут(запишутся) записаться в неверный отдел памяти eeprom, в четвертых я делаю максимально простую библиотеку чтобы не делать лишних движений таких как глядеть в даташит и т.п.!Для этого и существуют библиотеки!

3 часа назад, ARV сказал:

Во-вторых, когда такая функция может потребоваться? В момент создания кода ВЫ УЖЕ ЗНАЕТЕ, каков объем EEPROM, т.к. выбираете конкретный тип МК. Если вы пишите универсальный код, который будет работать на любом МК, то БЕЗ ПЕРЕКОМПИЛЯЦИИ его все равно невозможно использовать, а в момент компиляции - см. выше: ВЫ ЗНАЕТЕ размер EEPROM.

Я пишу универсальный код который сможет работать на всех или хотя-бы нескольких типах МК фирмы ATMEL!

3 часа назад, ARV сказал:

Где-то в паскалевских системных юнитах ДОЛЖНЫ БЫТЬ определены константы, определяющие размер EEPROM текущего выбранного кристалла. И точка. Изучайте документацию.

А теперь вопрос!Если бы я знал что в "паскалиевских" юнитах есть такая функция или константа или что-то в этом роде я бы стал делать эту функцию?

Да даже если бы была константа она не для одного МК!И что мне их все перебирать?

Спасибо конечно за советы!

Изменено пользователем Игорь Плессер
Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Игорь Плессер сказал:

Если бы я знал что в "паскалиевских" юнитах есть такая функция или константа или что-то в этом роде я бы стал делать эту функцию?

А документацию почитать ? Не ? Или её создают только для того, чтобы место на диске занимала ?
Например, каждый Си-компилятор имеет множество предефайнов, в которых есть вся необходимая инфа о камне, под который идёт компиляция. В том числе и о размере EEPROM !

9 минут назад, Игорь Плессер сказал:

Да даже если бы была константа она не для одного МК!И что мне их все перебирать?

Зачем перебирать ? Она будет подсовываться в код во время компиляции ! Для каждого МК своя !

А перебирать всю еепром, в поисках определённого значения - косяк. Такое значение может вполне попасться в середине, как обычные сохранённые данные.

 

ЗЫ: Компилятор какой ?

 

Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер
2 минуты назад, Alex сказал:

А документацию почитать ? Не ?
Например, каждый Си-компилятор имеет множество предефайнов, в которых есть вся необходимая инфа о камне, под который идёт компиляция. В том числе и о размере EEPROM !

Ну это СИ!

2 минуты назад, Alex сказал:

Зачем перебирать ? Она будет подсовываться в код во время компиляции ! Для каждого МК своя !

А перебирать всю еепром, в поисках определённого значения - косяк. Такое значение может вполне попасться в середине, как обычные сохранённые данные.

Согласен косяк!!!Но тогда так как функция "считает" биты можно сравнивать со стандартными значениями размеров 64,128,512,1024 и т.д. тогда если попадется где-нибудь в середине(неверное значение) он сверит и если неправильно пойдет дальше читать...А если в ячейке 0x00 будут данные их можно дублировать в переменную на время и перезаписать обратно в конце вычисления!

Как такой вариант?

Ссылка на комментарий
Поделиться на другие сайты

Только что, Игорь Плессер сказал:

Ну это СИ!

Какая разница ? Думаю, что разрабы и в вашем компиляторе об этом позаботились.

Какой компилятор ?
 

Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер

Вот этого я не знаю!

стоит mP for AVR 6.1.0 еще есть 1.5.0(крякнутый)

Alex вы хорошо знаете СИ?

Просто когда закончу с этой библиотекой хочу перейти на него!

Один язык знать хорошо а два лучше!

Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер

Скажу одно!Паскаль это "туман" там может быть не только странно!

Можт я исходник скину?

Или вы паскалем не занимаетесь?

 

Ссылка на комментарий
Поделиться на другие сайты

Знаете... Я мог всякого ожидать от этого mikroPascal-я, но чтобы не было в соответствующем юните констант с размером EEPROM - этого мне в голову прийти не могло! Причем сами файлы-то есть, и все регистры в них определены, и биты поименованы, все как положено. И размер FLASH в виде констант есть! А вот размера EEPROM - нету, а в хелпе написано, что дескать будьте внимательны и изучайте даташит, чтобы не выйти за диапазон адресов. Такого глупого подвоха я не мог себе представить!

Но и в этом дико глупо-странном случае я не перестаю утверждать, что выбранный вами подход с поиском края памяти не приемлем. Я бы на вашем месте быстренько написал бы программку под винду, которая пропарсила бы все файлы с расширением *.mlk (которые представляют собой XML-файлы с описанием внутренностей соответствующего микроконтроллера) и добавила бы в соответствующие файлы *.mpas константу соответствующего значения.

Тогда в вашем проекте всего-навсего в самом начале надо будет сделать uses <микроконтроллер> и вам станет доступна константа, определяющая размер EEPROM. Как, собственно, и должно быть. Почему разработчик так затупил - мне не понятно.

Чтобы вышеперечисленное понять, я скачал и установил этот микропаскаль. Мой вам совет - бросайте нафиг! Уж на что я сторонник паскаля (больше 15 лет программирую в Delphi), но в данном случае я буду категоричным - бросайте нафиг!

Си - наше всё.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер
6 минут назад, ARV сказал:

Знаете... Я мог всякого ожидать от этого mikroPascal-я, но чтобы не было в соответствующем юните констант с размером EEPROM - этого мне в голову прийти не могло! Причем сами файлы-то есть, и все регистры в них определены, и биты поименованы, все как положено. И размер FLASH в виде констант есть! А вот размера EEPROM - нету, а в хелпе написано, что дескать будьте внимательны и изучайте даташит, чтобы не выйти за диапазон адресов. Такого глупого подвоха я не мог себе представить!

А я что говорил?

6 минут назад, ARV сказал:

Но и в этом дико глупо-странном случае я не перестаю утверждать, что выбранный вами подход с поиском края памяти не приемлем. Я бы на вашем месте быстренько написал бы программку под винду, которая пропарсила бы все файлы с расширением *.mlk (которые представляют собой XML-файлы с описанием внутренностей соответствующего микроконтроллера) и добавила бы в соответствующие файлы *.mpas константу соответствующего значения.

Тогда в вашем проекте всего-навсего в самом начале надо будет сделать uses <микроконтроллер> и вам станет доступна константа, определяющая размер EEPROM. Как, собственно, и должно быть. Почему разработчик так затупил - мне не понятно.

Это вариант, сейчас замутим!

ЗЫ: то что я сделал глупую функцию я не отвергаю, просто у меня не было другого способа!

Тока у меня проблема я с командной строкой не оч дружу, знаю основные команды да и то так се!

Киньте код если не сложно!

Вот код для меги8

 

<?xml version="1.0"?>
<MCU>
    <DEVICE_NAME>ATmega8</DEVICE_NAME>
    <ROM>
        <MIN_ADDR>0x0000</MIN_ADDR>
        <MAX_ADDR>0x0BFF</MAX_ADDR>
    </ROM>
    <EEPROM>
        <MIN_ADDR>0x0000</MIN_ADDR>
        <MAX_ADDR>0x01FF</MAX_ADDR>
    </EEPROM>
    <RX>
        <MIN_ADDR>0x00</MIN_ADDR>
        <MAX_ADDR>0x1F</MAX_ADDR>
    </RX>
    <IO>
        <MIN_ADDR>0x20</MIN_ADDR>
        <MAX_ADDR>0x5F</MAX_ADDR>
    </IO>
    <RAM>
        <MIN_ADDR>0x0060</MIN_ADDR>
        <MAX_ADDR>0x045F</MAX_ADDR>
    </RAM>
    <IVT>
        <INT>
            <ADDRESS>0x0012</ADDRESS>
            <NAME>SPM_RDY</NAME>
            <DESC>Store Program Memory Ready</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0011</ADDRESS>
            <NAME>TWI</NAME>
            <DESC>2-wire Serial Interface</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0010</ADDRESS>
            <NAME>ANA_COMP</NAME>
            <DESC>Analog Comparator</DESC>
        </INT>
        <INT>
            <ADDRESS>0x000F</ADDRESS>
            <NAME>EE_RDY</NAME>
            <DESC>EEPROM Ready</DESC>
        </INT>
        <INT>
            <ADDRESS>0x000E</ADDRESS>
            <NAME>ADC</NAME>
            <DESC>ADC Conversion Complete</DESC>
        </INT>
        <INT>
            <ADDRESS>0x000D</ADDRESS>
            <NAME>USART, TXC</NAME>
            <DESC>USART, Tx Complete</DESC>
        </INT>
        <INT>
            <ADDRESS>0x000C</ADDRESS>
            <NAME>USART, UDRE</NAME>
            <DESC>USART Data Register Empty</DESC>
        </INT>
        <INT>
            <ADDRESS>0x000B</ADDRESS>
            <NAME>USART, RXC</NAME>
            <DESC>USART, Rx Complete</DESC>
        </INT>
        <INT>
            <ADDRESS>0x000A</ADDRESS>
            <NAME>SPI, STC</NAME>
            <DESC>Serial Transfer Complete</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0009</ADDRESS>
            <NAME>TIMER0 OVF</NAME>
            <DESC>Timer/Counter0 Overflow</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0008</ADDRESS>
            <NAME>TIMER1 OVF</NAME>
            <DESC>Timer/Counter1 Overflow</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0007</ADDRESS>
            <NAME>TIMER1 COMPB</NAME>
            <DESC>Timer/Counter1 Compare Match B</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0006</ADDRESS>
            <NAME>TIMER1 COMPA</NAME>
            <DESC>Timer/Counter1 Compare Match A</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0005</ADDRESS>
            <NAME>TIMER1 CAPT</NAME>
            <DESC>Timer/Counter1 Capture Event</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0004</ADDRESS>
            <NAME>TIMER2 OVF</NAME>
            <DESC>Timer/Counter2 Overflow</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0003</ADDRESS>
            <NAME>TIMER2 COMP</NAME>
            <DESC>Timer/Counter2 Compare Match</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0002</ADDRESS>
            <NAME>INT1</NAME>
            <DESC>External Interrupt Request 1</DESC>
        </INT>
        <INT>
            <ADDRESS>0x0001</ADDRESS>
            <NAME>INT0</NAME>
            <DESC>External Interrupt Request 0</DESC>
        </INT>
    </IVT>
    <INTERNAL>
        <A>[1,2,3]</A>
        <B>[1,2]</B>
        <C>[1]</C>
        <D>[1,2,3,4,5,6]</D>
        <E>[1]</E>
    </INTERNAL>
    <LIBRARIES>
        <LIB>
            <ALIAS>Math</ALIAS>
            <FILE>__Lib_Math</FILE>
            <TYPE>SYSTEM</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Math_Double</ALIAS>
            <FILE>__Lib_MathDouble</FILE>
            <TYPE>SYSTEM</TYPE>
        </LIB>
        <LIB>
            <ALIAS>System</ALIAS>
            <FILE>__Lib_System</FILE>
            <TYPE>SYSTEM</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Delays</ALIAS>
            <FILE>__Lib_Delays</FILE>
            <TYPE>SYSTEM</TYPE>
        </LIB>
        <LIB>
            <ALIAS>C_Type</ALIAS>
            <FILE>__Lib_CType</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>String</ALIAS>
            <FILE>__Lib_String</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Conversions</ALIAS>
            <FILE>__Lib_Conversions</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Time</ALIAS>
            <FILE>__Lib_Time</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Trigon</ALIAS>
            <FILE>__Lib_Trigon</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Trigonometry</ALIAS>
            <FILE>__Lib_Trigonometry</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Button</ALIAS>
            <FILE>__Lib_Button</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Keypad4x4</ALIAS>
            <FILE>__Lib_Keypad4x4</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Manchester</ALIAS>
            <FILE>__Lib_Manchester</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>One_Wire</ALIAS>
            <FILE>__Lib_OneWire</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>PS2</ALIAS>
            <FILE>__Lib_PS2</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Sound</ALIAS>
            <FILE>__Lib_Sound</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Software_I2C</ALIAS>
            <FILE>__Lib_SoftI2C</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Software_SPI</ALIAS>
            <FILE>__Lib_SoftSPI</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Software_UART</ALIAS>
            <FILE>__Lib_SoftUART</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>ADC</ALIAS>
            <FILE>__Lib_ADC</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>EEPROM</ALIAS>
            <FILE>__Lib_EEPROM_eew</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>FLASH</ALIAS>
            <FILE>__Lib_FLASH_rwe</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>PWM1</ALIAS>
            <FILE>__Lib_PWM1_2</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>SPI</ALIAS>
            <FILE>__Lib_SPI_b5432_x2</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>TWI</ALIAS>
            <FILE>__Lib_TWI</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>UART</ALIAS>
            <FILE>__Lib_UART_d01_ursel</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Port_Expander</ALIAS>
            <FILE>__Lib_PortExpander</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>CAN_SPI</ALIAS>
            <FILE>__Lib_CANSPI</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Compact_Flash</ALIAS>
            <FILE>__Lib_CF</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Glcd_Fonts</ALIAS>
            <FILE>__Lib_GlcdFonts</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Glcd</ALIAS>
            <FILE>__Lib_Glcd</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Lcd_Constants</ALIAS>
            <FILE>__Lib_LcdConsts</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Lcd</ALIAS>
            <FILE>__Lib_Lcd</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>Mmc</ALIAS>
            <FILE>__Lib_Mmc</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>RS485</ALIAS>
            <FILE>__Lib_RS485</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>T6963C</ALIAS>
            <FILE>__Lib_T6963C</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>SPI_Glcd</ALIAS>
            <FILE>__Lib_SPIGlcd</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>SPI_Lcd</ALIAS>
            <FILE>__Lib_SPILcd</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>SPI_Lcd8</ALIAS>
            <FILE>__Lib_SPILcd8</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
        <LIB>
            <ALIAS>SPI_T6963C</ALIAS>
            <FILE>__Lib_SPIT6963C</FILE>
            <TYPE>REGULAR</TYPE>
        </LIB>
    </LIBRARIES>
    <PACKAGE>
        <PACKAGES>[TQFP]</PACKAGES>
        <TQFP>
            <NMB_PIN>32</NMB_PIN>
            <PIN1>
                <NAME>[PD3:IN1]</NAME>
                <TEXT>INT1,External Interrupt source 1:The PD3 pin can serve as an external interrupt source.</TEXT>
            </PIN1>
            <PIN2>
                <NAME>[PD4:XCK:T0]</NAME>
                <TEXT>XCK, USART external clock. T0,Timer/Counter0 counter source.</TEXT>
            </PIN2>
            <PIN3>
                <NAME>[GND]</NAME>
                <TEXT/>
            </PIN3>
            <PIN4>
                <NAME>[VCC]</NAME>
                <TEXT/>
            </PIN4>
            <PIN5>
                <NAME>[GND]</NAME>
                <TEXT/>
            </PIN5>
            <PIN6>
                <NAME>[VCC]</NAME>
                <TEXT/>
            </PIN6>
            <PIN7>
                <NAME>[PB6:XTAL1:TOSC1]</NAME>
                <TEXT>XTAL1:Chipclock oscillator pin 1.Used for all chipclock sources except internal calibratable RC oscillator.When used as a clock pin,the pin can not be used as an I/O pin.When using internal calibratable RC oscillator as chip clock source,PB6 functions as an ordinary I/O pin. TOSC1:Timer Oscillator pin 1.Used only if internal calibratable RC oscillator is selected as chip clock source,and the asynchronous timer is enabled by the correct setting in ASSR.When the AS2 bit in ASSR is set (one)to enable asynchronous clocking of Timer/Counter1,pin PB6 is disconnected from the port,and becomes the input of the inverting oscillator amplifier.In this mode,a crystal oscillator is connected to this pin,and the pin can not be used as an I/O pin. If PB6 is used as a clock pin,DDB6,PORTB6 and PINB6 will all read</TEXT>
            </PIN7>
            <PIN8>
                <NAME>[PB7:XTAL2:TOSC2]</NAME>
                <TEXT>XTAL2:Chip clock oscillator pin 2.Used as clock pin for all chip clock sources except internal calibratable RC oscillator and external clock.When used as a clock pin,the pin can not be used as an I/O pin.When using internal calibratable RC oscillator or external clock as chipclock sources,PB7 functions as an ordinary I/O pin. TOSC2:Timer Oscillator pin 2.Used only if internal calibratable RC oscillator is selected as chip clock source,and the asynchronous timer is enabled by the correct setting in ASSR.When the AS2 bit in ASSR is set (one)to enable asynchro- nous clocking of Timer/Counter2,pin PB7 is disconnected from the port,and becomes the inverting output of the oscillator amplifier.In this mode,a crystal oscillator is connected to this pin,and the pin can not be used as an I/O pin. If PB7 is used as a clock pin,DDB7,PORTB7 and PINB7 will all read </TEXT>
            </PIN8>
            <PIN9>
                <NAME>[PD5:T1]</NAME>
                <TEXT>T1,Timer/Counter1 counter source.</TEXT>
            </PIN9>
            <PIN10>
                <NAME>[PD6:AIN0]</NAME>
                <TEXT>AIN0,Analog Comparator Positive Input.Configure the port pin as input with the internal pull-up switched off to avoid the digital port function from interfering with the function of the analog comparator.</TEXT>
            </PIN10>
            <PIN11>
                <NAME>[PD7:AIN1]</NAME>
                <TEXT>AIN1,Analog Comparator Negative Input.Configure the port pin as input with the internal pull-up switched off to avoid the digital port function from interfering with the function of the analog comparator.</TEXT>
            </PIN11>
            <PIN12>
                <NAME>[PB0:ICP]</NAME>
                <TEXT>ICP -Input Capture Pin:The PB0 pin can act as an input capture pin for Timer/Counter1.</TEXT>
            </PIN12>
            <PIN13>
                <NAME>[PB1:OC1A]</NAME>
                <TEXT>OC1A,Output compare match output:The PB1 pin can serve as an external output for the Timer/Counter1 compare match A.The PB1 pin has to be configured as an output (DDB1 set (one))to serve this function.The OC1A pin is also the output pin for the PWM mode timer function.</TEXT>
            </PIN13>
            <PIN14>
                <NAME>[PB2:'SS:OC1B]</NAME>
                <TEXT>SS:Slave Select input.When the SPI is enabled as a slave,this pin is configured as an input regardless of the setting of DDB4.As a slave,the SPI is activated when this pin is driven low.When the SPI is enabled as a master,the data direction of this pin is controlled by DDB4.When the pin is forced by the SPI to be an input,the pull-up can still be controlled by the PORTB4 bit. OC1B,Output compare match output:The PB2 pin can serve as an external output for the Timer/Counter1 compare match B.The PB2 pin has to be configured as an output (DDB2 set (one))to serve this function.The OC1B pin is also the output pin for the PWM mode timer func</TEXT>
            </PIN14>
            <PIN15>
                <NAME>[PB3:MOSI:OC2]</NAME>
                <TEXT>MOSI:SPI Master data output,slave data input for SPI channel.When the SPI is enabled as a slave,this pin is configured as an input regardless of the setting of DDB5.When the SPI is enabled as a master,the data direction of this pin is controlled by DDB5.When the pin is forced by the SPI to be an input,the pull-up can still be controlled by the PORTB bit.</TEXT>
            </PIN15>
            <PIN16>
                <NAME>[PB4:MISO]</NAME>
                <TEXT>MISO:Master data Input,Slave data Output pin for SPI channel.When the SPI is enabled as a master,this pin is configured as an input regardless of the setting of DDB6.When the SPI is enabled as a slave,the data direction of this pin is controlled by DDB6.When the pin is forced by the SPI to be an input,the pull-up can still be controlled by the PORTB6 bit.</TEXT>
            </PIN16>
            <PIN17>
                <NAME>[PB5:SCK]</NAME>
                <TEXT>SCK:Master clock output,slave clock input pin for SPI channel.When the SPI is enabled as a slave,this pin is configured as an input regardless of the setting of DDB7.When the SPI is enabled as a master,the data direction of this pin is controlled by DDB7.When the pin is forced by the SPI to be an input,the pull-up can still be controlled by the PORTB7 bit.</TEXT>
            </PIN17>
            <PIN18>
                <NAME>[AVCC]</NAME>
                <TEXT/>
            </PIN18>
            <PIN19>
                <NAME>[ADC6]</NAME>
                <TEXT/>
            </PIN19>
            <PIN20>
                <NAME>[AREF]</NAME>
                <TEXT/>
            </PIN20>
            <PIN21>
                <NAME>[AGND]</NAME>
                <TEXT/>
            </PIN21>
            <PIN22>
                <NAME>[ADC7]</NAME>
                <TEXT/>
            </PIN22>
            <PIN23>
                <NAME>[PC0:ADC0]</NAME>
                <TEXT>PC0 can also be used as ADC input Channel 0.Note that ADC input channel 0 uses analog ground.</TEXT>
            </PIN23>
            <PIN24>
                <NAME>[PC1:ADC1]</NAME>
                <TEXT>PC1 can also be used as ADC input Channel 1.Note that ADC input channel 1 uses analog ground.</TEXT>
            </PIN24>
            <PIN25>
                <NAME>[PC2:ADC2]</NAME>
                <TEXT>PC2 can also be used as ADC input Channel 2.Note that ADC input channel 2 uses analog ground.</TEXT>
            </PIN25>
            <PIN26>
                <NAME>[PC3:ADC3]</NAME>
                <TEXT>PC3 can also be used as ADC input Channel 3.Note that ADC input channel 3 uses analog ground.</TEXT>
            </PIN26>
            <PIN27>
                <NAME>[PC4:ADC4:SDA]</NAME>
                <TEXT>SDA,2-wire Serial Interface Data:When the TWEN bit in TWCR is set (one)to enable the 2-wire Serial Interface,pin PC1 is disconnected from the port and becomes the Serial Data I/O pin for the 2-wire Serial Interface.In this mode,there is a spike filter on the pin to suppress spikes shorter than 0 ns on the input signal,and the pin is driven by an open drain driver with slew-rate limitation. PC4 can also be used as ADC input Channel 4.Note that ADC input channel 4 uses digital ground.</TEXT>
            </PIN27>
            <PIN28>
                <NAME>[PC5:ADC5:SCL]</NAME>
                <TEXT>SCL,2-wire Serial Interface Clock:When the TWEN bit in TWCR is set (one)to enable the 2-wire Serial Interface,pin PC1 is disconnected from the port and becomes the Serial Clock I/O pin for the 2-wire Serial Interface.In this mode,there is a spike filter on the pin to suppress spikes shorter than 0 ns on the input signal,and the pin is driven by an open drain driver with slew-rate limitation. PC can also be used as ADC input Channel 5.Note that ADC input channel uses digital ground.</TEXT>
            </PIN28>
            <PIN29>
                <NAME>[PC6:'RESET]</NAME>
                <TEXT>RESET, Reset pin: When the RSTDISBL fuse is set,this pin functions as a normal I/O pin,and the part will have to rely on Power-On Reset and Brown-Out Reset as its reset sources.When the RSTDISBL fuse is cleared,the reset circuitry is connected to the pin,and the pin can not be used as an I/O pin. If PC6 is used as a reset pin,DDC6,PORTC6 and PINC6 will all read 0.</TEXT>
            </PIN29>
            <PIN30>
                <NAME>[PD0:RXD]</NAME>
                <TEXT>RXD,Receive Data (Data input pin for the USART).When the USART receiver is enabled this pin is configured as an input regardless of the value of DDD0.When the USART forces this pin to be an input,the pull-up can still be controlled by the PORTD0 bit.</TEXT>
            </PIN30>
            <PIN31>
                <NAME>[PD1:TXD]</NAME>
                <TEXT>TXD,Transmit Data (Data output pin for the USART).When the USART transmitter is enabled,this pin is configured as an output regardless of the value of DDD1.</TEXT>
            </PIN31>
            <PIN32>
                <NAME>[PD2:INT0]</NAME>
                <TEXT>INT0,External Interrupt source 0:The PD2 pin can serve as an external interrupt source.</TEXT>
            </PIN32>
        </TQFP>
    </PACKAGE>
</MCU>

Хочу вас сказать-с ничего нету-с кроме!!

Описания портов!

 

и начальных "либок"

Изменено пользователем Игорь Плессер
Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер
22 минуты назад, ARV сказал:

Чтобы вышеперечисленное понять, я скачал и установил этот микропаскаль. Мой вам совет - бросайте нафиг! Уж на что я сторонник паскаля (больше 15 лет программирую в Delphi), но в данном случае я буду категоричным - бросайте нафиг!

Согласен!

Изменено пользователем Игорь Плессер
Ссылка на комментарий
Поделиться на другие сайты

57 минут назад, Игорь Плессер сказал:

Хочу вас сказать-с ничего нету-с кроме!!

Как нету? А вот это - чуть ли не в самом начале?

57 минут назад, Игорь Плессер сказал:

    <EEPROM>
        <MIN_ADDR>0x0000</MIN_ADDR>
        <MAX_ADDR>0x01FF</MAX_ADDR>
    </EEPROM>

Про командную строку - не понял.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Игорь Плессер сказал:

Alex вы хорошо знаете СИ?

На уровне любителя :)

1 час назад, Игорь Плессер сказал:

Можт я исходник скину?

Или вы паскалем не занимаетесь?

Я его вообще не знаю.
 

Ссылка на комментарий
Поделиться на другие сайты

Гость Игорь Плессер

    <EEPROM>
        <MIN_ADDR>0x0000</MIN_ADDR>
        <MAX_ADDR>0x01FF</MAX_ADDR>
    </EEPROM>

не заметил!НУ и как теперь это всо сувать?

 

Константа это MAX_ADDR?

Изменено пользователем Игорь Плессер
Ссылка на комментарий
Поделиться на другие сайты

Я ж вам сказал, как бы я поступил на вашем месте (это еще не означает, что вы сможете так поступить!): я бы написал на Дельфи утилитку, которая искала бы в файле эти данные, определяла бы, что размер EEPROM для данного МК равен 512, а потом бы дописывала в начало другого файла строчку const _EEPROM_SIZE = 512;

Для каждого МК число было бы свое. Просто можно все и вручную править, но т.к. поддерживаемых МК много, много и файлов, которые надо править, а при помощи утилитки это можно было бы автоматиировать и быстро провернуть.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...