Ik denk dat je ADCON niet klopt (zonder na te kijken), kijk eens wat het ADCON register doet (datasheet pic onder ADC ding)
Op 18 januari 2010 10:44:50 schreef TechnOoB12:
demo versie kan idd alleen die twee, maar daarvoor heb ik mijn contacten. ik gooi de boel in een kladblok bestand, en mijn contact verandert de andere dingen die dan nog nodig zijn.
Handig is anders, toch maar even iets meer dan €100 sparen.
TRISA = %00000001 ' Configure AN0 (PORTA.0) as an input ADCON1 = %10000000 ' Set analogue input on PORTA.0moet dit niet bovenaan het programma?
Na je TRISA en voordat je gaat samplen, of wil je nog hoger bovenaan?
Let op! Voordat je TRISA doet altijd even
PORTA = %00000000
gebruiken.
en waarom is het niet ADCON1 = %10000000?
Goede vraag, de MSB heeft een andere functie: Right Justified.
Kijk ook even naar de vetgedrukte veranderingen, consequent blijven.
ook:
DECLARE ADIN_RES 10dat is de enige die ik echt niet begrijp.
de gemeten waarde wordt dus in 10 bits weergven.
maar hoe is dei weergave? hoe ziet die eruit?
als er 1,9V op de pin staat en ik doe
VAR1= ADIN 0 * 10wordt de variabele dan binair geschreven in cijfers, dus 0000000019?
10 bits resolutie, en het hoogste decimale getal dat je in 10 bits kan stoppen is 1023. vandaar dat je een word nodig hebt om dit uit te kunnen lezen.
Een kleine edit: Denk om de functie van ADCON1, je hebt met TRISA al de analoge ingangen bepaald, dat doet ADCON1 nog een keer, maar dan anders.
Op 18 januari 2010 19:02:41 schreef Bas Smit:
Ik denk dat je ADCON niet klopt (zonder na te kijken), kijk eens wat het ADCON register doet (datasheet pic onder ADC ding)
Het voorbeeld klopt, bit 7 is het ADFM bit, en formateert de output van de ADC.
De rest staat op 0.
Bit 6: ADSC - FRC clock conversion
Bit 5-4: not used
Bit 3-0: FCFG - 8 analoge ingangen en referenties aan Vdd en Vss.
Hier heb je nog een voorbeeld. Het is 8_bit's maar dan is het per stap 0.019VDC.
Device 16F877A ; processor type
Config HS_OSC,_ ; cristal groter dan 4MHz
WDT_OFF,_ ; Watchdog Timer Enable uit
PWRTE_ON,_ ; Power-up Timer Enable aan
BODEN_OFF,_ ; Brown-out Reset Enable uit
LVP_OFF,_ ; Low Voltage Programming uit
CPD_OFF,_ ; Memory Code Protection uit
WRTE_ON,_ ; Program Memory Write Enable aan
DEBUG_ON,_ ; In-Circuit Debugger Mode aan
CP_OFF ; Code Protection uit
XTAL 20 ; crystal 20 mhz
ALL_DIGITAL True ; alle poorten digitaal
Symbol On = 1 ; 1 is hoog
Symbol off = 0 ; 0 is laag
Symbol led_1 = PORTA.1 ; poort a.1 is uitgang
Declare ADIN_RES = 8 ; resolutie 8 bits
Declare ADIN_TAD = frc ; set RC osc
Declare ADIN_STIME = 50 ; sample tijd 5
Dim waarde As Byte ; variabele waarde 0 t / m 255
Clear ; wis geheugen
DelayMS 2000 ; wacht 2 seconden
;poortA 543210 ; hulp regel poort a
PORTA = %00000 ; poort a is laag
TRISA = %00001 ; poort a.1 als uitgang
ADCON0 = %00001 ; analooge ingang 0
start:
waarde = ADIn 0
If waarde > 100 Then
led_1 = On
Else led_1 = off
EndIf
GoTo start
End
Misschien even aanpassen voor jou processor.
@henry
"stel, ik wil meten op porta.4
dan zou het worden
ADCON1 = %00001000"
Ik krijg de indruk dat technoob denkt dat het bitje bepaald welke ingang je als analoog gebruikt. Dus dat ADCON1 hetzelfde werkt als het TRIS of het PORT register.
0000, 0001 en 0010 doen net zo goed A4 als analoog.
Dat vermoeden heb ik ook, vandaar mijn toevoeging.
0000, 0001 en 0010 doen net zo goed A4 als analoog.
Alleen 0000 en 0010 zul goed werken. Bij 0001 wordt de V+ referentie op port A3 verwacht.
Op 18 januari 2010 19:43:27 schreef Bas Smit:
Ik krijg de indruk dat technoob denkt dat het bitje bepaald welke ingang je als analoog gebruikt. Dus dat ADCON1 hetzelfde werkt als het TRIS of het PORT register.
Bij 8_bits klopt dat inderdaat, maar dan wel met ADCON0
@ TechnOoB12.
Kijk eens in deze sheet op blz_114, daar staat hoe je de instellingen moet zetten onder ADCON1. Dit is voor de 16F877.
http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf
[Bericht gewijzigd door Lambiek op (24%)]
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
ontzettend bedankt allemaal!
hier heb ik echt wat aan:)
Op 18 januari 2010 19:43:27 schreef Bas Smit:
Ik krijg de indruk dat technoob denkt dat het bitje bepaald welke ingang je als analoog gebruikt. Dus dat ADCON1 hetzelfde werkt als het TRIS of het PORT register.
eh ja... 
om maar even het schema wat ik in gedachten had te posten:
er is nog wel een wijziging: port 4 van het LCD zit aan pin 16 en pin 16 van het LCD aan pin 15.
Px is om Vref+ te krijgen, daarom hangt ie als enigae aan 12V, anders kun je hem niet goed afstellen. de 12V is goed stabiel.
er zijn nog veel dingen die ik moet zeggen, vertellen en moet opmerken maar ik heb nog niet gegeten en mijn maag protesteert, dus tot zo dan. 
marcob
Honourable Member
People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years
Die 12 Volt gaat je PIC niet leuk vinden. Ook zit dat niet goed aangesloten zo, door de hoge ingangsimpedantie van de PIC ingang, staat op RA2 en RA3 12 Volt. Ook doet Rx niet veel.
Zoek het internet maar eens af naar voorbeelden hoe het wel gaat.
EDIT: 20 seconden zoeken in Google Images: Hier zie je een voorbeeld
[Bericht gewijzigd door marcob op (27%)]
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
oew, nog wel vergeten,
Vreg- hangt aan de GND, anders is Px geen goede deler natuurlijk.
@lambiek
Op 18 januari 2010 19:31:55 schreef Lambiek:
;poortA 543210 ; hulp regel poort a PORTA = %00000 ; poort a is laag TRISA = %00001 ; poort a.1 als uitgang ADCON0 = %00001 ; analooge ingang 0
ok, porta is laag, maar porta.0 als ingang toch?
met porta.1 als uitgang was het dan
trisa % 00010geweest
Jochem
If you want to succeed, double your failure rate.
Op 19 januari 2010 10:05:22 schreef TechnOoB12:
oew, nog wel vergeten,
Vreg- hangt aan de GND, anders is Px geen goede deler natuurlijk.
Nu kun je alsnog tot 12V regelen, dat wil je niet (zie VREF+,MAX in datasheet).
Op 18 januari 2010 19:31:55 schreef Lambiek:
;poortA 543210 ; hulp regel poort a PORTA = %00000 ; poort a is laag TRISA = %00001 ; poort a.1 als uitgang ADCON0 = %00001 ; analooge ingang 0
Op 19 januari 2010 10:05:22 schreef TechnOoB12:
ok, porta is laag, maar porta.0 als ingang toch?
met porta.1 als uitgang was het dantrisa % 00010geweest
Er staat zelfs nog een hulpregeltje bij met 543210. Jouw TRISA=%00010 (zorg dat je notatie klopt, ook in een voorbeeld!) zet a.0 als uitgang en a.1 als ingang. Die van Lambiek klopt gewoon.
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
hm. nu mmoet ik even goed nadenken bij wat ik zeg want ik ben lekker aan het klooien hier.
@ jochem
das waar ook... had beter moeten kijken..
Op 18 januari 2010 18:57:48 schreef Kevinoud:
de weergave is 10 bits0V = waarde 0
2,5V = waarde 512
5V = waarde 1023
dan zou
1V= 205 zijn..
1/205 is 0.0048
dus 0.0048 volt per stap..
als ik de waarde ( stel even 300) in een variabele stop.
variabele heet kees:)
dan typ ik
print at 1, 1, "voltage = ",kees * 0.0048,"volt"krig ik dan de actuele gemeten waarde...?
moet dan wel met Declare ADIN_RES = 10
Jochem
If you want to succeed, double your failure rate.
Is in PICBASIC de string concatenater een komma? Ik zou het je niet durven zeggen namelijk (meeste BASIC dialecten volgens mij &), maar verder lijkt me de redenatie wel enigszins kloppen.
Liever gebruik je echter een DEFINE (wat is daar de BASIC tegenhanger van??) voor je 5/1023=0.0048, want je hebt nu al een afrondingsfout (moet 0.0049 zijn, en zelfs dan heb je nog een onnauwkeurigheid) die natuurlijk verder toeneemt bij vermenigvuldiging. Ik weet ook niet hoe gelukkig PICBASIC wordt van floats, maar door eerst met 5 te vermenigvuldigen en daarna genoegen te nemen met een deling door 1024 kun je 10 keer shiften, das veel gunstiger (een deling door 1024 zal PICBASIC zelf wel een shift van maken mag ik hopen).
marcob
Honourable Member
People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years
Hier een compleet voorbeeld uit de Help van Proton:
DEVICE = 16F877
XTAL = 4
ADIN_RES = 10 ' 10-bit result required
ADIN_TAD = FRC ' RC OSC chosen
ADIN_DELAY = 50 ' Allow 50us sample time
DIM RAW AS WORD
DIM VOLTS AS FLOAT
SYMBOL QUANTA = 5.0 / 1024 ' Calculate the quantising value
CLS
TRISA = %00000001 ' Configure AN0 (PORTA.0) as an input
ADCON1 = %10000000 ' Set analogue input on PORTA.0
AGAIN:
RAW = ADIN 0
VOLTS = RAW * QUANTA
PRINT AT 1,1,DEC2 VOLTS,"V "
GOTO AGAIN
Dat licht er aan wat je wil, moet het heel precies dan ga je voor 10_BITS en anders voor 8_bits.
En kijk eens naar het voorbeeld wat ik gestuurd heb, daar staat het precies in, de variabele dan hé.
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
dat is een hele mooie marcob. zoiets was eigenlijk precies wat ik zocht, alleen dan voor een iets andere pic( maar die wijzigingen lijken mij niet al te groot)
en een andere poort. ipv porta.0 wilde ik porta.4 gebruiken.
om de meting te laten slagen moet ik neem ik aan een exacte spanning van 5V op pin Vref+ zetten en de Vref- aan de GND van die referentiespanning hangen.
stel, dat ik er exact 1V op zet. dan is 1023 gelijk aan 1V, en is een stap 0.0097 V als ik me niet vergis. dat is voor mij handiger gezien i spanningen tot 80V meet met een 1% spanningsregelssr waarin 80V dus uitkomt als 800 millivolt. (dat zou als uitlezing 818 geven)
verder gebruik ik geen extern kristal al is dat nog wel mogelijk.
is dat cruciaal? ik wilde eigenlijk voor de interne oscillator gaan.
@ lambiek
ik wilde voor 10 bits resolutie gaan. dan zal ik de variabele als word moeten hebben, byte is niet genoeg.
ik heb al ontzettend veel geleerd dit topic, en als watik nu geschrevenheb klopt, is er nog maar een ding wat ik niet begrijp.
en dat zijn die
TRISA = %00000001 ' Configure AN0 (PORTA.0) as an input
ADCON1 = %10000000 ' Set analogue input on PORTA.0dingen.
ik moet de mijne op AN4 hebben, en op de 16F818 is dat gelijk aan RA4. wat moet ik nu wijzigen?
Jochem
If you want to succeed, double your failure rate.
Kun je mij vertellen op welke pagina van de datasheet ADCON1 beschreven wordt? Welk deel daaruit begrijp je niet?
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
in de datasheet van de juiste PIC;
http://oap.sourceforge.net/datasheets/PIC16F819.pdf
pagina 83.
-ADCON0
ik begrijp bit 2 niet en bit 7&6 niet helemaal.
en waar ik dit in mijn programma moet plaatsen.
naar mijn idee zou het zo moeten zijn:
ADCON0 = %11001?01
ik gebruik de interne osc dus dat is in beide gevallen 11 denk ik.
verder uilezen op RA4/AN4
-ADCON1
bit 7 zegt mij niks.
bij bit 0-3 staat niet wat ik wil hebben,
ik moet hebben:
AN4 analog
AN3 vref
AN2 vref
AN1 Digital
AN0 digital
zo kom ik nu uit op
ADCON1 = %?000????
van beiden weet ik niet waar ik het in mijn prog moet plaatsen.
als je mijn prog wilt zien, post ik hem straks wel.
EDIT:
ben ook een stapje verdermet Config. words.
CP_OFF, CPD_OFF, LVP_OFF,BOREN_OFF,MCLRE_OFF, PWRTE_ON,WDTE_OFF,INTRC_OSC_CLKOUT,WRT1_OFF,WRT0_OFF, DEBUG_OFFalleen CCPMX ben ik niet uit.
ik wil die functie helemaal niet:)
[Bericht gewijzigd door The Engineer op (16%)]
Jochem
If you want to succeed, double your failure rate.
Okee, nu geef je tenminste wat aan.
Op 19 januari 2010 13:48:45 schreef TechnOoB12:
ik begrijp bit 2 niet en bit 7&6 niet helemaal.
ADCON0.2 (GO/#DONE) moet jij setten (1) op het moment dat je hem wilt samplen. Zodra hij 0 is geworden is je PIC klaar en staat het resultaat voor je in het betreffende register. Zie ook 11.4, staat ook nog een tijdlijn bij.
Het verhaal over bit 6&7 wordt toch prima (met voorbeeldtabel) uitgelegd in 11.2? Wat snap je daar niet aan?
ik gebruik de interne osc dus dat is in beide gevallen 11 denk ik.
Nee, zo werkt dat niet, staat erboven:
The A/D converter has a unique feature of being able
to operate while the device is in SLEEP mode. To operate
in SLEEP, the A/D conversion clock must be
derived from the A/D’s internal RC oscillator.
Verder 11.2 lezen.
verder uilezen op RA4/AN4
Hoe kom je op 001 voor bits 5-3 dan??
-ADCON1
bit 7 zegt mij niks.
En terwijl 11.4.1 het nog wel voor je uitlegt, samen met figuur 11-4.
Stel we hebben decimaal het getal 1023 (binair 10-bits 'aan', dus maximaal)
_____________________
| ADRESH : ADRESL |
| 76543210 : 76543210 |
|__________:__________|
left | 11111111 : 11xxxxxx |
right | xxxxxx11 : 11111111 |
'---------------------'
De 'x' is ongedefinieerd, immers is het maar een 10-bit ADC.
Als je die 10 bits allemaal gebruikt wil je waarschijnlijk right-justification. Je most significant bits zitten dan in ADRESH, dus moet je truuks gaan uithalen om die te bewaren. Als je met 8-bits genoeg neemt (die laatste staan misschien toch maar te klapperen vanwege een niet-toereikend analoog circuit) kun je veel beter left justification pakken. In het tabelletje hierboven zie je dat de bits die je dan eigenlijk niet nodig hebt de enige zijn die in ADRESL staan. ADRESH bevat dus effectief de 8-bits ADC waarde die je dan wilt hebben.
Maar ik kan me ook voorstellen dat PICBASIC dat allemaal lekker voor je interfacet, staat daar niks over in de handleiding?
bij bit 0-3 staat niet wat ik wil hebben,
ik moet hebben:
AN4 analog
AN3 vref
AN2 vref
AN1 Digital
AN0 digital
Kijk, dus je begrijpt dat je iets wil dat niet kan? Dan zou je dus je schema aan moeten passen, misschien AN0 en AN4 omruilen?
(RX is nog steeds een vage trouwens, doet geen goed in deze opstelling...)
van beiden weet ik niet waar ik het in mijn prog moet plaatsen.
als je mijn prog wilt zien, post ik hem straks wel.
De momenten waarop het een en ander gedaan moet worden kun je denk ik prima afleiden uit het stappenplan in de datasheet:
These steps should be followed for doing an A/D
conversion:
1. Configure the A/D module:
- Configure analog pins/voltage reference and
digital I/O (ADCON1)- Select A/D input channel (ADCON0)
- Select A/D conversion clock (ADCON0)
- Turn on A/D module (ADCON0)
2. Configure A/D interrupt (if desired):
- Clear ADIF bit
- Set ADIE bit
- Set GIE bit
3. Wait the required acquisition time.
4. Start conversion:
- Set GO/DONE bit (ADCON0)
5. Wait for A/D conversion to complete, by either:
- Polling for the GO/DONE bit to be cleared
(with interrupts disabled); OR- Waiting for the A/D interrupt
6. Read A/D Result register pair
(ADRESH:ADRESL), clear bit ADIF if required.
7. For next conversion, go to step 1 or step 2 as
required. The A/D conversion time per bit is
defined as TAD. A minimum wait of 2 TAD is
required before the next acquisition starts.
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
veranderd schema:
hele programma, na luisteren naar jochem's aanwijzingen:
'****************************************************************
'* Name : PIC 2 van XPSll.BAS *
'* Author : Roel Zwetsloot *
'* *
'* Date : 17-1-2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEVICE 16F818
config CP_OFF, CPD_OFF, LVP_OFF,MCLRE_OFF,PWRTE_ON,INTRC_OSC_NOCLKOUT,WRT1_OFF,WRT0_OFF, DEBUG_OFF
;Logische constanten
SYMBOL ON = 1 ;AAN
;declares LCD
DECLARE LCD_ENPIN PORTA.6
DECLARE LCD_RSPIN PORTA.7
Declare ADIN_RES = 10 ; resolutie 10 bits
Declare ADIN_TAD = frc ; set RC osc intern
Declare ADIN_STIME = 50 ; sample tijd 5
;variabelen
DIM letter AS BYTE
DIM Volts AS float
DIM Raw AS word
; poortnamen
symbol A = PORTA.5
symbol B = PORTB.0
symbol C = PORTB.1
symbol D = PORTB.2
symbol E = PORTB.3
;andere symbolen
SYMBOL stap = 5.0 / 1024
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111100
TRISB = %00001111
ADCON1 = %00001011
; opstartprocedure
ADCON0 = %11100001
CLEAR ;Wis alle RAM geheugen
DELAYMS 250 ; display stabilisatie
cls ; LCD schoon vegen
print at 1, 1, "Welcome" ; intro
delayms 200
print at 2, 1, " XPS-ll Supply "
delayms 500
cls ; weer schoon beginnen
;Hoofdprogramma
While 1 = 1 ;open lus
If A = ON then
letter = 65 ;ascii letter A
elseif B = ON then
letter = 66 ; ascii letter B
elseif C = ON then
letter = 67 ; ascii letter c
elseif D = ON then
letter = 68 ;' '
elseif E = ON then
letter = 69 ;' '
endif
; data conversie
;76543210
ADCON0 = %11100101
Raw = ADRESH
Volts = Raw * stap
; uiteindelijke weergaves
PRINT AT 1, 1,"supply ",letter," :" ;eerste regel geeft aan welke lijn gemeten wordt, letter in ascii weergave
PRINT AT 2,1, DEC3 Volts,"Volt"
wend
end heb geprobeerd te compilen,alleen herkent hij de config word "INTRC_OSC_NOCLKOUT" niet? is toch een basis word...
Op 19 januari 2010 09:13:03 schreef marcob:
EDIT: 20 seconden zoeken in Google Images: Hier zie je een voorbeeld
[afbeelding]
Geen microcontroller te bekennen.
TechnOoB12:
-Wat ben je van plan met Vref+? Die mag maximaal maar 5V worden, wat je nu gedaan hebt is onzinnig. Verder moet Vref+ een goede referentie zijn, aan Vdd zetten of via een nauwkeurige band gap regelaar.
-ADCON0 wordt door ADCin geregeld, daar heb jij verder niks mee te maken.
Instellingen gebeuren via de ADIN declaraties. Kijk maar naar de voorbeeldcodes in de handleiding en de voorbeeldenmap.
-Voordat je het schema maakt eerst bepalen of het kan aan de hand van de datasheet.
-of INTRC_OSC_NOCLKOUT geldig is staat in de P16F819.PBP file
-Waar is je ontkoppeling?
-Weer zit je te knoeien met nietszeggende variabelen, dat moet je meteen goed doen anders leer je jezelf verkeerde dingen aan, afleren is veel moeilijker.
Je kan toch wel wat duidelijke namen bedenken?
A, B, C, maak er dan in ieder geval LetterA etc van.
Een universele ADC schakeling voor PIC's staat op het forum.
Heb hier en daar wat achter je programma gezet.
Eerst declareer je ADCON1, dan ergens in je programma weer ADCON0.
Dit gaat niet werken zo.
Op 19 januari 2010 15:48:03 schreef TechnOoB12:
'**************************************************************** '* Name : PIC 2 van XPSll.BAS * '* Author : Roel Zwetsloot * '* * '* Date : 17-1-2010 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** DEVICE 16F818 config CP_OFF, CPD_OFF, LVP_OFF,MCLRE_OFF,PWRTE_ON,INTRC_OSC_NOCLKOUT,WRT1_OFF,WRT0_OFF, DEBUG_OFF ;Logische constanten SYMBOL ON = 1 [WAAR IS SYMBOL OFF] ;declares LCD DECLARE LCD_ENPIN PORTA.6 DECLARE LCD_RSPIN PORTA.7 Declare ADIN_RES = 10 ; resolutie 10 bits Declare ADIN_TAD = frc ; set RC osc intern Declare ADIN_STIME = 50 ; sample tijd 5 ;variabelen DIM letter AS BYTE DIM Volts AS float DIM Raw AS word ; poortnamen symbol A = PORTA.5 symbol B = PORTB.0 symbol C = PORTB.1 symbol D = PORTB.2 symbol E = PORTB.3 ;andere symbolen SYMBOL stap = 5.0 / 1024 [LOOPT MAAR TOT 1023] ; 76543210 PORTA = %00000000 PORTB = %00000000 TRISA = %11111100 TRISB = %00001111 ADCON1 = %00001011 [HIER ZET JE ADCON1 NEER] ; opstartprocedure ADCON0 = %11100001 [WAT IS DIT, HIER STAAT WEER ADCON0] CLEAR DELAYMS 250 cls print at 1, 1, "Welcome" delayms 200 print at 2, 1, " XPS-ll Supply " delayms 500 cls ;Hoofdprogramma While 1 = 1 If A = ON then letter = 65 elseif B = ON then letter = 66 elseif C = ON then letter = 67 elseif D = ON then letter = 68 elseif E = ON then letter = 69 endif ; data conversie ;76543210 ADCON0 = %11100101 [HIER STAAT OOK WEER ADCON0] Raw = ADRESH Volts = Raw * stap ; uiteindelijke weergaves PRINT AT 1, 1,"supply ",letter," :" PRINT AT 2,1, DEC3 Volts,"Volt" wend end
Het meeste kan je allemaal weer wegstrepen Lambiek, de TS zit te rommelen naar aanleiding van de post van Jochem, en is daarbij een hele belangrijke opmerking vergeten:
Op 19 januari 2010 14:51:17 schreef Jochem:
Maar ik kan me ook voorstellen dat PICBASIC dat allemaal lekker voor je interfacet, staat daar niks over in de handleiding?
Het heet niet voor niets Basic.
De TS had met de voorbeelden al kunnen zien dat hij niks met ADCON0 te maken heeft, hij maakt het zichzelf veel te moeilijk. Te veel in een keer willen doen.
Dus @TechnOoB12:
Begin eens weer bij het begin, zorg eerst dat je ADC werkt, met een eenvoudig programma! Dat kan je zelf compileren en kost je de prijs van 1 16F877(A). Eerst leren lopen, nu ben je aan het hollen en ga je constant op je bek, dat doet zeer en frustreert.
Jochem
If you want to succeed, double your failure rate.
Op 20 januari 2010 01:48:25 schreef Henry S.:
nu ben je aan het hollen en ga je constant op je bek, dat doet zeer en frustreert.
En niet te vergeten moeten wij je constant oprapen, gaat ook vervelen 
The Engineer
Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
ehja:D
maar het leert van zijn fouten hoor, en de inzet heb ik, nu de brains nog.
ben misschien iets te anthuosiast bezig?|:(
ik denk, ik ga de ADCON0 verwijderen, en gewoon erin stampen zodra hij er is. verder nog lambieks tips opvolgen.
misschien werkt het, misschien niet.
dan heb ik het in ieder geval geprobeerd.
het enige nieuwe in dit programma zijn de fusebits, maar die zouden goed moeten gaan want die heb ik opgezocht in de datasheet, en de A/D conversie weergave.
dus eigenlijk is het enige nieuwe de AD conversie weergave....
de rare variabele namen, een signaal komt van knop A( en zo heet ie ook in het echt!) naar een kleine converter, logic device, en deze stuurt nog wat andere dingetjes aan,etc.. en dan gaat deze geconverteerde puls A naar de PIC, en dus noemik hem daar ook A...
idem voor B, C , D, E.
Maak er dan bvb dit van.
Knop_A, Knop_B, Knop_C,..........
En ADCON0 of ADCON1 nooit in je hoofd programma zetten, allemaal boven in zetten en dan met variabele werken.
Als je het aanroept in je programma dan zet je dit neer:
bvb waarde = ADIN0, en waarde zet je als (DIM waarde AS BYTE, AS WORD, AS DWORD, AS FLOAT, boven in het programma).
Begin nu eens rustig opnieuw zoals Henry ook al zij, en bouw het uit. 