prog ontwikkeling

hallo,

na een geslaagde actie met een eenvoudig programma in een overused pic, (16F628) wil ik voor het zelfde project een andere PIC gebruiken, zei het met een geheel andere functie.
deze moet een spanning van 0-5V uitlezen en op een display deze text laten verschijnen:

pic basic code:


Supply Y :
xxx,x Volt 

op de plaats van de Y komt een letter, afhankelijk van een inkomend signaal. letter A tot en met E. deze is gewoon TTL en dak kan ik zelf ook wel.
daar geen problemen mee.
voor dit idee 12 pins nodig:
6 pins LCD
1 Pin analog in
5 pins A-E selectie
en dus na wat onderzoek ook nog twee Vref pins, Vref+ en Vref-.

ik wilde eerst 16F877 gebruiken maar dan heb ik zoveel pins over, en het kost wel aardig wat ruimte en ik khenb aan 16 pins genoeg, insclusief Vdd en Vss. ik wilde dus voor een 18 pins gaan maar 16F628 gaat niet want die heeft geen analoge pins.
ik wil per se in de 12F/16F series blijven.
de eerste waarbij ik uit kwam was 16F819.
1)is het hiermee mogelijk?
2)en dan een andere vraag, alles in het programma kan ik zelf behalve het inlezen van het analoge signaal ( dit wil ik met 1000 vermenigvuldigen en opslaan in een variabele ).
helaas staat op Picbasic( briljante site) geen inleiding tot het uitlezen van spannigen met een analoge poort.
weet iemand waar ik zo een tutorial kan vinden daarvoor, dan kan ik dat doen nadat ik klaar ben met deel 7 tot 10 en dan kan ik hopelijk de rest zelf wel doen.( al weet ik zeker van niet:))
3)weet iemand in de datasheet waar ik de config words kan vinden, bij mijn IDE lite versie werkt de plugin functie niet...bedankt!

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

De demo versie van picbasic doet toch alleen de 877 en 628?

Elke functie van picbasic staat duidelijk uitgelegd in de handleiding

Config word staat bij special features iirc.

demo versie kan idd alleen die twee, maar daarvoor heb ik mijn contacten. ik gooi de boel in een kladblok bestand, en mijn contact verandert de andere dingen die dan nog nodig zijn. over deze zaken hoef ik me geen zorgen te maken.

dankje, bas, je hebt een wereld voor me opengelegd :)
nu ga ik eens op zoek naar hoe ik een spaning uitlees..
mijn hoofd zegt dat ik bij "ADIN" moet zijn.

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

vanuit de help-source van proton IDE:

pic basic code:


'Read the value from channel 0 of the ADC and place in variable VAR1. 
 DECLARE ADIN_RES 10       ' 10-bit result required 
 DECLARE ADIN_TAD FRC      ' RC OSC chosen 
 DECLARE ADIN_STIME 50     ' Allow 50us sample time 
 DIM VAR1 as WORD 
 TRISA = %00000001         ' Configure AN0 (PORTA.0) as an input 
 ADCON1 = %10000000        ' Set analogue input on PORTA.0 
 VAR1 = ADIN 0             ' Place the conversion into variable VAR1 

dit ga ik typend analyseren, als ik iets fout analyseer hoop ik dat er iemand is die me verbetert.

eerst:

pic basic code:

DECLARE ADIN_TAD FRC      
DECLARE ADIN_STIME 50  

de sample begint, maar wacht eerst 50 microseconden als voorbereiding. hierna wordt er gemeten.
de 50 microseconden zijn po basis van de interne oscillator.

daarna:

pic basic code:

DIM VAR1 as WORD
VAR1 = ADIN 0  

variabele aanmaken waar straks de meting in gepropt wordt.
deze kan maximaal 65535 zijn.

en:

pic basic code:

TRISA = %00000001         ' Configure AN0 (PORTA.0) as an input 
ADCON1 = %10000000        ' Set analogue input on PORTA.0 

