Програмирование pic на СИ.

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

Сообщение Dismas »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]... а вот PIC32MX120F032B-I/ML, которые купил до СВО в том-же chipdip.by по доллару за штуку (больше 20-ти)
- уже использовал в поворотниках для авто (для линейки WS281х) - вот те работают :)[/uquote]
Я конечно дико извиняюсь, а в чём сакральный смысл применения 32-х разрядного процессора в реле поворотов ?
Спрашиваю так, с интереса.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4482590#p4482590"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482575#p4482575"]я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать[/uquote]
С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:

Код: Выделить всё

void CalcTemperature(void) {
    
uint16_t resADC;
uint8_t i;
uint8_t tempCurr;
int16_t tempFIR=0;
static uint8_t index=0;
    
    if(!flag.tempSensReady) return;
    flag.tempSensReady=0;
    resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
    tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);           
    arrayTemp[index]=tempCurr;
    index=(index+1)&0x7F;
    for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp[i];
    temperature=(int8_t)(tempFIR>>7);
    
    ADCON0bits.GO=1;
}
Спойлер

Код: Выделить всё

199:           void CalcTemperature(void) {
200:               
201:           uint16_t resADC;
202:           uint8_t i;
203:           uint8_t tempCurr;
204:           int16_t tempFIR=0;
5844  0E00     MOVLW 0x0
5846  0105     MOVLB 0x5
5848  6FD5     MOVWF CLCSELECT, BANKED
584A  0E00     MOVLW 0x0
584C  6FD4     MOVWF CLCDATA, BANKED
205:           static uint8_t index=0;
206:               
207:               if(!flag.tempSensReady) return;
584E  BA19     BTFSC 0x19, 5, ACCESS
5850  EF2C     GOTO 0x5858
5852  F02C     NOP
5854  EF2E     GOTO 0x585C
5856  F02C     NOP
5858  EF30     GOTO 0x5860
585A  F02C     NOP
585C  EFC4     GOTO 0x5988
585E  F02C     NOP
208:               flag.tempSensReady=0;
5860  9A19     BCF 0x19, 5, ACCESS
209:               resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
5862  0103     MOVLB 0x3
5864  51EB     MOVF DMAnDCNTH, W, BANKED
5866  6E4B     MOVWF HLVDCON1, ACCESS
5868  51EA     MOVF DMAnDCNT, W, BANKED
586A  0105     MOVLB 0x5
586C  6FD1     MOVWF 0xD1, BANKED
586E  C54B     MOVFF 0x54B, 0x5D2
5870  F5D2     NOP
210:               tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);           
5872  0E2E     MOVLW 0x2E
5874  6EF6     MOVWF 0xFF6, ACCESS
5876  0E00     MOVLW 0x0
5878  6EF7     MOVWF 0xFF7, ACCESS
587A  0E2C     MOVLW 0x2C
587C  6EF8     MOVWF 0xFF8, ACCESS
587E  0009     TBLRD*+
5882  F3D4     NOP
5884  F54B     NOP
5886  0009     TBLRD*+
588A  F3D4     NOP
588C  F54C     NOP
588E  0E00     MOVLW 0x0
5890  6E43     MOVWF NVMADR, ACCESS
5892  0E01     MOVLW 0x1
5894  6E44     MOVWF NVMADRH, ACCESS
5896  0E00     MOVLW 0x0
5898  6E45     MOVWF NVMADRU, ACCESS
589A  0E2A     MOVLW 0x2A
589C  6EF6     MOVWF 0xFF6, ACCESS
589E  0E00     MOVLW 0x0
58A0  6EF7     MOVWF 0xFF7, ACCESS
58A2  0E2C     MOVLW 0x2C
58A4  6EF8     MOVWF 0xFF8, ACCESS
58A6  0009     TBLRD*+
58AA  F3D4     NOP
58AC  F54D     NOP
58AE  0009     TBLRD*+
58B2  F3D4     NOP
58B4  F54E     NOP
58B6  C54D     MOVFF 0x54D, multiplicand
58B8  F53A     NOP
58BA  C54E     MOVFF 0x54E, counter
58BC  F53B     NOP
58BE  6A3C     CLRF 0x3C, ACCESS
58C0  BE3B     BTFSC 0x3B, 7, ACCESS
58C2  063C     DECF 0x3C, F, ACCESS
58C4  C5D1     MOVFF resADC, dividend
58C6  F537     NOP
58C8  C5D2     MOVFF 0x5D2, key
58CA  F538     NOP
58CC  6A39     CLRF CLKRCON, ACCESS
58CE  EC08     CALL 0x6810, 0
58D0  F034     NOP
58D2  C537     MOVFF dividend, dividend
58D4  F540     NOP
58D6  C538     MOVFF key, 0x541
58D8  F541     NOP
58DA  C539     MOVFF divisor, 0x542
58DC  F542     NOP
58DE  EC3A     CALL 0x5C74, 0
58E0  F02E     NOP
58E2  504B     MOVF HLVDCON1, W, ACCESS
58E4  2440     ADDWF NVMCON0, W, ACCESS
58E6  0105     MOVLB 0x5
58E8  6FCE     MOVWF 0xCE, BANKED
58EA  504C     MOVF ZCDCON, W, ACCESS
58EC  2041     ADDWFC NVMCON1, W, ACCESS
58EE  6FCF     MOVWF 0xCF, BANKED
58F0  0E00     MOVLW 0x0
58F2  BE4C     BTFSC ZCDCON, 7, ACCESS
58F4  0EFF     MOVLW 0xFF
58F6  2042     ADDWFC NVMLOCK, W, ACCESS
58F8  6FD0     MOVWF 0xD0, BANKED
58FA  C5CE     MOVFF __pcstackBANK5, dividend
58FC  F540     NOP
58FE  C5CF     MOVFF 0x5CF, 0x541
5900  F541     NOP
5902  C5D0     MOVFF tempFreqMode, 0x542
5904  F542     NOP
5906  0E0A     MOVLW 0xA
5908  6E43     MOVWF NVMADR, ACCESS
590A  0E00     MOVLW 0x0
590C  6E44     MOVWF NVMADRH, ACCESS
590E  0E00     MOVLW 0x0
5910  6E45     MOVWF NVMADRU, ACCESS
5912  EC3A     CALL 0x5C74, 0
5914  F02E     NOP
5916  5040     MOVF NVMCON0, W, ACCESS
5918  0FF8     ADDLW 0xF8
591A  0105     MOVLB 0x5
591C  6FD3     MOVWF 0xD3, BANKED
213:               arrayTemp[index]=tempCurr;
591E  0E00     MOVLW 0x0
5920  2412     ADDWF 0x12, W, ACCESS
5922  6ED9     MOVWF 0xFD9, ACCESS
5924  6ADA     CLRF 0xFDA, ACCESS
5926  0E08     MOVLW 0x8
5928  22DA     ADDWFC 0xFDA, F, ACCESS
592C  F74C     NOP
592E  F4DF     NOP
214:               index=(index+1)&0x7F;
5930  2812     INCF 0x12, W, ACCESS
5932  0B7F     ANDLW 0x7F
5934  6E12     MOVWF 0x12, ACCESS
215:               for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp[i];
5936  0E00     MOVLW 0x0
5938  6FD6     MOVWF CLCnCON, BANKED
593A  0E00     MOVLW 0x0
593C  25D6     ADDWF CLCnCON, W, BANKED
593E  6ED9     MOVWF 0xFD9, ACCESS
5940  6ADA     CLRF 0xFDA, ACCESS
5942  0E08     MOVLW 0x8
5944  22DA     ADDWFC 0xFDA, F, ACCESS
5946  50DF     MOVF 0xFDF, W, ACCESS
5948  6E4B     MOVWF HLVDCON1, ACCESS
594A  504B     MOVF HLVDCON1, W, ACCESS
594C  27D4     ADDWF CLCDATA, F, BANKED
594E  0E00     MOVLW 0x0
5950  BE4B     BTFSC HLVDCON1, 7, ACCESS
5952  0EFF     MOVLW 0xFF
5954  23D5     ADDWFC CLCSELECT, F, BANKED
5956  2BD6     INCF CLCnCON, F, BANKED
5958  0E7F     MOVLW 0x7F
595A  65D6     CPFSGT CLCnCON, BANKED
595C  EFB2     GOTO 0x5964
595E  F02C     NOP
5960  EFB4     GOTO 0x5968
5962  F02C     NOP
5964  EF9D     GOTO 0x593A
5966  F02C     NOP
216:               temperature=(int8_t)(tempFIR>>7);
5968  C5D4     MOVFF tempFIR, 0x54B
596A  F54B     NOP
596C  C5D5     MOVFF 0x5D5, 0x54C
596E  F54C     NOP
5970  0E07     MOVLW 0x7
5972  6E4D     MOVWF 0x4D, ACCESS
5974  344C     RLCF ZCDCON, W, ACCESS
5976  324C     RRCF ZCDCON, F, ACCESS
5978  324B     RRCF HLVDCON1, F, ACCESS
597A  2E4D     DECFSZ 0x4D, F, ACCESS
597C  EFBA     GOTO 0x5974
597E  F02C     NOP
5980  504B     MOVF HLVDCON1, W, ACCESS
5982  6E2A     MOVWF 0x2A, ACCESS
217:               
218:               ADCON0bits.GO=1;
5984  0103     MOVLB 0x3
5986  81F3     BSF DMAnSCNTH, 0, BANKED
219:           }
5988  0012     RETURN 0
[/uquote]

