Sida 2 av 6
Re: PIC16F886 lookup tables
Postat: 23 maj 2009, 15:43:06
av Scorpiion
@bearing
Det där är inte samma sak som för mig.. (eller så är det bara jag som inte ser kopplingen) Jag använder en hd44780 display och inte några 7-segments...
Även om just "Separera Hundratal, Tiotal och Ental" är något jag måste göra för att uppnå resultatet så var frågan lite inrikad just med tanke på det macrot....
Men det var bra läsning ändå som jag kanske får nytta av!

Re: PIC16F886 lookup tables
Postat: 23 maj 2009, 15:51:25
av bearing
Enda skillnaden jag ser är att displayerna är olika. Du kommer ändå behöva använda en metod som gör om byten som innehåller djupet till tre stycken ASCII-siffror.
Ifall du skickar byten som den är kommer den visas som ett tecken med samma ASCII-kod som aktuellt djup. Alltså djupet 65m kommer visas som 'A', 98m som 'b' o.s.v.
Re: PIC16F886 lookup tables
Postat: 23 maj 2009, 18:00:15
av Scorpiion
Nu har jag fått så att jag delar upp byte'n i 3 ASCII tal..

Men får inte riktigt till det när jag ska få ut det på displayen.. Vet inte riktigt hur jag ska behandla dessa tre variabler för att få ut nån på displayen.. :/
Macrot jag pratat om ser ut så här iallafall:
Kod: Markera allt
lcd_text macro text_label
banksel eeadr ; Change to right bank
movlw high text_label ; bit 8-15 of address to text
movwf eeadrh
movlw low text_label ; bit 0-7 of address to text
movwf eeadr
; The two workingregisters are loaded with right addresses.
; Call subrutin to get text and write it out.
call lcd_send_text
banksel portb ; Leave rutin in bank 0
endm
Och för att skriva ut nån förbestämd text kan man göra såhär:
Kod: Markera allt
pressure_txt data d'1', d'1', 'T', 'r', 'y', 'c', 'k', ':', h'00'
lcd_text pressure_txt
Men jag vill ju kunna få ut mina TEMP0, TEMP1 och TEMP2... Eller värdet som är i dom.. hm.. :/
Re: PIC16F886 lookup tables
Postat: 23 maj 2009, 18:42:08
av sodjan
Om du har binära värden h'00' - h'09' i 3 register så behöver du bara
addera rätt tal för att få dom som "0" till "9" i ASCII. Kolla en ASCII-tabell
eller teckentabellen i databladet till displayen...
Re: PIC16F886 lookup tables
Postat: 23 maj 2009, 20:37:28
av Scorpiion
Alltså jag har dom redan som ASCII tal...
Från tidigare inlägg: "Nu har jag fått så att jag delar upp byte'n i 3 ASCII tal..

"
Jag använde mig av detta tips:
http://www.piclist.com/techref/microchi ... b3d-ds.htm
Så jag har alltså talen i ASCII, hundratal i ett register tiotal i ett och ental i ett... Men sen efter vet jag inte hur jag ska göra.. Jag har testat med
men det blir inte så bra.. displayen blir helt messed up och det är bara massa skräp på den...
Eller Ska det funka med att skriva så som jag skrev ovan? Jag tror inte att det ska funka men vore bra att få det bekräftat...
Re: PIC16F886 lookup tables
Postat: 23 maj 2009, 23:43:59
av sodjan
Alltså...
*OM* du faktiskt har tre st "siffror" kodade i ASCII så är det bara att skriva
dom till LCD'n så ska du få samma tecken på displayen.
> lcd_text TEMP2
Vadå "lcd_text" ?? Vad är "lcd-text" ?
(Eller är det min rutin för att skriva att skriva ut textsträngar från flash ?
Självklart fungerar inte den.)
Om du använder mina rutiner så borde lcd_send_data fungera, om dina 3
siffror t.ex ligger i TEMP1, TEMP2, och TEMP3 :
movf TEMP1, w
call lcd_send_data
movf TEMP2, w
call lcd_send_data
movf TEMP3, w
call lcd_send_data
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 00:09:42
av bearing
Det verkar som att du nu endast litar på att de makron/funktioner du har fungerar, utan att veta hur dom fungerar. Jag tror det är till din fördel om du sätter dig in i hur kommunikationen med LCDn fungerar.
Att skicka ett tecken till en sån här LCD går i princip till som följer: (fyrabitars kommunikation)
1 Lägg nibble på port
2 Växla E, växla tillbaka E
3 Lägg andra nibble på port
4 Växla E, växla tillbaka E
E är en sk. strobesignal. Vid ena flanken på E läser LCD-controllern datan som finns på porten.
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 16:21:54
av Scorpiion
Okey nu har jag som skrivit om det mesta om lärt mig lite mer om hur displayen fungerar!
Den här simulator var smidigt och kanske ska rekommenderas i wikin?
http://www.dinceraydin.com/djlcdsim/djlcdsim.html
Men nu har jag ett nytt problem som också handlar om mina tabeller..

