Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Lookup Table Pic12f683
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10348
Страница 1 от 1

Автор:  basejn [ Пет Юли 27, 2012 4:36 pm ]
Заглавие:  Lookup Table Pic12f683

Здравейте ! Как да направя лукъп тейбъл със гореспоменатия пик който да има 256 стойности. Прерових интернета и ме заболя главата от четене и пак не разбрах Когато се опитвам да го направя когато поискам да взема стойността с по голям индекс и процесора забива .

Автор:  tolstolob [ Пет Юли 27, 2012 5:12 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Ползвай 2 таблици по 128.

Автор:  rumen65 [ Пет Юли 27, 2012 5:23 pm ]
Заглавие:  Re: Lookup Table Pic12f683

На какъв език пишеш, асемблер или С. Ако е на С, кой е точно компилатора, все пак това има значение.

Автор:  CarBeta [ Пет Юли 27, 2012 6:38 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Задаваш ли стойност на PCLATH преди да се ровиш в таблицата?

Автор:  Пушека [ Пон Юли 30, 2012 9:05 am ]
Заглавие:  Re: Lookup Table Pic12f683

Пробвай сленото:

...
...
movfw Position
call t8
movwf Number
...
...

...
ORG 0X6FE
t8: BSF PCLATH, 1
addwf PCL, f
retlw d'0' ;0
retlw d'2' ;1
...
...
...
retlw d'255' ;253
retlw d'255' ;254
retlw d'255' ;255
;---------------------------------------------------
end
Идеята е да му дадеш начало на таблицата в поредната (последната) цяла секция х00..хFF, Мисля че от там идва омазването.

Автор:  CarBeta [ Пон Юли 30, 2012 3:23 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Пушека написа:
Пробвай сленото...

Тц... така няма да стане. В твоя случай, когато брояча е на 0x6FF, какво ще стане ако му добавиш 0хE0 например? Ще отиде на 0х2DF, а там кой знае какво има... и отиде коня в реката! Това, което искаш да направиш, се прави с:

Код:
MOVLW  HIGH(t8)
MOVWF  PCLATH
MOVFW  Position
CALL   t8
...

Но с големи таблици и това ще се омаже, когато за PCL започне да се получава резултат 9 бита. За да не става мазало трябва да се сметне целия адрес от таблицата(всичките 13 бита).

Код:
MOVLW     LOW(t8)
ADDWF     Position, F
MOVLW     HIGH(t8)
BTFSC     STATUS, C
ADDLW     1
MOVWF     PCLATH
MOVFW     Position
CALL      t8

Автор:  Пушека [ Пон Юли 30, 2012 3:46 pm ]
Заглавие:  Re: Lookup Table Pic12f683

CarBeta написа:
Тц... така няма да стане.

Тц... при мен работи :). 6FF + E0 = 7DF Адресното пространство му е до 7FF до колкото видях ПДФа. Понеже го позиционирам точно в 00 на 7ия сегмент не се интересувам от старшата част на брояча. А идеше реч за точно 256 битова таблица и няма смисъл да си трови живота с манипулаци на PC. За по-големи таблици си прав.

Автор:  CarBeta [ Пон Юли 30, 2012 8:22 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Въпросът не опира до адресното пространство, а до РСН, дето уж го пренебрегваш. 6FF + E0 = 7DF - това с калкулатора е така, но на практика няма как да накараш процесора да прескочи от 0х6FF -> 0х700 без да вкараш нужните битове по регистрите. PCLATH е само нули при стартиране. Променяйки PCL, без да закачаш PCLATH, гаранция отиваш в реката, освен ако таблицата не ти е някъде в началните адреси. Ако пратиш програмата на тоя адрес РС ще прескочи адресите нататък и ще си изпълни програмата, но ти му променяш РСL, а с това в PCH се записва каквото има записано в PCLATH. Т.е. променяш целия брояч, не само тая част дето ти се иска.

Като сетваш втория бит на PCLATH му задаваш стойност 2, т.е. ще отидеш на адрес 0х2DF вместо на 0х7DF, където ти се иска всъщност и ще се чудиш защо програмата забива. То затова е и темата. Щото процесора прави каквото му кажеш, а не каквото ти си мислиш, че си му казал!

Та с това сетване на втория бит няма как да работи при теб а и не само при теб. Ако сложиш таблицата на адрес 0x6FF и преди CALL t8 запишеш 0х7 в PCLATH ще заработи по тоя начин.

Автор:  Пушека [ Пон Юли 30, 2012 8:57 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Преди време исках да си направя прост и евтин генератор на синусоида за проби на един мост и се сблъсках със същия проблем. Извиквам с "call t8", отивам на въпросния етикет, а там добавяйки отместване в младшия байт скачам на желания ред. Става, но до момента в, който добавката не промени старшата част(т.е. се получи пренос към старшите битове). Е вариантите бяха 2. Да смятам всеки път целия адрес или по-простия да не допускам пренос. За табличка с 256 числа номера става без пренос, ако първия елемент е в позиция 00 на произволна страница. Сега като се загледах не видях логична причина за реда:
BSF PCLATH, 1
нямам спомен защо съм го писал, играейки го на симулатора не се променя така или иначе.
Ей го кода, пробвай и ще видиш че става и на скопа излиза красива синусоида.

Прикачени файлове:
test_gen252.asm [13.38 KiB]
263 пъти

Автор:  CarBeta [ Пон Юли 30, 2012 9:22 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Е естествено, че ще работи така :D - таблицата ти е на ORG 0X1FE, което обяснява нещата и е логична причина за BSF PCLATH, 1!

Автор:  Пушека [ Пон Юли 30, 2012 9:37 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Да бе написах 6FE за да му пасне за последната страница, без да съобразя да сменя и другото. :D
Ама нали човекът трябва да напрегне малко главата все пак.

Автор:  stoyanoff [ Вто Юли 31, 2012 11:09 am ]
Заглавие:  Re: Lookup Table Pic12f683

Ето какво направих на бързо с CCS complier.
Код:
#include <12F683.h>
#define arrayMax 256

const int array[arrayMax]={ 0, 
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
};
void main()
{
   int16 i,n;
   for(i=0;i<=arrayMax;i++)
   {
      n=array[i];   
   }   
}



Memory usage: ROM=14% RAM=5% - 5%

Остава уговорката, че масивът е константа!
Поздрави!

Автор:  basejn [ Вто Юли 31, 2012 11:17 am ]
Заглавие:  Re: Lookup Table Pic12f683

Благодаря ви за отговорите . С асемблер работя. Начинът който CarBeta описва ми изглежда работещ . Мерси все пак но аз се справих с проблема като използвах EEPROM - a .Заредих го с таблицата и прочитах стойността от там . Това което исках да направя и в крайна сметка го направих и работи е електронно запалване на мотор. Запалването взема сигнал от датчика на коляновия вал който е 36 градуса преди ГМТ, измерва с Тimer0 периода на въртенето или времето от един пулс на датчика до следващия и стойността на таймера я зарежда направо като индекс на таблицата . Тя връща съответната стойност и я подава като аргумент на функция Delay която забавя искрата.Доста проблеми срещнах за това просто на пръв поглед нещо Една седмица по цял ден се занимавах с него дори последните няколко дена реших да направя машинка с която да тествам дали всичко работи защото ако го пробвам направо на мотора и може да ми счупи крака ако предварението при палене е твърде голямо.

Автор:  stoyanoff [ Вто Юли 31, 2012 2:03 pm ]
Заглавие:  Re: Lookup Table Pic12f683

Ами не знам на каква честота работиш, но сигурен ли си, че успява да се справи контролера ти за 1 импулс време. EEPROM паметта е по-бавна от RAM и ROM.

Автор:  Cekins [ Вто Юли 31, 2012 2:21 pm ]
Заглавие:  Re: Lookup Table Pic12f683

При писане, stoyanoff :) Има някой друг PDF в който си е написано... При четене скоростта е същата като при четене от рама. Само дето иска две-три допълнителни инструкции.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/