давай разберём твою левую функцию:

void CalcTemperature(void) {

uint16_t resADC;
uint8_t i;
uint8_t tempCurr;
int16_t tempFIR=0;
static uint8_t index=0;

if(!flag.tempSensReady) return; // ну тут понятно - некие флаги, которые ты назначил :)
flag.tempSensReady=0;

resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);

// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);

tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);

// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения" :)
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....

Ты хотя-бы приведи значения того говна, которое используешь :)

/*
arrayTemp[index]=tempCurr;
index=(index+1)&0x7F;
for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp;
temperature=(int8_t)(tempFIR>>7);

ADCON0bits.GO=1;
*/

т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение :) :) :)
и даже не проверить - прочитал ты АЦП или НЕТ????

А в чём смысл твоего ПОНОСА ? :) ?
}
Реклама
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="Martian",url="/forum/viewtopic.php?p=4485824#p4485824"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
:facepalm:
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....[/uquote]

Я так понимаю - у Вас есть более красивый код :)
А иначе - Вы бы тут не светились :)
дык покажите :)
А я посмотрю ...

Добавлено after 18 minutes 52 seconds:
Для тех, ктоне знает пик и его файл "C:\Program Files\Microchip\xc8\ и т.д. - там есть описание - что и за чем ....
А вот что там у тебя нерасшарено - это нужно смотреть :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]if(!flag.tempSensReady) return; // ну тут понятно - некие флаги, которые ты назначил :)
flag.tempSensReady=0;[/uquote]
Код рассчитан на людей, которые хотя бы чуть-чуть знают английский язык. :tea:
Ну и не совсем нубов в программировании. :wink:
Абисняю. АЦП работает с прерываниями. И в обработчике прерываний от АЦП взводится флаг готовности данных.
А представленная функция вызывается в главном цикле в порядке очередности. И первое что она делает, проверяет оный флаг. Если он не взведен, то немедленно выходит из функции.
Из кода очевидно, что есть глобально объявленная структура flag, у которой есть элемент tempSensReady. Имя этого элемента как бы намекает на то, что он отражает готовность данных температурного сенсора, который имеется в применяемом контроллере.
Бесплатный попутный совет. Не нужно писать комментарии там, где сам код может рассказать о себе достаточно для его понимания. Для этого код должен быть правильно написан, конечно...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
То, что ты не знаком с Си от слова совсем уже давно всем очевидно. Но разберем все таки твои глупости.
Предложенный тобою код:
resADC=(uint16_t)(ADRESL + ADRESH<<8);
дословно будет выполнять следующее. Содержимое восьмибитного регистра ADRESH будет сдвинуто влево на восемь бит и результат этого сдвига будет очевидно равен НУЛЮ. То есть ты присвоил 16-битной локальной resADC значение только восьми младших бит 12-разрядного АЦП. 4 старших разряда пошли лесом.
:music:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);

// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения" :)
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....

Ты хотя-бы приведи значения того говна, которое используешь :)[/uquote]
Ты просил привести не полный код, а фрагмент некоего кода с его дизасмом, чтобы что то там продемонстрировать. И для этого совершенно не требуется знать смысл приведенных арифметических выражений и значения используемых в них глобальных переменных. Хотя из названия этих неизвестных тебе переменных очевидно их назначение.
gainTempSens - это множитель к результату преобразования температурного сенсора.
offsetTempSens - это смещение результата преобразования температурного сенсора.
Обе этих переменных получают свои значения при инициализации МК посредством чтения из специальной нестираемой области флеша, куда производителем МК занесены калибровочные параметры температурного сенсора. Кстати, эти калибровочные параметры имеют созвучные применяемым переменным названия в даташите. Оба этих значения однобайтные для целочисленных вычислений.
Непонятая тобой формула так же приведена в даташите. Правда в традиционной алгебраической форме без учета разрядности применяемых величин. Но пользователь должен уметь программировать на Си, чтобы результат вычислений был достоверен.
Изображение
Совершенно очевидно, что произведение 16-битной переменной с 8-битной В ОБЩЕМ СЛУЧАЕ даст 24-бита результата. Если явно не привести один из сомножителей к 24 битам, то результатом будет переполнение.
Но у тебя очевидно отсутствуют даже начальные знания Си, поэтому ты продолжаешь нас смешить своими глупостями.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение
и даже не проверить - прочитал ты АЦП или НЕТ????[/uquote]
Вообще то ADRESH и ADRESL и есть регистры результата АЦП. Что мне надо проверять в функции, если я беру из них значения в самом начале?
:)))
ЗЫ. Дурачок, тебе не надоел твой позор? :wink: :tea:
И что ты там хотел сказать про ASM на основе моего дизасма? Или ты уже об этом забыл?
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