moet dit niet bovenaan het programma?
en waarom is het niet ADCON = &00000001?
stel, ik wil meten op porta.4
dan zou het worden

pic basic code:

;         01234567
ADCON1 = %00001000

ook:

pic basic code:

DECLARE ADIN_RES 10

dat is de enige die ik echt niet begrijp.
de gemeten waarde wordt dus in 10 bits weergven.
maar hoe is dei weergave? hoe ziet die eruit?
als er 1,9V op de pin staat en ik doe
VAR1= ADIN 0 * 10

wordt de variabele dan binair geschreven in cijfers, dus 0000000019?

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

de weergave is 10 bits

0V = waarde 0
2,5V = waarde 512
5V = waarde 1023

Een zak tuinaarde opescheuren

Ik denk dat je ADCON niet klopt (zonder na te kijken), kijk eens wat het ADCON register doet (datasheet pic onder ADC ding)

Henry S.

Moderator

Op 18 januari 2010 10:44:50 schreef TechnOoB12:
demo versie kan idd alleen die twee, maar daarvoor heb ik mijn contacten. ik gooi de boel in een kladblok bestand, en mijn contact verandert de andere dingen die dan nog nodig zijn.

Handig is anders, toch maar even iets meer dan €100 sparen.

pic basic code:

TRISA = %00000001         ' Configure AN0 (PORTA.0) as an input 
ADCON1 = %10000000        ' Set analogue input on PORTA.0 

moet dit niet bovenaan het programma?

Na je TRISA en voordat je gaat samplen, of wil je nog hoger bovenaan?

Let op! Voordat je TRISA doet altijd even

code:


PORTA = %00000000

gebruiken.

en waarom is het niet ADCON1 = %10000000?

Goede vraag, de MSB heeft een andere functie: Right Justified.
Kijk ook even naar de vetgedrukte veranderingen, consequent blijven.

ook:

pic basic code:

DECLARE ADIN_RES 10

dat is de enige die ik echt niet begrijp.
de gemeten waarde wordt dus in 10 bits weergven.
maar hoe is dei weergave? hoe ziet die eruit?
als er 1,9V op de pin staat en ik doe
VAR1= ADIN 0 * 10

wordt de variabele dan binair geschreven in cijfers, dus 0000000019?

10 bits resolutie, en het hoogste decimale getal dat je in 10 bits kan stoppen is 1023. vandaar dat je een word nodig hebt om dit uit te kunnen lezen.

Een kleine edit: Denk om de functie van ADCON1, je hebt met TRISA al de analoge ingangen bepaald, dat doet ADCON1 nog een keer, maar dan anders.

Op 18 januari 2010 19:02:41 schreef Bas Smit:
Ik denk dat je ADCON niet klopt (zonder na te kijken), kijk eens wat het ADCON register doet (datasheet pic onder ADC ding)

Het voorbeeld klopt, bit 7 is het ADFM bit, en formateert de output van de ADC.

De rest staat op 0.
Bit 6: ADSC - FRC clock conversion
Bit 5-4: not used
Bit 3-0: FCFG - 8 analoge ingangen en referenties aan Vdd en Vss.

Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.
Lambiek

Special Member

Hier heb je nog een voorbeeld. Het is 8_bit's maar dan is het per stap 0.019VDC.

pic basic code:


Device 16F877A            ; processor type

Config HS_OSC,_           ; cristal groter dan 4MHz
       WDT_OFF,_          ; Watchdog Timer Enable uit
       PWRTE_ON,_         ; Power-up Timer Enable aan
       BODEN_OFF,_        ; Brown-out Reset Enable uit
       LVP_OFF,_          ; Low Voltage Programming uit
       CPD_OFF,_          ; Memory Code Protection uit
       WRTE_ON,_          ; Program Memory Write Enable aan
       DEBUG_ON,_         ; In-Circuit Debugger Mode aan
       CP_OFF             ; Code Protection uit

XTAL 20                   ; crystal 20 mhz

