Hallo Allemaal,

Ik probeer de adc ingangen van een pic in te stellen maar dat lukt mij maar niet.
Voor een programma moet ik 0,521V verdelen over 27 bitjes en wil dan gebruik maken van de 10bits funtie in een pic 16f877a.
Ik heb ergens gelezen dat je dan gebruik moet maken van de de VREF+(an2) en de VREF-(an3).Op de an0 daar komt dan de variabele spanning van 0,521V op te staan, als ik dan de VREF+ en de VREF- gebruik dan zou ik 0,521V kunnen verdelen over 1024 bitjes (10 bits).
Heeft iemand een stukje Sofware zodat ik kan zien hoe ik het kan instellen?
Mijn programeer pakket is Flowcode.
Het mag in C geschreven staan.

Ome Henne.

zoek eens in de DataSheet daar kan je dat allemaal in terug vinden het is een kwestie vn een paar registers instellen

als het ook in assembly mag wil ik morgen nog wel ff kijken voor je stuur me anders even een mail daarover

[Bericht gewijzigd door timmie op ]

Beste Timmy,

Het mag ook in asm.
Dank voor je reactie.

Omehenne.

ik zal eens kijken voor je ome henne maar ben bang dat ik morgen pas weer wat meer voor je heb

weet je zeker dat je inline assembler kan invoegen in Flowcode?

wat is je clockfrekwentie?

Kijk in de datasheet eens naar deze registers:

ANSEL
CMCON
ADCON0
ADCON1
ADRESL
ADRESH

en wat doet ANSEL dan? die kan ik ook niet terug vinden in de DS

CMCON slaat terug op de comperator niet op de ADC daar zie ik ook de logica niet van in MMSoft

[Bericht gewijzigd door timmie op ]

Met CMCON schakel ik in dit geval de comparators uit.

Je hebt gelijk, ANSEL wordt niet gebruikt bij deze PIC.

Blijven deze registers over:
ADCON0
ADCON1
ADRESL
ADRESH

oke das duidelijk maar comperators staan standaard uit bij opstarten

en dat stel je in op het CVRCON register(no offense, ik lees het ook maar in de DS)

oke das duidelijk maar comperators staan standaard uit bij opstarten

Niet bij ASM, de waarde 7 (Dec) schakeld de comparators uit.

en dat stel je in op het CVRCON register(no offense, ik lees het ook maar in de DS)

CVRCON register = Referentie waarde.
Afhankelijk of Bit 'CVRR' 0 of 1 is:
CVRR = 0: CVREF = 1/4 * (CVRSRC) + (VR3:VR0/ 32) * (CVRSRC)
CVRR = 1: CVREF = (VR<3:0>/ 24) * (CVRSRC)

CVRSRC = Voedingsspanning van de PIC

[Bericht gewijzigd door MMSoft op ]

Op 26 mei 2007 22:30:39 schreef timmie:
ik zal eens kijken voor je ome henne maar ben bang dat ik morgen pas weer wat meer voor je heb

weet je zeker dat je inline assembler kan invoegen in Flowcode?

Ja ik heb de beschikking over een C-Code blok waarin ik C en ASM instukties kwijt kan. Als ik ASM gebruik moet ik wel het ASM operator teken voor elke instruktie zetten.
Hoe ziet dat teken eruit?
Of ik kan een aantal ASM instruktie in een ASM blok plaatsen.Hoe ziet dat ASM blok eruit?
Je ziet wel ik ben niet echt bekend met ASM.
Mijn klok frequentie is 20.000.
Heb ik nog een vraag>in de datasheet van de PC16f877a staat dat je de ADCON1 en ADCON2 moet instellen als je analoge spanningen wilt meten,daarvoor moeten er bits aan of uigezet worden. 8 bits bestaat uit 8 cifers en 6 letters.
Als ik nu naar het getal 10000001 a b c d f (dit heb ik zo maar ergens vandaan gehaald)wat is nu bv bit 1 en wat is bit2 in dit getal dit is bv wat Flowcode genereerd voor een enkele analoge ingang

//Macro implementaties

//Toegevoegde implementaties
void FCD_ADC0_SampleADC()
{
char ta, te, cnt;
adcon1 = 0x00;
ta = trisa;
trisa = trisa | 0x2F;
te = trise;
trise = trise | 0x07;
adcon0 = 0x81 | (0 << 3);
cnt =0;
while (cnt <220) cnt++;
adcon0 = adcon0 | 0x04;
while (adcon0 & 0x04) ;
trisa = ta;
trise = te;
adcon1 = 0x07;
adcon0 = 0x80;
}
Wat zou ik hier aan moeten veranderen om van de an0 en an2 en an3 gebruik te kunnen maken.
Flowcode genereerd namelijk voor elke analoge ingang het zelfde zoals je hier boven ziet.
je snap wel dat ik dan zo geen gebruik kan maken van de 10bits functie, dat is ook denk ik de beperking van Flowcode.
Als ik deze volgens de normale manier gebruik in Flowcode werk het prima, maar als ik dan de VREF+ en VREF- erbij wil gebruiken werken deze twee ook wel maar ik kan dan geen gebruik maken van de 10 bits functie.

