Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.74/117: Рейтинг темы: голосов - 117, средняя оценка - 4.74
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
1

24с256 – AVR – PC и обратно

22.11.2010, 16:05. Просмотров 21145. Ответов 36
Метки нет (Все метки)

Добрый день уважаемые форумчане!
Возникла необходимость создания следующего девайса:
Есть микросхема памяти с интерфейсом I2C. В частности 24С256 (32кб.)
Необходимо считать с нее данные и перегнать в комп. В виде файла .BIN
Потом на компе идет обработка этого файла, образуется новый файл .BIN
Потом этот обновленный файл необходимо опять загнать в память I2C.
Прошу подсказать концепцию!
Я примерно представляю это так:
Есть AVR с интерфейсом I2C.
Есть присобаченная к ней FT232RL.
Есть виртуальный порт на компе под FT
Есть какой-то минимальный софт на компе, который принимает/передает данные в порт (AVR) для записи в память I2C.
Вот только не пойму пока как реализовать запуски процесса приема/передачи….
Кто инициирует эти процессы?
AVR - (кнопки- запись/передача)? А как тогда софт на компе к этому привязать?
Или комп.? Если комп – то как дать команду AVR для начала процесса записи/считывания?

Заранее благодарен за любую подсказку, совет.
С уважением, Влид.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2010, 16:05
Ответы с готовыми решениями:

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR AVRISP STK500 V3.0 USB...

AVR Atmega324PU не прошивается AVR ISP Mk2
Добрый день. На плату впаян данный микроконтроллер в корпусе tqfp. При подключении программатора...

Анализ стека AVR / AVR stack analysis
Привет! Уперся я в стек, и решил понять что почем. Нашел вот такой вот скриптик:...

AVR Studio 6 и AVR Toolchain вопросы!
Всем доброго времени суток. Решил я написать софтинку в новой студии от Атмела AVR Studyo 6. Все...

AVR JTAG mkI + avarice + avr-gdb + Linux
По какой то неведомой причине мне причине не могу нормально подключится к серверу avarice через...

36
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
22.11.2010, 16:13 2
Цитата Сообщение от Vtod777
Если комп – то как дать команду AVR для начала процесса записи/считывания?
С уважением, Влид.
FT232RL сидит на USORTе контроллера. Соответственно, при приеме данных от компа в МК генерится прерывание, которое мы и обрабатываем. По прерыванию принимаем байт (или последовательность байтов) и анализируем, что от нас хочет комп. Ну, например, в простейшем случае, приняли от компа «R»- значит читаем. «W»- записываем.
Поподробнее распишите, в каких случаях начинается обмен. Если МК ведет какой-то лог и пишет в 24с256, то рано или поздно он ее заполнит. В этом случае инициатором обмена может быть и контроллер.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
22.11.2010, 16:29 3
Нет, это не лог.
Я недавно купил ПЕРВЫЙ советский микрокомпьютер Электраника МК-85!
Отремонтировал его и решил модернизировать! А у поляков есть замечательный сайт на котором есть все описание апгрейда МК-85.
Не сочтите за рекламу,
http://mk85.republika.pl/sprzet.htm
В пункте 8 - фото моей модернизации МК-85.
Так вот, я сделал "флэшку" для него, т.е. вся оперативная память МК (теперь это 32кв.) по команде SAVE сбрасывается на внешнюю "флэшку".
Для компа разработаны "энтузиастами" две утилитки, которые преобразуют дамп памяти МК из BIN файла в текстовый (программы Бейсика). Потом можно что угодно делать с текстом, потом обработать 2-й утилиткой, которая преобразует Бейсик-текст в двоичный фал (образ ROM Мк-85). Потом этот файл надо загнать на "флэшку" и считать в МК-85 командой LOAD.
Вот такой получается обмен информацией между МК-85 и ПК.
Я сейчас это делаю с помощью программатора! -))) Но это же хорошо только на этапе отладки!
А хочется иметь небольшой самодостаточный девай для этого!
Вот примерно так. Извините если немного сумбурно написано!

