spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Elettronica > E. Digitale

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 18-07-2007, 14.52.11
aduri aduri non è collegato
Robottaro gold
 
Data registrazione: 24-03-2005
Residenza: Genova
Età : 57
Messaggi: 106
Potenza reputazione: 66
aduri E' per ora ancora un mistero
Send a message via Skype™ to aduri
Predefinito problemi con acquisizione A/D multipla x pic16f877a

Ho provato, per la prima volta, a vedere come funziona il convertitore A/D del pic16f877a ed ha funzionato alla prima poi ho provato ad apportare delle modifiche al codice d'esempio MiKrobasic (MKB) per avere la possibilita' di conversioni multiple ma non ha funzionato o per meglio dire funziona solo un canale e l'altro segue molto disturbato i valori del primo.
Il mio dubbio e' anche capire MKB cosa fa con i registri intco1 e intcon0 quando usa la macro ADC_read(2).
Nel manuale di MKB viene spiegato che prima di usare la funzione ADC_read(nr. canale acquisizione) occorre settare ADCON1 ed in questo caso, se ho capito bene, con ADCON1=$82 configuro (PCFG) AN0-1-2-3-4 come canali analogici del pic16f877a e dal 5 al 7 come digitali e prendo il riferimento di tensione (Vref+) di Vdd; dopodiche' con TRISA=$FF setto la porta A come input; sembra che ADCON0 venga gestito dalla funzione di lettura.
La funzione ADC_read(nr. canale acquisizione) la metto all'interno di un ciclo infinito while/wend e con un solo canale funziona.
Se ne metto 2 come ho fatto qui di seguito ne funziona bene solo uno.

Qualcuno ha esperienze a proposito?

Allego il listato:

program adc2_lcd
'(*
' * Project name:
' adconlcd
' * Copyright:
' © mikroElektronika, 2005 - 2006
' * Revision History:
' 20050312:
' - initial release.
' * Description:
' This code demonstrates how to use library function ADC_read, and library
' procedures and functions for LCD display (4 bit interface)
' * Test configuration:
' MCU: PIC16F877A
' Dev.Board:
' Oscillator: HS, 4.000 MHz
' Ext. Modules: None
' SW: mikroBasic v5.0 or higher
' * NOTES:
' - If you are using EasyPIC4, use provided jumper on top right to connect potentiometer to RA2
' *)

dim ch1 as byte
ch2 as byte
t1 as word
t2 as word
Text1 as char[17]
Text2 as char[17]
tlong1 as longint
tlong2 as longint

main:
PORTB =0 ' clear portb
TRISB =0 ' designate portb as output (LCD is connected to portb)
intcon =0 ' disable all interrupts
Lcd_Init(PORTB) ' initialize (4-bit interface connection)
Lcd_Cmd( LCD_CURSOR_OFF) ' send command to LCD (cursor off)
Lcd_Cmd(LCD_CLEAR) ' send command to LCD (clear LCD)
Text1 ="A/D Aduri" ' assign text to string a
Lcd_Out(1,1, Text1) ' print string a on LCD, 1st row, 1st column
Text2 ="Prova" ' assign text to string a
Lcd_Out(2,1, Text2) ' print string a on LCD, 2nd row, 1st column
OPTION_REG = $80

ADCON1 = $82 ' configure VDD as Vref, and analog channels
TRISA = $FF ' designate porta as input
Delay_ms(2000)
Text1 = "voltage1:" ' assign text to string a
Lcd_Out(1,1,Text1) ' print string a on LCD, 2nd row, 1st column
Lcd_Chr(1,14,"V")
Text2 = "voltage2:" ' assign text to string a
Lcd_Out(2,1,Text2) ' print string a on LCD, 2nd row, 1st column
Lcd_Chr(2,14,"V")

while true
t1 = ADC_read(1) ' get ADC value from 1st channel
tlong1 = t1*5000
t1 = tlong1 >> 10
ch1 = t1 div 1000 ' prepare value for diplay
Lcd_Chr(1,11,48+ch1) ' write ASCII at first row, 9th column
Lcd_Chr(1,12,".")
ch1 = (t1 div 100) mod 10
Lcd_Chr(1,13,48+ch1)
ch1 = (t1 div 10) mod 10
Lcd_Chr(1,14,48+ch1)
ch1 = t1 mod 10
Lcd_Chr(1,15,48+ch1)
delay_ms(1)

t2 = ADC_read(2) ' get ADC value from 2nd channel
tlong2 = t2*5000
t2 = tlong2 >> 10
ch2 = t2 div 1000 ' prepare value for diplay
Lcd_Chr(2,11,48+ch2) ' write ASCII at 2nd row, 9th column
Lcd_Chr(2,12,".")
ch2 = (t2 div 100) mod 10
Lcd_Chr(2,13,48+ch2)
ch2 = (t2 div 10) mod 10
Lcd_Chr(2,14,48+ch2)
ch2 = t2 mod 10
Lcd_Chr(2,15,48+ch2)
delay_ms(1)
wend

end.


Cordiali saluti
Rispondi citando
  #2  
Vecchio 25-07-2007, 06.41.26
aduri aduri non è collegato
Robottaro gold
 
Data registrazione: 24-03-2005
Residenza: Genova
Età : 57
Messaggi: 106
Potenza reputazione: 66
aduri E' per ora ancora un mistero
Send a message via Skype™ to aduri
Predefinito

Sono riuscito a risolvere e funziona.
Non avevo letto bene il datasheet che limitava il valore dell'impedenza d'ingresso, ho sostituito
i trimmer con valori piu' bassi ed ha funzionato perfettamente.
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Sistema di acquisizione di forme michar OpenCV 3 25-01-2011 17.15.06
frequenzimetro con pic16f877a sorecaro P. in C, C++ 4 14-05-2009 10.17.15
Problematiche pic16f877A Ziko E. Digitale 7 06-06-2006 15.43.21
Scheda acquisizione di video ghzrobot Elettronica 23 19-06-2003 14.29.58


Tutti gli orari sono GMT. Adesso sono le: 05.18.41.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB