Hulp bij Omgaan 10bit PIC-ADC-uitgangssignaal

S

smartsarath2003

Guest
Hai,
Ik bouwde een 0-30V Power Supply.Ik wil gebruik maken van een 7-segment display om de spanning.Voor dat ik gekozen voor het gebruik van PIC-16F876 want het heeft een 10 bit ADC.De minimale resolutie ik nodig voor de spanning van 0.05V.Ik omgezet 0-30V naar 0-5V met een spanning devider netwerk.
Ik gebruik assembler voor ADC programmering en verward met de output van omschakeling naar 7-segment.Ik wil weer te geven tot 2 decimalen dwz 4x 7-segmenten

Met 10 bits ADC het maximum waarde zal zijn 1024, dat is een 10 bit waarde
De spanning actuval o / p zal [(ADC_Output/1024) * 5] * 6.
Hoe kan ik dit doen met behulp van assembler

<img src="http://www.edaboard.com/images/smiles/icon_exclaim.gif" alt="Uitroepteken" border="0" />

Elke sujjestions / monster code ....

Ook ik was in de war ben ik ga afronden de waarde op 2 cijfers na de komma
Mijn idee na die duidelijk is, namelijk de opslag van 4 cijfers in 4 registers en deze doorgeven aan zeven segment display
Kan iemand me helpen om uit deze verwarring plz ...

Bedankt
Laatst gewijzigd door smartsarath2003 op 09 februari 2005 3:52; bewerkt 1 keer in totaal

 
Dit is geen triviale programmering.You need to download of schrijf sommige floating point routines en sommige float naar string conversies.
Dit zou een fluitje van een cent als je om hem te programmeren in C.
Mijn suggestie, gebruik Hi-Tech compiler en schrijf het in C.

 
Bedankt,
Kunt u wijzen op enkele plaatsen waar ik kan downloaden dat spul.
Ook kan een plz post / hechten elk monster codes met C-compiler, want ik gebruikte C-compiler slechts eenmaal, en dat ook zo simpel
Bedankt

 
Sommige floatpoint subs kunt u downloaden vanaf hier:
(Extra Nodig: GPASM of MPASM)

http://prdownloads.sourceforge.net/picfloat/picfloat13Mar2004.tgz?download

 
Hoi!

Gewoon om eenvoudig uw berekeningen,
in plaats van met behulp van een divider netwerk spanning 0-30V naar 0-5V, Ik stel u voor het gebruik van een vermindering van 0-51.15V naar 0-5V (delen door 10,23).
Leg ik uit: u moet een resolutie van 0.05V in uw voltmeter.De ADC heeft stappen 1023 (niet 1024).Nu, elke stap zal hebben 0.05V.De maximale waarde die kan meten is 1023 x 0,05 = 51.15V.Wanneer u de uitgang op 30V, de ADC meet de waarde 600 (in de 2 registers adres).Dus je hebt een afgeronde stap en vergemakkelijken uw formules (bij het vinden van de echte spanning, verdeel ADRES door 20).
U kunt een trimpot om de tussenstijl spanning netwerk met een externe voltagemeter te helpen kalibreren.

Schaal zullen worden:

0V = 0V op de input van ADC = 0 in de registers
0.05V = 0,05 / 10,23 = 0.0048876V in de ADC-ingang = 1 in de registers
1V = 0,09775 V in de ADC input = 20 in de registers
3V = 0.293255V in de ADC-ingang = 60 in de registers
10V = 0.9775V in de ADC-ingang = 200 in de registers
30V = 2.93255V in de ADC-ingang = 600 in de registers

 
Hoi

U kunt gebruik maken van CCS PIC C software om uw code als volgt:

Code:lange ADC_Output / / ADC is het resultaat

float c / / c gevolg van spanning berekeningc = [(ADC_Output/1024) * 5] * 6printf (% 2.2f, onder c); / / print c drijven resultaat met 2 int plus 2 decimalen
 
hai rkodaira,

Bedankt voor je idee.Ik denk dat dit werkt op dezelfde manier die ik nodig heb.
Maar de actuval verwarring ligt in de omgang met 10-bits resultaat.Ik was in staat om code tot 8-bit, maar verward met 10-bit waarde

<img src="http://www.edaboard.com/images/smiles/icon_question.gif" alt="Vraag" border="0" />Is er een algoritham / methode die al bestaat voor dit soort problemen

Bedankt

 
Je hebt net de behandeling van de 10-bits waarde als een int, die twee bytes in de meeste C compilers voor de pic.Dus moet u gebruik maken van 16-bits-routines voor uw vermenigvuldigen en delen.De winkels zijn int pic's in little endian formaat,

 
Hoi,

Neem een kijkje op deze app nota van Microchip.
Hoop dat het helpt.
Succes.Niet uploaden dingen te vinden op internet.Toepassing nota AN557 kan DL van MicrochipVolgende keer krijg je een waarschuwing.Cl
 
Ik kon de afwerking voor 8-bit output van de ADC
Hier is de plaats waar ik het algoritme