С уважением, Влид.
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
22.11.2010, 16:46 4
Тогда в любом случае инициатор- компьютер.
0
22.11.2010, 16:46
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
22.11.2010, 16:57 5
Т.Е. написать простейшую прогу для ПК, которай шлет в порт допустим "W", AVR переходит в режим приема и принимает ровно 32кб. после этого переходит в режим ожидания комманды от ПК? Так? Ну и наоборот, при получении 1-го символа "R" - передает в ПК 32кб. данных и опять курит! -))) Такая схема?
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
22.11.2010, 17:03 6
Цитата Сообщение от Vtod777
Т.Е. написать простейшую прогу для ПК, которай шлет в порт допустим "W", AVR переходит в режим приема и принимает ровно 32кб. после этого переходит в режим ожидания комманды от ПК? Так? Ну и наоборот, при получении 1-го символа "R" - передает в ПК 32кб. данных и опять курит! -))) Такая схема?
Вполне работоспособно. При этом не обязательно считать каждый байт, достаточно указать признак конца посылки. Ну, и чтоб уберечься от пропуска/искажения данных, нужно считать CRC на обоих концах и передавать ее при обмене (и от мк к пк и от пк к мк) для контроля безошибочности связи.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
22.11.2010, 17:16 7
... и помнить о том, что запись байта в EEPROM длится 10мс, а данные с UART будут прибегать быстрее. Чтоб не было затыков нужно либо организовать буффер, и пихать данные пачками, либо делать задержку при посылке, чтобы память успела записать.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
22.11.2010, 17:23 8
Такс... примерно понятно направление!

Задержки при записи в память...
А как это лучше реализовать? После каждого принятого байта давать в ПК подтверждение на отправку следующего? А заодно можно продублировать байт для контроля? Вместо CRC?
И где-то здесь вставить признак окончания приема/передачи?
0
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
22.11.2010, 18:35 9
32кБ в однокристалку зараз не влезут. Значит слать блоками, с CRC каждого блока. В начале блока можно сделать заголовок, типа куда писать или признак конца передачи. Контроллер получает блок, проверяет правильность и записывает в память. Если ошибка, то блок запрашивается повторно, если нет то запрашивается следующий блок. При чтении поступать аналогично.
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
22.11.2010, 18:36 10
Цитата Сообщение от Vtod777
Задержки при записи в память... А как это лучше реализовать?
Передавать данные блоками размером с объем буфера. Передав блок, ПК слушает ответ МК на предмет того, что посланный блок переварен и записан. Ответ есть- передаем дальше.
После каждого принятого байта давать в ПК подтверждение на отправку следующего? А заодно можно продублировать байт для контроля? Вместо CRC?
И где-то здесь вставить признак окончания приема/передачи?
Разрешение на отправку после каждого обработанного блока.
Вместо CRC нестоит. Можно принять что-нибудь не то.

PRS опередил.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
22.11.2010, 19:12 11
Направление ясно! -)))
Спасибо!
Беру за основу MEGA8, что скажете? пойдет?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
22.11.2010, 19:15 12
Более чем.
Можно будет ещё всякие индикаторы навешать. Светодиоды в качестве сигналов о том, что "идёт запись, не вырубай питание", например.
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
22.11.2010, 21:30 13
Цитата Сообщение от Vtod777
Направление ясно! -)))
Спасибо!
Беру за основу MEGA8, что скажете? пойдет?
А зачем вообще тут МК? Не проще ли бит-бэнг FT232 задействовать, и дрыгать ногами по нужному протоколу?
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
22.11.2010, 21:33 14
Цитата Сообщение от Brykodyr
Цитата Сообщение от Vtod777
Направление ясно! -)))
Спасибо!
Беру за основу MEGA8, что скажете? пойдет?
А зачем вообще тут МК? Не проще ли бит-бэнг FT232 задействовать, и дрыгать ногами по нужному протоколу?
Для меня это будет наверное чересчур сложно!!!
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
22.11.2010, 21:37 15
Не сложнее, чем написать для МК под это дело. Ведь вам, как я понял, все таки придется писать софт для управления процессом.
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
22.11.2010, 22:23 16
Да тут в качестве софта (обмен данными) любой терминал подойдет. Главное, не переполнять буфер. А утилиты для конвертирования принятых данных на компе уже написаны.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
22.11.2010, 22:48 17
Для Мк - думаю софт напишу, т.к. это будет далеко не 1-й мой опыт в программировании. Терминалку использовать не хочу, слишком много телодвижений необходимо сделать для выполнения чтения-записи. Думаю программа для ПК должна выглядеть так - 2 БОЛЬШИЕ кнопки - читать, писать! -))) Ну и выбор файла для слива! Хотя это не обязательно. Может быть автоматический запуск ДОС утилит для конвертации "MK-85 to BAS" и "BAS to MK-85". Приимерно так!
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
23.11.2010, 02:27 18
Цитата Сообщение от Vtod777
Для Мк - думаю софт напишу, т.к. это будет далеко не 1-й мой опыт в программировании. Терминалку использовать не хочу, слишком много телодвижений необходимо сделать для выполнения чтения-записи. Думаю программа для ПК должна выглядеть так - 2 БОЛЬШИЕ кнопки - читать, писать! -))) Ну и выбор файла для слива! Хотя это не обязательно. Может быть автоматический запуск ДОС утилит для конвертации "MK-85 to BAS" и "BAS to MK-85". Приимерно так!
Добавь еще сюда активацию бит-бэнга и простецкую реализацию I2C, и получится то, о чем я говорю.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
28.11.2010, 23:57 19
Для МК софт почти написал, чтение из памяти идет и выдача данных в УАРТ тоже.
Сейчас пытаюсь освоить VISUAL BASIC v.6
Помогите плиз! Изучать ради написания 1-й программы - жуть!
Алгоритм должен быть такой -
Нажимаю кнопку на ПК - в МК отправляется символ "r".
После этого МК сыпет в порт 32768 байт данных.
На Пк их необходимо принять и сохранить в файл.
МК в конце данных может выдать в порт (дополнительно) любой символ, например 0x1a. (если это конечно необходимо).