ALL_DIGITAL True          ; alle poorten digitaal

Symbol On = 1             ; 1 is hoog
Symbol off = 0            ; 0 is laag

Symbol led_1 = PORTA.1    ; poort a.1 is uitgang

Declare ADIN_RES = 8      ; resolutie 8 bits
Declare ADIN_TAD = frc    ; set RC osc
Declare ADIN_STIME = 50   ; sample tijd 5

Dim waarde As Byte        ; variabele waarde 0 t / m 255

Clear                     ; wis geheugen

DelayMS 2000              ; wacht 2 seconden

;poortA  543210           ; hulp regel poort a
PORTA  = %00000           ; poort a is laag
TRISA  = %00001           ; poort a.1 als uitgang
ADCON0 = %00001           ; analooge ingang 0

start:

waarde = ADIn 0
If waarde > 100 Then
led_1 = On
Else led_1 = off
EndIf
GoTo start

End                                               

Misschien even aanpassen voor jou processor.

Als je haar maar goed zit, GROETEN LAMBIEK.

@henry

"stel, ik wil meten op porta.4
dan zou het worden

ADCON1 = %00001000"

Ik krijg de indruk dat technoob denkt dat het bitje bepaald welke ingang je als analoog gebruikt. Dus dat ADCON1 hetzelfde werkt als het TRIS of het PORT register.

0000, 0001 en 0010 doen net zo goed A4 als analoog.

Henry S.

Moderator

Dat vermoeden heb ik ook, vandaar mijn toevoeging.

0000, 0001 en 0010 doen net zo goed A4 als analoog.

Alleen 0000 en 0010 zul goed werken. Bij 0001 wordt de V+ referentie op port A3 verwacht.

Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.
Lambiek

Special Member

Op 18 januari 2010 19:43:27 schreef Bas Smit:
Ik krijg de indruk dat technoob denkt dat het bitje bepaald welke ingang je als analoog gebruikt. Dus dat ADCON1 hetzelfde werkt als het TRIS of het PORT register.

Bij 8_bits klopt dat inderdaat, maar dan wel met ADCON0

@ TechnOoB12.

Kijk eens in deze sheet op blz_114, daar staat hoe je de instellingen moet zetten onder ADCON1. Dit is voor de 16F877.

http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf

[Bericht gewijzigd door Lambiek op maandag 18 januari 2010 20:40:14 (24%)

Als je haar maar goed zit, GROETEN LAMBIEK.

ontzettend bedankt allemaal!
hier heb ik echt wat aan:)

Op 18 januari 2010 19:43:27 schreef Bas Smit:
Ik krijg de indruk dat technoob denkt dat het bitje bepaald welke ingang je als analoog gebruikt. Dus dat ADCON1 hetzelfde werkt als het TRIS of het PORT register.

eh ja... :D

om maar even het schema wat ik in gedachten had te posten:
http://i45.tinypic.com/20a42o8.gif
er is nog wel een wijziging: port 4 van het LCD zit aan pin 16 en pin 16 van het LCD aan pin 15.

Px is om Vref+ te krijgen, daarom hangt ie als enigae aan 12V, anders kun je hem niet goed afstellen. de 12V is goed stabiel.

er zijn nog veel dingen die ik moet zeggen, vertellen en moet opmerken maar ik heb nog niet gegeten en mijn maag protesteert, dus tot zo dan. :)

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
marcob

Golden Member

Die 12 Volt gaat je PIC niet leuk vinden. Ook zit dat niet goed aangesloten zo, door de hoge ingangsimpedantie van de PIC ingang, staat op RA2 en RA3 12 Volt. Ook doet Rx niet veel.
Zoek het internet maar eens af naar voorbeelden hoe het wel gaat.

EDIT: 20 seconden zoeken in Google Images: Hier zie je een voorbeeld
http://www.rlocman.ru/shem/i/users.otenet.gr/~athsam-Circuits-Digital_V_A_meter-Digital_voltmeter.gif