А что? Дурачок уже висит, соображать не позволяет :)
https://disk.yandex.ru/i/XGQ9jPhY1RVb2Q

PS: может я где-то пропустил твой АСМ, но если честно, то я его не видел :)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485864#p4485864"]может я где-то пропустил твой АСМ, но если честно, то я его не видел :)[/uquote]
"Мой ASM" в приведенном коде не требуется. Ты просил не "мой ASM", а дизасм моего Си кода, чтобы продемонстрировать преимущество ASM вставок против чистого Cи.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482575#p4482575"]я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать[/uquote]
Вот и демонстрируй. :music:
Что тебе не понравилось в работе компилятора в приведенном листинге дизасма? :tea:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485864#p4485864"]А что?[/uquote]
Смотрим внимательно твой код. :tea:

Код: Выделить всё

volatile uint16_t resADC = 555;

 movlw 0x2B
 movwf resADC
 movlw 0x2
 movwf 0x48
Из чего следует, что компилятор поместил resADC по адресам 0x47 и 0x48.
Далее следует:

Код: Выделить всё

resADC=(uint16_t)(ADRESL+ADRESH<<8);

 bsf STATUS, RP0
 movf ADRESH, W   ; читаем в W старший байт АЦП
 bcf STATUS, RP0
 addwf ADRESL, W   ; суммируем с W младший байт АЦП
 movwf 0x45   ; выгружаем сумму в адрес 0x45
 clrf 0x46    ;  очищаем содержимое по адресу 0x46
 rlf 0x46, F  ;  сдвигаем по кольцу влево на один бит это содержимое
 movwf 0x48   ; выгружаем результат в старший байт resADC
 clrf resADC  ; очищаем младший байт resADC
Более идиотский код даже трудно себе представить... Результат всегда равен НУЛЮ. :music:

ЗЫ. Как быстро и нативно загрузить в Си результат АЦП в пару регистров 16-битной переменной я знаю. Только в этом коде скорость такого рода вообще не нужна. Читается код - этого достаточно. :tea:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4485872#p4485872"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485864#p4485864"]может я где-то пропустил твой АСМ, но если честно, то я его не видел :)[/uquote]
"Мой ASM" в приведенном коде не требуется. Ты просил не "мой ASM", а дизасм моего Си кода, чтобы продемонстрировать преимущество ASM вставок против чистого Cи.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482575#p4482575"]я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать[/uquote]
Вот и демонстрируй. :music:
Что тебе не понравилось в работе компилятора в приведенном листинге дизасма? :tea:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485864#p4485864"]А что?[/uquote]
Смотрим внимательно твой код. :tea:

Код: Выделить всё

volatile uint16_t resADC = 555;

 movlw 0x2B
 movwf resADC
 movlw 0x2
 movwf 0x48
Из чего следует, что компилятор поместил resADC по адресам 0x47 и 0x48.
Далее следует:

Код: Выделить всё

resADC=(uint16_t)(ADRESL+ADRESH<<8);

 bsf STATUS, RP0
 movf ADRESH, W   ; читаем в W старший байт АЦП
 bcf STATUS, RP0
 addwf ADRESL, W   ; суммируем с W младший байт АЦП
 movwf 0x45   ; выгружаем сумму в адрес 0x45
 clrf 0x46    ;  очищаем содержимое по адресу 0x46
 rlf 0x46, F  ;  сдвигаем по кольцу влево на один бит это содержимое
 movwf 0x48   ; выгружаем результат в старший байт resADC
 clrf resADC  ; очищаем младший байт resADC
Более идиотский код даже трудно себе представить... Результат всегда равен НУЛЮ. :music:

ЗЫ. Как быстро и нативно загрузить в Си результат АЦП в пару регистров 16-битной переменной я знаю. Только в этом коде скорость такого рода вообще не нужна. Читается код - этого достаточно. :tea:[/uquote]


А ты не путай ПИСЮ с пальцем :)
Если хочешь результат в ХСхх, то нужно не просто значение (константу) ввести, а нужно - чтобы те файлы работали :)
Я могу перевести любой свой ХСхх в режим "1" - ДЕМО, 30 процентов моего кода (прошивок) не влезет в проц, а то что влезет - будет КРУТО ТОРМОЗИТЬ ! (для пик 12/16/18) :)

Так что ты хочешь ? Ехать или шашечки ?

?? А ты сомневаешься в том, что МОЙ код не те данные выдаст :)?

Так а кто-ж тебе мешает проверить :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485914#p4485914"]Если хочешь результат в ХСхх, то нужно не просто значение (константу) ввести, а нужно - чтобы те файлы работали :)[/uquote]
У меня работают, а у тебя нет. Ты это чуть выше продемонстрировал.
Кстати, у меня дизасм выше анализируемого присвоения resADC значения АЦП выглядит так (я ранее приводил, но ты не умеешь раскрывать спойлер):

