www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Atmega8 - nacin dolocanja vrednosti registra - pomoč

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
logar
Član
Član



Pridružen-a: Čet 24 Apr 2008 22:12
Prispevkov: 17
Aktiv.: 0.08
Kraj: Trebnje

PrispevekObjavljeno: Sre Dec 24, 2008 4:24 pm    Naslov sporočila:  Atmega8 - nacin dolocanja vrednosti registra - pomoč Odgovori s citatom

Pozdravljeni!

Sem zacetnik v spoznavanju avr-jev in sem malo raziskoval po tutorijalih, vendar se vedno nisem preprican kako vse skupaj deluje.

Ce prov razumem imamo tri registre:
- DDRx (znjim dolocamo vhode/izhode: 1-izhod 0-vhod)
- PORTx (znjim dolocimo stanje izhoda (1-high 0-low)
- PINx (znjim prebereno stanje vhoda)

zanima pa me:
a) ali zgoraj nasteto velja
b) kako preberemo vrednost vhoda ce imamo A/D pretvornik in kako ga definiramo
c) ce register maskiramo na tak nacin:
DDRD |=(1<<1)|(1<<3)|(1<<5)|(1<<7);
ali lahko to isto maskiramo kot
DDRD |=0xAA;
d) Z DDRx dolocimo vseh 8bitov porta x, kako pa dolocimo naprimer samo 5bit
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Dec 24, 2008 6:02 pm    Naslov sporočila:   Odgovori s citatom

Nisi napisal za kak programski jezik gre.
Citiram:

Ce prov razumem imamo tri registre:
- DDRx (znjim dolocamo vhode/izhode: 1-izhod 0-vhod)
- PORTx (znjim dolocimo stanje izhoda (1-high 0-low)
- PINx (znjim prebereno stanje vhoda)


Tole drži. Visoki biti registra PORTx vključi pulup upore, če so pini definirani kot vhodi. (nizki biti DDRx registra)

Za AD meritev je kar nekaj registrov:ADMUX,ACSR, ADCSRA, ADCL, ADCH (mogoče sem še katerega pozabil) Registri služijo za izbiro kanalov, prikaz rezultata, način konverzije, načina prikaza, določitve referenčne napetosti... ) Za pomen posameznih bitov poglej datashet.
Citiram:

d) Z DDRx dolocimo vseh 8bitov porta x, kako pa dolocimo naprimer samo 5bit


V assemblerju izgleda takole:

Koda:
sbi DDRB,5


Za kak višjenivojski jezik ti po povedal kdo drug Confused

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Član
Član



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.05
Kraj: Trojane

PrispevekObjavljeno: Sre Dec 24, 2008 8:21 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
c) ce register maskiramo na tak nacin:
DDRD |=(1<<1)|(1<<3)|(1<<5)|(1<<7);
ali lahko to isto maskiramo kot
DDRD |=0xAA;
d) Z DDRx dolocimo vseh 8bitov porta x, kako pa dolocimo naprimer samo 5bit


ja, tole:
Koda:
DDRD |=(1<<1)|(1<<3)|(1<<5)|(1<<7);

je isto kot tole:
Koda:
DDRD |=0xAA;


prvi način se uproablja za večjo preglednost, že na daleč se vidi kateri biti so postavljeni. reče se mu bit-shift. prej bi lahko uporabil tudi define, kjer bi enostavno za številke nastavil neke mnemorike, tako dobiš še boljšo preglednost. primer:

Koda:

#define led   2
#define tipka 5

DDRB &= ~(1<<tipka);   //nastaviš bit 5 kot vhod  ("0")
DDRB |= (1<<led);       //bit 2 kot izhod   ("1")

....

//uporaba z if stavkom

if( (1<<led) & PINB )
{
    PORTB |=(1<<led);
}
else
{
    PORTB &=~(1<<led);
}

...itd


za adc pa glej datasheet, oz primere na internetu. če pa hočeš pa ti lahko skopiram kodo ki jo generira codevisinov wizard. uporabna je tudi za gcc, oz kar koli pač uprabljaš. nisi napisal.

_________________
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.14
Kraj: okolica Divače

PrispevekObjavljeno: Pet Dec 26, 2008 1:33 am    Naslov sporočila:   Odgovori s citatom

Še za ADC:

Koda:

void adc_init(void)
{
ADMUX=0x20 & 0xff;
ADCSRA=0x83;
}


unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
_delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}


Branje je sicer 8 bitno, ampak za večino primerov dovolj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Medo
Član
Član



Pridružen-a: Pet 17 Feb 2006 19:53
Prispevkov: 71
Aktiv.: 0.30
Kraj: Laško, Maribor

PrispevekObjavljeno: Sob Dec 27, 2008 1:37 pm    Naslov sporočila:   Odgovori s citatom

se mučim s portiranjem kode iz MSP na AVR -- I2C, pa me zanima če je v osnovi pravilno:
hvala

Koda:


#define SDA 0x20
#define SCL 0x40
void I2C_SetSCL(int Zastavica)
{
 if (Zastavica==1)
 {
    PORTD|=SCL;

 }
 else
 {
   PORTD&=~SCL;

 }

}



void I2C_SetSDA(int Zastavica)
{
 if (Zastavica==1)
 {
   DDRD&=~SDA
   //PORTD|=SDA;

 }
 else
 {
 DDRD|=SDA;
 PORTD&=~SDA;

 }

}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group