Pic 16F877A

Ik ben bezig met software voor een pic 16F877 te schrijven.

De bedoeling is dat er van 2 analoge ingangen de uitgelezen waarde op een LCD display komt te staan.

De basis van het programma is afkomstig van
https://www.picbasic.nl/frameload.htm?https://www.picbasic.nl/stroomse…

Waar ik nu op vast loop is het volgende.

Tijdens het omzetten naar HEX krijg ik een foutmelding op.

pic basic code:

ANSEL  = %00001110            ;Analoog input alleen PORTA.3 A.2 en A.1 (de rest DIGITAL INPUT)
CMCON  = %00000111            ;Comparator uit (Bits 0,1 en 2 hoog = 7)

Om toch verder te kunnen heb ik deze 2 er tijdelijk uitgehaald, dan kan de software wel omgezet worden maar

Ik krijg dan alleen een vaste waarde voor analoog op het display te zien.
Als de ingang voor analoog veranderd gaat het display daar niet in mee.
Regel 2 verschijnt wel de text Potmeter maar verder niets.

Dit zal ongetwijfeld te maken hebben met het weghalen van deze 2 regels, maar wat moet hier voor in de plaats komen?

Arco

Special Member

De 16F877 (een heel bejaard beestje... ;) ) heeft geen ANSEL register dus dat klopt wel. Je moet ADCON0 en ADCON1 gebruiken.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Die komen inderdaad nog uit de tijd dat ik met de cursus van de picbasic website begonnen ben.
Des tijds een stuk of 10 van gekocht.
Maar daar zijn de controllers niet minder door.

Adcon0 en Adcon1 zijn in gebruik.

Moet er wel bij zeggen dat mij niet duidelijk is wat deze daadwerkelijk doen of met welke ingangen deze zo werken.
Adcon 0 ingang 7? Die heeft de oorspronkelijke pic niet.

pic basic code:

ADCON0 = %10000000            ;Analoog right justified / Vdd als referentie spanning
ADCON1 = %00010000            ;Fosc/8 

Moet ik dan Adcon2 en Adcon3 gebruiken?

En wat vervolgens met Cmcom te doen?

Arco

Special Member

Op 17 juli 2022 21:50:37 schreef Paloma:
Moet ik dan Adcon2 en Adcon3 gebruiken?

Adcon2 en 3 bestaan niet... (misschien een goed moment om de datasheet eens te lezen?... ;) )

En wat vervolgens met Cmcom te doen?

CMCOM bestaat niet, het is CMCON...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Na heel wat pluiswerk kom ik op dit uit.

ADCON0 zou op 0100 0000 moeten staan
En ADCON1 op 1000 0000 klopt dat?

Arco

Special Member

Ja,

Alle a/d pinnen (AN0...7) zijn dan analoog.
Je moet wel het ADCON0:[ADON] bit op 1 zetten om de a/d converter aan te zetten...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Het lijkt inmiddels inderdaad te werken.

Bedankt voor de tips.

Inmiddels ben ik een heel stuk verder met dit project, maar ik loop nu vast op het volgende.

Ik heb de print gemaakt en op AN3 en AN4 wordt nu een analoog signaal gezet.
Is het dan nog mogelijk om RA0 en RA1 als digitale uitgang te gebruiken?

Zoals ik het in de datascheet zie zou dat niet kunnen.

https://www.uploadarchief.net/files/download/schermafdruk%20van%202022-10-02%2011-12-34.png

pic basic code:


;Register 76543210
PORTA  = %00000000
PORTB  = %00000000
PORTC  = %00000000
PORTD  = %11110000
TRISA  = %11111100            ;Ingangen voor sensoren uitgang voor transistor(0 = uitgang 1 = ingang)
TRISB  = %00000000            ;Uitgangen  LED (0 = uitgang 1 = ingang) 
TRISD  = %11111111            ;PORTD kan gebruikt worden voor een HD44780 display
ADCON0 = %01011100            ;Fosc/8 kanaal 3 AN3 analoog
ADCON1 = %10000000            ;Alles analoog

Ik haal mijn informatie over het algemeen van de website https://www.picbasic.nl/
Helaas gaat deze niet heel ver in op analoge in en uitgangen.
Analoog uitsturen zou ook moeten kunnen, er zit een weerstand op de uitgang RA0 en RA1 met vervolgens een BC547 gevolgd door een relais.

Het probleem zit hem duidelijk in de uitsturing van de PIC.

Of er zit in de software iets niet goed,of het is technisch niet mogelijk.

Onderstaande heb ik geprobeerd om de uitgang RA0 en RA1 hoog of laag te maken. Allen zonder resultaat.

pic basic code:


	PORTA.0   = OFF 		
	PORTA.1   = OFF		 
        PORTA.0   = ON 	
	PORTA.1   = ON 

	PORTA.0   = 0    	 
        PORTA.0   = 1 		
        PORTA.0   = 500 

Iemand die hier in kan helpen?

Arco

Special Member

De 877 is een oud beestje zoals gezegd.
Als je daarbij een ingang analoog maakt (zeg AN3), dan is alles wat er voor zit (AN0, AN1, en AN2) ook altijd analoog.

Als je altijd begint bij AN0 voor analoog is dat geen probleem. Bij een nieuwere pic als de 16F1939 kun je per pin instellen of het analoog of digitaal moet zijn.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Oke dat is duidelijk.
Maar als ik het een analoge uitgang houd kan ik met een analoge uitgang kan toch ook 5v uitsturen?

Of zie ik dat verkeerd?

De printplaat is immers al compleet gemaakt.

En waarschijnlijk ga ik deze in de toekomst ook als analoog gebruiken.

Ik weet alleen niet hoe je deze uitgang in de software aanstuurt.

Arco

Special Member

Analoge uitgangen bestaan niet op die pic, alleen ingangen.
Kijk of een 16F1939 te gebruiken is, die is volgens mij pin compatible...

Als je een analoge input uitleest als digitale pin, krijg je altijd '0' terug...

[Bericht gewijzigd door Arco op zondag 2 oktober 2022 13:02:06 (24%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com