Sida 5 av 6

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 15:23:43
av sodjan
Vill bara instämma med "bos", det är alldeles för mycket kod för att orka med,
speciellt för "oss andra" som inte är speciellt motiverade... :-)

Gör ett liten test-case som enbart testar ADC'n tills du får det att fungera.
Du skulle t.ex kunna skriva ut ADRESH/L direkt till LCD'n och tolka
tecknen du får med hjälp av LCD'ns teckentabell, även om det ser skummt ut
så ska det i alla fall vara ganska stabilt. Räkna med att det normalt "fladdrar"
plus/minus 1-3 bitar.

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 17:23:46
av Scorpiion
Mhm.. Har gjort ett program nu som testar varje bit och skriver ut den.. Men fortfarande så blir det inte bra.. :/ Jag har dock en fundering på hur en sån här mätning ska kopplas (med tanke på minus/jord).

Jag har ett labbagg med tre utgångar, ett tar jag för att driva PIC och LCD, där är ju plus och minus inkopplade så att säga, men sen kopplar jag ju in plus från en utgång 2 och en till plus från en utgång 3... Men frågan är lite hur ska deras minus kopplas? Ska alla kopplas ihop mån tro eller inte? Eller ska jag kanske koppla det med det uttaget som jag har i mittet som är ett jorduttag... Sånt här labbagg har jag: (kanske lättare att se en bild än att förstå min förklaring.. :P )

http://www.conrad.se/?article=511142

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 18:44:48
av sodjan
Du måste ha en gemensam GND för *alla* spänningar.
Alla spänningar är ju alltid rellativa till något, vanligen GND.
Annars liggar spänningarna och "flyter" och kan hamna var som helst...

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 22:22:01
av Scorpiion
Yes nu har jag fått det att funka bra med ADCn! Jag tror det var något problem med nån av mina subrutiner, jag skrev om stora delar och nu funkar det kanon! Dock så har jag ett litet problem kvar, och det är det här med "meter under ytan" som jag ska visa på displayen och en tabell förstör som sagt hela programmet och jag får inte till det att "placera den rätt" heller (även om jag inte lagt ner allt för mycket tid på det..) utan istället så har jag försökt med det du föreslog Sodjan med table-read i flash och har kommit fram till den här koden eller lite modifieringar av tidigare nämd exempel kod:

Kod: Markera allt

calc_meters		macro		meters_under
	banksel eeadr               ; Change to right bank
;
	movlw   meters_under		; Move meters_under to W-reg
	movwf   eeadr

	call    get_meter_value		; Get "meters under surface" value from table
	call	lcd_send_data		; Send digit to LCD
	banksel porta               ; Change bank
;
	endm
********************************
get_meter_value
	banksel eecon1
	bsf     eecon1, eepgd   ; Read flash
	bsf     eecon1, rd      ; Set readflag
	nop                     ; Wait for reading to finish up
	nop
	banksel eedat
	movf    eedat, w        ; Put value into W-reg
	return

;**********************************************************************
METER_TABLE   CODE
; Table with the "meter under surface" values
meter1	db	0, d'0'
meter2	db	0, d'0'
meter3	db	0, d'0'			; MPASM Manual page 71 about db
meter4	db	0, d'0'
meter5	db	0, d'0'
Men det är en del saker som jag inte är riktigt säker på, i den andra huvudkoden sen får jag väl först anropa macrot med "calc_meters PRESSURE_ADC" för att skicka ADC värdet (0-255) till macrot. Check.

Sen så lägger jag det i W-reg och lägger till det till eeadr, dvs berättar vilken adress jag vill läsa, "callar" på nästan sub som läser av den adress jag tidigare angav, sen plockar det värdet och lägger det i W-reg för att skicka tillbaks det till macrot. Och efter det så skickar jag ju bara ut värdet.

Men nu till kanske frågan så att säga, kan jag skriva tabellen så som jag gjort ovan? Eller jag är ganska säker på att det är fel men vet inte hur jag ska göra för att skapa själva listan med värden. Värderna ska bara var d'0' till kanske d'9' och så en tio i rad plus av dom värderna, sen så är det en stor bit i början fylls upp med bara d'0' eftersom alla tryck lägre än lufttryck ska visa "0m under vattnet"...

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 22:27:40
av bearing
Jag förstår forfarande inte vad tabellen är till för. Är det fortfarande bara för att du vill lära dig hur tabeller används?

