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

ALEKS1102X

Members
  • Постов

    11
  • Зарегистрирован

  • Посещение

Весь контент ALEKS1102X

  1. Да надо мне ваша помощь как собаке 40 ног... Ответил так что бы не грубить как Вы мне. Вы что думаете я не знаю приблизительную работу этого сраненького ЮСБ ? Да все они : Усарт + 485, ЮСБ, заброшенный французами ВАН, и после подхваченный другими и переименованный в КАН - всё это вид одного и того же заднего места, только с разных ракурсов. Все они имеют дифференциальную шину, но не имеют чёткой синхронизации, из-за чего ошибки сыплют пачками. Усарт частично спасают от рассинхронизации стартовые и стоповые биты, юсб и кан после определённого количества одинаковых бит передают бит другой полярности (что-то наподобие, давно уже читал), чтобы не потеряться в поносе информации, и т.д. А остальное VID (идентификатор производителя) - это передавай любое, PID - насколько помню - это предназначение устройства (программатор, веб камера, и т.д), и т.п. И в конце некой передаваемой пачки будет сыпать кучу CRC, а половина софта призвана решить проблемы железа из-за рассинхронизации - с какого места возобновить передачу, и т.п.. У кан равносильные устр-ва со всех сторон (в отличие от юсб), приоритет передачи информации, и т.д. И сравнительно большие расстояния передачи информации - а в конце та же CRC, вычисление ошибок, повторные передачи, и всё остальное что из этого вытекает. А на уровне железа они практически одинаковые... Если Вы имели ввиду что это совсем не похоже на и2с, то да - нужно было Вам спарку усарт+485 в пример привести. Только и2с в десятки раз лучше - я на софтовом и2с проверяю просадку обеих шин, и ошибки при передаче старт-стопов, а в результате в устр-во встраиваешь проверку на ошибки, через неделю проверяешь регистр на наличие битов ошибок - а он пуст, хотя шина общается к примеру с DS1307 2 раза в секунду. А если на выход шины SCL повесить парочку доп транзисторов и подтянуть через 120 Ом к плюсу, и похожее сделать по шине данных (сделать что-то наподобие усилителя сигналов), то можно устройства на пару десятков метров друг от друга разносить, чего не сделаешь с юсб. Тоже можно сказать и про спи - из-за наличия шины синхронизации тоже неглючный. А Вы тут сразу на дыбы... Ну разобрались с юсб - молодец, купите себе медальку с закруткой на спине. Когда мне понадобится этот юсб я тоже разберусь...
  2. ОК! Если понадобится ЮСБ, и если будет что-то непонятно, то обращусь к Вам. Хотя... пока за помощью ни к кому не обращался...
  3. Ну про Fat32 и USB если честно - то первое что пришло в голову это флеш карточки (USB), да и то - так чисто символически. А насчёт написать - так кто-то ж написал, перевёл в СИ из низкоуровневого... Тут вопрос в другом - когда ты просто любитель , то информации в интернете - куча, но один понос. И из этого поноса - полезной информации максимум 1%. Если проще - то проще будет проанализировать передачу TTL-USB чем найти аналогичную действительно полезную информацию... А конкретно если мне понадобится тот USB - то проанализирую шину, почитаю инфу, и и выкину 90% из того Си кода, который сейчас универсальный и типа неприкасаемый. А как окажется - в 5 раз сложнее ИИС.
  4. 1. Да не, я особо и не возмущаюсь, с чего возмущаться то ? С того что переменная заявленная вне рабочей вункции "main" как глобальная - unsigned long dcab = 1234 (это пример); Дальше я её инкрементирую в любом в любой функции внутри "маин", и независимо от функции, в которой я использую эту переменную - на выходе я должен получить...: dcab++; // -> incf dcab,f ; btfsc STATUS,Z ; incf dcab+1,f ; btsfc STATUS,Z ; incf dcab+2,f ; и т.д. или же: dcab = dcab+ 1 ; // -> movlw 1 ; addwf dcab,f ; btfsc STATUS,C ; addwf dcab+1,f ; btfsc STATUS,C ; addwf dcab+2,f ; и т.д. И независимо от прерываний, или переходов из одного банка ОЗУ в другой (для Пик 18 компилирует корректно) - мне не нужно глобальную переменную зачем-то сохранять в регистрах 0х70 ... 0х7F (которые используются во всех банках ОЗУ) - я не использую эту переменную внутри какой-то функции, ну и уж ни как не видно по размеру кода - что я могу перескочить на другую страницу программной памяти (зачем промежуточные регистры?) - в любом случае на выходе я должен получить результат: dcab = 1235 ? Или не ? 4. А я и не говорил про переход через Зеро - через Зеро конечно легко... Не знаю - сколько лет назад - мож 60-70 когда фирма Микрочип откололась от какой-то релейной компании (если правильно помню) и стала независимой компанией, выпускающей чисто микроконтроллеры. И вот тогда один из её программистов решил, что переполнение некоего многобайтного регистра нужно делать через Зеро. А мне как-то привычней переполнение через Карри, а сравнение с нулём через Зеро... В любом случае - в данной ситуации переполнение мл. регистра вызывает установку бита Карри, а последующее обнуление этого регистра вызывает установку Зеро - по сути установятся два бита одновременно. Но я не имел ввиду код с использованием Зеро...
  5. 1. Я такой-же доступ предоставил и хусымы... не ? 2. Ашибко я исправил в сообщении, архив лень было потрошить ... не ? 3. Если хусыме подсовываешь команду "x++", то он вообще ересь каку-та несёт, я сильно не разбирался, но Вы как знающий поправьте... 3.1 Разницу между х++ и ++х я знаю... 4. Напишите мне на СИ так чтобы мне чётко нарисовало то что я хочу получить на АСМ для Микроса и Хусейна. А не нарисуете - потому как не Вы написатель этих макросов...
  6. Добрый день конфе! извините что долго не отвечал, сейчас просто решается вопрос с Али, где вроде нужно доплатить 4,9 $, и мне отправят другую партию из 10 PIC18F46K22... Ну что - я рискну, тем более что старыё (перемаркированные PIC18F46K20) я так понял - останутся мне в нагрузку. А по поводу того что писал раньше - гляньте архивчик, набросал по быструхе - да, если переводить число 9999, то при частоте 8 Мипс для PIC18 это займёт 57 мкс., Но ведь это максимальное значение, и на индикатор если оно и будет выводиться - то в очень крайних и редких случаях. Давайте возьмём среднее значение - 5.000. Вот такое значение будет конвертироваться за 23 мкс. А теперь давайте глянем там-же, в архиве) как это будет делаться с помощью функции "Dec2Bcd16(X)" - в общем, если запускать в Микро СИ, то мой код выполняется за 188 мкс (я там не правил конфиг, поэтому работа идёт с 2 Мипс), а функция Dec2Bcd16(X) выполняется за 77х (780) мкс, т.е. по сути в 4,5 раза больше времени. Причём я сравниваю с макс. результатом: если в своём коде я буду перекодировать число 155, к примеру, то оно действительно займёт пару мкс, а в функции BCD оно так и останется - 780 мкс. Если Вы это имели ввиду ( 2мкс и 23 мкс), то да - я чууууть Вас обманул. Теперь по поводу перевода АСм кода из PIC18 в PIC16 - там всего-лишь одна команда не воспринимается корректно - это "SUBWFB" - вычитание с учётом бита Карри, все остальные: BC, BNC, BZ, BRA, и т.д. перевариваются нормально - что я собственно и мел ввиду, мож некорректно написал об этом. Ну что-ж - может и мне пора обновить свои макросы (функции так сказать) - мож у меня там тоже много лишних команд ранее было написано, обновлю при случае... Я в архиве сделал две папки - для Пик 16 и 18 - там увидите один и тот-же код для 16 и 18 серии, а ещё всё-таки проверил по новому - как простую функцию, инкремента четырёхбайтного числа производит Микро Си и ХС 8... Да..., те кто писали эти компиляторы однозначно в разных дурках нычкуются - вместо просящегося кода: MOVLW 1 ; ADDWF _dcab,F ; BTFSC STATUS,C ; ADDWF _dcab+1,F ; BTFSC STATUS,C ; ADDWF _dcab+2,F ; BTFSC STATUS,C ; ADDWF _dcab+3,F ; там.... Да короче сами увидите, чего повторно писать буду.!!! Ну и последнее: Я ни в коей мере не хочу обидеть никого, и уж тем более развести новых халивар. Я просто делюсь мыслями... Вот к примеру - все говорят - что на Си проще писать - да одинаково писать - если не знаешь сам камень - то хоть на суахили пиши - ты его даже не проинициализируешь. И такая-же картина если переводить код с одного камня на другой - пока не будет инициализации камня, остальной код можно засунуть сзади и поглубже. Но что меня привлекает в АСМ - это то что ты сам пишешь что знаешь, и что хочешь получить на выхлопе, а не пользуешься чужими макросами. Вот сейчас многие чего-то там пишут под USB - а чего пишут по сути сами не знают! И могу гарантировать что 90 % этих написателей даже не знают что там и как в таблице Fat32, я уже не говорю про NTFSC... Ну и правильно - а зачем - будет получиться глюконат - на китаяйцев спишем - нам что главное - запустилось, вроде работает - ну и пошли все в (|) - ну короче туда... А потом: Ема-ё писал вроде простую вещь - всего один АЦП вход определяющий протечку (памперс), ну добавил ещё звоночек играющий мелодию _ А АРМ32 НЕ ХВАТАЕТ - ЧЕГО ТАМ ПРОИЗВОДИТЕЛИ Д*ОЧАТ - НУЖНО БЫ БЫЛО УЖЕ АРМ 9932 ВЫПУСТИТЬ... СИ++ АСМ--.rar
  7. Извините ещё раз, вчера жена всё торопила за покупками поэтому и в СИ и в АСМ набросал кучу ошибок: Конечно для BCD нужно использовать не одноразовую функцию "if", а "while" А здесь "if (C = 1)" должно быть "if (C == 1)", ну и наконец - если дизасемблировать строку выше, то там естественно будет: MOVLW 1 ; ADDWF XX,W ; и так далее... Потому что если делать через "INCF" то бит "С" не установится, и далее смысл команды теряется...
  8. ну и раз уже коснулось динамической индикации - я объявляю ножки вот таким образом.. #Define CATODE4 PORTB_DB,4 ; выходы катодов индикатора #Define CATODE1 PORTB_DB,5 ; ---------- // ----------- #Define CATODE2 PORTB_DB,6 ; ---------- // ----------- #Define CATODE3 PORTB_DB,7 ; ---------- // ----------- #Define INDIKATOR_OUT PORTC ; 8 выходов анодов индикатора Это я взял из программы, HEX которой выкладывал на общее потребление (там по катодам ставил доп. транзисторы), а если делаю для себя - то у меня и ЧМЗ нормально проходит - главное знать принцип этого ЧМЗ... ;-------------------------------------------------------------------------- Когда в другом устр-ве захотите изменить пины анодов (катодов) индикатора - то просто ниже подкорректируете биты: ANOD_A EQU B'00000100' ; 2 ANOD_B EQU B'00001000' ; 3 ANOD_C EQU B'00010000' ; 4 ANOD_D EQU B'01000000' ; 6 ANOD_E EQU B'10000000' ; 7 ANOD_F EQU B'00000010' ; 1 ANOD_G EQU B'00000001' ; 0 ANOD_H EQU B'00100000' ; 5 TOCHKA EQU 5 ; MINUS EQU B'00000001' ; 0 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #Define _DEFIS ANOD_G #Define _0 ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F #Define _0. ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_H #Define _1 ANOD_B + ANOD_C #Define _1. ANOD_B + ANOD_C + ANOD_H #Define _2 ANOD_A + ANOD_B + ANOD_G + ANOD_E + ANOD_D #Define _2. ANOD_A + ANOD_B + ANOD_G + ANOD_E + ANOD_D + ANOD_H #Define _3 ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_G #Define _3. ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_G + ANOD_H #Define _4 ANOD_F + ANOD_G + ANOD_B + ANOD_C #Define _4. ANOD_F + ANOD_G + ANOD_B + ANOD_C + ANOD_H #Define _5 ANOD_A + ANOD_F + ANOD_G + ANOD_C + ANOD_D #Define _5. ANOD_A + ANOD_F + ANOD_G + ANOD_C + ANOD_D + ANOD_H #Define _6 ANOD_A + ANOD_F + ANOD_G + ANOD_C + ANOD_D + ANOD_E #Define _6. ANOD_A + ANOD_F + ANOD_G + ANOD_C + ANOD_D + ANOD_E + ANOD_H #Define _7 ANOD_A + ANOD_B + ANOD_C #Define _7. ANOD_A + ANOD_B + ANOD_C + ANOD_H #Define _8 ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_G #Define _8. ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _9 ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_F + ANOD_G #Define _9. ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_F + ANOD_G + ANOD_H #Define _A ANOD_A + ANOD_B + ANOD_C + ANOD_E + ANOD_F + ANOD_G #Define _A. ANOD_A + ANOD_B + ANOD_C + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _a ANOD_C + ANOD_E + ANOD_G #Define _b ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_G #Define _b. ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _C ANOD_A + ANOD_D + ANOD_E + ANOD_F #Define _C. ANOD_A + ANOD_D + ANOD_E + ANOD_F + ANOD_H #Define _c ANOD_D + ANOD_E + ANOD_G #Define _c. ANOD_D + ANOD_E + ANOD_G + ANOD_H #Define _d ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_G #Define _d. ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_G + ANOD_H #Define _E ANOD_A + ANOD_D + ANOD_E + ANOD_F + ANOD_G #Define _E. ANOD_A + ANOD_D + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _F ANOD_A + ANOD_E + ANOD_F + ANOD_G #Define _F. ANOD_A + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _G ANOD_A + ANOD_C + ANOD_D + ANOD_E + ANOD_F #Define _G. ANOD_A + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_H #Define _H ANOD_B + ANOD_C + ANOD_E + ANOD_F + ANOD_G #Define _H. ANOD_B + ANOD_C + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _h ANOD_C + ANOD_E + ANOD_F + ANOD_G #Define _h. ANOD_C + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _I ANOD_B + ANOD_C #Define _I. ANOD_B + ANOD_C + ANOD_H #Define _i ANOD_C #Define _i. ANOD_C + ANOD_H #Define _L ANOD_D + ANOD_E + ANOD_F #Define _L. ANOD_D + ANOD_E + ANOD_F + ANOD_H #Define _l ANOD_D + ANOD_E #Define _l. ANOD_D + ANOD_E + ANOD_H #Define _n ANOD_C + ANOD_E + ANOD_G #Define _n. ANOD_C + ANOD_E + ANOD_G + ANOD_H #Define _O ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F #Define _O. ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_H #Define _o ANOD_C + ANOD_D + ANOD_E + ANOD_G #Define _o. ANOD_C + ANOD_D + ANOD_E + ANOD_G + ANOD_H #Define _P ANOD_A + ANOD_B + ANOD_E + ANOD_F + ANOD_G #Define _P. ANOD_A + ANOD_B + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _r ANOD_E + ANOD_G #Define _r. ANOD_E + ANOD_G + ANOD_H #Define _S ANOD_A + ANOD_C + ANOD_D + ANOD_F + ANOD_G #Define _S. ANOD_A + ANOD_C + ANOD_D + ANOD_F + ANOD_G + ANOD_H #Define _t ANOD_D + ANOD_E + ANOD_F + ANOD_G #Define _t. ANOD_D + ANOD_E + ANOD_F + ANOD_G + ANOD_H #Define _U ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F #Define _U. ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_H #Define _u ANOD_C + ANOD_D + ANOD_E #Define _u. ANOD_C + ANOD_D + ANOD_E + ANOD_H ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Непосредственно таблица вывода информации на семисегментник... ANDLW B'00001111' ; маскировка 4 старших бит ADDWF PCL,F ; переход ;-------------------------------------------------------------------------- RETLW ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F ; 0 для общего катода... RETLW ANOD_B + ANOD_C ; 1 RETLW ANOD_A + ANOD_B + ANOD_G + ANOD_E + ANOD_D ; 2 RETLW ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_G ; 3 RETLW ANOD_F + ANOD_G + ANOD_B + ANOD_C ; 4 RETLW ANOD_A + ANOD_F + ANOD_G + ANOD_C + ANOD_D ; 5 RETLW ANOD_A + ANOD_F + ANOD_G + ANOD_C + ANOD_D + ANOD_E ; 6 RETLW ANOD_A + ANOD_B + ANOD_C ; 7 RETLW ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_E + ANOD_F + ANOD_G ; 8 RETLW ANOD_A + ANOD_B + ANOD_C + ANOD_D + ANOD_F + ANOD_G ; 9 RETLW 0 RETLW 0 RETLW 0 RETLW 0 RETLW 0 RETLW 0 Когда меня просят написать что-то с динамической индикацией - для меня это вообще сказка - я трёх зайцев одним низкоприоритетным прерыванием убиваю... Первый заис: я делаю 500 прерываний в секунду чтобы на каждый индикатор приходилось 125 высвечиваний так сказать... Тут человек сказал что делает индикацию через сегмент - вот это мысль, я такое не пробовал,. для меня может и поможет. Потому что я делаю динамику справа на лево, и боковым зрением (в автомобиле при движении) вижу смену элементов - моргание, или дребезг символов. А если делаю 400 (100 на каждый символ - так они вообще дрожат как у старых телевизоров). Частоту выше 500 делать смысла нету - не успевают полноценно зажечься светодиоды индикатора - в тёмной комнате это не важно, а на солнце не будет видно чего там на индикатор выводится. Второй заис: приходшь в прерывание - и опрашиваешь ножку включенного на данный момент катода и через кнопку подключенного к данной ножке входа проца, который сам обозначил как вход клавиатуры. После четырёх прерываний - имеешь полный список так сказать нажатых кнопок - я обычно для простых устройств использую четыре кнопки "ESC, OK, Down, Up" - при использовании такой системы достаточно одного входа для клавы. Сбоев никогда не было. Ну и наконец -третий заис: в любом устройстве нужно подсчитывать некие тайминги - доли секунд, секунды, минуты, часы, и т.д. - если в этом низкоприоритетном прерывании это делать - то всё ГУД! Главное - рассчитать работу таймера чтобы в него не вносить коррекцию - а чтобы он сам считал и переполнялся - пусть даже это будет не 500 прерываний на индикацию, а к примеру 508... Вы не успеете на низкоприоритетное прерывание - но флаг прерывания по таймеру установится - позже придёте на текущее прерывание - раньше придёте на следующее - время будет тикать всё равно как нужно... Хотя я лично предпочитаю чтобы тикала какая-нить DS1307, а я просто буду 2 раза в секунду её просить чтобы она мне сказала точное время... Извините, прошу прощения у форумчан, забыл правила - больше этого не повториться. Прошу прощения у всех кто читает этот форум.
  9. Дело в том что я уже заказывал в Китае, и всё приходило нормальное, правда у других продавцов. Да и кто будет подделывать оригинальные процы - там даже ревизия совпадает для PIC18f46K20 "0D" по эррате как раз 8 месяц 16 года, и на проце промаркировано 22 неделя 16 года, такое ощущение что просто последнюю букву подправили. Но тогда надпись не такая... А продавец похоже и не знает что продаёт, да и 5 баллов я её уже поставил. А возврат сейчас платный - что вернуть назад чтобы деньги вернули, что оставить себе - одно на одно выйдет... А по корпусу - что снизу, что сверху, кроме логотипа всё вроде в норме, и надпись лазерная... Первый раз с таким встречаюсь... А Пики делаются в Тайланде, снизу в кружочке маркировка есть...
  10. Добрый вечер форумчанам! Извините что может не в той теме пишу, просто даже не с кем мыслями поделиться. В общем заказал на Алиэкспресс десяток PIC18F46K22, сегодня пришли, нормально упакованы, всё смотрится ОК. Написал продавцу положительный отзыв, а потом чего-то дёрнуло меня проверить хоть одного контроллера, подключаю к Пиккиту3 и вижу что нужного мне нету, а определился как PIC18F46K20. Я и растворителем тёр, и под увеличилкой смотрел - всё чисто, нормальная надпись. Подпаиваю второго - та-же песня. Причём проц чем-то зашит, флеш залочена, а в EEPROM какой-то логотип из трёх букв, и дальше куча текста на английском языке. Пишу продавцу, а она такая: Да не может быть, мы вам отправили PIC18F46K22. Я ей отвечаю что надпись совпадает, но проц другой, просто надпись перемаркирована. В общем, она наверное обрадовалась что надпись в норме, и больше не отвечает... Потом посмотрел я на тех процах, которые у меня есть в наличии, и на этих которые пришли... Если внимательно присмотреться к логотипу Микрочип, то видно что оригинальная надпись как бы растянута в ширину, буква "М" широкая, а буквы "с" без скруглений на концах, а на тех процах, которые сегодня приехали надпись более сжата, и буква "с" скруглённая. Дополнительный отзыв я конечно отправлю с фотографиями, чтобы кто-нибудь не наступил на мои грабли, а вот самому чего делать - мне 3-ёх вольтовые как бы и не нужны, да и эррата там совсем не очень! А отправлять назад продавцу - так сейчас это платно, и не будет никакого смысла, проще тогда себе оставить. Кто что скажет - были у кого такие случаи ? Прикладываю фото, тот проц который из приехавшей партии справа снизу. Ещё раз извините что не в тему.
×
×
  • Создать...