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


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Čet Sep 29, 2011 11:48 am Naslov sporočila: 10 bitni AD pretvornika ATMEGA8 |
|
|
Pozdravljeni!
Prosil vas bi, če bi mi kdo lahko razrožil oz podal kodo za usposobitev 10 bitnega ad pretvornika v MEGA8.
Najlepša hvala! |
|
Nazaj na vrh |
|
 |
robika Član

Pridružen-a: Pon 05 Apr 2004 20:55 Prispevkov: 281 Aktiv.: 1.19 Kraj: ajdovščina
|
Objavljeno: Čet Sep 29, 2011 1:09 pm Naslov sporočila: |
|
|
V katerem jeziku oz. okolju pišeš. Tukaj je del kode v Bascom AVR
Koda: |
Config Adc = Single , Prescaler = Auto
'Now give power to the chip
Start Adc
'With STOP ADC, you can remove the power from the chip
'Stop Adc
Dim W As Word , Channel As Byte
Channel = 0
'now read A/D value from channel 0
Do
W = Getadc(channel)
Print "Channel " ; Channel ; " value " ; W
Incr Channel
If Channel > 7 Then Channel = 0
Loop
End
|
|
|
Nazaj na vrh |
|
 |
juref Član


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Čet Sep 29, 2011 1:46 pm Naslov sporočila: |
|
|
robika je napisal/a: |
V katerem jeziku oz. okolju pišeš. Tukaj je del kode v Bascom AVR
Koda: |
Config Adc = Single , Prescaler = Auto
'Now give power to the chip
Start Adc
'With STOP ADC, you can remove the power from the chip
'Stop Adc
Dim W As Word , Channel As Byte
Channel = 0
'now read A/D value from channel 0
Do
W = Getadc(channel)
Print "Channel " ; Channel ; " value " ; W
Incr Channel
If Channel > 7 Then Channel = 0
Loop
End
|
|
aja pozabil sem dopisat v C pišem |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Čet Sep 29, 2011 2:04 pm Naslov sporočila: |
|
|
Kje točno se ti je zataknilo? _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
blay44 Član


