Hoi,

Weer een vraag van mij, na een paar uur zelf proberen heb ik toch wat hulp nodig.
Wie heeft voor mij de gouden tip ?
(ik wil niet het ADIN commando gebruiken, want dit werkt vaag)

Het gaat om de PIC18F2525 icm. Proton IDE.

Datasheet:
http://ww1.microchip.com/downloads/en/DeviceDoc/39564c.pdf

Pagina 183 ADCON0
Pagina 184 ADCON1

Probleem:
AN0 werkt zonder problemen maar AN1 krijg ik niet aan de praat.
Ze zouden bijde dezelfde waarde moeten geven.

Ingangen:
AN0 en AN1 zijn dmv. een draadje doorgelust, er staat dus de zelfde spanning op de 2 poorten.

LCD weergave:
http://www.teijgeler.net/lcd.jpg

Code:


DEVICE 18F2525
XTAL 20                                           ; Kristal van 20MHz

DELAYMS 100                             

; Ingangen en Uitgangen
;        76543210                                  Hulpregeltje
TRISA = %11111111                                 ; 0 = Uitgang / 1 = Ingang
TRISB = %11111111                                 ; 0 = Uitgang / 1 = Ingang
TRISC = %00000000                                 ; 0 = Uitgang / 1 = Ingang
;PORTB_PULLUPS ON              ;Pull-up voor DCF77 ontvanger en Test toets


; LCD
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
DECLARE LCD_DTPIN PORTB.0
DECLARE LCD_RSPIN PORTB.4
DECLARE LCD_ENPIN PORTB.5

; ADCON0 Register
SYMBOL ADCS1 = ADCON0.7   'A/D Conversion Clock Select bits
SYMBOL ADCS0 = ADCON0.6   'A/D Conversion Clock Select bits
SYMBOL CHS2 = ADCON0.5    'Analog Channel Select bits
SYMBOL CHS1 = ADCON0.4    'Analog Channel Select bits
SYMBOL CHS0 = ADCON0.3    'Analog Channel Select bits
SYMBOL GO_DONE = ADCON0.1 'A/D Conversion Status bit
SYMBOL ADON = ADCON0.0    'A/D On bit

; ADCON1 Register
SYMBOL ADFM = ADCON1.7    'A/D Result Format Select bit
SYMBOL ADCS2 = ADCON1.6   'A/D Conversion Clock Select bit
SYMBOL PCFG3 = ADCON1.3   'A/D Port Configuration Control bits
SYMBOL PCFG2 = ADCON1.2   'A/D Port Configuration Control bits
SYMBOL PCFG1 = ADCON1.1   'A/D Port Configuration Control bits
SYMBOL PCFG0 = ADCON1.0   'A/D Port Configuration Control bits

; INTCON Register
INTCON = %00000000

SYMBOL PEIE = INTCON.6 'Peripheral Interrupt Enable bit
SYMBOL ADIF = PIR1.6  'ADC Interupt bit
SYMBOL ADIE = PIE1.6  'ADC Interupt enabled bit

PEIE = 1
ADIE = 1
ADIF = 0

; Instellen A/D Conversion Clock Select bits
ADCS2 = 1
ADCS1 = 1
ADCS0 = 0

; Instellen Analog Channel Select bits (ingang)
CHS2 = 0
CHS1 = 0
CHS0 = 0

; Instellen A/D Result Format Select bit
ADFM = 1

; Instellen A/D Port Configuration Control bits
PCFG3 = 1 'AN0 + AN1 analoog, VREF- = AN3, VREF+ = AN4, de rest digitaal
PCFG2 = 1
PCFG1 = 0
PCFG0 = 1

DELAYMS 100
CLS                     

DIM Meting AS ADRES.WORD
DIM MetingBUF AS WORD
dim MVin as dword

     
WHILE 1 = 1                  ' Oneindige loop


 delayms 200
 
'AN0 meten
CHS2 = 0
CHS1 = 0
CHS0 = 0
 
'Een meting doen
ADON = 1                    'Aanzetten ADC Converter
DELAYms 1                   'Opladen condensators
GO_DONE = 1                 'ADC starten
WHILE ADIF = 0 : WEND       'Wachten totdat de ADC klaar is

ADON = 0                    'Uitzetten ADC Convereter 
ADIF = 0                    'Interruptbit op 0 zetten

MetingBUF = Meting >> 5     'Van een 16bit getal 10bits gebruiken