[Bericht gewijzigd door marcob op dinsdag 19 januari 2010 09:17:22 (27%)

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

oew, nog wel vergeten,
Vreg- hangt aan de GND, anders is Px geen goede deler natuurlijk.

@lambiek

Op 18 januari 2010 19:31:55 schreef Lambiek:

pic basic code:

;poortA  543210           ; hulp regel poort a
PORTA  = %00000           ; poort a is laag
TRISA  = %00001           ; poort a.1 als uitgang
ADCON0 = %00001           ; analooge ingang 0

ok, porta is laag, maar porta.0 als ingang toch?
met porta.1 als uitgang was het dan

pic basic code:


trisa % 00010

geweest

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

Op 19 januari 2010 10:05:22 schreef TechnOoB12:
oew, nog wel vergeten,
Vreg- hangt aan de GND, anders is Px geen goede deler natuurlijk.

Nu kun je alsnog tot 12V regelen, dat wil je niet (zie VREF+,MAX in datasheet).

Op 18 januari 2010 19:31:55 schreef Lambiek:

pic basic code:


;poortA  543210           ; hulp regel poort a
PORTA  = %00000           ; poort a is laag
TRISA  = %00001           ; poort a.1 als uitgang
ADCON0 = %00001           ; analooge ingang 0

Op 19 januari 2010 10:05:22 schreef TechnOoB12:
ok, porta is laag, maar porta.0 als ingang toch?
met porta.1 als uitgang was het dan

pic basic code:


trisa % 00010

geweest

Er staat zelfs nog een hulpregeltje bij met 543210. Jouw TRISA=%00010 (zorg dat je notatie klopt, ook in een voorbeeld!) zet a.0 als uitgang en a.1 als ingang. Die van Lambiek klopt gewoon.

If you want to succeed, double your failure rate.

hm. nu mmoet ik even goed nadenken bij wat ik zeg want ik ben lekker aan het klooien hier.

@ jochem
das waar ook... had beter moeten kijken..

Op 18 januari 2010 18:57:48 schreef Kevinoud:
de weergave is 10 bits

0V = waarde 0
2,5V = waarde 512
5V = waarde 1023

dan zou
1V= 205 zijn..
1/205 is 0.0048
dus 0.0048 volt per stap..
als ik de waarde ( stel even 300) in een variabele stop.
variabele heet kees:)
dan typ ik

pic basic code:


print at 1, 1, "voltage = ",kees * 0.0048,"volt"

krig ik dan de actuele gemeten waarde...?
moet dan wel met Declare ADIN_RES = 10

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

Is in PICBASIC de string concatenater een komma? Ik zou het je niet durven zeggen namelijk (meeste BASIC dialecten volgens mij &), maar verder lijkt me de redenatie wel enigszins kloppen.

Liever gebruik je echter een DEFINE (wat is daar de BASIC tegenhanger van??) voor je 5/1023=0.0048, want je hebt nu al een afrondingsfout (moet 0.0049 zijn, en zelfs dan heb je nog een onnauwkeurigheid) die natuurlijk verder toeneemt bij vermenigvuldiging. Ik weet ook niet hoe gelukkig PICBASIC wordt van floats, maar door eerst met 5 te vermenigvuldigen en daarna genoegen te nemen met een deling door 1024 kun je 10 keer shiften, das veel gunstiger (een deling door 1024 zal PICBASIC zelf wel een shift van maken mag ik hopen).

If you want to succeed, double your failure rate.
marcob

Golden Member

Hier een compleet voorbeeld uit de Help van Proton:

pic basic code:

DEVICE = 16F877
 XTAL = 4
 ADIN_RES = 10                  ' 10-bit result required 
 ADIN_TAD = FRC                 ' RC OSC chosen 
 ADIN_DELAY = 50                ' Allow 50us sample time 
 DIM RAW AS WORD 
 DIM VOLTS AS FLOAT
 SYMBOL QUANTA = 5.0 / 1024     ' Calculate the quantising value
 CLS
 TRISA = %00000001              ' Configure AN0 (PORTA.0) as an input 
 ADCON1 = %10000000             ' Set analogue input on PORTA.0