Pridružen-a: Ned 19 Dec 2010 18:17 Prispevkov: 604 Aktiv.: 3.42
|
Objavljeno: Čet Sep 29, 2011 8:44 pm Naslov sporočila: |
|
|
Tkole. Cja ne poznam, verjetno pa lahko znotraj njega uporabljaš asm.
Najprej v registru ADMUX :
-REFS1 do 0 izbereš referenco(željeno)
-ADLAR poravnavo rezultata
-MUX željeni kanal(pin na portu) Za kanal 5 in 4so omejitve
Register ADCSRA:
-ADEN vklop ADja
-ADSC start ADja
-ADFR neodvisno delovanje(ne porablja ti procesorskega časa!!!!!!! ZAKON)
-ADIF zastavica za prekinitev(ali pretvorba je končana)
-ADIE skok na prekinitveno rutino omogočen
-ADPS prescaler
Register ADCL in ADCH se shrani pretvorba
Prebrati moraš vedno najprej ADCL.
Dobro je pin, ki je uporabljen za AD izločiti iz digitalnega moda
Zadnji bit(low) je skoraj neuporaben. Osem bitna pretvorba pa odlična.
Podobna procedura je na Tinijih, samo manj izbirov pinov
LP |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Čet Sep 29, 2011 9:29 pm Naslov sporočila: |
|
|
Koda: |
#ifndef F_CPU
#define F_CPU 11059200UL
#endif
#include <avr/io.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <util/delay.h>
int delay;
int delay1;
//This function is used to initialize the USART
//at a given UBRR value
void USARTInit(uint16_t ubrr_value)
{
//Set Baud rate
UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
/*Set Frame Format
>> Asynchronous mode
>> No Parity
>> 1 StopBit
>> char size 8
*/
UCSRC=(1<<URSEL)|(3<<UCSZ0);
//Enable The receiver and transmitter
UCSRB=(1<<RXEN)|(1<<TXEN);
}
//******************************************************************************************
int uart_putch(char ch, FILE *stream)
{
if (ch == '\n')
uart_putch('\r', stream);
while (!(UCSRA & (1<<UDRE)));
UDR=ch;
return 0;
}
int uart_getch(FILE *stream)
{
unsigned char ch;
while (!(UCSRA & (1<<RXC)));
ch=UDR;
/* Echo the output back to the terminal */
uart_putch(ch,stream);
return ch;
}
//*******************************************************************************************
/* Assign I/O stream to UART */
FILE uart_str = FDEV_SETUP_STREAM(uart_putch, uart_getch, _FDEV_SETUP_RW);
//*******************************************************************************************
void CLK_0()
{
PORTD = 0b00100000;
for (delay=0; delay < 10;delay++){}
}
void CLK_1()
{
PORTD = 0b01000000;
for (delay=0; delay < 5;delay++){}
}
int beri_enkoder(){
uint8_t i;
uint8_t encoder=0;
uint8_t j;
encoder = 0;
for(i=0;i<9;i++){
CLK_1();
if(PIND & (1<<PD4)){
j = 1; }
else {
j = 0; }
CLK_0();
encoder = (encoder + j);
if(i<8){
encoder = (encoder << 1);
}
}
return(encoder);
}
void ADC_init(int channel)
{
ADMUX = channel;
//prescaler na 1MHz/8=125khz
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
channel = ADC_Read();
}
int ADC_Read(void)
{
char i;
int ADC_temp;
int ADCr =0;
//sbi(ADCSRA, ADEN);
ADCSRA |=(1<<ADSC);
while(!(ADCSRA & 0x10));
for (i=0;i<8;i++)
{
ADCSRA |=(1<<ADSC);
while(!(ADCSRA & 0x10));
ADC_temp = ADCL;
ADC_temp += (ADCH <<8);
ADCr +=ADC_temp;
}
ADCr = ADCr >> 3;
//cbi(ADCSRA,ADEN);
return ADCr;
}
double Beri_tlak(void)
{
double ADC_vrednost;
double Vout;
double tlak;
ADC_vrednost = ADC_Read();
Vout = (5*ADC_vrednost) / 1024;
tlak = ((0.76+Vout) / 0.05295);
tlak = (tlak*10)+31;
return (tlak);
}
int main() {
// double tlak;
int encoder;
stdout = stdin = &uart_str; // to poveže uart z STDIO.H !!!!!
DDRD=0b01101100; //PORTD2 in PORTD3 sta izhoda, ostalo so vhodi
USARTInit(5); //UBRR = 5 =11059200mhz & 115200 baud
// fdevopen(out,0,0); //important if using stdio.h functions
// CLK_0();
// for (delay=0; delay < 2000;delay++){} // nekaj maleag zakasnitve
// ADC_init(1);
while(1)
{
// tlak=Beri_tlak();
// printf("%f \n",tlak);
//printf("mBar\n");
// encoder = beri_enkoder();
printf("%d \n",encoder);
// _delay_ms(10000);
}
} |
Poberi kar rabiš. Funkcija ADC_init(1) inicializira ADC kanal 1, s funkcijo Beri_tlak() pa bereš vrednost ADC (tam je še nekaj matematike, ki je ti najbrž ne boš potrebval). S funkcijo printf() pa pošlješ preko UARTa na PC.
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
Sadida Član


Pridružen-a: Pet 17 Apr 2009 12:53 Prispevkov: 636 Aktiv.: 3.23 Kraj: Zasavje
|
Objavljeno: Pet Sep 30, 2011 10:04 am Naslov sporočila: |
|
|
Koda: |
int ADpretvorba()
{
int rezultat;
ADCSRA |= 1<<ADSC; //zaženi ad pretvorbo
while (ADCSRA & (1<<ADSC)) {} //poèakaj, da se pretvorba konèa
rezultat=ADC; //preberi rezultat
return rezultat;
} |
|
|
Nazaj na vrh |
|
 |
juref Član


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Pet Sep 30, 2011 10:49 am Naslov sporočila: |
|
|
hvala lepa vsem za odgovore Morem se malo naučiti da bom kaj pametnega naredil
Še enkrat hvala! |
|
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: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|