Стек 16а628

Здесь обсуждаем устройства на МК и программы для них
za9c
Читатель
Читатель
Сообщения: 94
Зарегистрирован: 31 авг 2011, 15:50

Стек 16а628

Сообщение za9c »

Pic16f628a
Call table0
call table1
call table2
.......
call table7
итого 7 таблиц по 256 - 2048
допустим есть длительность имп 50 000 мкс(4 мгц кварц) то есть я могу сохранить 2048 выборок с этого сигнала???
А если ругается на стек. И могу ли я всунуть 16 таблиц по 128
первая таблица до 128
org 0
clrf pclath
addwf pcl,f
вторая таблица от 128
org 0x50
clrf pclath
movlw 0x50
movwf pclath
addwf pcl,f
org 0x100
и так далее
где косяк или как реализовать без задействования памяти 16 128 битных таблиц???
addwf pcl,f
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Стек 16а628

Сообщение rhf-admin »

Чё-то я не совсем въезжаю в вопрос, но попробуем разобраться.
Call table0
call table1
call table2
.......
call table7
итого 7 таблиц по 256 - 2048
7 таблиц не вижу, вижу 8 вызовов подпрограмм (переходов на метку tableX с сохранением в стеке адреса возврата)
допустим есть длительность имп 50 000 мкс(4 мгц кварц) то есть я могу сохранить 2048 выборок с этого сигнала???
А если ругается на стек. И могу ли я всунуть 16 таблиц по 128
Получается по 24 мкс на то, чтобы сделать выборку и её обработать (например, сохранить куда-то). В принципе, по времени можно успеть, но тут всё зависит от размерности выборки и от того, сколько требуется времени на то, чтоб её сделать. Выборка - это что? Сколькими битами кодируется? Если выборка - это некое 8-битное значение сигнала, то в пике 2048 выборок хранить не получится, потому что у него всего 2048 слов памяти программ и 128 байт EEPROM (если всю память будет занимать массив выборок, то на код программы ничего не останется). Если выборка однобитная, то почему бы и нет, - на хранение всего массива выборок потребуется 2048 бит = 256 байт. Если размер выборки не позволяет хранить весь массив выборок в пике, то можно предложить прицепить внешнюю память, например по I2C, и хранить выборки в ней.
И могу ли я всунуть 16 таблиц по 128
По 128 чего??? Если байт, то я думаю уже понятно, что нет (читай выше).
первая таблица до 128
org 0
clrf pclath
addwf pcl,f
вторая таблица от 128
org 0x50
clrf pclath
movlw 0x50
movwf pclath
addwf pcl,f
org 0x100
0х50 - это не от 128, а от 80-ти. 50h=80, 80h=128. В коде смысла не вижу... Напиши хоть что он по твоей задумке должен был делать? И вообще - больше подробностей, не все ж экстрасенсы. Подробности - это самое интересное.
С уважением, администрация сайта.
za9c
Читатель
Читатель
Сообщения: 94
Зарегистрирован: 31 авг 2011, 15:50

Re: Стек 16а628

Сообщение za9c »