Код: Выделить всё

209:               resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
5862  0103     MOVLB 0x3
5864  51EB     MOVF DMAnDCNTH, W, BANKED
5866  6E4B     MOVWF HLVDCON1, ACCESS
5868  51EA     MOVF DMAnDCNT, W, BANKED
586A  0105     MOVLB 0x5
586C  6FD1     MOVWF 0xD1, BANKED
586E  C54B     MOVFF 0x54B, 0x5D2
5870  F5D2     NOP
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485914#p4485914"]Я могу перевести любой свой ХСхх в режим "1" - ДЕМО, 30 процентов моего кода (прошивок) не влезет в проц, а то что влезет - будет КРУТО ТОРМОЗИТЬ ! (для пик 12/16/18) :)[/uquote]
Поток сознания. Комментировать нечего.
Если у тебя не влазит прошивка - пиши на чистом АСМе или смени чип.
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4485921#p4485921"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485914#p4485914"]Если хочешь результат в ХСхх, то нужно не просто значение (константу) ввести, а нужно - чтобы те файлы работали :)[/uquote]
У меня работают, а у тебя нет. Ты это чуть выше продемонстрировал.
Кстати, у меня дизасм выше анализируемого присвоения resADC значения АЦП выглядит так (я ранее приводил, но ты не умеешь раскрывать спойлер): - ВОТ меня прикалывают дебилы, которые в бессознанке - чужие комменты правят как свои :) ЧТО? мама писю не давала пососать в детстве ? :)

Код: Выделить всё

209:               resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
5862  0103     MOVLB 0x3
5864  51EB     MOVF DMAnDCNTH, W, BANKED
5866  6E4B     MOVWF HLVDCON1, ACCESS
5868  51EA     MOVF DMAnDCNT, W, BANKED
586A  0105     MOVLB 0x5
586C  6FD1     MOVWF 0xD1, BANKED
586E  C54B     MOVFF 0x54B, 0x5D2
5870  F5D2     NOP
Кстати, судя по твоему коду:
586E C54B MOVFF 0x54B, 0x5D2
ты работаешь на пик18, а разговор то был -> идёт про пик16 :) Что? Опять "дурочка повисла, и не даёт думать" :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485926#p4485926"]ты работаешь на пик18, а разговор то был -> идёт про пик16[/uquote]
Разговор идет про ЛЮБОЙ восьмиразрядный ПИК. Патамушта тут обсуждается Си код, которому по барабану какой контроллер.
Я, например, месяц назад перевел изделие, в котором используется приведенный мною код, на AT32F421. Изменились только драйверы периферии. Остальной код я просто скопипастил в новый проект. На всё про всё ушло три рабочих дня.
А все потому, что код переносим и не использует всякую заточенную под платформу хрень.
Что касается PIC10...PIC16, то для них код на Си писать практически бессмысленно. Поэтому для них я пишу на чистом АСМе.
Получается компактно и быстро. И не требует ломанного XC8.
Но всё это не имеет значения против той лютой пурги, которую ты тут несешь. С тобой обсуждать что либо серьезное не имеет смысла. Ты тотально безграмотен.
А еще есть ощущение, что и тотально туп. Патамушта не в состоянии осилить движок форума в части тегов кода.
Зачем то цитируешь полную портянку предыдущего сообщения, вместо того, чтобы вырезать и фрагментировать текст по существу своих сообщений.
Вот и предыдущий свой эпистолок переврал по полной...
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4485931#p4485931"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485926#p4485926"]ты работаешь на пик18, а разговор то был -> идёт про пик16[/uquote]
Разговор идет про ЛЮБОЙ восьмиразрядный ПИК. Патамушта тут обсуждается Си код, которому по барабану какой контроллер.
Я, например, месяц назад перевел изделие, в котором используется приведенный мною код, на AT32F421. Изменились только драйверы периферии. Остальной код я просто скопипастил в новый проект. На всё про всё ушло три рабочих дня.
А все потому, что код переносим и не использует всякую заточенную под платформу хрень.
Что касается PIC10...PIC16, то для них код на Си писать практически бессмысленно. Поэтому для них я пишу на чистом АСМе.
Получается компактно и быстро. И не требует ломанного XC8.[/uquote]

А вот тут ты ошибаешься, "патамушта" пик16 даже рядом не стоял с пик18 :)
А если прыгнуть ещё выше, то понимаешь - что это совсем не пик18 :)
А если ещё выше ... то отстой, типа стм32 - вообще - не имеет не своей нормальной оболочки для разработки, не имеет ВМЕМЯЕМЫХ даташитов, да и вообще - на него прыгают люди -
у которых просто нет денег на нормальный проц :)

Но это так ... показалось :) Я не собираюсь очередную войну развязывать по поводу - какой проц круче :)

/*
Разговор идет про ЛЮБОЙ восьмиразрядный ПИК. Патамушта тут обсуждается Си код, которому по барабану какой контроллер.
Я, например, месяц назад перевел изделие, в котором используется приведенный мною код, на AT32F421. Изменились только драйверы периферии. Остальной код я просто скопипастил в новый проект. На всё про всё ушло три рабочих дня.
А все потому, что код переносим и не использует всякую заточенную под платформу хрень.
*/

Да ну!!!! ? Правда?
Т.е, таймеры, осциллятор, ШИМ - - одинаковый?
А ты просто перенёс проект ?
Знаешь, ты тут конечно на форуме можешь пиздунца влево-вправо/по кругу погонять, но мне-то не пиз*ди :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]А вот тут ты ошибаешься, "патамушта" пик16 даже рядом не стоял с пик18[/uquote]
Вообще то у них идентичное ядро. В PIC18 немного расширена система команд. Не виже никакой принципиальной разницы.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]А если прыгнуть ещё выше, то понимаешь - что это совсем не пик18[/uquote]
Ты там какую траву куришь? Куда прыгнуть? :facepalm:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]А если ещё выше ... то отстой, типа стм32 - вообще - не имеет не своей нормальной оболочки для разработки, не имеет ВМЕМЯЕМЫХ даташитов, да и вообще - на него прыгают люди -
у которых просто нет денег на нормальный проц[/uquote]
Ты реально идиот.
Среди STM32 есть чипы с ценой в пару десятков баксов в опте.
"Оболочек для разработки" любых ARM-ов вагон и маленькая тележка. Я, например, работаю в Keil. Меня все устраивает. А более всего устраивает то, что при переходе с STM32 на AT32 мне вообще не пришлось ничего менять. Та же среда разработки, только немного другой комплект файлов периферии.
По поводу даташитов STM32. А ты в курсе, что документация на STM32 состоит из ТРЕХ документов? Даташит, рефмануал и эррата. Так же точно, как и у PIC24/dsPIC33, PIC32.
Но я практически уверен, что ты просто не в состоянии осилить большие объемы англоязычной документации, поэтому жалуешься на нее. :tea:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]Да ну!!!! ? Правда?
Т.е, таймеры, осциллятор, ШИМ - - одинаковый?
А ты просто перенёс проект ?[/uquote]
А ты в курсе что такое "драйверы периферии"? :)))
Драйверы периферии - это прослойка кода, которая делает НЕЗАВИСИМЫМ основной код от периферии.
В этом случае переписать нужно только те самые таймеры-ШИМы-УАРТы и т.п., а обработка данных не изменяется вообще.
Но для этого код должен быть правильно структурирован и не содержать всякой лютой пурги, которую ты тут нам демонстрируешь.
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4485943#p4485943"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]А вот тут ты ошибаешься, "патамушта" пик16 даже рядом не стоял с пик18[/uquote]
Вообще то у них идентичное ядро. В PIC18 немного расширена система команд. Не виже никакой принципиальной разницы.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]А если прыгнуть ещё выше, то понимаешь - что это совсем не пик18[/uquote]
Ты там какую траву куришь? Куда прыгнуть? :facepalm:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485935#p4485935"]А если ещё выше ... то отстой, типа стм32 - вообще - не имеет не своей нормальной оболочки для разработки, не имеет ВМЕМЯЕМЫХ даташитов, да и вообще - на него прыгают люди -
у которых просто нет денег на нормальный проц[/uquote]
Ты реально идиот.
Среди STM32 есть чипы с ценой в пару десятков баксов в опте.
"Оболочек для разработки" любых ARM-ов вагон и маленькая тележка. Я, например, работаю в Keil. Меня все устраивает. А более всего устраивает то, что при переходе с STM32 на AT32 мне вообще не пришлось ничего менять. Та же среда разработки, только немного другой комплект файлов периферии.
По поводу даташитов STM32. А ты в курсе, что документация на STM32 состоит из ТРЕХ документов? Даташит, рефмануал и эррата. Так же точно, как и у PIC24/dsPIC33, PIC32.
Но я практически уверен, что ты просто не в состоянии осилить большие объемы англоязычной документации, поэтому жалуешься на нее. :tea:[/uquote]

Аааа . . я понял, это у меня практически пожизненная гарантия, а у тебя как трусы у бабы - недельки :)

Одно, да не одно ЯДРО :)
У первых нет прямого доступа к памяти (с чего и начался этот разговор), второе ядро уже полноценное в плане доступа к FLASH.

А выше прыгнуть - это пик24/dsPIC33 - там камни, что твой стм нервно курит в сторонке :)
А вообще - много у тебя проектов на стм?
Я просто интересуюсь, никаких войн :) И на сколько ДОЛГО они работают? Не те, что дома тикают как часики :) А те, которые потом просто в мусор, и меняешь на пики ?
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485949#p4485949"]Одно, да не одно ЯДРО :)
У первых нет прямого доступа к памяти (с чего и начался этот разговор), второе ядро уже полноценное в плане доступа к FLASH.[/uquote]
Может стоит применять не самые древние ПИКи?
1. DMA не относится к ядру. Это периферийный контроллер управления шиной памяти.
2. Доступ к флешу тоже не относится к ядру.
3. Ядро - это АЛУ и сверхоперативная память. АЛУ у PIC18 и PIC16 практически идентично. Открой даташиты в разделе CPU и сам сравни.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485949#p4485949"]А выше прыгнуть - это пик24/dsPIC33 - там камни, что твой стм нервно курит в сторонке :)
А вообще - много у тебя проектов на стм?[/uquote]
1. У меня проектов СЕРИЙНЫХ изделий на СТМ32 - три штуки. Зато проектов на AT32 - восемь.
2. Проектов на dsPIC33 примерно полсотни (точно считать лень), на PIC24 - примерно пару десятков, на PIC18 - десятка три.
3. На PIC10...PIC16 я затруднюсь сказать. Наверное тоже около полусотни.
И все это только серийные изделия, либо малосерийные для технологических нужд производства и сервисного обслуживания серийных изделий в эксплуатации. Для дома у меня почти нет времени что либо делать. Года три назад переделал сыну бьюти-холодильник на Пельтье. Там работает PIC16F1614.
Сейчас переделываю проект HF RFID ридера с ATmega165 на AT32F421. Но только что начал. Прежде всего требуется переписать код на АСМе для ATmega165 в удобоваримый вид, чтобы его скормить MPLABX без ошибок. А то автор кода писал его в AVR studio с кучей варнингов. Мне удобнее работать с PICkit4 и потому атмеловская студия мне неудобна.
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4485953#p4485953"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485949#p4485949"]Одно, да не одно ЯДРО :)
У первых нет прямого доступа к памяти (с чего и начался этот разговор), второе ядро уже полноценное в плане доступа к FLASH.[/uquote]
Может стоит применять не самые древние ПИКи?
1. DMA не относится к ядру. Это периферийный контроллер управления шиной памяти.
2. Доступ к флешу тоже не относится к ядру.
3. Ядро - это АЛУ и сверхоперативная память. АЛУ у PIC18 и PIC16 практически идентично. Открой даташиты в разделе CPU и сам сравни.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485949#p4485949"]А выше прыгнуть - это пик24/dsPIC33 - там камни, что твой стм нервно курит в сторонке :)
А вообще - много у тебя проектов на стм?[/uquote]
1. У меня проектов СЕРИЙНЫХ изделий на СТМ32 - три штуки. Зато проектов на AT32 - восемь.
2. Проектов на dsPIC33 примерно полсотни (точно считать лень), на PIC24 - примерно пару десятков, на PIC18 - десятка три.
3. На PIC10...PIC16 я затруднюсь сказать. Наверное тоже около полусотни.
И все это только серийные изделия, либо малосерийные для технологических нужд производства и сервисного обслуживания серийных изделий в эксплуатации. Для дома у меня почти нет времени что либо делать. Года три назад переделал сыну бьюти-холодильник на Пельтье. Там работает PIC16F1614.
Сейчас переделываю проект HF RFID ридера с ATmega165 на AT32F421. Но только что начал. Прежде всего требуется переписать код на АСМе для ATmega165 в удобоваримый вид, чтобы его скормить MPLABX без ошибок. А то автор кода писал его в AVR studio с кучей варнингов. Мне удобнее работать с PICkit4 и потому атмеловская студия мне неудобна.[/uquote]

Написал много и красиво :)
Особенно понравилось про Пельтье :)
Звучит красиво, выглядит как обычный нвагреватель :) Ну разве что четыре транзистора, и один ШИМ :)
Можно пик12 использовать, но у БМВ - аж целый техас инструментс пинов на 140 - может больше :)
А работает - через ЖО.. ну короче - ОЧЕНЬ херово (в седалищах и спинках кресел ) :)
По поводу:
resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
https://disk.yandex.ru/d/LyHl-w0dXYWwQg Извините, не тот архив первоначально кинул....

