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..

)
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.