Вот что смог написать на VISUAL Basic:

Pryvate Sub Commomd2_Click()
Номер порта COM
MSComm1.CommPort = 2
19200 скорость, без паритета, 8 бит данных, и 1 стоп bit.
MSComm1.Settings = "19200,N,8,1"
Открыть порт
MSComm1.PortOpen = True
Из буфера читаем ВСЕ символы, которые в нем есть.
MSComm1.InputLen = 0
Возникает событие OnComm при получениив буфер 1-го символа
RThreshold = 1
Открыть файл для записи
InputMode = Binary
Open "C:\file-1.txt" For Output As #1
Print "Порт открыт, файл открыт"
Посылаем комманду в МК
MSComm1.Output = "r"
Цикл, пока счетчик не обнулится
While St <> Chr(26)
If somEvReceive Then
St = MSComm1.Input
Print #1, St;
End If
Wend
Закрываем COM порт
MSComm1.PortOpen = False
Закрываем файл
Close 1
Print "Готово!"
End Sub

Файл создается, все нормально, НО моя программа на ПК никогда не заканчивается!!!! -))))
Вертится в цикле - все! -))))

А вторая часть программы для ПК будет передавать в МК символ "w", после которого МК переходит в режим приема, принимает от ПК ровно 32768 байт и записывает их блоками по 64 байта в I2C.
Возможно в программе для ПК понадобится поставить задержку 10мс. после каждых 64 байт данных.

Подскажите пожалуйста!
С уважением,
Влид.
0
Uttrym
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 219
29.11.2010, 00:13 20
В смысле, вертится в цикле ? Постоянно перезаписывает файл? или пишет "Готово" и встает в пустой цикл?
На VB не програмировал, но на дельфях вроде надо было функцию определять для завершения программы... Щас не помню, давно это было...

Сделайте 2 кнопки. Одна будет на чтение, вторая на запись. В первой кнопке шлите "r" и записывайте ваш файл, а во второй шлите "w" и закидывайте результаты обратно. А основной цикл можно и пустым осттавить. Закрывать программу нажимая на крестик на окне...
Все имхо... Я комп уже лет 10 не программировал...
0
29.11.2010, 00:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 00:13

(Avr Studio + WinAvr) vs (mikroC PRO for AVR)
Сам пользуюсь (Avr Studyo + WinAvr). Ктонибудь использует mykroC PRO for AVR ? Слышал там...

STM8 после AVR с AVR-GCC
Привет! В процессе знакомства с STM8 накопились мелкие вопросы, ответы на которые пока не нашел:...

Что-то не так с Encoding данных туда и обратно: byte в string и обратно в byte
Добрый день, коллеги! Столкнулся с такой проблемой, причём заметил её не сразу (&quot;вроде бы всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru