|
|
  |
imx233 |
|
|
|
Dec 7 2013, 11:03
|
Знающий
   
Группа: Свой
Сообщений: 618
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 375

|
Для кейла подойдет? Запуск сделан с WinCE BSP (xldr). В архиве часть файлов из тестовых проектов (все отдать не могу). Работал два года назад на фирменой плате, на стратер-китовой и на своей. Если будут проблемы, наверное соберу рабочую версию проекта. 233 уже пожилой проц, зачем он вам? (сейчас кортексы рулят).
Прикрепленные файлы
2.7Z ( 19.46 килобайт )
Кол-во скачиваний: 21
|
|
|
|
|
Dec 7 2013, 20:25
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(sergey sva @ Dec 7 2013, 23:05)  Что то мне не понятно, как это сделать ( . проводов у меня нет для этого контроллера. Все можно загрузить через USB, посмотрите MfgTool для своей платы, отправная точка для написания своего кода - imx-bootlets. Бинарник в формате ELF нужно преобразовать в специальный формат (sb) утилитой elftosb. Возьмите за основу как готовится образ u-boot uboot.db CODE // STMP378x ROM command script to load and run U-Boot
sources { power_prep="./power_prep"; sdram_prep="./boot_prep"; image="./u-boot"; }
section (0) {
//---------------------------------------------------------- // Power Supply initialization //----------------------------------------------------------
load power_prep; call power_prep;
//---------------------------------------------------------- // SDRAM initialization //----------------------------------------------------------
load sdram_prep; call sdram_prep;
//---------------------------------------------------------- // Load and call u_boot - ELF ARM image //----------------------------------------------------------
load image; call image; }
вместо image="./u-boot"; подставьте имя своего бинарного файла в формате ELF, power_prep, boot_prep - бинарники получнные после сборки imx-bootlets, подготовка имиджа командой ./elftosb2 -z -c ./uboot.db -o uboot.sb С заводсики установками процессора образ должен быть зашифрован, по умолчанию ключ - все поля нули, параметр -z elftosb служит для шифрования нулевым ключем -z/--zero-key Add default key of all zeroes Если внешнюю память не собираетесь использовать то модно не инициализировать - исключить загрузку sdram_prep из файла .db Имидж можно загрузить через USB (MfgTool, sbloader), можно с носителя. Например для MMC можно записать этим скриптом CODE #!/bin/sh
echo -e "\033[1mUsage: sudo ./part disk_name [image.sb]\033[0m" echo -e "\033[1mExample: sudo ./part /dev/mmcblk0 uboot.sb\033[0m" exit fi
if [ ! -b "$1" ]; then echo -e "\033[1mError: $1 disk not found\033[0m" exit fi
if [[ "$1" =~ mmc ]]; then p="p" else p="" fi
dd if=/dev/zero of=$1 bs=512 count=1
sfdisk --force -uM $1 << EOF ,16,0x53 ,,0x83 EOF
if [ ! -b "${1}${p}1" ]; then echo -e "\033[1mError: partition ${1}${p}1 not found\033[0m" exit fi
if [ -n "$2" ]; then echo -e "\033[1mWriting image $2 to partition ${1}${p}1 ...\033[0m" dd if=/dev/zero of=${1}${p}1 bs=512 count=4 dd if=$2 of=${1}${p}1 bs=512 seek=4 conv=sync,notrunc fi
Это все примеры для Linux, кроме утилит загрузки (MfgTool, sbloader), как сделать в Windows к сожалению не могу подсказать - по сути вам нужно только найти elftosb для Windows, проще наверно виртуалку с Linux поставить. Вы тут пару раз про TCP упоминали, имейте ввиду - встроенного EMAC у этих процессоров нет.
Сообщение отредактировал sasamy - Dec 7 2013, 21:24
|
|
|
|
|
Dec 8 2013, 18:13
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(sergey sva @ Dec 8 2013, 12:16)  Только не смог найти утилиту под виндовс elftosb2. Исходники открыты http://repository.timesys.com/buildsources...10.12.01.tar.gzЦитата Building
On Windows, open the .sln file in Microsoft Visual Studio. The solution contains projects for each of the individual projects, including the old elftosb 1.x and related tools.
|
|
|
|
|
Dec 8 2013, 20:14
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(sergey sva @ Dec 8 2013, 12:16)  Благодарю за подробный ответ. Теперь вроде бы немного стало понятно. Только не смог найти утилиту под виндовс elftosb2. Вот три утилиты под винду: [attachment=81506:CFImager....7.3.001.zip] [attachment=81507:elftosb_2.6.1.zip] [attachment=81508:sb_loade...g63b47f0.zip] Софт под imx28, но они по документации работают и с imx23. CFImager нужен чтобы записать *.sb файл в загрузочном виде на SD карту elftosb - делает sb из одного или нескольких elf. Виндовой версией я не пользуюсь, создаю sb в линуксе. sb_loader - заливает sb файл в проц по USB.
|
|
|
|
|
Dec 13 2013, 13:17
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Что то или делаю не правильно или может загрузчика в этой плате нет, после того как подключаю usb к пк в диспетчере задач появляется usb устройство с ошибкой Цитата Система Windows остановила это устройство, так как оно сообщило о возникновении неполадок. (Код 43)
Сбой запроса дескриптора USB-устройства. Загрузка джамперами выбрана сsdmmc. Решил вначале проверить плату с тем что есть. скачал с сайта mfgtool если правильно понял он грузит готовый образ линукса на карту и монтирует ее. Переключил джамперы загрузка с usb. В диспетчере устройств появилось hid совместимое устройство. в MFGtool тоже появилось. Нажимаю старт появляется Цитата Booting update firmware прогресс доходит до конца и на этом все останавливается. и появляется ошибка Цитата Reason is unknown,failed to run command: type="boot" body="Recovery" file="updater.sb" timeout="10" onError="" text="Booting update firmware" Превышен таймаут семафора. mmcка (4гига) должна быть отформатирована в fat32 или ее вначале нужно сделать загрузочной а потом можно будет менять через usb ?
|
|
|
|
|
Dec 14 2013, 05:22
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(sergey sva @ Dec 13 2013, 17:17)  Что то или делаю не правильно Для mgftool нужно переключать джамперы на загрузку с usb, появится HID устройство. updater.sb должен быть собран под вашу плату. Если ваша плата отличается от фрискейловской - работать не будет. карта 4 гига будет видна. По моему ее можно вообще не форматировать - загрузочный блок пишется в обход ФС командой dd. Rootfs на карте как я понимаю вам не нужна.
|
|
|
|
|
Dec 20 2013, 07:37
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(sergey sva @ Dec 19 2013, 16:32)  Немного проясняется )) Может есть примеры исходников первичной инициализации после включения питания?Обычно примеры на сайте производителя, но или я плохо смотрю или не то смотрю. Все есть в LTIB. Отступление от предлагаемых производителем инструментов означает что вы делаете все сами на пустом месте. Первичная инициализация делается с помощью imx-bootlets Исходники (первая попавшаяся ссылка из гугла) ТынцЕще можете глянуть IMX_OBDS от imx28. Цитата(sergey sva @ Dec 19 2013, 16:32)  Понятно, не любят этот процессор. Вы не умеете его готовить. Надо брать u-boot/barebox, ltib, yocto и т.п
|
|
|
|
|
Dec 21 2013, 11:12
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Помогите разобраться как работает, любые мысли. Проделал так: в линуксе собрал ubot из исходников именно для платы iMX233-OLinuXino-MAXI без ошибок все ок. Скопировал все исходники на комп с windows и CodeSourcery eclipse. Нашел файл Start.s который вызывает функцию void board_init_ll(void) а она выполняет Код void mxs_common_spl_init(const iomux_cfg_t *iomux_setup, const unsigned int iomux_size) { struct mxs_spl_data *data = (struct mxs_spl_data *) ((CONFIG_SYS_TEXT_BASE - sizeof(struct mxs_spl_data)) & ~0xf); uint8_t bootmode = mxs_get_bootmode_index();
mxs_iomux_setup_multiple_pads(iomux_setup, iomux_size);
mxs_power_init();
mxs_mem_init(); data->mem_dram_size = mxs_mem_get_size();
data->boot_mode_idx = bootmode;
mxs_power_wait_pswitch();
//если сюда добавлю вызов main из maincod там код мигания светодиодом то он после загрузки мигает. //загружаю командой sb_loader.exe -f MovGen.sb загрузка происходит только в озу ,если выключить и включить питание сетодиод уже не мигает. } Все что связано с этими кодом нашел и добавил в проект. Скомпилировал ошибок нет Цитата **** Build of configuration Release for project MovGen ****
cs-make all mkdir .\output arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -D__ASSEMBLY__ -o .\src\Start.o .\src\Start.S arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Spl_Boot.o .\src\Spl_Boot.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Spl_Mem_Init.o .\src\Spl_Mem_Init.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Misc.o .\src\Misc.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Timer.o .\src\Timer.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Memsize.o .\src\Memsize.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Iomux.o .\src\Iomux.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Mxs_gpio.o .\src\Mxs_gpio.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Spl_Power_Init.o .\src\Spl_Power_Init.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Hang.o .\src\Hang.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\Spl_Lradc_Init.o .\src\Spl_Lradc_Init.c arm-none-eabi-gcc -c -Wvolatile-register-var -mcpu=arm926ej-s -O0 -Wall -I.\include -I\include -o .\src\MainCod.o .\src\MainCod.c arm-none-eabi-cpp -P -DBASE_ADDR=0x00002000 -o .\output\MovGen.ld .\src\MovGen.ld.in arm-none-eabi-ld -o .\output\MovGen.elf .\src\Start.o .\src\Spl_Boot.o .\src\Spl_Mem_Init.o .\src\Misc.o .\src\Timer.o .\src\Memsize.o .\src\Iomux.o .\src\Mxs_gpio.o .\src\Spl_Power_Init.o .\src\Hang.o .\src\Spl_Lradc_Init.o .\src\MainCod.o --allow-multiple-definition -static -T .\output\MovGen.ld -Lc:/bin/../lib/gcc/arm-none-eabi/4.8.1/ -u,vfprintf -lgcc arm-none-eabi-nm -n .\output\MovGen.elf > .\output\MovGen.elf.map arm-none-eabi-objcopy -R -S -O binary -R .note -R .note.gnu.build-id -R .comment .\output\MovGen.elf .\output\MovGen.bin ./elftosb -V -z -c MovGen.db -o .\output\MovGen.sb Boot Section 0x00000000: LOAD | adr=0x00000000 | len=0x00003860 | crc=0x774c1b06 | flg=0x00000000 LOAD | adr=0x00003860 | len=0x000003f8 | crc=0x4b86a49c | flg=0x00000000 LOAD | adr=0x00003c58 | len=0x000000a4 | crc=0xfe426c8f | flg=0x00000000 FILL | adr=0x00003cfc | len=0x00000004 | ptn=0x00000000 JUMP | adr=0x000000c0 | arg=0x00000000 | flg=0x00000000
**** Build Finished **** Появилось два предупреждения об не используемых функциях Description Resource Path Location Type Unused static function 'time_to_tick' Timer.c /MovGen/MovGen/src line 61 Code Analysis Problem Unused static function 'us_to_tick' Timer.c /MovGen/MovGen/src line 67 Code Analysis Problem Если кто понимает как это работает объясните пожалуйста. Где то должна быть точка входа для маин, или как то переход на адресс на какой то с которого начнется выолнение кода?
|
|
|
|
|
Dec 21 2013, 18:42
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(sergey sva @ Dec 21 2013, 15:12)  Помогите разобраться как работает, любые мысли. Проделал так: в линуксе собрал ubot из исходников именно для платы iMX233-OLinuXino-MAXI без ошибок все ок. ... Если кто понимает как это работает объясните пожалуйста. Где то должна быть точка входа для маин, или как то переход на адресс на какой то с которого начнется выолнение кода? SPL по моим представлениям не используется для imx23 / 28. SPL дублирует функциональность imx bootlets. По моему это связано с какими-то лицензионными заморочками. Я бы взял за основу linux_ivt.bd и вместо linux_prep вставил свою программу. HAB Loader обрабатывает программы по порядку как это описано в .bd файле: сначала выполняется power_prep - инициализация источников питания, после чего управление передается HAB, затем HAB выполняет boot_prep - инициализация SDRAM, после чего выполняется linux_prep. Вот вместо linux_prep вам и нужно вставить вашу программу.
|
|
|
|
|
Dec 21 2013, 20:29
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(_3m @ Dec 21 2013, 22:42)  SPL по моим представлениям не используется для imx23 / 28. SPL дублирует функциональность imx bootlets. По моему это связано с какими-то лицензионными заморочками. SPL для процессоров i.mx23/28/53/6x в майнстримном u-boot исключительно дань единообразию этого убута - не нужна для них никакая релокация внешним кодом, это все выполняет bootrom Цитата HAB Loader обрабатывает программы по порядку как это описано в .bd файле в i.mx233 нет HAB, в i.mx28 есть Цитата Вот вместо linux_prep вам и нужно вставить вашу программу. и чем это отличается от того как сделано в uboot.db ? ТС - вы пока оставьте в покое майнстримный u-boot, все что вам надо я уже описал - imx-bootlets от своей платы (если там DDR не отличается от референса EVK то не обязательно от своей платы) и elftosb, возьмите утилиту readelf (думаю должна быть под Windows) - и исследуйте свои прошивки в формате ELF, посмотрите какие ключи есть у утилиты elftosb, там можно получить дополнительную и отладочную информацию при создании образа, посмотрите ./elftosb2 --help или как он там под windows называется. Как же вы беспомощны без окон и мышей
Сообщение отредактировал sasamy - Dec 21 2013, 20:44
|
|
|
|
|
Dec 21 2013, 22:17
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(sergey sva @ Dec 22 2013, 01:48)  Немного понятно сейчас посмотрю. Еще вопросик -bootlets выполняет первичную инициализацию, а где происходит настройка усб ,потом наверно нужно проинициализировать lan9512. Думаю гдето в ядре? Может вообще зря хочу запустить все без линукса, причина одна мне нужны прерывания с частой 1мкс. У вас сплошные взаимоисключения - я лично не понимаю зачем вы выбрали i.mx23: нужна сеть а встроенного emac нет и выбираете изначально тухлый вариант с usb, собирались уместить все в IRAM (судя по всему код небольшой) - зачем-то взяли процессор с внешней памятью и MMU, нужен реалтайм который раком поставит любую GPOS и раздумываете насчет Linux. Это процессор для нетребовательных портативных мультимедийных приложений (встроенная система питания с драйвером заряда Li-Ion, встроенный пиксельный процессор и контроллер LCD, встроенный аудикодек) - вам нужно как раз то чего там нет, а то что там есть судя по всему не нужно совсем.
Сообщение отредактировал sasamy - Dec 21 2013, 22:49
|
|
|
|
|
Dec 22 2013, 19:29
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Возник такой вопрос скрипты одинаковые и для power_prep и для boot_prep Код OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } } Если к примеру добавлю файл с одной функцией и тоже проленкую с таким же скриптом, не пойму как запуститься на выполнение именно эта функция ? Понял там есть файл на ассемблере, entry он передает управление.
|
|
|
|
|
Feb 12 2014, 19:48
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
конечно, почитайте про файловые системы. В любой таблице есть разметка, на число секторов, размер кластеров и так далее... Копирую все данные, вы скопировали и эту разметку, потому и получилось 2.
Правда, там есть тонкость. Если у вас число кластеров в максимум, и надо менять их размер, то у вас все данные уедут. А если только число кластеров, то увеличите и дальше понеслось.
|
|
|
|
|
Feb 20 2014, 17:47
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Попробовал через память тоже все смещено так же. Код gpio_map(); gpio_output(0,4); while(1) { GPIO_WRITE_PIN(4,1); sleep(1); GPIO_WRITE_PIN(4,0); sleep(1); } Вместо PIN4 вывод на PIN13/LCD_D12. Не знаю что уже смотреть. или Код gpio_map(); gpio_output(1,32); while(1) { GPIO_WRITE_PIN(32,1); sleep(1); GPIO_WRITE_PIN(32,0); sleep(1); } Этот код выводит на PIN1/LCD_D00. Неправильный доступ и через прямой доступ и через sysfs. У меня уже нет ума где смотреть Разъем
|
|
|
|
|
Feb 22 2014, 10:16
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Разобрался после долгих экспирементов, gpio нумеруются 0 gpio -> это банк 0 пин 0; 32 gpio -> это банк 1 пин 0 и тд. Если ядро поддерживает gpio ио к ним можно и лучше обращаться через sysfs. Набросал немного кода, работает может кому сгодится. h Код #define SIZENAM 255 enum pinstatus {PIN_OFF,PIN_ON}; enum pindirection{PIN_IN,PIN_OUT}; int gpioexp(int pin_num,pindirection pd,pinstatus st); int gpioini(); int gpioset(int pin_num,pinstatus ps); pinstatus gpioget(int pin_num); cpp CODE #include <stdio.h> /* For printf() */ #include <string.h> /* For strerror() */ #include <unistd.h> /* For read(), close() */ #include <fcntl.h> /* For open() */ #include <errno.h> /* For errno */ #include <sys/poll.h> /* For poll() */ #include <time.h> #include <stdlib.h> #include "gpio.h"
/*-------------------------------------------------------------------------------------------------------*/ int gpioexp(int pin_num,pindirection pd,pinstatus st){ FILE * fp = NULL; char gpio_file_name[SIZENAM]; if ((fp = fopen("/sys/class/gpio/export", "ab")) != NULL) { rewind(fp); fprintf(fp,"%d",pin_num); fclose(fp); }else{ printf("Cannot open GPIO value for %s\n","/sys/class/gpio/export"); return -1; } memset(gpio_file_name,0,SIZENAM); sprintf(gpio_file_name,"/sys/class/gpio/gpio%d/direction",pin_num); if ((fp = fopen(gpio_file_name, "rb+")) != NULL) { rewind(fp); switch(pd){ case PIN_IN:{ fprintf(fp,"in"); break; }//case case PIN_OUT:{ fprintf(fp,"out"); break; }//case default:break; }//switch fclose(fp); if(pd!= PIN_IN){ memset(gpio_file_name,0,SIZENAM); sprintf(gpio_file_name,"/sys/class/gpio/gpio%d/value",pin_num); if ((fp = fopen(gpio_file_name, "rb+")) != NULL) { switch(st){ case PIN_ON:{ fprintf(fp,"1"); break; }//case case PIN_OFF:{ fprintf(fp,"0"); break; }//case default:break; }//switch fclose(fp); } } } return 0; } /*-------------------------------------------------------------------------------------------------------*/ int gpioini(){ /* pin out */ gpioexp(32,PIN_OUT,PIN_OFF); gpioexp(39,PIN_OUT,PIN_OFF); /* pin in */ gpioexp(23,PIN_IN,PIN_OFF);
return 0; } /*-------------------------------------------------------------------------------------------------------*/ int gpioset(int pin_num,pinstatus ps){ FILE * fp = NULL; char gpio_file_name[SIZENAM]; memset(gpio_file_name,0,SIZENAM); sprintf(gpio_file_name,"/sys/class/gpio/gpio%d/value",pin_num); if ((fp = fopen(gpio_file_name, "rb+")) != NULL) { switch(ps){ case PIN_ON:{ fprintf(fp,"1"); break; }//case case PIN_OFF:{ fprintf(fp,"0"); break; }//case default:break; }//switch fclose(fp); } return 0; } /*-------------------------------------------------------------------------------------------------------*/ pinstatus gpioget(int pin_num){ FILE * fp = NULL; char gpio_file_name[SIZENAM]; long lSize; char * buffer; size_t result; int temm =0; pinstatus ret = PIN_OFF; memset(gpio_file_name,0,SIZENAM); sprintf(gpio_file_name,"/sys/class/gpio/gpio%d/value",pin_num); if ((fp = fopen(gpio_file_name, "rb+")) != NULL) { fseek (fp , 0 , SEEK_END); lSize = ftell (fp); rewind (fp);
buffer = (char*) malloc (sizeof(char)*lSize); if (buffer == NULL) { printf("Memory error"); }else{
result = fread (buffer,1,lSize,fp); temm = atoi(buffer); switch(temm){ case 0:{ ret = PIN_OFF;; break; }//case case 1:{ ret = PIN_ON; break; }//case default:break; }//switch
} free (buffer); fclose(fp); } return ret; } /*-------------------------------------------------------------------------------------------------------*/ Есть еще одна проблема, после перезагрузки часы слетают, даже если есть батарея. Может у кого была похожая проблема?
Сообщение отредактировал IgorKossak - Feb 22 2014, 22:59
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Mar 1 2014, 18:41
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
12 битное АЦП дает 4096 значений, на весь свой диапазон работы обычно от 0 до 2 Vref, ну или -VRef до +Vref. дальше выбираете сигнал какой хотите мерить подбираете рефернс и получаете разрешение. С тем что у вас сейчас мы получаем на 3.3 вольта диапазон кодов 3500-7 = 3493. и того у вас разрешение АЦП порядка 1 мВольт на код. Усредняя значения и ставя хорошие буферы на входе можно получить точность в одной температуре +- 1 - 2 кода, то есть +- 2 мВольта. общая дельта 4 мВольта от вашего сигнала 3.3 вольта - это примерно 0.1% приведенной погрешности Дальше надо понять уход в температуре, и прочее, это надо читать в даташите на АЦП и опорник, какую погрешность оно дает на градус, умножаете на температурный диапазон и плюсуете, думаю для медленно меняющихся сигналов в ваших условиях вы получите где то 0.5% на приведенной погрешности. Это что касается ацп, дальше у вас будет мультиплексор, который наверное тоже что-то внесет, или нет, я в них не особо понимаю  ... Вот и оценивайте хватает вам этого или нет
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|