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

Pridružen-a: Čet 24 Apr 2008 22:12 Prispevkov: 17 Aktiv.: 0.08 Kraj: Trebnje
|
Objavljeno: Sre Dec 24, 2008 4:24 pm Naslov sporočila: Atmega8 - nacin dolocanja vrednosti registra - pomoč |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Dec 24, 2008 6:02 pm Naslov sporočila: |
|
|
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:
Za kak višjenivojski jezik ti po povedal kdo drug  _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Dec 24, 2008 8:21 pm Naslov sporočila: |
|
|
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:
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 |
|
 |
jvolk Član



Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.14 Kraj: okolica Divače
|
Objavljeno: Pet Dec 26, 2008 1:33 am Naslov sporočila: |
|
|
Š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 |
|
 |
Medo Član

Pridružen-a: Pet 17 Feb 2006 19:53 Prispevkov: 71 Aktiv.: 0.30 Kraj: Laško, Maribor
|
Objavljeno: Sob Dec 27, 2008 1:37 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|