'AD Waarde omrekenen naar mv en weergeven op het LCD
PRINT AT 2,1, DEC MetingBUF, "  "
MetingBUF = MetingBUF - 6
MVin = MetingBUF * 2500 / 1017
PRINT AT 1,1, dec MVin, "mv  "

delayms 200                 'Even wachten tussen de 2 metingen
Meting = 0                  'Meting weer 0 maken
MetingBUF = 0               'MetingBUF weer 0 maken


'AN.1 meten
CHS2 = 0
CHS1 = 0
CHS0 = 1

'Een meting doen
ADON = 1                    'Aanzetten ADC Converter
DELAYms 1                   'Opladen condensators
GO_DONE = 1                 'ADC starten
WHILE ADIF = 0 : WEND       'Wachten totdat de ADC klaar is

ADON = 0                    'Uitzetten ADC Convereter 
ADIF = 0                    'Interruptbit op 0 zetten

MetingBUF = Meting >> 5     'Van een 16bit getal 10bits gebruiken

'AD Waarde omrekenen naar mv en weergeven op het LCD
PRINT AT 2,8, DEC MetingBUF, "  "
MetingBUF = MetingBUF - 6
MVin = MetingBUF * 2500 / 1017
PRINT AT 1,8, dec MVin, "mv  "

WEND                        ' Oneindige loop

END

Je definities van ADCON0 en ADCON1 kloppen niet. De bits zijn verkeerd aangeduid. Ook mis ik ADCON2.
Zie datasheet.

Heb je de definities van een andere PIC gebruikt soms?

Edit: ik zie dat je de verkeerde datasheet gebruikt.
Voor de 18F2525 moet je de datasheet van de 18F2525 pakken.

ADCON2 heeft de 18F2525 niet volgens mij.

Hmm...
http://ww1.microchip.com/downloads/en/DeviceDoc/39626d.pdf

Dit is een andere datasheet.
Daar staat wel een ADCON2 in. (ik ga ff kijken)

[Bericht gewijzigd door Kristian op (65%)]

Dit is jouw definitie:


SYMBOL CHS2 = ADCON0.5    'Analog Channel Select bits
SYMBOL CHS1 = ADCON0.4    'Analog Channel Select bits
SYMBOL CHS0 = ADCON0.3    'Analog Channel Select bits

Volgens de datasheet zijn Adcon 5,4, en 3 respectievelijk CHS3, CHS2 en CHS1.

Lekker lomp om een verkeerde datasheet te gebruiken.
Nu werkt het wel ;-)

Maarja je maakt fouten als je aan het leren bent.


DEVICE 18F2525
XTAL 20                                           ; Kristal van 20MHz

DELAYMS 100                             

; Ingangen en Uitgangen
;        76543210                                  Hulpregeltje
TRISA = %11111111                                 ; 0 = Uitgang / 1 = Ingang
TRISB = %11111111                                 ; 0 = Uitgang / 1 = Ingang
TRISC = %00000000                                 ; 0 = Uitgang / 1 = Ingang
;PORTB_PULLUPS ON              ;Pull-up voor DCF77 ontvanger en Test toets


; LCD
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
DECLARE LCD_DTPIN PORTB.0
DECLARE LCD_RSPIN PORTB.4
DECLARE LCD_ENPIN PORTB.5

; ADCON0 Register
SYMBOL CHS3 = ADCON0.5    'Analog Channel Select bits
SYMBOL CHS2 = ADCON0.4    'Analog Channel Select bits
SYMBOL CHS1 = ADCON0.3    'Analog Channel Select bits
SYMBOL CHS0 = ADCON0.2    'Analog Channel Select bits
SYMBOL GO_DONE = ADCON0.1 'A/D Conversion Status bit
SYMBOL ADON = ADCON0.0    'A/D On bit

; ADCON1 Register
symbol VCFG1 = adcon1.5   'Voltage Reference Configuration bit (VREF- source)
symbol VCFG0 = adcon1.4   'Voltage Reference Configuration bit (VREF+ source)
SYMBOL PCFG3 = ADCON1.3   'A/D Port Configuration Control bits
SYMBOL PCFG2 = ADCON1.2   'A/D Port Configuration Control bits
SYMBOL PCFG1 = ADCON1.1   'A/D Port Configuration Control bits
SYMBOL PCFG0 = ADCON1.0   'A/D Port Configuration Control bits