Var det inte just "meter under havet" som formeln y = 246*ADC/256 + 10 skapade?
Eller är det någon starkt olinjär funktion du försöker använda?

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 22:33:20
av Scorpiion
Alltså den formeln jag hade tidigare var ju för lyfttrycket... Den ger resultat mellan 10 och 255, men det här ska ju alltså vara "hur långt under vattnet befinner du dig nu?" uträknat med hjälp av lyfttrycket, och för att göra det enklast så istället för att jämföra med det "riktiga" lufttrycket jag får fram så kör jag bara med det ursprungliga ADC värdet (0-255) och gör en tabell för vilka lufttryck som ska göra att det visas "1 meter" eller "3 meter djupt"...

Var det här en bra förklaring? :)

Men det är klart kanske går att lösa utan tabell också... hm... men jag är lite osäker på hur...

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 23:05:58
av sodjan
Det finns väl olika anledningar till att använda en lookup-tabell istället
för att köra beräkningen direkt i koden. En kan vara att beräkningen i sig
är så pass komplex att den är svår att koda (vet inte om det är så här).
En annan att det går oerhört mycket snabbare att göra en tabell-slagning
på förberäknade värden än att beräkna dom vid run-time.

Jag har inte lusläst din kod, men den borde göra ungefär detta :

- Lägg startadresen till tabellen i eeadr/eeadrh, borde bli något i stil med:

Kod: Markera allt

        banksel eeadr               ; byt till rätt bank...
        movlw   METER_TABLE         ; bit 8-15 av adressen till start av tabellen
        movwf   eeadrh
        movlw   METER_TABLE         ; bit 0-7 av adressen till start av tabellen
        movwf   eeadr
Nu pekar alltså eeadr/eeadrh mot *första* entryt i din tabell!
Sedan lägg till ditt "index" till eeadr (och öka eeadrh med 1 om du fick en "carry").
Något i stil med (ej testat!):

Kod: Markera allt

        addwf    eeadr, f           ; lägg till "index".
        btfsc    status, C          ; fick vi en "carry" ?
        incf     eeadrh, f          ; Ja, öka höga adressen med 1!
Så, nu ska eeadr/eeadrh peka på rätt värde i din tabell
och du kan köra en läsning "som vanligt" enligt din "get_meter_value".

Du kan inte *bara* lägga till W till eeadr, det finns ju ingen garanti att tabellen börjar
på en jämt 256 byte gräns i minnet ! Den kan börja var som helst. Därför *måste*
du kolla C-flaggan och öka på övre adress-halvan (eeadrh) om det behövs.

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 23:21:42
av Scorpiion
Okey tack för tipsen! Men det här ser väl inte så bra ut? eller?

Kod: Markera allt

METER_TABLE   CODE
; Table with the "meter under surface" values
meter1   db   0, d'0'
meter2   db   0, d'0'
meter3   db   0, d'0'         ; MPASM Manual page 71 about db
meter4   db   0, d'0'
meter5   db   0, d'0'
Jag har bara lite svårt att koppla hur det här skulle hänga ihop med resten av koden så att säga... Hur vet den när den får en 2 att den ska leta rätt på värdet efter meter2? Eller är det här helt fel skrivet.... :/

Re: PIC16F886 lookup tables

Postat: 26 maj 2009, 23:30:49
av sodjan
Jag är inte helt säker på att "db" är korrekt, jag har använt "data".
Kolla upp om "db" är rätt här...

Sedan så kommer ju tabellen att börja på adressen METER_TABLE,
vilket för övrigt är detsamma som "meter1" i ditt exempel, så meter1
går också att använda vid laddningen av eeadr/eeadrh. Det kanske
blir snyggare så när jag tänker efter.

Resten av tabellen behöver inte ha egna labels (d.v.s meter2, meter3
o.s.v är onödiga. De gör ingen skada, men de används inte till något...)