AGAIN:

 RAW = ADIN 0
 VOLTS = RAW * QUANTA
 PRINT AT 1,1,DEC2 VOLTS,"V    "
 GOTO AGAIN
People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years
Lambiek

Special Member

Dat licht er aan wat je wil, moet het heel precies dan ga je voor 10_BITS en anders voor 8_bits.
En kijk eens naar het voorbeeld wat ik gestuurd heb, daar staat het precies in, de variabele dan hé.

Als je haar maar goed zit, GROETEN LAMBIEK.

dat is een hele mooie marcob. zoiets was eigenlijk precies wat ik zocht, alleen dan voor een iets andere pic( maar die wijzigingen lijken mij niet al te groot)
en een andere poort. ipv porta.0 wilde ik porta.4 gebruiken.

om de meting te laten slagen moet ik neem ik aan een exacte spanning van 5V op pin Vref+ zetten en de Vref- aan de GND van die referentiespanning hangen.
stel, dat ik er exact 1V op zet. dan is 1023 gelijk aan 1V, en is een stap 0.0097 V als ik me niet vergis. dat is voor mij handiger gezien i spanningen tot 80V meet met een 1% spanningsregelssr waarin 80V dus uitkomt als 800 millivolt. (dat zou als uitlezing 818 geven)
verder gebruik ik geen extern kristal al is dat nog wel mogelijk.
is dat cruciaal? ik wilde eigenlijk voor de interne oscillator gaan.

@ lambiek
ik wilde voor 10 bits resolutie gaan. dan zal ik de variabele als word moeten hebben, byte is niet genoeg.

ik heb al ontzettend veel geleerd dit topic, en als watik nu geschrevenheb klopt, is er nog maar een ding wat ik niet begrijp.

en dat zijn die

pic basic code:

 TRISA = %00000001              ' Configure AN0 (PORTA.0) as an input 
 ADCON1 = %10000000             ' Set analogue input on PORTA.0

dingen.
ik moet de mijne op AN4 hebben, en op de 16F818 is dat gelijk aan RA4. wat moet ik nu wijzigen?

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

Kun je mij vertellen op welke pagina van de datasheet ADCON1 beschreven wordt? Welk deel daaruit begrijp je niet?

If you want to succeed, double your failure rate.

in de datasheet van de juiste PIC;
http://oap.sourceforge.net/datasheets/PIC16F819.pdf
pagina 83.

-ADCON0
ik begrijp bit 2 niet en bit 7&6 niet helemaal.
en waar ik dit in mijn programma moet plaatsen.

naar mijn idee zou het zo moeten zijn:

ADCON0 = %11001?01

ik gebruik de interne osc dus dat is in beide gevallen 11 denk ik.
verder uilezen op RA4/AN4

-ADCON1

bit 7 zegt mij niks.
bij bit 0-3 staat niet wat ik wil hebben,
ik moet hebben:
AN4 analog
AN3 vref
AN2 vref
AN1 Digital
AN0 digital

zo kom ik nu uit op

ADCON1 = %?000????

van beiden weet ik niet waar ik het in mijn prog moet plaatsen.
als je mijn prog wilt zien, post ik hem straks wel.

EDIT:
ben ook een stapje verdermet Config. words.

pic basic code:

 CP_OFF, CPD_OFF, LVP_OFF,BOREN_OFF,MCLRE_OFF, PWRTE_ON,WDTE_OFF,INTRC_OSC_CLKOUT,WRT1_OFF,WRT0_OFF, DEBUG_OFF

alleen CCPMX ben ik niet uit.
ik wil die functie helemaal niet:)

