hallo

ik wil de A/D converter in mijn 16F877A gebruiken met de taal basic.
ik heb al in de help gezocht maar ik kan niet een mooi voorbeeld vinden waar werd omschreven hoe ik de a/d gebruik.
ik ben er al wel achter dat ik met ADCON de A/D pin selecteer.
maar verder bn ik ook niet :p

ik wilde vragen heeft er iemand een voorbeeld in basic?
hoeft niet perce voor de 16F877A te zijn ik kan het denk ik zelf wel aan passen naar mijn pic.

alvast bedankt

Robbert

Als je de demo versie eens download van mikroBasic op mikroelektronica dan vind je daar een hele boel voorbeelden ook bij. Als je zo eentje opent en het eens bekijkt zou je er waarschijnlijk al veel uitleren.

ik denk dat ik wel iets heb, maar ik zeg niet dat het bruikbaar is :)

Ik denk dat je verder komt door de help van PICbasic eens te bekijken. (bij ADIN, en alle pagina's die daar wat mee te maken hebben)

en bekijk de lijst met declares, daar staan er ook een paar tussen voor de a/d.

oke ga ik eens doen.
ik gebruik proton pic basic.

ik heb al wat voorbeeldjes gevonden maar ze werken allemaal anders.
de ene wermt met ADIN de ander met adc_read.
en dan nog de declare's

ik ga nog even verder zoeken als nog iemand een voorbeeld heeft is dat welkom :p

Robbert

[Bericht gewijzigd door Robbertbd op (33%)]

Proton heeft ook voorbeelden in de map samples staan. Hier staat ook een voorbeeld van A/D convertor

ik heb het voorbeeld van ADIN genomen en al het onnodige er tussen uit geplukt.
dit in mijn resultaat:


' Read channel 0 of on-board ADC and display the results
       	
Set_Defaults PROTON_4
Device = 16F877
       	
ADIN_RES	10					' Set the resolution to 10
ADIN_TAD	FRC					' Choose the RC osc for ADC samples
ADIN_STIME	100        			' Allow 100us for charge time
        
Dim waarde 		as Word			
       	
Delayms 100						' Wait for PICmicro to stabilise
Cls              				' Clear the LCD
TRISA.0 = 1						' Setup bit-0 of PortA as an input
ADCON1 = %10000010				' Set PORTA analog and right justify result

Again:
  waarde = ADIN 0					' Read the ADC
  Print at @waarde         ' Display the RAW data
Goto Again						  ' Do it forever

ik heb alleen nog een paar vraagjes:

-ADIN_RES 10 wat doet dit precies?
-wat betekent FRC en kan ik dit altijd gebruiken?
-hoe bereken ik de ADIN_STIME?
-waarom staat port a 0 als ingang? die word verder toch niet gebruikt?
-en wat word er precies met adcon ingesteld?

Robbert

Dit staat allemaal in de datasheet.

ADIN_RES staat voor 8 of 10 bits resolutie van de A/D conversie.
FRC heeft te maken met de ocsilator welke gebruikt wordt voor de conversie.
ADIN_STIME heeft te maken met de conversie tijd.

ADCON1 zijn de instellingen voor de AD ingangen. Dus welke van de ingangen gebruikt wordt voor AD , Vref + en Vref -

Maar nogmaals staat allemaal in de data sheet

oke ik zal nog effe in mijn datasheet spitten.

Vref + / - heb je toch niet perce nodig?

Robbert

Nee normaal gebruik je voor de Vref + de 5 Volt en voor de Vref - de GND. Dit kan natuurlijk niet helemala stabiel zijn. Dan gebruikje een apparte Vref.
Ook kan het handig zijn wanneer de te meten spanning van bijvoorbeeld 2 Volt tot 3,5 Volt is.
Door dan een Vref+ van 4V en een Vref- van 1,5V te kiezen dan heb je je 10 Bits resolutie van 1,5V tot 4V in plaats van 0 tot 5 Volt

oke ik ga morgen denk ik onderdelen halen en dan ga ik er mee aan de slag.

toch nog een vraagje:p

wanneer gebruik ik ADCON1 en waneer ADCON0?

bedankt voor de hiulp.

Robbert

[Bericht gewijzigd door Robbertbd op (25%)]

Op 3 augustus 2007 13:42:27 schreef Robbertbd:
wanneer gebruik ik ADCON1 en waneer ADCON0?

bedankt voor de hiulp.

Robbert

Als je nou eens de datasheet erbij pakt zie je het allemaal precies. Als ik het wil weten doe ik hetzelfde.

jha wat ik heb gevonden is dat het 2 registers zijn.
en zo ver ik het bgrijp heb je alleen 1 nodig.

en ik kan niet uit de database halen hoe ik kom aan:
ADCON1 = %10000010

ik dacht dat het iets te maken hed met de 000 van poort an1

mischien stel ik nu zeer stomme vragen maar ik kan het niet vinden.

Robbert

Bladzijde 127 en 128 van de datasheet staat alles!

In de datasheet staat toch voor ieder bit in ADCON0 en ADCON1 waarvoor ze zijn?
(Waarom leest niemand de datasheet meer tegenwoordig?... |:( )

als we dezelfde datasheet hebben staat daar een tabel.
maar daar kan ik ook niet uit vissen wat ik achter ADCON1 kan zetten.

PIE2 873 874 876 877 -r-0 0--0 -r-0 0--0 -r-u u--
PCON 873 874 876 877 ---- --qq ---- --uu ---- --
PR2 873 874 876 877 1111 1111 1111 1111 1111 1111
SSPADD 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
SSPSTAT 873 874 876 877 --00 0000 --00 0000 --uu uuuu
TXSTA 873 874 876 877 0000 -010 0000 -010 uuuu -uuu
SPBRG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
ADRESL 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON1 873 874 876 877 0--- 0000 0--- 0000 u--- uuuu
EEDATA 873 874 876 877 0--- 0000 0--- 0000 u--- uuuu
EEADR 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEDATH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEADRH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EECON1 873 874 876 877 x--- x000 u--- u000 u--- uuuu
EECON2 873 874 876 877 ---- ---- ---- ---- ---- ----

Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf

Deel 11.0 ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE

[Bericht gewijzigd door MMSoft op (28%)]

o andere data sheet.
nu klopt het better wat je zij.
zoiets had ik ook voorme in die andere data sheet.

ik zie nu twee keer een pagina die ik kan gebruiken.
1 voor ADCON1 en 1 voor ADCON0.
in het voorbeeld woord alleen ADCON1 gebruikt, al weet ik nog niet waarom.
maar dat doe ik ook.

bit7 gaat dan over het most significant bit.
ben even kwijt wat dat is maar dat moet lukken.
die zet ik op 1

bit6 gaat over de klok snelheid voor de convertor.
daar maakt het volgensmij niet veel uit of die op 1 of 0 staat?
maar die zet ik op 1.

bit5 - 4 moeten volgens mij op 0 dus 00

bit3 - 0 hier mee kan ik volgens mij instellen of ik vref wil gebruiken.
en welke poorten digitaal en analoog moeten worden.
ik neem aan dat als ik ze op digitaal zet dat ik ze dan gewoon kan gebruiken.
en aan gezien ik maar 1 analoge poort nodig heb neem ik 1110 klopt dat?

dus dan kom ik als eind resultaat op:
ADCON1 = %11001110

is dat zoals het hoort?

Robbert

bit7 gaat dan over het most significant bit.
ben even kwijt wat dat is maar dat moet lukken.
die zet ik op 1

Scherp in de gaten houden. Moet right-aligned staan, anders krijg je onzin waardes in een word-variabele.

oke

maar als je die altijd op 1 moet zetten waarom laten ze de gebruikers die keuze maken?

en hoe kan ik de klok het beste zetten?

Robbert

De klok moet 'kloppen' met de kloksnelheid van je PIC.
Er staat een heel schema bij met diverse kloksnelheden van de PIC en van de ADC. Er staat precies in de tabel (ik geloof waardes met een blauw en een wit achtergrondje) welke zijn toegestaan bij een bepaalde PIC-kloksnelheid.

maar als je die altijd op 1 moet zetten waarom laten ze de gebruikers die keuze maken?

Misschien heb je een communicatietoepassing die MSBfirst wegstuurd ?

Op 3 augustus 2007 16:37:06 schreef Zonnepaneeltje:
De klok moet 'kloppen' met de kloksnelheid van je PIC.
Er staat een heel schema bij met diverse kloksnelheden van de PIC en van de ADC. Er staat precies in de tabel (ik geloof waardes met een blauw en een wit achtergrondje) welke zijn toegestaan bij een bepaalde PIC-kloksnelheid.

als ik het goed zie kan je bij 20MHz 32 en 64 gebruiken?

Robbert

robert,
werkt de schakeling nu??
ik zat met het zelfde probleem.
ik hen je topic gevolgd , maar de uiteindelijke code voor adcon1 is die nu de juiste als in je laatste antwoord?