A/D prevodnik v ATMEGA16
Moderátor: Moderátoři
A/D prevodnik v ATMEGA16
potreboval bych poradit jak rozchodit vnitrni AD prevodnik, aby mi daval spravne hodnoty. Zobrazeni je pomoci LCD displeje, ukazuje to nejake zmatky(na miste jednotek se strida 0,1,2; na pozici desetin jsou to uz vetsi psycha...napr.=,^n,o,k,0,atd... pouzivam vnejsi frekvenci 16MHz.
Hodila by se nejaka funkci ukazka nebo rada jak na to.
Potrebuji merit hodnoty kolem 1V... chci tam pouzit tu vnitrni referci 2,56V i za cenu vyuziti jen poloviny rozsahu
...v priloze je pouzity program..
- Přílohy
-
AD.txt- pouzil sem tenhle kod
- (1.02 KiB) Staženo 280 x
Andrea píše:Tak například
LCDsendChar(vysledek % 100+0x30);
je blbost, vysledek % 100 je číslo 0-99 a tolik číslic nemáme. Musíš nadvakrát.
(vysledek % 100)/10...tak to udelam takhle...ale to nevysvetluje proc mi tam na miste jednotek litaji cisla od 0V do 2V pri pripojenem i nepripojenem napeti na ADC0.
Ted sem pridal jeste setiny... a kdyz neni nic pripojeneho.. tak se tam strida 0,00 1,01 2,02 ....nevite cim to muze byt? Potreboval bych testovat kdy je neco pripojeno, kdy neni a jakou to ma velikost...s tim kmitanim toho moc nenamerim..
Kód: Vybrat vše
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include "lcd_lib.h"
#define REF (1<<REFS1)|(1<<REFS0) //internal reference
#define VREF 2560UL //reference [mV]
unsigned long read_adc(unsigned char kanal)
{
ADMUX = REF + kanal;
ADCSRA |= (1<<ADSC); //start převodu
while (ADCSRA & (1<<ADSC)); //čekej na konec převodu
return ADC;
}
int main(void)
{
unsigned int vysledek;
unsigned long napeti;
static char cela_cast[2];
static char tisiciny[4];
LCDinit();
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //dělič 128
while (1)
{
vysledek = read_adc(0); //ADC0
napeti = vysledek * VREF /1024;
itoa(napeti/1000, cela_cast, 10); //převeď na string
itoa(napeti%1000, tisiciny, 10);
LCDclr;
LCDGotoXY(2, 0);
LCDsendString(cela_cast);
LCDsendChar(',');
LCDsendString(tisiciny);
LCDsendString(" V");
_delay_ms(300);
}
}
schema je zde:
http://leteckaposta.cz/487230727
tady mi to neslo uploadnout
... akorat me napada....dat tam cekaci smycku ktera bude sledovat treba 5 vzorku po sobe a kdyz budou shodne tak ji povazovat za pripojene napeti...... nebo je jiny zpusob?
schema je zde:
http://leteckaposta.cz/487230727
potreboval bych nejak vyresit aby mi to nekmitalo kdyz neni nic pripojene
Zkusil bych připojit odpor proti zemi, nejvyšší hodnotu která udrží ADC v nule (500k?, 100k?). Na měření baterky by to nemělo mít vliv.
Edit:
Odpor případně překlenout kondenzátorem M1-1M.