; ADCON2 Register
symbol ADFM = adcon2.7    'A/D Result Format Select bit
symbol ACQT2 = adcon2.5   'A/D Acquisition Time Select bits
symbol ACQT1 = adcon2.4   'A/D Acquisition Time Select bits
symbol ACQT0 = adcon2.3   'A/D Acquisition Time Select bits
symbol ADCS2 = adcon2.2   'A/D Conversion Clock Select bits
symbol ADCS1 = adcon2.1   'A/D Conversion Clock Select bits
symbol ADCS0 = adcon2.0   'A/D Conversion Clock Select bits

; INTCON Register
INTCON = %00000000

SYMBOL PEIE = INTCON.6 'Peripheral Interrupt Enable bit
SYMBOL ADIF = PIR1.6  'ADC Interupt bit
SYMBOL ADIE = PIE1.6  'ADC Interupt enabled bit

PEIE = 1
ADIE = 1
ADIF = 0

; Instellen Voltage Reference Configuration bit
VCFG1 = 1
VCFG0 = 1

; Instellen A/D Conversion Clock Select bits
ADCS2 = 1
ADCS1 = 1
ADCS0 = 0

; Instellen Analog Channel Select bits (ingang)
CHS3 = 0
CHS2 = 0
CHS1 = 0
CHS0 = 0

; Instellen A/D Result Format Select bit
ADFM = 0

; Instellen A/D Acquisition Time Select bits
ACQT2 = 1
ACQT1 = 1
ACQT0 = 1

; Instellen A/D Port Configuration Control bits
PCFG3 = 1 'AN0 + AN1 analoog, VREF- = AN3, VREF+ = AN4, de rest digitaal
PCFG2 = 0
PCFG1 = 1
PCFG0 = 1

DELAYMS 100
CLS                     

DIM Meting AS ADRES.WORD
DIM MetingBUF AS WORD
dim MVin as dword

     
WHILE 1 = 1                  ' Oneindige loop


 delayms 200
 
'AN0 meten
CHS3 = 0
CHS2 = 0
CHS1 = 0
CHS0 = 0
 
'Een meting doen
ADON = 1                    'Aanzetten ADC Converter
DELAYms 1                   'Opladen condensators
GO_DONE = 1                 'ADC starten
WHILE ADIF = 0 : WEND       'Wachten totdat de ADC klaar is

ADON = 0                    'Uitzetten ADC Convereter 
ADIF = 0                    'Interruptbit op 0 zetten

MetingBUF = Meting >> 5     'Van een 16bit getal 10bits gebruiken

'AD Waarde omrekenen naar mv en weergeven op het LCD
PRINT AT 2,1, DEC4 MetingBUF, " "
MetingBUF = MetingBUF - 6
MVin = MetingBUF * 2500 / 1017
PRINT AT 1,1, dec4 MVin, "mv "

delayms 200                 'Even wachten tussen de 2 metingen
Meting = 0                  'Meting weer 0 maken
MetingBUF = 0               'MetingBUF weer 0 maken


'AN.1 meten
CHS3 = 0
CHS2 = 0
CHS1 = 0
CHS0 = 1

'Een meting doen
ADON = 1                    'Aanzetten ADC Converter
DELAYms 1                   'Opladen condensators
GO_DONE = 1                 'ADC starten
WHILE ADIF = 0 : WEND       'Wachten totdat de ADC klaar is

ADON = 0                    'Uitzetten ADC Convereter 
ADIF = 0                    'Interruptbit op 0 zetten

MetingBUF = Meting >> 5     'Van een 16bit getal 10bits gebruiken

'AD Waarde omrekenen naar mv en weergeven op het LCD
PRINT AT 2,8, DEC4 MetingBUF, " "
MetingBUF = MetingBUF - 6
MVin = MetingBUF * 2500 / 1017
PRINT AT 1,8, dec4 MVin, "mv "

WEND                        ' Oneindige loop

END

Waarom gebruik je niet het commando "ADIN", die neemt een aantal taken van je over. Maar heeft trouwens niks met jouw probleem te maken.

Op 2 februari 2008 21:04:11 schreef marcob:
Waarom gebruik je niet het commando "ADIN", die neemt een aantal taken van je over. Maar heeft trouwens niks met jouw probleem te maken.

Ik wil juist leren hoe ik alle registers en configuratie bits goed moet zetten.
Dan word de rest ook een stuk makkelijker als je begrijpt hoe alles in elkaar zit.

Daar heb je wel helemaal gelijk aan, zo leer je het het best!