Jag har just nu tre tabeller var av två stora (255) för ADC omvandlingen (8 bitars) och sen en liten med 11 poster, "0-9" och sen ":". Meeeeen...
När jag anropar den här tabellen för att göra om från b'00000011' tex till b'00110011' så att det visas en 3a på displyen så hoppar tabellen Jätte fel!! Och jag förstår inte riktigt varför eller hur jag kan lösa det... När jag simulerar så kommer jag in på nån rad i en av de stora tabellerna istället.. och på displayen så bekräftas detta med skräp...
Om jag testar att klippa ut dom stora tabellerna så funkar det lilla som det ska! Antar att det är något med "code" "banksel" "pagesel" eller nått annat sånt men har försökt testa lite olika men får inte till det... Efter vad jag har läst så kanske det går att se vad som är fel i "map-filen" ?
Har gjort lite **** vid namnen som är aktuella.. TEMP_TABLE och PRESSURE_TABLE är dom två stora och BINARY_CONVERT är den lilla som jag försöker få att fungera..
Kod: Markera allt
MPLINK 4.30.01, Linker
Linker Map File - Created Sun May 24 16:11:03 2009
Section Info
Section Type Address Location Size(Bytes)
--------- --------- --------- --------- ---------
RESET_VECTOR code 0x000000 program 0x000002
.cinit romdata 0x000001 program 0x000004
DLY_CODE code 0x000003 program 0x000458
LCD_CODE code 0x00022f program 0x0000c6
MAIN code 0x000292 program 0x000044
.config1 code 0x002007 program 0x000002
.config2 code 0x002008 program 0x000002
ASCII udata 0x000020 data 0x000003
LCD_VARS udata 0x000070 data 0x000008
DLY_VAR udata 0x000078 data 0x000003
ADC_VARS udata 0x00007b data 0x000002
Program Memory Usage
Start End
--------- ---------
0x000000 0x0002b3
0x002007 0x002008
694 out of 8454 program addresses used, program memory utilization is 8%
Symbols - Sorted by Name
Name Address Location Storage File
--------- --------- --------- --------- ---------
ADC 0x000270 program static C:\PIC\Dykdator\Dykdator.asm
ADC_START 0x00027e program static C:\PIC\Dykdator\Dykdator.asm
****** BINARY_CONVERT 0x000223 program static C:\PIC\Dykdator\Dykdator.asm *******
DELAY_100US 0x00001c program static C:\PIC\Dykdator\Dykdator.asm
DELAY_100US_0 0x00001e program static C:\PIC\Dykdator\Dykdator.asm
DELAY_1S 0x000003 program static C:\PIC\Dykdator\Dykdator.asm
DELAY_1S_0 0x000009 program static C:\PIC\Dykdator\Dykdator.asm
DELAY_5MS 0x000012 program static C:\PIC\Dykdator\Dykdator.asm
DELAY_5MS_0 0x000016 program static C:\PIC\Dykdator\Dykdator.asm
LCD_INIT_HD44780 0x00022f program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_4_BIT 0x000252 program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_BYTE 0x000267 program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_CMD 0x00025b program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_DATA 0x000261 program static C:\PIC\Dykdator\Dykdator.asm
LCD_TOGGLE_E 0x00024b program static C:\PIC\Dykdator\Dykdator.asm
PRESSURE_START 0x00027a program static C:\PIC\Dykdator\Dykdator.asm
PRESSURE_STORE 0x000287 program static C:\PIC\Dykdator\Dykdator.asm
***** PRESSURE_TABLE 0x000122 program static C:\PIC\Dykdator\Dykdator.asm ******
SAMPELTIME 0x00028c program static C:\PIC\Dykdator\Dykdator.asm
START 0x000292 program static C:\PIC\Dykdator\Dykdator.asm
TEMP_START 0x000276 program static C:\PIC\Dykdator\Dykdator.asm
TEMP_STORE 0x000282 program static C:\PIC\Dykdator\Dykdator.asm
***** TEMP_TABLE 0x000021 program static C:\PIC\Dykdator\Dykdator.asm ******
WRITE_LCD 0x0002aa program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0007 0x00000a program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0009 0x00000c program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_000C 0x00000f program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0014 0x000017 program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0017 0x00001a program static C:\PIC\Dykdator\Dykdator.asm
_LCD_CODE_0051 0x000280 program static C:\PIC\Dykdator\Dykdator.asm
D0 0x000020 data static C:\PIC\Dykdator\Dykdator.asm
D1 0x000021 data static C:\PIC\Dykdator\Dykdator.asm
D2 0x000022 data static C:\PIC\Dykdator\Dykdator.asm
DE1 0x000078 data static C:\PIC\Dykdator\Dykdator.asm
DE2 0x000079 data static C:\PIC\Dykdator\Dykdator.asm
DE3 0x00007a data static C:\PIC\Dykdator\Dykdator.asm
LCD_TMP1 0x000070 data static C:\PIC\Dykdator\Dykdator.asm
LCD_TMP2 0x000071 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE0 0x000075 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE1 0x000076 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE2 0x000077 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE_ADC 0x00007c data static C:\PIC\Dykdator\Dykdator.asm
TEMP0 0x000072 data static C:\PIC\Dykdator\Dykdator.asm
TEMP1 0x000073 data static C:\PIC\Dykdator\Dykdator.asm
TEMP2 0x000074 data static C:\PIC\Dykdator\Dykdator.asm
TEMP_ADC 0x00007b data static C:\PIC\Dykdator\Dykdator.asm
Symbols - Sorted by Address
Name Address Location Storage File
--------- --------- --------- --------- ---------
DELAY_1S 0x000003 program static C:\PIC\Dykdator\Dykdator.asm
DELAY_1S_0 0x000009 program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0007 0x00000a program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0009 0x00000c program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_000C 0x00000f program static C:\PIC\Dykdator\Dykdator.asm
DELAY_5MS 0x000012 program static C:\PIC\Dykdator\Dykdator.asm
DELAY_5MS_0 0x000016 program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0014 0x000017 program static C:\PIC\Dykdator\Dykdator.asm
_DLY_CODE_0017 0x00001a program static C:\PIC\Dykdator\Dykdator.asm
DELAY_100US 0x00001c program static C:\PIC\Dykdator\Dykdator.asm
DELAY_100US_0 0x00001e program static C:\PIC\Dykdator\Dykdator.asm
***** TEMP_TABLE 0x000021 program static C:\PIC\Dykdator\Dykdator.asm ******
***** PRESSURE_TABLE 0x000122 program static C:\PIC\Dykdator\Dykdator.asm ******
***** BINARY_CONVERT 0x000223 program static C:\PIC\Dykdator\Dykdator.asm ******
LCD_INIT_HD44780 0x00022f program static C:\PIC\Dykdator\Dykdator.asm
LCD_TOGGLE_E 0x00024b program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_4_BIT 0x000252 program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_CMD 0x00025b program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_DATA 0x000261 program static C:\PIC\Dykdator\Dykdator.asm
LCD_SEND_BYTE 0x000267 program static C:\PIC\Dykdator\Dykdator.asm
ADC 0x000270 program static C:\PIC\Dykdator\Dykdator.asm
TEMP_START 0x000276 program static C:\PIC\Dykdator\Dykdator.asm
PRESSURE_START 0x00027a program static C:\PIC\Dykdator\Dykdator.asm
ADC_START 0x00027e program static C:\PIC\Dykdator\Dykdator.asm
_LCD_CODE_0051 0x000280 program static C:\PIC\Dykdator\Dykdator.asm
TEMP_STORE 0x000282 program static C:\PIC\Dykdator\Dykdator.asm
PRESSURE_STORE 0x000287 program static C:\PIC\Dykdator\Dykdator.asm
SAMPELTIME 0x00028c program static C:\PIC\Dykdator\Dykdator.asm
START 0x000292 program static C:\PIC\Dykdator\Dykdator.asm
WRITE_LCD 0x0002aa program static C:\PIC\Dykdator\Dykdator.asm
D0 0x000020 data static C:\PIC\Dykdator\Dykdator.asm
D1 0x000021 data static C:\PIC\Dykdator\Dykdator.asm
D2 0x000022 data static C:\PIC\Dykdator\Dykdator.asm
LCD_TMP1 0x000070 data static C:\PIC\Dykdator\Dykdator.asm
LCD_TMP2 0x000071 data static C:\PIC\Dykdator\Dykdator.asm
TEMP0 0x000072 data static C:\PIC\Dykdator\Dykdator.asm
TEMP1 0x000073 data static C:\PIC\Dykdator\Dykdator.asm
TEMP2 0x000074 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE0 0x000075 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE1 0x000076 data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE2 0x000077 data static C:\PIC\Dykdator\Dykdator.asm
DE1 0x000078 data static C:\PIC\Dykdator\Dykdator.asm
DE2 0x000079 data static C:\PIC\Dykdator\Dykdator.asm
DE3 0x00007a data static C:\PIC\Dykdator\Dykdator.asm
TEMP_ADC 0x00007b data static C:\PIC\Dykdator\Dykdator.asm
PRESSURE_ADC 0x00007c data static C:\PIC\Dykdator\Dykdator.asm
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 17:45:35
av sodjan
Har du tabeller med RETLW som du gör CALL till ?
Sannolikt ser du inte till att PCLATH är rätt satt innan du lägger till W till PCL.
Och då går det general-fel om du befinner dig vid en page-gräns.
Det finns en App-note hos Microchip som har exempel på detta.
Ett annat sätt är naturligstvis att använda de riktiga table-read
från flash. Kolla databladet "10.1.4 READING THE FLASH PROGRAM MEMORY"
eller samma sak i mitt HD44780 exempel. Kolla macrot "lcd_text" och
subrutinen "read_flash".
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 19:40:31
av Swech
Hela det här tabellgrejandet är helt fel upplägg.... du är inne på fel spår.
Du har gjort ett python program som skapar din tabell..
Hur ser det programmet ut? Vad gör det för något?
Det som python programmet gör kan lika gärna PIC processorn göra och vips
så kan du slänga dina tabeller...
Berätta hur du vill att din tabell skall funka -
0 skall ge ? värde
100 skall ge ? värde..
255 skall ge ? värde..
Swech
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 21:55:03
av Scorpiion
Ja det kan stämma att jag är inne på fel spår! Men är mitt första som riktiga PIC projekt så jag har inte så mycket erfarenhet... Tabellen består av dessa värden:
Kod: Markera allt
Bit 0 = 0.00 V = 10 kPa
Bit 1 = 0.02 V = 11 kPa
Bit 2 = 0.04 V = 12 kPa
Bit 3 = 0.06 V = 13 kPa
Bit 4 = 0.08 V = 14 kPa
Bit 5 = 0.10 V = 15 kPa
Bit 6 = 0.12 V = 16 kPa
Bit 7 = 0.14 V = 17 kPa
Bit 8 = 0.16 V = 18 kPa
Bit 9 = 0.18 V = 19 kPa
Bit 10 = 0.20 V = 20 kPa
Bit 11 = 0.22 V = 21 kPa
Bit 12 = 0.24 V = 22 kPa
Bit 13 = 0.25 V = 22 kPa
Bit 14 = 0.27 V = 23 kPa
Bit 15 = 0.29 V = 24 kPa
Bit 16 = 0.31 V = 25 kPa
Bit 17 = 0.33 V = 26 kPa
Bit 18 = 0.35 V = 27 kPa
Bit 19 = 0.37 V = 28 kPa
Bit 20 = 0.39 V = 29 kPa
Bit 21 = 0.41 V = 30 kPa
Bit 22 = 0.43 V = 31 kPa
Bit 23 = 0.45 V = 32 kPa
Bit 24 = 0.47 V = 33 kPa
Bit 25 = 0.49 V = 34 kPa
Bit 26 = 0.51 V = 35 kPa
Bit 27 = 0.53 V = 36 kPa
Bit 28 = 0.55 V = 37 kPa
Bit 29 = 0.57 V = 38 kPa
Bit 30 = 0.59 V = 39 kPa
Bit 31 = 0.61 V = 40 kPa
Bit 32 = 0.63 V = 41 kPa
Bit 33 = 0.65 V = 42 kPa
Bit 34 = 0.67 V = 43 kPa
Bit 35 = 0.69 V = 44 kPa
Bit 36 = 0.71 V = 45 kPa
Bit 37 = 0.73 V = 46 kPa
Bit 38 = 0.75 V = 47 kPa
Bit 39 = 0.76 V = 47 kPa
Bit 40 = 0.78 V = 48 kPa
Bit 41 = 0.80 V = 49 kPa
Bit 42 = 0.82 V = 50 kPa
Bit 43 = 0.84 V = 51 kPa
Bit 44 = 0.86 V = 52 kPa
Bit 45 = 0.88 V = 53 kPa
Bit 46 = 0.90 V = 54 kPa
Bit 47 = 0.92 V = 55 kPa
Bit 48 = 0.94 V = 56 kPa
Bit 49 = 0.96 V = 57 kPa
Bit 50 = 0.98 V = 58 kPa
Bit 51 = 1.00 V = 59 kPa
Bit 52 = 1.02 V = 60 kPa
Bit 53 = 1.04 V = 61 kPa
Bit 54 = 1.06 V = 62 kPa
Bit 55 = 1.08 V = 63 kPa
Bit 56 = 1.10 V = 64 kPa
Bit 57 = 1.12 V = 65 kPa
Bit 58 = 1.14 V = 66 kPa
Bit 59 = 1.16 V = 67 kPa
Bit 60 = 1.18 V = 68 kPa
Bit 61 = 1.20 V = 69 kPa
Bit 62 = 1.22 V = 70 kPa
Bit 63 = 1.24 V = 71 kPa
Bit 64 = 1.25 V = 72 kPa
Bit 65 = 1.27 V = 72 kPa
Bit 66 = 1.29 V = 73 kPa
Bit 67 = 1.31 V = 74 kPa
Bit 68 = 1.33 V = 75 kPa
Bit 69 = 1.35 V = 76 kPa
Bit 70 = 1.37 V = 77 kPa
Bit 71 = 1.39 V = 78 kPa
Bit 72 = 1.41 V = 79 kPa
Bit 73 = 1.43 V = 80 kPa
Bit 74 = 1.45 V = 81 kPa
Bit 75 = 1.47 V = 82 kPa
Bit 76 = 1.49 V = 83 kPa
Bit 77 = 1.51 V = 84 kPa
Bit 78 = 1.53 V = 85 kPa
Bit 79 = 1.55 V = 86 kPa
Bit 80 = 1.57 V = 87 kPa
Bit 81 = 1.59 V = 88 kPa
Bit 82 = 1.61 V = 89 kPa
Bit 83 = 1.63 V = 90 kPa
Bit 84 = 1.65 V = 91 kPa
Bit 85 = 1.67 V = 92 kPa
Bit 86 = 1.69 V = 93 kPa
Bit 87 = 1.71 V = 94 kPa
Bit 88 = 1.73 V = 95 kPa
Bit 89 = 1.75 V = 96 kPa
Bit 90 = 1.76 V = 97 kPa
Bit 91 = 1.78 V = 97 kPa
Bit 92 = 1.80 V = 98 kPa
Bit 93 = 1.82 V = 99 kPa
Bit 94 = 1.84 V = 100 kPa
Bit 95 = 1.86 V = 101 kPa
Bit 96 = 1.88 V = 102 kPa
Bit 97 = 1.90 V = 103 kPa
Bit 98 = 1.92 V = 104 kPa
Bit 99 = 1.94 V = 105 kPa
Bit 100 = 1.96 V = 106 kPa
Bit 101 = 1.98 V = 107 kPa
Bit 102 = 2.00 V = 108 kPa
Bit 103 = 2.02 V = 109 kPa
Bit 104 = 2.04 V = 110 kPa
Bit 105 = 2.06 V = 111 kPa
Bit 106 = 2.08 V = 112 kPa
Bit 107 = 2.10 V = 113 kPa
Bit 108 = 2.12 V = 114 kPa
Bit 109 = 2.14 V = 115 kPa
Bit 110 = 2.16 V = 116 kPa
Bit 111 = 2.18 V = 117 kPa
Bit 112 = 2.20 V = 118 kPa
Bit 113 = 2.22 V = 119 kPa
Bit 114 = 2.24 V = 120 kPa
Bit 115 = 2.25 V = 121 kPa
Bit 116 = 2.27 V = 121 kPa
Bit 117 = 2.29 V = 122 kPa
Bit 118 = 2.31 V = 123 kPa
Bit 119 = 2.33 V = 124 kPa
Bit 120 = 2.35 V = 125 kPa
Bit 121 = 2.37 V = 126 kPa
Bit 122 = 2.39 V = 127 kPa
Bit 123 = 2.41 V = 128 kPa
Bit 124 = 2.43 V = 129 kPa
Bit 125 = 2.45 V = 130 kPa
Bit 126 = 2.47 V = 131 kPa
Bit 127 = 2.49 V = 132 kPa
Bit 128 = 2.51 V = 133 kPa
Bit 129 = 2.53 V = 134 kPa
Bit 130 = 2.55 V = 135 kPa
Bit 131 = 2.57 V = 136 kPa
Bit 132 = 2.59 V = 137 kPa
Bit 133 = 2.61 V = 138 kPa
Bit 134 = 2.63 V = 139 kPa
Bit 135 = 2.65 V = 140 kPa
Bit 136 = 2.67 V = 141 kPa
Bit 137 = 2.69 V = 142 kPa
Bit 138 = 2.71 V = 143 kPa
Bit 139 = 2.73 V = 144 kPa
Bit 140 = 2.75 V = 145 kPa
Bit 141 = 2.76 V = 146 kPa
Bit 142 = 2.78 V = 146 kPa
Bit 143 = 2.80 V = 147 kPa
Bit 144 = 2.82 V = 148 kPa
Bit 145 = 2.84 V = 149 kPa
Bit 146 = 2.86 V = 150 kPa
Bit 147 = 2.88 V = 151 kPa
Bit 148 = 2.90 V = 152 kPa
Bit 149 = 2.92 V = 153 kPa
Bit 150 = 2.94 V = 154 kPa
Bit 151 = 2.96 V = 155 kPa
Bit 152 = 2.98 V = 156 kPa
Bit 153 = 3.00 V = 157 kPa
Bit 154 = 3.02 V = 158 kPa
Bit 155 = 3.04 V = 159 kPa
Bit 156 = 3.06 V = 160 kPa
Bit 157 = 3.08 V = 161 kPa
Bit 158 = 3.10 V = 162 kPa
Bit 159 = 3.12 V = 163 kPa
Bit 160 = 3.14 V = 164 kPa
Bit 161 = 3.16 V = 165 kPa
Bit 162 = 3.18 V = 166 kPa
Bit 163 = 3.20 V = 167 kPa
Bit 164 = 3.22 V = 168 kPa
Bit 165 = 3.24 V = 169 kPa
Bit 166 = 3.25 V = 170 kPa
Bit 167 = 3.27 V = 171 kPa
Bit 168 = 3.29 V = 171 kPa
Bit 169 = 3.31 V = 172 kPa
Bit 170 = 3.33 V = 173 kPa
Bit 171 = 3.35 V = 174 kPa
Bit 172 = 3.37 V = 175 kPa
Bit 173 = 3.39 V = 176 kPa
Bit 174 = 3.41 V = 177 kPa
Bit 175 = 3.43 V = 178 kPa
Bit 176 = 3.45 V = 179 kPa
Bit 177 = 3.47 V = 180 kPa
Bit 178 = 3.49 V = 181 kPa
Bit 179 = 3.51 V = 182 kPa
Bit 180 = 3.53 V = 183 kPa
Bit 181 = 3.55 V = 184 kPa
Bit 182 = 3.57 V = 185 kPa
Bit 183 = 3.59 V = 186 kPa
Bit 184 = 3.61 V = 187 kPa
Bit 185 = 3.63 V = 188 kPa
Bit 186 = 3.65 V = 189 kPa
Bit 187 = 3.67 V = 190 kPa
Bit 188 = 3.69 V = 191 kPa
Bit 189 = 3.71 V = 192 kPa
Bit 190 = 3.73 V = 193 kPa
Bit 191 = 3.75 V = 194 kPa
Bit 192 = 3.76 V = 195 kPa
Bit 193 = 3.78 V = 196 kPa
Bit 194 = 3.80 V = 196 kPa
Bit 195 = 3.82 V = 197 kPa
Bit 196 = 3.84 V = 198 kPa
Bit 197 = 3.86 V = 199 kPa
Bit 198 = 3.88 V = 200 kPa
Bit 199 = 3.90 V = 201 kPa
Bit 200 = 3.92 V = 202 kPa
Bit 201 = 3.94 V = 203 kPa
Bit 202 = 3.96 V = 204 kPa
Bit 203 = 3.98 V = 205 kPa
Bit 204 = 4.00 V = 206 kPa
Bit 205 = 4.02 V = 207 kPa
Bit 206 = 4.04 V = 208 kPa
Bit 207 = 4.06 V = 209 kPa
Bit 208 = 4.08 V = 210 kPa
Bit 209 = 4.10 V = 211 kPa
Bit 210 = 4.12 V = 212 kPa
Bit 211 = 4.14 V = 213 kPa
Bit 212 = 4.16 V = 214 kPa
Bit 213 = 4.18 V = 215 kPa
Bit 214 = 4.20 V = 216 kPa
Bit 215 = 4.22 V = 217 kPa
Bit 216 = 4.24 V = 218 kPa
Bit 217 = 4.25 V = 219 kPa
Bit 218 = 4.27 V = 220 kPa
Bit 219 = 4.29 V = 220 kPa
Bit 220 = 4.31 V = 221 kPa
Bit 221 = 4.33 V = 222 kPa
Bit 222 = 4.35 V = 223 kPa
Bit 223 = 4.37 V = 224 kPa
Bit 224 = 4.39 V = 225 kPa
Bit 225 = 4.41 V = 226 kPa
Bit 226 = 4.43 V = 227 kPa
Bit 227 = 4.45 V = 228 kPa
Bit 228 = 4.47 V = 229 kPa
Bit 229 = 4.49 V = 230 kPa
Bit 230 = 4.51 V = 231 kPa
Bit 231 = 4.53 V = 232 kPa
Bit 232 = 4.55 V = 233 kPa
Bit 233 = 4.57 V = 234 kPa
Bit 234 = 4.59 V = 235 kPa
Bit 235 = 4.61 V = 236 kPa
Bit 236 = 4.63 V = 237 kPa
Bit 237 = 4.65 V = 238 kPa
Bit 238 = 4.67 V = 239 kPa
Bit 239 = 4.69 V = 240 kPa
Bit 240 = 4.71 V = 241 kPa
Bit 241 = 4.73 V = 242 kPa
Bit 242 = 4.75 V = 243 kPa
Bit 243 = 4.76 V = 244 kPa
Bit 244 = 4.78 V = 245 kPa
Bit 245 = 4.80 V = 245 kPa
Bit 246 = 4.82 V = 246 kPa
Bit 247 = 4.84 V = 247 kPa
Bit 248 = 4.86 V = 248 kPa
Bit 249 = 4.88 V = 249 kPa
Bit 250 = 4.90 V = 250 kPa
Bit 251 = 4.92 V = 251 kPa
Bit 252 = 4.94 V = 252 kPa
Bit 253 = 4.96 V = 253 kPa
Bit 254 = 4.98 V = 254 kPa
Bit 255 = 5.00 V = 255 kPa
Här kan man se det:
Kod: Markera allt
vcc_max_bit = 5.0/255.0
bit = 0
pressure = 0
print "PRESSURE_TABLE ", "addwf ", "PCL,f"
while bit <= 255:
volts = (vcc_max_bit*bit)
kPa = (((volts/5.1) + 0.04) / 0.004)
print 'Bit', bit, ' = ', "%.2f" % volts, 'V', ' = ', "%.0f" % kPa, ' kPa'
#print " retlw ", "d'" + "%.0f" % kPa + "'"
bit = bit + 1
pressure = pressure + 1
För att få en färdig ASM tabell så är det bara att byta kommenteringen från den ena print till den andra....
@Sodjan, ska testa lite mer har självklart läst den appnoten från microchip några gånger men det har inte hjälpt mig hittils... Får testa lite mer också ta en titt på "Reading the flash program memory" har inte riktigt förståt hur det funkar med flash minnet än bara...
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 21:57:44
av sodjan
> har inte riktigt förståt hur det funkar med flash minnet än bara...
Fråga på bara, men kolla t.ex min kod först och exemplet i databladet.
Det är ju bara 10-15 rader ASM kod...
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 21:58:41
av Scorpiion
Ska göra det! Återkommer med fler frågor..

Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 22:11:52
av Swech
Din formel är m.a.o.
((Värde * 246) / 256) +10
Så ta ditt värde.
multiplicera med 246 Kolla datablad för multiplikation, bör finnas på din PIC
Ta den höga byten från ditt resultat -> samma som att ta resultat / 256
och addera 10...
Klart
ingen tabell behövs..
Swech
Re: PIC16F886 lookup tables
Postat: 24 maj 2009, 22:34:25
av Scorpiion
Haha MAGI!!!
Hur gjorde du det där?!?

Tänkte på att använda formel direkt liksom men att göra om den till nått som PICen förtod hade jag igen aning om att eller hur man kunde göra! Tänkte att det kanske inte var såå svårt i C men ja ville hålla mig till ASM... Men asm kan också om man vet hur..

(jag förstår att allt som kan göras i C kan göras i assembler också men ändå...)
Så en förklaring eller hänvisning till text för hur man gör skulle uppskattas väldigt!