Du sätter eeadr/eeadrh till denna adress och lägger till dit "index"
(d.v.s det värde du fick från ADC'n). Var det inte så du ville ha det ?
En tabell där första positionen är det värde du vill ha om ADC'n gav h'00',
det andra om ADC'n gav h'01' o.s.v till tabellens slut ?

> Hur vet den när den får en 2 att den ska leta rätt på värdet efter meter2?

Genom att du ökar eeadr/eeadrh med just 2 !
(Kanske att du behöver en meter0 också. Eller så får du
minsta W med ett innan. Men det ser du, eller hur ?)

Re: PIC16F886 lookup tables

Postat: 27 maj 2009, 02:00:55
av Scorpiion
Nu har jag gjort allt klart med tabellen och testat den men självklart så funkar den inte...... Exakt samma tendens som med den "vanliga" tabell jag hade tidigare, dvs alla andra tecken på lcdn blir bara streck och där värdet från tabellen ska visas är det rutan helfylld...

Tabellen ser ut så här nu iallafall:

Kod: Markera allt

METER_TABLE   CODE
; Table with the "meter under surface" values
meter0	data	 d'0'
data	 d'0'
data	 d'0'
data	 d'0'
data	 d'0'
data	 d'0'
data	 d'0'
....
...
Men som sagt så tror jag mitt problem är för att tabellen är så stor! (256 poster) Har försökt läsa map-filen men det tar som lite stop där just nu.. :/ Om det går att se nått i den så ser den ut så här:

Kod: Markera allt

MPLINK 4.30.01, Linker
Linker Map File - Created Wed May 27 01:58:15 2009

                                 Section Info
                  Section       Type    Address   Location Size(Bytes)
                ---------  ---------  ---------  ---------  ---------
             RESET_VECTOR       code   0x000000    program   0x000002
                   .cinit    romdata   0x000001    program   0x000004
              METER_TABLE       code   0x000003    program   0x000202
                     MAIN       code   0x000104    program   0x0001b4
                 LCD_CODE       code   0x0001de    program   0x00011a
                 DLY_CODE       code   0x00026b    program   0x000056
                 .config1       code   0x002007    program   0x000002
                 .config2       code   0x002008    program   0x000002
               SPLIT_VARS      udata   0x000020       data   0x000009
               CLOCK_VARS      udata   0x000029       data   0x000004
                 LCD_VARS      udata   0x000070       data   0x000007
                 ADC_VARS      udata   0x000077       data   0x000005
                  DLY_VAR      udata   0x00007c       data   0x000003



                              Program Memory Usage 
                               Start         End      
                           ---------   ---------      
                            0x000000    0x000295      
                            0x002007    0x002008      
            664 out of 8454 program addresses used, program memory utilization is 7%



                              Symbols - Sorted by Name
                     Name    Address   Location    Storage File                     
                ---------  ---------  ---------  --------- ---------                
             ADC_PRESSURE   0x000235    program     static C:\PIC\Dykdator\Dykdator.asm
                 ADC_TEMP   0x000242    program     static C:\PIC\Dykdator\Dykdator.asm
           BINARY_CONVERT   0x000204    program     static C:\PIC\Dykdator\Dykdator.asm
                CHECK_MIN   0x000263    program     static C:\PIC\Dykdator\Dykdator.asm
                CHECK_SEC   0x000253    program     static C:\PIC\Dykdator\Dykdator.asm
              CHECK_SEC_2   0x000258    program     static C:\PIC\Dykdator\Dykdator.asm
                    CLOCK   0x00024f    program     static C:\PIC\Dykdator\Dykdator.asm
              DELAY_100US   0x000284    program     static C:\PIC\Dykdator\Dykdator.asm
            DELAY_100US_0   0x000286    program     static C:\PIC\Dykdator\Dykdator.asm
                 DELAY_1S   0x00026b    program     static C:\PIC\Dykdator\Dykdator.asm
               DELAY_1S_0   0x000271    program     static C:\PIC\Dykdator\Dykdator.asm
                DELAY_5MS   0x00027a    program     static C:\PIC\Dykdator\Dykdator.asm
              DELAY_5MS_0   0x00027e    program     static C:\PIC\Dykdator\Dykdator.asm
                DELAY_LCD   0x000289    program     static C:\PIC\Dykdator\Dykdator.asm
              DELAY_LCD_0   0x00028f    program     static C:\PIC\Dykdator\Dykdator.asm
            DEL_TENS_LOOP   0x0001d9    program     static C:\PIC\Dykdator\Dykdator.asm
                 GET_HNDS   0x0001c5    program     static C:\PIC\Dykdator\Dykdator.asm
            GET_HNDS_LOOP   0x0001c7    program     static C:\PIC\Dykdator\Dykdator.asm
          GET_METER_VALUE   0x0001fa    program     static C:\PIC\Dykdator\Dykdator.asm
                 GET_ONES   0x0001d7    program     static C:\PIC\Dykdator\Dykdator.asm
                 GET_TENS   0x0001ce    program     static C:\PIC\Dykdator\Dykdator.asm
            GET_TENS_LOOP   0x0001d0    program     static C:\PIC\Dykdator\Dykdator.asm
                   INC_M1   0x00025f    program     static C:\PIC\Dykdator\Dykdator.asm
                   INC_M2   0x000268    program     static C:\PIC\Dykdator\Dykdator.asm
         LCD_INIT_HD44780   0x0001de    program     static C:\PIC\Dykdator\Dykdator.asm
           LCD_SEND_4_BIT   0x000217    program     static C:\PIC\Dykdator\Dykdator.asm
            LCD_SEND_BYTE   0x00022c    program     static C:\PIC\Dykdator\Dykdator.asm
             LCD_SEND_CMD   0x000220    program     static C:\PIC\Dykdator\Dykdator.asm
            LCD_SEND_DATA   0x000226    program     static C:\PIC\Dykdator\Dykdator.asm
             LCD_TOGGLE_E   0x000210    program     static C:\PIC\Dykdator\Dykdator.asm
                   METER0   0x000003    program     static C:\PIC\Dykdator\Dykdator.asm
                    MPY_F   0x00018e    program     static C:\PIC\Dykdator\Dykdator.asm
           PRESSURE_SPLIT   0x0001b3    program     static C:\PIC\Dykdator\Dykdator.asm
                    START   0x000104    program     static C:\PIC\Dykdator\Dykdator.asm
               TEMP_SPLIT   0x0001bc    program     static C:\PIC\Dykdator\Dykdator.asm
                WRITE_LCD   0x000127    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0007   0x000272    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0009   0x000274    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_000C   0x000277    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0014   0x00027f    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0017   0x000282    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0025   0x000290    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0027   0x000292    program     static C:\PIC\Dykdator\Dykdator.asm
           _LCD_CODE_005E   0x00023c    program     static C:\PIC\Dykdator\Dykdator.asm
           _LCD_CODE_006B   0x000249    program     static C:\PIC\Dykdator\Dykdator.asm
                       D1   0x00007c       data     static C:\PIC\Dykdator\Dykdator.asm
                       D2   0x00007d       data     static C:\PIC\Dykdator\Dykdator.asm
                       D3   0x00007e       data     static C:\PIC\Dykdator\Dykdator.asm
                   H_BYTE   0x000075       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
                   L_BYTE   0x000076       data     static C:\PIC\Dykdator\Dykdator.asm
                       M1   0x000029       data     static C:\PIC\Dykdator\Dykdator.asm
                       M2   0x00002a       data     static C:\PIC\Dykdator\Dykdator.asm
                     MASK   0x000074       data     static C:\PIC\Dykdator\Dykdator.asm
             PRESSURE_ADC   0x000078       data     static C:\PIC\Dykdator\Dykdator.asm
            PRESSURE_HNDS   0x000020       data     static C:\PIC\Dykdator\Dykdator.asm
               PRESSURE_M   0x00007b       data     static C:\PIC\Dykdator\Dykdator.asm
            PRESSURE_ONES   0x000022       data     static C:\PIC\Dykdator\Dykdator.asm
             PRESSURE_RES   0x00007a       data     static C:\PIC\Dykdator\Dykdator.asm
            PRESSURE_TENS   0x000021       data     static C:\PIC\Dykdator\Dykdator.asm
                       S1   0x00002b       data     static C:\PIC\Dykdator\Dykdator.asm
                       S2   0x00002c       data     static C:\PIC\Dykdator\Dykdator.asm
                       T1   0x000028       data     static C:\PIC\Dykdator\Dykdator.asm
                 TEMP_ADC   0x000077       data     static C:\PIC\Dykdator\Dykdator.asm
                TEMP_HNDS   0x000023       data     static C:\PIC\Dykdator\Dykdator.asm
                TEMP_ONES   0x000025       data     static C:\PIC\Dykdator\Dykdator.asm
                 TEMP_RES   0x000079       data     static C:\PIC\Dykdator\Dykdator.asm
                TEMP_TENS   0x000024       data     static C:\PIC\Dykdator\Dykdator.asm
                       W1   0x000026       data     static C:\PIC\Dykdator\Dykdator.asm
                       W2   0x000027       data     static C:\PIC\Dykdator\Dykdator.asm
                        X   0x000072       data     static C:\PIC\Dykdator\Dykdator.asm
                        Y   0x000073       data     static C:\PIC\Dykdator\Dykdator.asm



                              Symbols - Sorted by Address
                     Name    Address   Location    Storage File                     
                ---------  ---------  ---------  --------- ---------                
                   METER0   0x000003    program     static C:\PIC\Dykdator\Dykdator.asm
                    START   0x000104    program     static C:\PIC\Dykdator\Dykdator.asm
                WRITE_LCD   0x000127    program     static C:\PIC\Dykdator\Dykdator.asm
                    MPY_F   0x00018e    program     static C:\PIC\Dykdator\Dykdator.asm
           PRESSURE_SPLIT   0x0001b3    program     static C:\PIC\Dykdator\Dykdator.asm
               TEMP_SPLIT   0x0001bc    program     static C:\PIC\Dykdator\Dykdator.asm
                 GET_HNDS   0x0001c5    program     static C:\PIC\Dykdator\Dykdator.asm
            GET_HNDS_LOOP   0x0001c7    program     static C:\PIC\Dykdator\Dykdator.asm
                 GET_TENS   0x0001ce    program     static C:\PIC\Dykdator\Dykdator.asm
            GET_TENS_LOOP   0x0001d0    program     static C:\PIC\Dykdator\Dykdator.asm
                 GET_ONES   0x0001d7    program     static C:\PIC\Dykdator\Dykdator.asm
            DEL_TENS_LOOP   0x0001d9    program     static C:\PIC\Dykdator\Dykdator.asm
         LCD_INIT_HD44780   0x0001de    program     static C:\PIC\Dykdator\Dykdator.asm
          GET_METER_VALUE   0x0001fa    program     static C:\PIC\Dykdator\Dykdator.asm
           BINARY_CONVERT   0x000204    program     static C:\PIC\Dykdator\Dykdator.asm
             LCD_TOGGLE_E   0x000210    program     static C:\PIC\Dykdator\Dykdator.asm
           LCD_SEND_4_BIT   0x000217    program     static C:\PIC\Dykdator\Dykdator.asm
             LCD_SEND_CMD   0x000220    program     static C:\PIC\Dykdator\Dykdator.asm
            LCD_SEND_DATA   0x000226    program     static C:\PIC\Dykdator\Dykdator.asm
            LCD_SEND_BYTE   0x00022c    program     static C:\PIC\Dykdator\Dykdator.asm
             ADC_PRESSURE   0x000235    program     static C:\PIC\Dykdator\Dykdator.asm
           _LCD_CODE_005E   0x00023c    program     static C:\PIC\Dykdator\Dykdator.asm
                 ADC_TEMP   0x000242    program     static C:\PIC\Dykdator\Dykdator.asm
           _LCD_CODE_006B   0x000249    program     static C:\PIC\Dykdator\Dykdator.asm
                    CLOCK   0x00024f    program     static C:\PIC\Dykdator\Dykdator.asm
                CHECK_SEC   0x000253    program     static C:\PIC\Dykdator\Dykdator.asm
              CHECK_SEC_2   0x000258    program     static C:\PIC\Dykdator\Dykdator.asm
                   INC_M1   0x00025f    program     static C:\PIC\Dykdator\Dykdator.asm
                CHECK_MIN   0x000263    program     static C:\PIC\Dykdator\Dykdator.asm
                   INC_M2   0x000268    program     static C:\PIC\Dykdator\Dykdator.asm
                 DELAY_1S   0x00026b    program     static C:\PIC\Dykdator\Dykdator.asm
               DELAY_1S_0   0x000271    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0007   0x000272    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0009   0x000274    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_000C   0x000277    program     static C:\PIC\Dykdator\Dykdator.asm
                DELAY_5MS   0x00027a    program     static C:\PIC\Dykdator\Dykdator.asm
              DELAY_5MS_0   0x00027e    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0014   0x00027f    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0017   0x000282    program     static C:\PIC\Dykdator\Dykdator.asm
              DELAY_100US   0x000284    program     static C:\PIC\Dykdator\Dykdator.asm
            DELAY_100US_0   0x000286    program     static C:\PIC\Dykdator\Dykdator.asm
                DELAY_LCD   0x000289    program     static C:\PIC\Dykdator\Dykdator.asm
              DELAY_LCD_0   0x00028f    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0025   0x000290    program     static C:\PIC\Dykdator\Dykdator.asm
           _DLY_CODE_0027   0x000292    program     static C:\PIC\Dykdator\Dykdator.asm
            PRESSURE_HNDS   0x000020       data     static C:\PIC\Dykdator\Dykdator.asm
            PRESSURE_TENS   0x000021       data     static C:\PIC\Dykdator\Dykdator.asm
            PRESSURE_ONES   0x000022       data     static C:\PIC\Dykdator\Dykdator.asm
                TEMP_HNDS   0x000023       data     static C:\PIC\Dykdator\Dykdator.asm
                TEMP_TENS   0x000024       data     static C:\PIC\Dykdator\Dykdator.asm
                TEMP_ONES   0x000025       data     static C:\PIC\Dykdator\Dykdator.asm
                       W1   0x000026       data     static C:\PIC\Dykdator\Dykdator.asm
                       W2   0x000027       data     static C:\PIC\Dykdator\Dykdator.asm
                       T1   0x000028       data     static C:\PIC\Dykdator\Dykdator.asm
                       M1   0x000029       data     static C:\PIC\Dykdator\Dykdator.asm
                       M2   0x00002a       data     static C:\PIC\Dykdator\Dykdator.asm
                       S1   0x00002b       data     static C:\PIC\Dykdator\Dykdator.asm
                       S2   0x00002c       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
                        X   0x000072       data     static C:\PIC\Dykdator\Dykdator.asm
                        Y   0x000073       data     static C:\PIC\Dykdator\Dykdator.asm
                     MASK   0x000074       data     static C:\PIC\Dykdator\Dykdator.asm
                   H_BYTE   0x000075       data     static C:\PIC\Dykdator\Dykdator.asm
                   L_BYTE   0x000076       data     static C:\PIC\Dykdator\Dykdator.asm
                 TEMP_ADC   0x000077       data     static C:\PIC\Dykdator\Dykdator.asm
             PRESSURE_ADC   0x000078       data     static C:\PIC\Dykdator\Dykdator.asm
                 TEMP_RES   0x000079       data     static C:\PIC\Dykdator\Dykdator.asm
             PRESSURE_RES   0x00007a       data     static C:\PIC\Dykdator\Dykdator.asm
               PRESSURE_M   0x00007b       data     static C:\PIC\Dykdator\Dykdator.asm
                       D1   0x00007c       data     static C:\PIC\Dykdator\Dykdator.asm
                       D2   0x00007d       data     static C:\PIC\Dykdator\Dykdator.asm
                       D3   0x00007e       data     static C:\PIC\Dykdator\Dykdator.asm

Re: PIC16F886 lookup tables

Postat: 27 maj 2009, 02:05:40
av bearing
Datan är ju 0, det är kanske anledningen till fyrkanten.

Funkar programmet i simuleringen?

Testa att ta bort några data så att tabellen inte passerar 0x100, så vet du om det är storleken som är felet.

Re: PIC16F886 lookup tables

Postat: 27 maj 2009, 02:14:54
av Scorpiion
Hur menar du med att datan är 0? Den borde inte vara noll eftersom det ligger spänning på ADC ingången... Jag får inte till det att simulera med AD omvandling i MPLAB... :/ Försökte med någon sån stimulus fil men tror jag var inne på rätt spår men fick inte till det riktigt..

Ska testa ta bort några posten... Men vad är det som händer vid 0x100? Är det en gräns för en page?

Re: PIC16F886 lookup tables

Postat: 27 maj 2009, 02:22:05
av bearing

Kod: Markera allt

METER_TABLE   CODE
; Table with the "meter under surface" values
meter0   data    d'0'
data    d'0'
....
Det var det här jag menade med att datan är 0. Alla värden ur tabellen som skickas till displayen är 0. 0 kanske är en fylld fyrkant i displayens teckentabell.
EDIT: Lägg till a'0' till datan från tabellen innan den skickas.

Varför resten av displayen blir '-' förstår jag inte.

Nej 0x100 är 256, så det är ju inte en hel sida, men det är större än 255 som är största värdet för en 8-bitars variabel. Jag minns inte om det hade någon betydelse.

Simuleringen av AD-omvandlingen kan du lösa genom att kommentera bort raden som väntar på om omvandlingen är klar, och sedan sätta registrena till önskade värden.

Re: PIC16F886 lookup tables

Postat: 27 maj 2009, 02:47:02
av Scorpiion
Har lyckats köra lite simulering nu och kommit fram till att det är min gamla och korta tabell för att göra om från binärt till ASCII som gör jätte konstiga hopp... Antar att den hamnat på en annan page kasnke? Eller i en annan bank? Jag har fortfarande inte riktigt fattat den biten till 100%...

Re: PIC16F886 lookup tables

Postat: 27 maj 2009, 02:53:29
av bearing
Jag minns att du postade koden för en retlw-tabell förut, hittar den inte nu. Den behövs som sagt inte, och jag trodde du hade skrotat den.

För det är ju som sagt enklare att addera a'0' än att använda tabellen.