я трохи пиздунца заправил (забыл поставить скобки, признаю), но зато по поводу разницы между пик16 и 18 - могу честно заявить - хоть компилятор и один (хс8),
но работает по разному :)
И пик18 точно выходит на заявленные 16 МИПС, пик16 на свои 5 МИПС не выходит.
А кто не верит, пусть в майне ногодрыг устроит.
Я правда пик16 никогда и не разгонял, пик18 разгонял до 25 МИПС, остальные пики (выше) ВСЕГДА разгоняю - чтобы знать - что могут :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486273#p4486273"]я трохи пиздунца заправил (забыл поставить скобки, признаю)[/uquote]
Со скобками тоже фуфло. Старший байт равен нулю. :tea: :))) Собственно и разбирать АСМ не требуется. На Си написано фуфло. Компилятор просто его отработал. Учи Си и пребудет с тобой Сила...
ЗЫ. Еще раз для туго соображающих. Код должен быть переносим. Поэтому форма чтения регистров должна быть универсальна.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486273#p4486273"]зато по поводу разницы между пик16 и 18 - могу честно заявить - хоть компилятор и один (хс8),
но работает по разному[/uquote]
Ну и что? Ясен перец, что если система команд отличается, то результат компиляции будет другим. Общность архитектуры не означает идентичность системы команд. Однако бОльшая часть набора инструкций идентична. Отличается лишь способ адресации.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486273#p4486273"]И пик18 точно выходит на заявленные 16 МИПС, пик16 на свои 5 МИПС не выходит.
А кто не верит, пусть в майне ногодрыг устроит.[/uquote]
Очередная эпичная глупость. :music:
Какое отношение ногодрыг имеет к МИПСам?
Есть куча архитектур, включая новейшие dsPIC33E и dsPIC33C (я уже не говорю про ARM-ы), где скорость портов ниже скорости ядра. В (М)ИПСах измеряют скорость исполнения инструкций (IPS - instructions per second), а не скорость портов.
Впрочем, у 10-х...16-х скорость вывода равна МИПСам. Просто нужно уметь программировать. :tea:
Напиши две инструкции подряд bsf-bcf и получишь импульс длительностью в 1 инструкцию.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486273#p4486273"]Особенно понравилось про Пельтье :)
Звучит красиво, выглядит как обычный нвагреватель :) Ну разве что четыре транзистора, и один ШИМ[/uquote]
Вот китайцы изначально так и сделали. В результате получился релейный режим и Пельтье приказал долго жить через три дня после первого включения холодильника.
Ты что нибудь слышал о PID-регуляторах? :)))
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

void Strob_E(void)
{
E_LCD = 1; // подаём строб
Nop();
E_LCD = 0; // снимаем строб
}

void Strob_E(void)
{
E_LCD = 1; // подаём строб
E_LCD = 0; // снимаем строб
}

Я работаю на частоте 5 МИПС, каждая команда - это 200 нс, в первом случае - я хочу задержку 200 нс, во втором - не хочу ВООБЩЕ задержки.
Напиши код, и выложи АСМ!
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486297#p4486297"]каждая команда - это 200 нс, в первом случае - я хочу задержку 200 нс, во втором - не хочу ВООБЩЕ задержки.
Напиши код, и выложи АСМ![/uquote]

Ты же любитель АСМ вставок... :)))
Не знаешь как написать на АСМе? Абисняю.

Код: Выделить всё

     bsf    E_LCD
     bcf    E_LCD
Ну и с нопом:

Код: Выделить всё

     bsf    E_LCD
     nop
     bcf    E_LCD
В первом случае будет импульс 200 нс, а во втором - 400 нс.
:tea:
Последний раз редактировалось КРАМ Вс окт 08, 2023 00:55:46, всего редактировалось 1 раз.
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4486299#p4486299"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486297#p4486297"]void Strob_E(void)
{
E_LCD = 1; // подаём строб
Nop();
E_LCD = 0; // снимаем строб
}

void Strob_E(void)
{
E_LCD = 1; // подаём строб
E_LCD = 0; // снимаем строб
}

Я работаю на частоте 5 МИПС, каждая команда - это 200 нс, в первом случае - я хочу задержку 200 нс, во втором - не хочу ВООБЩЕ задержки.
Напиши код, и выложи АСМ![/uquote]

Ты же любитель АСМ вставок... :)))
Не знаешь как написать на АСМе? Абисняю.

Код: Выделить всё

     bsf    E_LCD
     bcf    E_LCD
Ну и с нопом:

Код: Выделить всё

     bsf    E_LCD
     nop
     bcf    E_LCD
В первом случае будет импульс 200 нс, а во втором - 400 нс.
:tea:[/uquote]

Добавлено after 36 seconds:
Ты ДУРАК или притворяешься ?
Я хочу код на СИ, и его дизАСМ :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4486300#p4486300"]Я хочу код на СИ, и его дизАСМ[/uquote]
А я не хочу. Поспорим? :wink:
Ты же утверждал, что в 16-х невозможно получить в порту 5 МИПС. Я тебе показал как это сделать.
Причем тут Си? :dont_know:
Тем более, что ты на Си пишешь пургу.
ЗЫ. Пора сворачивать общение с тобой... Ты мне наскучил. Пусть с тобой модераторы разбираются.
Ответить

Вернуться в «PIC»