[Bericht gewijzigd door The Engineer op dinsdag 19 januari 2010 14:46:13 (16%)

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!

Okee, nu geef je tenminste wat aan.

Op 19 januari 2010 13:48:45 schreef TechnOoB12:
ik begrijp bit 2 niet en bit 7&6 niet helemaal.

ADCON0.2 (GO/#DONE) moet jij setten (1) op het moment dat je hem wilt samplen. Zodra hij 0 is geworden is je PIC klaar en staat het resultaat voor je in het betreffende register. Zie ook 11.4, staat ook nog een tijdlijn bij.

Het verhaal over bit 6&7 wordt toch prima (met voorbeeldtabel) uitgelegd in 11.2? Wat snap je daar niet aan?

ik gebruik de interne osc dus dat is in beide gevallen 11 denk ik.

Nee, zo werkt dat niet, staat erboven:

The A/D converter has a unique feature of being able
to operate while the device is in SLEEP mode. To operate
in SLEEP, the A/D conversion clock must be
derived from the A/D’s internal RC oscillator.

Verder 11.2 lezen.

verder uilezen op RA4/AN4

Hoe kom je op 001 voor bits 5-3 dan??

-ADCON1

bit 7 zegt mij niks.

En terwijl 11.4.1 het nog wel voor je uitlegt, samen met figuur 11-4.

Stel we hebben decimaal het getal 1023 (binair 10-bits 'aan', dus maximaal)

code:


       _____________________
      |  ADRESH  :  ADRESL  | 
      | 76543210 : 76543210 | 
      |__________:__________| 
 left | 11111111 : 11xxxxxx |
right | xxxxxx11 : 11111111 |
      '---------------------'

De 'x' is ongedefinieerd, immers is het maar een 10-bit ADC.

Als je die 10 bits allemaal gebruikt wil je waarschijnlijk right-justification. Je most significant bits zitten dan in ADRESH, dus moet je truuks gaan uithalen om die te bewaren. Als je met 8-bits genoeg neemt (die laatste staan misschien toch maar te klapperen vanwege een niet-toereikend analoog circuit) kun je veel beter left justification pakken. In het tabelletje hierboven zie je dat de bits die je dan eigenlijk niet nodig hebt de enige zijn die in ADRESL staan. ADRESH bevat dus effectief de 8-bits ADC waarde die je dan wilt hebben.

Maar ik kan me ook voorstellen dat PICBASIC dat allemaal lekker voor je interfacet, staat daar niks over in de handleiding?

bij bit 0-3 staat niet wat ik wil hebben,
ik moet hebben:
AN4 analog
AN3 vref
AN2 vref
AN1 Digital
AN0 digital

Kijk, dus je begrijpt dat je iets wil dat niet kan? Dan zou je dus je schema aan moeten passen, misschien AN0 en AN4 omruilen?
(RX is nog steeds een vage trouwens, doet geen goed in deze opstelling...)

van beiden weet ik niet waar ik het in mijn prog moet plaatsen.
als je mijn prog wilt zien, post ik hem straks wel.

De momenten waarop het een en ander gedaan moet worden kun je denk ik prima afleiden uit het stappenplan in de datasheet:

These steps should be followed for doing an A/D
conversion:

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 ADIF bit
  • Set ADIE bit
  • Set GIE bit

3. Wait the required acquisition time.
4. Start conversion:

  • Set GO/DONE bit (ADCON0)

5. Wait for A/D conversion to complete, by either:

  • Polling for the GO/DONE bit to be cleared
    (with interrupts disabled); OR
  • Waiting for the A/D interrupt

6. Read A/D Result register pair
(ADRESH:ADRESL), clear bit ADIF 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 2 TAD is
required before the next acquisition starts.

If you want to succeed, double your failure rate.

veranderd schema:

http://i47.tinypic.com/346b5ub.gif

hele programma, na luisteren naar jochem's aanwijzingen:

pic basic code:

'****************************************************************
'*  Name    : PIC 2 van XPSll.BAS                               *
'*  Author  : Roel Zwetsloot                                    *
'*                                                              *
'*  Date    : 17-1-2010                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEVICE 16F818
config CP_OFF, CPD_OFF, LVP_OFF,MCLRE_OFF,PWRTE_ON,INTRC_OSC_NOCLKOUT,WRT1_OFF,WRT0_OFF, DEBUG_OFF

 
;Logische constanten
SYMBOL ON = 1       ;AAN 

;declares LCD
DECLARE LCD_ENPIN PORTA.6
DECLARE LCD_RSPIN PORTA.7
Declare ADIN_RES = 10         ; resolutie 10 bits
Declare ADIN_TAD = frc        ; set RC osc intern
Declare ADIN_STIME = 50       ; sample tijd 5

;variabelen
DIM letter AS BYTE
DIM Volts AS float
DIM Raw AS word

; poortnamen
symbol A = PORTA.5
symbol B = PORTB.0
symbol C = PORTB.1
symbol D = PORTB.2
symbol E = PORTB.3

;andere symbolen
SYMBOL stap = 5.0 / 1024     


;          76543210
PORTA =   %00000000
PORTB =   %00000000
TRISA =   %11111100
TRISB =   %00001111
ADCON1 =  %00001011

; opstartprocedure 
ADCON0  = %11100001          
CLEAR                         ;Wis alle RAM geheugen 
DELAYMS 250                   ; display stabilisatie
cls                           ; LCD schoon vegen
print at  1,  1, "Welcome"    ; intro
delayms 200
print at  2,  1, " XPS-ll Supply "
delayms 500
cls                           ; weer schoon beginnen


;Hoofdprogramma
While 1 = 1                    ;open lus
  If A  = ON then
    letter  = 65              ;ascii letter A
  elseif  B = ON then
    letter  = 66              ; ascii letter B
  elseif  C = ON then
    letter  = 67              ; ascii letter c
  elseif D  = ON then
    letter  = 68              ;'            '
  elseif E  = ON then
    letter  = 69              ;'             '
  endif

   ; data conversie
         ;76543210
  ADCON0 = %11100101
  Raw = ADRESH
  Volts =  Raw * stap

; uiteindelijke weergaves
  PRINT AT 1, 1,"supply ",letter," :"    ;eerste regel geeft aan welke lijn gemeten wordt, letter in ascii weergave
  PRINT AT 2,1, DEC3 Volts,"Volt"

wend

end  

heb geprobeerd te compilen,alleen herkent hij de config word "INTRC_OSC_NOCLKOUT" niet? is toch een basis word...

Waar rook is, is Roel. 5e jaars EE student @TU delft met een uit de hand gelopen buizenhobby!
Henry S.

Moderator

Op 19 januari 2010 09:13:03 schreef marcob:
EDIT: 20 seconden zoeken in Google Images: Hier zie je een voorbeeld
[afbeelding]

Geen microcontroller te bekennen.

TechnOoB12:
-Wat ben je van plan met Vref+? Die mag maximaal maar 5V worden, wat je nu gedaan hebt is onzinnig. Verder moet Vref+ een goede referentie zijn, aan Vdd zetten of via een nauwkeurige band gap regelaar.
-ADCON0 wordt door ADCin geregeld, daar heb jij verder niks mee te maken.
Instellingen gebeuren via de ADIN declaraties. Kijk maar naar de voorbeeldcodes in de handleiding en de voorbeeldenmap.
-Voordat je het schema maakt eerst bepalen of het kan aan de hand van de datasheet.
-of INTRC_OSC_NOCLKOUT geldig is staat in de P16F819.PBP file
-Waar is je ontkoppeling?
-Weer zit je te knoeien met nietszeggende variabelen, dat moet je meteen goed doen anders leer je jezelf verkeerde dingen aan, afleren is veel moeilijker.
Je kan toch wel wat duidelijke namen bedenken?
A, B, C, maak er dan in ieder geval LetterA etc van.

Een universele ADC schakeling voor PIC's staat op het forum.

Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.