 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
upornik Član

Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.10 Kraj: Celje
|
Objavljeno: Sre Apr 30, 2008 10:43 pm Naslov sporočila: ADC problem? |
|
|
Imam en problem z AD pretvorbo pri ATMega16 krmilniku. AVCC pin imam povezan preko 10uH dušilke na +5V in preko 100nF na maso, AREF pin pa imam povezan preko 100nF na maso. Ta način reference imam nastavljen tudi v programu. Naredil sem v bistvu en preprost V-meter, ki meri od 0-5V. Napetost merim na 4,7k trimerju.
Ko imam priključen AD0 vhod s katerim merim napetost proti masi na omenjenem trimerju, dobim zelo točen rezultat v primerjavi z multimetrom, s katerim istočasno preverjam napetost. Sprva sem mislil, da mi kaže točno, vendar ko pa odklopim AD0 pin iz merjenega mesta, dobim na multimetru popolnoma drugačen rezultat. Ujemata se le vrednosti 0 in 5V, vmesni rezultat pa je precej mimo. Ta problem sem opazil šele, ko sem testiral temperaturni senzor LM35. Pri sobni temperaturi bi naj napetost na njem bila 200mV. Ta napetost je tudi dejansko na njem( merjeno z multimetrom). Ko jo pa želim meriti z krmilnikom, pa znaša nekaj čez 3V in se s segrevanjem sploh ne spreminja (ko pa merim samo z multimetrom se ustrezno spreminja). Če merim napetost na senzorju istočasno( s krmilnikom in multimetrom), tudi multimeter kaže ves čas nekaj čez 3V. Ne znam si pojasniti v čem je problem. Mogoče kdo ve?
Koda: |
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <moje/LCD.h>
ISR(ADC_vect)
{
unsigned int rezultat=0;
//rezultat je ADCH(register z vrednostjo pretvorbe)x2
rezultat = ADCH;
lcd_pisi_na_naslov(0);
lcd_vrednost_spremenljivke(rezultat);
}
int main (void)
{
DDRB=0xFF;
DDRD=0xFF;
lcd_inicializacija();
lcd_izklopi_kurzor();
lcd_izbrisi_pomakni_na_zacetek();
// Set ADC prescalar to 8 - 125KHz sample rate @ 1MHz
ADCSRA |= 0b00000011;
// Set ADC reference to AVCC
ADMUX |= 0b01000000;
// Left adjust ADC result to allow easy 8 bit reading
ADMUX |= 0b00100000;
// No MUX values needed to be changed to use ADC0
// Enable ADC
ADCSRA |= 0b10000000;
// Enable ADC Interrupt
ADCSRA |= 0b00001000;
// Enable Global Interrupts
sei();
while(1)
{
// Start A2D Conversions
ADCSRA |= 0b01000000;
//vsakih 100ms start A2D Conversions
_delay_ms(100);
}
return(0);
}
|
Tukaj je še program, vrednosti vhodne napetosti nisem programsko računal, ampak sem samo preverjal pretvorbo( vrednosti sem preveril s kalkulatorjem).
Vezje imam na razvojni plošči minipin in testni ploščici.
Hvala za odogovor! |
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Sre Apr 30, 2008 11:47 pm Naslov sporočila: |
|
|
Mogoče je vklopljen notranji pull-up? |
|
Nazaj na vrh |
|
 |
upornik Član

Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.10 Kraj: Celje
|
Objavljeno: Čet Maj 01, 2008 12:31 am Naslov sporočila: |
|
|
Kako to vem in če je, kako se ga izklopi? |
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Čet Maj 01, 2008 4:21 pm Naslov sporočila: |
|
|
Pri inicializaciji dodaj:
PORTA=0x00;
DDRA=0x00;
če ne bo delalo probaj kakšen drug AD vhod (mogoče je ta skurjen). |
|
Nazaj na vrh |
|
 |
upornik Član

Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.10 Kraj: Celje
|
Objavljeno: Čet Maj 01, 2008 9:21 pm Naslov sporočila: |
|
|
Sem poskusil vse to, pa še vedno ni vredu  |
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Čet Maj 01, 2008 10:14 pm Naslov sporočila: |
|
|
Kot prvo poženi simulator in glej DDRA in PORTA če je res 0, ko delaš meritev.
Če je, potem je nekaj narobe s čipom ali pa z vezjem. |
|
Nazaj na vrh |
|
 |
upornik Član

Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.10 Kraj: Celje
|
Objavljeno: Čet Maj 01, 2008 11:43 pm Naslov sporočila: |
|
|
Sedaj mi je končno uspelo. Problem je v tem, da minipin verjetno že vsebuje kakšne pull-up upore, saj ko sem vezje sestavil zgolj na testni ploščici, je stvar začela delovati...
Hvala za pomoč! |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|