Hallo,

Ik ben op zoek naar de juiste declares om een PIC16F690 te configureren zodanig dat:

PORTA.0 = ADC channel 1
PORTA.1 = ADC channel 2
PORTA.2 = ADC channel 3
PORTA.3 = digital input
PORTA.4 = digital input
PORTA.5 = digital input

PORTB.4 tot en met PORTB.7 = datapins (LCD)

PORTC.0 = digital input
PORTC.1 = EN (LCD)
PORTC.2 = RS (LCD)
PORTC.3 = digital output
PORTC.5 = PWM output
PORTC.6 = digital output

Ik had deze code gevonden in http://www.circuitsonline.net/forum/view/59645


Device 16F690 ;microcontroller
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF ;configuratie 

Declare ALL_DIGITAL   TRUE ;alles digitaal!
Declare LCD_ENPIN     PORTC.7 ;declare enable pin LCD
Declare LCD_RSPIN     PORTC.6 ;declare reset pin LCD
Declare LCD_DTPIN     PORTB.4 ;declare data lijnen lcd
Declare RSIN_PIN      PORTA.5 ;declare rs in pin  

Ik heb toen het schema nagebouwd onderaan in het topic(PORTA.1 = RS en PORTA.2 = EN) en ook aangepast in de declares en dit werkte. Als ik toch een andere poort zou willen gebruiken voor de RS en de EN van de LCD dan moet ik ANSEL = 0 en ANSELH = 0 bij de configs zetten. Maar dan kan ik toch geen analoge ingang meer gebruiken?

Weet iemand hoe ik de poorten kan declaren zodanig dat het lijstje bovenaan de post klopt?

Alvast bedankt!

Staat toch duidelijk in de datasheet:
Chapter 4.2 behandelt ANSEL(H) en welk bit bij welke ingang hoort.
Eerst de datasheet lezen, dan pas gaan progammeren...

Dus als ik het goed begrijp:


;Ik configureer de I/O met het TRIS register:
TRISA=%11111111
TRISB=%00000000
TRISC=%00000110

;Daarna zeg ik welke ingangen analoog moeten:
ANSEL= %00000111 
ANSELH=%00000000

;De LCD configuratie ziet er uit als volgt:
Declare LCD_ENPIN     PORTC.1 ;declare enable pin LCD
Declare LCD_RSPIN     PORTC.2 ;declare reset pin LCD
Declare LCD_DTPIN     PORTB.4 ;declare data lijnen lcd

Is dit correct? Moet ik nog iets declareren hiervoor?

Je vergeet je ADCON register nog.

De 690 heeft geen ADCON register, maar ADCON0 en ADCON1.
De instelling daarvan is niet van invloed op de i/o pin settings. (analog/digital/in/out)
Alleen op de werking van de A/D conversie zelf...

Port C1 en C2 staan nu als input (TRISC), dus verkeerd...

[Bericht gewijzigd door Arco op (13%)]

Inderdaad, het moet zijn:
TRISC =%00000001

Voor het ADCON0 en ADCON1 register, aangezien ik PICBASIC gebruik, kan ik deze ook instellen met de volgende code?:


DECLARE ADIN_RES 10      
DECLARE ADIN_TAD 8_FOSC      
DECLARE ADIN_STIME 50     

Hierin wordt ADCON1 ingesteld op FOSC/8, dit geeft (ik maak gebruik van de interne osc die standaard op 4MHz staat) een conversietijd van ongeveer 2µs.

De enable en de uitlezing gebeuren door het commando: bvb.ADIN 0 waarbij analoge input 0 wordt uitgelezen. Dit is eigenlijk het gedeelte dat in de datasheet staat onder 9.2.1? Maar dat in PICBASIC dus vergemakkelijkt is dmv het bovenstaande commando en declares?

De VREF staat standaard op Vdd DENK ik, is dit correct?
Ik kan dit in de help van Proton IDE niet vinden.

Om de uitlezing moet ik mij ook geen zorgen maken want de 2 bytes waar de ADC waarde wordt opgeslagen worden samengevoegd tot een WORD als ik zeg:


Dim var1 as WORD
var1 = ADC 1    

Toch?

Op 13 november 2010 18:34:11 schreef FMtransmitter:

De VREF staat standaard op Vdd DENK ik, is dit correct?
Ik kan dit in de help van Proton IDE niet vinden.

Dat zul je nooit bij Proton vinden, daar moet je de datasheet voor hebben.