Вот спасибо расписал хорошо. Смысл задумки такой... С ds1820 снимаю показания температуры. В зависимости от темп. через шаговый движок ДШИ 200 автоматом регулируются пусковые и прогревочные обороты( эт сделал работает хорошо - но - помехи трошки есть иногда зависает, раз в несколько дней (движок на месте дёргается- путём выкл-вкл питания работает нормально). Но трамблёр - пежо 405 1.9 карб стоит 30-40 доляров бу. Решил внести в мой девайс пару таблиц УОЗ чтоб в зависимости от температуры выбирал пусковой угол, ну и рабочий тоже. После твоего описания понял (кстати после переточки трамблёра ваз 2109 стал там как родной). делать буду так. допустим обороты 50 ---- 30 000 0000(частота 4мгц 1 сек 1 000 000 выборок) делим на 50 =6000000 и плюс TMRO делитель 16 = 600000/16=37500, Ето будет константа. Далее через 50 оборотов следующий. 30 000 000/100= 300000/16=18750. номер в таблице будем высчитывать постоянным делением 37500(константы) на измеренный интервал и будем получать строчку в таблице. А в таблицах будет занесён расчётная задержка УОЗ. Вот почему я спрашивал куда мне эти таблицы впихнуть. Но должно хватить на 4 - 128 таблички (512 из памяти украду для таблиц.) т.е уоз будет изменяться от 4 до 8 если будет желание могу скидывать последовательно на форум чё и как творил.... с фотками.....
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Стек 16а628

Сообщение rhf-admin »

Хорошо, что ты всё понял, потому что я ничего не понял:
допустим обороты 50 ---- 30 000 0000
Обороты 30 лямов :shock: :shock: :shock:
частота 4мгц 1 сек 1 000 000 выборок
Столько выборок в секунду не получится, их же ещё обрабатывать надо... На 4-х мегагерцах за одну миллионную секунды выполняется одна команда. Да и надо ли столько выборок???
Далее не вполне понятная математика:
делим на 50 =6000000 и плюс TMRO делитель 16 = 600000/16=37500, Ето будет константа. Далее через 50 оборотов следующий. 30 000 000/100= 300000/16=18750.
Я так понимаю, что в зависимости от температуры, на каком-то выходе контроллера через определённое время (в зависимости от этой температуры) должна появиться "1" (от этого сигнала видимо далее что-то управляется). Интервалы времени видимо записаны в таблицу. Т.е. измеряем температуру, смотрим соответствующую задержку по таблице, отмеряем этот промежуток времени и выдаём на какой-то выход "1". Так???
Но должно хватить на 4 - 128 таблички (512 из памяти украду для таблиц.)
А, вот теперь кажется понял, что ты хотел накодить. То есть надо было, чтобы при обращении по определённому адресу в памяти - в какой-то регистр записывалось сохранённое по этому адресу значение и осуществлялся возврат назад в программу. Так???
Тогда для этого есть специальная команда: retlw. То есть по тому адресу, к которому ты обращаешься должна быть записана команда retlw k, где k - это и есть сохранённое в таблице 8-битное значение. То есть вся таблица - это набор команд retlw Ki, где Ki - это и есть разные сохранённые значения. При обращении из любого места программы командой call по какому-то адресу в таблице - мы получаем значение Ki в регистр W, после чего возвращаемся опять в программу и она продолжает выполняться дальше.
если будет желание могу скидывать последовательно на форум чё и как творил.... с фотками.....
Скидывай, желание есть. :rightly:
С уважением, администрация сайта.
za9c
Читатель
Читатель
Сообщения: 94
Зарегистрирован: 31 авг 2011, 15:50

Re: Стек 16а628

Сообщение za9c »

допустим обороты 50 ---- 30 000 0000
трошки не так. Обороты в минуту. Распредвал вращается в два раза медленней коленвала. Значит не 60 сек а 30 сек. З0 сек при частоте 4мгц ет вроде в пике 30 000 000. соответственно и делим 30 сек на 50....
za9c
Читатель
Читатель
Сообщения: 94
Зарегистрирован: 31 авг 2011, 15:50

Re: Стек 16а628

Сообщение za9c »

Я так понимаю, что в зависимости от температуры, на каком-то выходе контроллера через определённое время (в зависимости от этой температуры) должна появиться "1" (от этого сигнала видимо далее что-то управляется). Интервалы времени видимо записаны в таблицу. Т.е. измеряем температуру, смотрим соответствующую задержку по таблице, отмеряем этот промежуток времени и выдаём на какой-то выход "1". Так???
Как объяснить попросче..... Трамблёр выдает на некий усилитель (комутатор в простонародье) лог уровни 0 -1. Т.е. не доходя верхней мёртвой точки определённый градус должен с тармблёра выскочить 0, т.е. проскачить искра. И есть стандартный график уоз(угла опережения зажигания) для трамблёра. Но есть есчё и начальный угол который выставляется в зависимости от качества заливаемого бензина. Так вот я механику заменю електроникой. Пытался повторить MPSZ вроде. Но хочется на pic. И без компа - двух кнопок хватит увеличивать или уменьшать уоз +-.
za9c
Читатель
Читатель
Сообщения: 94
Зарегистрирован: 31 авг 2011, 15:50

Re: Стек 16а628

Сообщение za9c »

Тогда для этого есть специальная команда: retlw. То есть по тому адресу, к которому ты обращаешься должна быть записана команда retlw k, где k - это и есть сохранённое в таблице 8-битное значение. То есть вся таблица - это набор команд retlw Ki, где Ki - это и есть разные сохранённые значения. При обращении из любого места программы командой call по какому-то адресу в таблице - мы получаем значение Ki в регистр W, после чего возвращаемся опять в программу и она продолжает выполняться дальше.

Команды я знаю прекрасно - просто само обращение корректное к таблицам чтоб стек не ругался спрашивал и всё. допустим таблица лежит org 0x100 там 128 значений.
значит чтоб обратится к следующим 129-256 значениям нужно уложить в org 0x180 ну а далее я знаю. Просто интересно было можно ли так делать в pic16f628.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Стек 16а628

Сообщение rhf-admin »

допустим таблица лежит org 0x100 там 128 значений.
значит чтоб обратится к следующим 129-256 значениям нужно уложить в org 0x180 ну а далее я знаю. Просто интересно было можно ли так делать в pic16f628.
Да, да, всё правильно. Так в пике делать можно. Только программа в памяти не должна перекрываться с этими таблицами. Т.е. если программа, например, занимает 300 слов, начиная с адреса 0h ( ты пишешь org 0h и далее кода на 300 слов), то последнее слово будет по адресу 12Bh (12Bh=300-1) и если ты потом напишешь org 100h и "всунешь" свои таблицы в виде retlw Ki, то программа будет перекрываться с этими таблицами и будет ошибка (или компилятор выдаст или просто работать не будет).
С уважением, администрация сайта.
za9c
Читатель
Читатель
Сообщения: 94
Зарегистрирован: 31 авг 2011, 15:50

Re: Стек 16а628

Сообщение za9c »

Подскажи как у тебя на форум файлы закидывать????
Блин начал писать расчёты задержки уоз от оборотов - Pic в этом плане тормознутый. но в принципе в максимум 3 млсек укладываюсь. Формула такая (180-(угол зажигания)*длительность оборота)/180. длительность оборота я писал выше.
угол зажигания занесён в 2-е таблицы. В первой целая часть угла. во второй дробная. дробная и целая может быть только до сотых.
допустим Угол Опережения Зажигания при 850 оборотах равен 4,25 градуса
мы высчитали (писал как выше) номер в таблице (номера в таблицах будут совпадать)
table1
retlw k retlw k
тут лежит 4 тут лежит 25

блин как тут закинуть exel файл всё понятно было
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Стек 16а628

Сообщение rhf-admin »

Внизу, под тремя кнопками "сохранить", "предпросмотр", "отправить" есть две вкладки: "настройки" и "вложения". Заходи на вкладку "вложения" и добавляй. :)
P.S. Экселевские файлы были под запретом, теперь разрешены.
С уважением, администрация сайта.
Ответить

Вернуться в «Устройства на микроконтроллерах»