Peter Claus
It is so simple to be happy, but it is so difficult to be simple
Bij een meting van een analoge waarde moet ik twee keer na elkaar analoog digitaal converteren vooraleer de waarde juist is. De meting gebeurt op RA1 RA0 (dank u zonnepaneeltje
)
Dit gebeurt wanneer de vorige meting op een andere analoge ingang gebeurd is op vb. op RA3.
De code voor de meting. Alles van ADCON0 is reeds ingesteld in een initialisatiedeel hier niet weergegeven. Enkel de kanaalbits worden hier geselecteerd.
MEASUR1 BCF STATUS,5 ;Kies bank 0
BCF STATUS,6 ;Kies bank 0
BCF ADCON0,3 ;Kanaal bits instellen RA0
BCF ADCON0,4
BCF ADCON0,5
BSF ADCON0,2 ;Start analoog naar digitaal conversie
MEA1BSY BTFSC ADCON0,2 ;Controleer de bezig bit tot deze terug 0 is
GOTO MEA1BSY ;Terug naar de bit controle daar deze nog steeds niet 0 is
RETURN
Als er 0V op de RA0 staat is er geen probleem.
Wanneer de waarde op RA0 aan de hoge kant is (vb 4V) dan is het resultaat van de conversie ongeveer 2 volt.
Wanneer ik diezelfde meting direct hierna een tweede keer uitvoer heb ik wel een juist resultaat.
De te meten spanning is reeds lang voor starten van de meting aanwezig en stabiel.
Wat ik zelf al geprobeerd heb is vertragingen tussen kanaal selecteren en starten van de conversie invoegen door middel van enkele NOP instructies. Dit hielp niet.
Peter Claus
It is so simple to be happy, but it is so difficult to be simple
Het gebruikte kristal is 3.686400MHZ.
De ingestelde sampletijd is fosc/8.
Volgens de datasheet is dit binnen de specs.
Je mag met deze setting gaan tot 5MHZ
Wat de impedantie van de meetpin betreft.
Met de scoop meet ik effectief die 4 volt op de pin zelf. Die komt niet op met vertraging en is reeds enkele seconden aanwezig voor de meting start.
-Heb je ADCON1 goed ingesteld?
-Je schrijft dat de meting gebeurt op RA1 maar stelt in op RA0?
- Neem je de acquisitietijd wel in acht?
Peter Claus
It is so simple to be happy, but it is so difficult to be simple
Op 29 oktober 2007 10:20:19 schreef Zonnepaneeltje:
-Heb je ADCON1 goed ingesteld?-Je schrijft dat de meting gebeurt op RA1 maar stelt in op RA0?
- Neem je de acquisitietijd wel in acht?
RA3 is het kanaal van de vorige meting, wanneer terug op RA0 gemeten wordt heb ik deze fout op RA0.
ADCON0 bevat 41 hexadecimaal
Zonnepaneeltje, inderdaad een fout in de openingspost, bij deze aangepast.
En ondertussen ook de sampletijd op maximum (fosc/32) gezet en het probleem blijft.
Uit de datasheet:
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 the ADIF bit
• Set the ADIE bit
• Set the GIE bit
3. Wait the required acquisition time.
4. Start conversion:
• Set the GO/DONE bit (ADCON0)
5. Wait for A/D conversion to complete, by either:
• Polling for the GO/DONE bit to be cleared
OR
• Waiting for the A/D interrupt
6. Read A/D Result register (ADRES), clear the ADIF bit, 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 2TAD is required before next acquisition starts.
Voor elke conversie dient de A/D conversie clock gezet te worden.
Je vergeet de acquisitie tijd.
Na het switchen van analoog kanaal moet je even wachten.
Zie het datasheet (Of gebruik een PIC waarin je dat in kan stellen
)
Peter Claus
It is so simple to be happy, but it is so difficult to be simple
Blijkt dat je na selecteren van het kanaal nog een tijd moet wachten. De sample en hold capaciteit moet geladen worden. Acquisitie tijd dus zoals reeds vermeld.
Het probleem is daarmee opgelost met een tijd in te lassen. Die paar NOP instructies die ik eerst had geprobeerd bleken niet lang genoeg te duren.
Allen bedankt om mee te denken.