Ik heb voor grafisch programeren gekozen omdat ik al heel wat jaren allerlei PLC programma"s heb geschreven voor tal van installaties en dat is ook grafisch.
Nu probeer ik meer te weten te komen van c of asm maar dat is niet makkelijk.

Heb ik nog een vraag>in de datasheet van de PC16f877a staat dat je de ADCON1 en ADCON2 moet instellen als je analoge spanningen wilt meten,daarvoor moeten er bits aan of uigezet worden. 8 bits bestaat uit 8 cifers en 6 letters.

Flowcode ken ik niet.

8 Bits is 8 keer een 1 of 0.
Voorbeeld: 00000011

Hoe je aan de 6 letters komt is mij een raadsel.

Nu probeer ik meer te weten te komen van c of asm maar dat is niet makkelijk.

Vooraan beginnen.
http://home.versatel.nl/edithenwilliam/william.htm (PIC Tutorial)

[Bericht gewijzigd door MMSoft op ]

er staat ook nog hier op de site bij artikelen een asm cursus
die mmsoft aangeeft is ook een mooi begin

ik denk dat de TS bedoeld dat je zowel in Binair als Hex formaat de waarde aan kan geven van de byte van het register(althans zo lees ik het)

Op 27 mei 2007 09:56:17 schreef MMSoft:
[...]Flowcode ken ik niet.

8 Bits is 8 keer een 1 of 0.
Voorbeeld: 00000011

Hoe je aan de 6 letters komt is mij een raadsel.

[...]Vooraan beginnen.
http://home.versatel.nl/edithenwilliam/william.htm (PIC Tutorial)

Als je naar het stukje SW kijkt daar staat tria=trisa|0x2f dan zijn er ook letters in verwerkt. Misschien komt dat in ASM niet voor daar heb ik geen beeld van maar als je in C progameerd komt regelmatig voor.
Flowcode is een grafisch Progpakket van Matrix Multimedia en Elektuur promoots dat, en Flowcode werkt veel samen met E-Blocks die ken je vast wel.
Ik ben grafisch programeren gewent vandaar dat de keus op Flowcode is gevallen, maar het heeft toch wel beperkingen als het gaat over de instellen met Analoge ingangen dat heb ik wel in de gaten.
Ik probeer daar nu helderheid in te krijgen.Alles is welkom.
Dank je voor je reactie en de versatel site ga ik ook daar eens kijken.Hoe meer ik wijzer kan worden hoe beter.
Jij zegt>> 8 Bits is 8 keer een 1 of 0.
Voorbeeld: 00000011<<.
Maar als je in het register adcon0 een bit aan of uit moet zetten welk bit in het register staat dan uit of aan in jouw voorbeeld?

je begint met tellen bij 7 en dan naar beneden naar vanand je naar rechts gaat dus:

76543210
10101010

in het voorbeeld staan nu bit 7,5,3,1 aan en de rest uit hopelijk een beetje duiderlijker

wat jij bedoeld met die letters dat is Hexadecimaal formaat

[Bericht gewijzigd door timmie op ]

vergeet ook niet het uit te lezen kanaal te selecteren (CHS2:CHS0)

Op 27 mei 2007 11:34:28 schreef timmie:
je begint met tellen bij 7 en dan naar beneden naar vanand je naar rechts gaat dus:

76543210
10101010

in het voorbeeld staan nu bit 7,5,3,1 aan en de rest uit hopelijk een beetje duiderlijker

wat jij bedoeld met die letters dat is Hexadecimaal formaat

Dat klopt het is hexadecimaal.
De uitleg is ook duidelijk in jouw voorbeeld dank daar voor.
Kunnen jullie nog iets met het stukje SW van Flowcode wat ik heb geschreven? Dat zijn de instellingen zoals Flowcode ze genereerd maar dat doet Flowcode voor elke analoge ingang vandaar dat de 10bits fucntie niet werkt dat moet ik weer in C of in ASM schrijven en inpassen in het flowchart.
Als ik dit stukje nu zou kunnen aanpassen dan zou het wel lukken dat weet ik zeker ik weet alleen niet hoe.

ik ben niet zon flowcode man maar wat er staat schiet mij even boven de pet ik denk dat ik weet wat er staat en het kan korter naar mijn idee

ik zal dalijk wel ff kijken of ik iets moois kan bakken voor je verder is de datasheet atlijd verhelderent

maar dan moet je de uitlezig waarschijlnijk ook gaan doen in ASM ik zou niet weten hoe je het verder in flowcode kan doen

Op 27 mei 2007 12:12:51 schreef timmie:
ik ben niet zon flowcode man maar wat er staat schiet mij even boven de pet ik denk dat ik weet wat er staat en het kan korter naar mijn idee

ik zal dalijk wel ff kijken of ik iets moois kan bakken voor je verder is de datasheet atlijd verhelderent

maar dan moet je de uitlezig waarschijlnijk ook gaan doen in ASM ik zou niet weten hoe je het verder in flowcode kan doen

Al is het in asm is ook niet erg want dan gebruik ik het C-Code blok.
Ik heb nog een vraag daarvoor heb ik een stukje datasheet gekopieerd uit de datasheet van de pic 16f877a.

bit 5-4 Unimplemented: Read as ‘0’
bit 3-0 PCFG3:PCFG0: A/D Port Configuration Control bits
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Note: On any device Reset, the port pins that are multiplexed with analog functions (ANx)
are forced to be an analog input.
ADCON1
<ADCS2>
ADCON0
<ADCS1:ADCS0>
Clock Conversion
0 00 FOSC/2
0 01 FOSC/8
0 10 FOSC/32
0 11 FRC (clock derived from the internal A/D RC oscillator)
1 00 FOSC/4
1 01 FOSC/16
1 10 FOSC/64
1 11 FRC (clock derived from the internal A/D RC oscillator)
A = Analog input D = Digital I/O
C/R = # of analog input channels/# of A/D voltage references
PCFG
<3:0>
AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VREF+ VREF- C/R
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF+ A A A AN3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF+ A A A AN3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF+ D A A AN3 VSS 2/1
011x D D D D D D D D — — 0/0
1000 A A A A VREF+ VREF- A A AN3 AN2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A VREF+ A A A AN3 VSS 5/1
1011 D D A A VREF+ VREF- A A AN3 AN2 4/2
1100 D D D A VREF+ VREF- A A AN3 AN2 3/2
1101 D D D D VREF+ VREF- A A AN3 AN2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D A AN3 AN2 1/2

Als ik het dan goed begrijp dan zijn bij 0000 alle ingangen an0 tm an7 dus analoog 5V en 0v en kun je elke ingang gebruiken voor een variable spanning van 0 tot 5V.
Bij 1011 an7 en an6 digitaal an3 en an4 vref+ en vref- en an1 en an0 = analoog en wat betekent dan nog 4/2 aan het eind van de regel?
En wat zou er aan of uit moeten staan als ik gebruik wil maken van de 10bits functie en vref+ en vref- om 0,521V te verdelen over 1024 bitjes?

die 4/2 staat voor 4 digitale input/output en die 2 voor 2 analoge ingangen

Op 27 mei 2007 14:42:23 schreef timmie:
die 4/2 staat voor 4 digitale input/output en die 2 voor 2 analoge ingangen

Ok dat is dan ook weer duidelijk?

Op 28 mei 2007 09:06:22 schreef MMSoft:
Lukt het al een beetje ?

Een beetje zoals je zegt het is niet makkelijk maar in de datasheet staat van de pic staat dat ik sommige bits aan of uit moet zetten dat moet ik dan omzetten naar C zoals Flowcode dat doet dan in voeren in een C blok en hup in de pic en kijken of het werkt.

Op 28 mei 2007 09:06:22 schreef MMSoft:
Lukt het al een beetje ?

Nog een vraag:
adcon1 adcon0
<adcs2> <adcs1:adcs0 clock conversion

0 00 Fosc/2
0 01 Fosc/8
0 10 Fosc/32
0 11Frc(Clockdirived from the internal a/d osc)
1 00Fosc/4
1 01Fosc/16
1 10Fosc/64
1 11Frc(Clockdirived from the internal a/d osc)

Als ik naar de datasheet kijk (zie hier boven)van de 16f877a dan moet ik ook de clock conversion instellen denk ik om het geheel goed te laten werken.
Welke regel moet ik gebruiken om de clock conversion in te stellen?
En wat betekent Fosc/4?

...Als ik naar de datasheet kijk (zie hier boven)van de 16f877a dan moet ik ook de clock conversion instellen denk ik om het geheel goed te laten werken.
Welke regel moet ik gebruiken om de clock conversion in te stellen?

ADCON0 bits 6 en 7
ADCON1 bit 6

Voorbeeld:


ASM (16F876A)
                MOVLW      B'10000001'       
                MOVWF      ADCON0     ;Bit 6 Laag, Bit 7 Hoog       
                BSF        STATUS,RP0       
                MOVLW      B'00001110'      
                MOVWF      ADCON1     ;Bit 6 Laag      

En wat betekent Fosc/4?

Oscillator Freq. gedeeld door 4.

[Bericht gewijzigd door MMSoft op ]