PIC16F886 lookup tables

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg 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! :)
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: PIC16F886 lookup tables

Inlägg 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.
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg 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.. :/
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC16F886 lookup tables

Inlägg 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...
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg 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

Kod: Markera allt

	lcd_text 	TEMP2
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...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC16F886 lookup tables

Inlägg 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
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: PIC16F886 lookup tables

Inlägg 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.
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg 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.. :P 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

sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC16F886 lookup tables

Inlägg 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".
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: PIC16F886 lookup tables

Inlägg 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
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg 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...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC16F886 lookup tables

Inlägg 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...
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg av Scorpiion »

Ska göra det! Återkommer med fler frågor.. :)
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: PIC16F886 lookup tables

Inlägg 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
Scorpiion
Inlägg: 380
Blev medlem: 24 januari 2008, 20:56:06
Ort: Umeå

Re: PIC16F886 lookup tables

Inlägg av Scorpiion »

Haha MAGI!!! :D

Hur gjorde du det där?!? :P 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.. :P (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! :)
Skriv svar