http://www.convict.lu/Jeunes/Math/Fast_operations.htm
http://www.convict.lu/Jeunes/Math/Fast_operations2.htm

Maar ik kon niet begrijpen hun code, dus heb in mijn eigen manier

Maar nog steeds havn't heb een idee met betrekking tot 10 bit waarde

<img src="http://www.edaboard.com/images/smiles/icon_rolleyes.gif" alt="Rolling Eyes" border="0" />Zoals ik vernam de 8-bits ADC Ik wil het uit te proberen met behulp van de C-compiler als goed.Als iemand nog een goede merkt / docs over hoe te programmeren met behulp van CCS-C-compiler, kunt u plz post hier.
En kan ik gaan de 10-bit waarde met C-compiler atleast
Bedankt

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Koel" border="0" />
 
De eenvoudigste manier om te gaan is het creëren van een look-up tafel en lees de resultaten uit daar.Op deze manier hoeft u geen gebruik te maken van een wiskundige operaties en u kunt werken op zoveel bits als u wilt.
U kunt 10-bits naar 16-bit (2 bytes) nummer met MSB = 000000XX ..

 
Ik heb twee 8-bit registers die de output value.When het resultaat is 0-255, de meest siginificant register 0x00.Dus ik kan doen alle handelingen tot er op de eerste register.As gezegd rkodaira, de Actuval Uitgangsspanning = ADRESHL (minst sigificant byte) / 20
Het probleem is hoe aan te pakken als het resultaat groter is dan 255, die zich in twee registers

Voor opzoektabel, ik moet een resolutie van 0.05V van 0-30V.dwz 600steps.Dus ik kan niet echt braakliggende opzoeken tabel.
Nog meer ideeën

<img src="http://www.edaboard.com/images/smiles/icon_exclaim.gif" alt="Uitroepteken" border="0" />
 
Hi Smartsarath!Bedankt voor de punten.

Ik meestal gebruik van het adres met ADFM links gerechtvaardigd:

ADRESH = 8 bits meer significante en
ADRESL = 2 bits minder belangrijk (verschoven 6 keer links).

Maar in uw geval, ik denk dat het beter is te gebruiken rechts (ADFM = 0):

ADRESH = 2 bits meer significante
ADRESL = 8 bits minder belangrijk

Uw einde van schaal zal worden 30.00V = 600 in de adresbalk (2 bytes).

Alleen het resultaat verplaatsen naar een andere 2 variabelen (8 bits elk).laten we zeggen:
MSB en LSB

Dus ik zei tegen delen door 20 om het resultaat in volt.Maar het resultaat moet Houd de fractionay deel (twee posities na de decimale punt).Dus in plaats van delen door 20, vermenigvuldig het resultaat met 5 ((x/20) * 100 = x * 5, gebruik van 8 bits x 8 bits routine).Op deze manier heb je de verbrokkeling deel plaats in de 16-bits integer variabele.

Bijvoorbeeld, 30V = 600 Dec:
ADRESH = 0000 0010 = 2 dec naar MSB
ADRESL = 0101 1000 = 88 dec naar LSB

LSB te vermenigvuldigen met 5 = 1 1011 1000 bin of carry = 1 en 184 dec in LSB
MSB vermenigvuldigen met 5 = 0000 1010 = 10 dec
Toevoegen voeren naar MSB: 10 1 = 11 dec (0000 1011 bin)

Dus je hebt: 11 * 256 184 = 3000 dec in MSB en LSB of 3000 centivolts

Gebruik gewoon een routine gescheiden decimale cijfers in 4 variabelen (8 bits elk).Zoek voor deze routine) en verschuiving van de komma twee posities (van links of rechts).

Ik hoop dat dit helpt.Succes.

 
Ik heb dat, maar waar komt het voeren gaat wanneer u activiteiten die de output van meer dan 8 bits, dus 5 * 88, 11 * 256 of (11 * 256) 184.
Voor zover ik weet, ik weet alleen vlag zal worden ingesteld.Hoe zit het met de waarde van de actuval voeren.Is het eigenlijk opgeslagen in ieder spl registers!Ik heb niet de zorg over deze carry bcos Ik heb nooit gewerkt met een dergelijk grote aantallen

Citaat:

Gebruik gewoon een routine gescheiden decimale cijfers in 4 variabelen (8 bits elk).
Zoek voor deze routine) en verschuiving van de komma twee posities (van links of rechts).
 
Hoi!Het
is me weer.

In de vermenigvuldiging routine, moet u gebruik maken van enkele register voor het opslaan van de uitvoering (en) (zelfs indien groter dan 1), telkens als de uitvoering is ingesteld na een stap in de vermenigvuldiging routine, moet u deze tijdelijke verhoging register (RAM).Na, moet dit worden toegevoegd aan de MSB (na de vermenigvuldiging met 5).Ik denk dat de grootste uitvoering zal worden 4 dec (100 bak), omdat 5 * 255 = 1275 dat gedeeld door 256 = 4,98 ...

Ja, er zijn enkele routines te converteren binaire formaat naar BCD formaat of zoiets.

 

Welcome to EDABoard.com

Sponsor

Back
Top