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

Pridružen-a: Pon 14 Nov 2011 13:29 Prispevkov: 51 Aktiv.: 0.31 Kraj: Rogaška Slatina
|
Objavljeno: Čet Feb 02, 2012 4:40 pm Naslov sporočila: Programiranje Atmela v AVR studio 4 |
|
|
Pozdravljeni
Zanima me sledeče, kje ter kako se nastavljajo I/O pini v tem programskem okolju, namreč meni še ni uspelo. Probaval sem v I/O view sam nekak ne deluje. Ali mogoče morem to ročno vpisovat v I/O.h? Rad bi nastavil za TOSC1 ter TOSC2, ter še nekaj ostalih. Uporabljam čip ATMEGA 8535 16PU. Programator je AVRISP mk2. Prosim če bi mi lahko kdo to malo razložil ker meni niso najbolj jasne.
Hvala vam za odgovore.
LP  |
|
Nazaj na vrh |
|
 |
tiger Član

Pridružen-a: Čet 05 Feb 2004 0:22 Prispevkov: 1161 Aktiv.: 4.90
|
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Čet Feb 02, 2012 7:02 pm Naslov sporočila: |
|
|
A ti to misliš, da bi kar poklikal kaj bi rad in da deluje? AVR studio ti tega ne omogoča. Malce si poglej datasheet in ustrezne registre. Ali pa poizkusiš naslednjo zvijačo (katere se iz lenobe poslužujem tudi sam). Na PCju imam inštaliran še Codevisionov CVAVR, njihov wizzard pa uporabljam zgolj za nastavljanje registrov.
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
jkrivec Član

Pridružen-a: Pon 14 Nov 2011 13:29 Prispevkov: 51 Aktiv.: 0.31 Kraj: Rogaška Slatina
|
Objavljeno: Čet Feb 02, 2012 7:05 pm Naslov sporočila: |
|
|
vbistvu je problem pri tem da sem jaz začetnik na tem področju. tako da nevem kako se nastavlja. gledal sem po netu ter ugotovil da se morejo vsi registri vpisovat v kodi....a mi lahko kda kdo kaki primer vpisovanja registrov?
hvala |
|
Nazaj na vrh |
|
 |
RUros Član


Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1031 Aktiv.: 4.39
|
Objavljeno: Čet Feb 02, 2012 8:14 pm Naslov sporočila: |
|
|
Imena registrov so že v knjižnicah, tako da ti ni nujno potrebno vpisovati hex ali binarnih števil, če si to mislil.
Prej moraš samo ustrezne knjižnice vključiti, npr če želiš uporabiti interrupte in njihove registre, moraš vključiti interrupts.h. |
|
Nazaj na vrh |
|
 |
jkrivec Član

Pridružen-a: Pon 14 Nov 2011 13:29 Prispevkov: 51 Aktiv.: 0.31 Kraj: Rogaška Slatina
|
Objavljeno: Čet Feb 02, 2012 8:20 pm Naslov sporočila: |
|
|
ja to sem ugotovil za interrupts, kako pa je z oscilatorjem ter ADC vhodi. Trenutno mi ta oscilator dela sive lase... drugače pa vsem hvala za pomoč ter nasvete |
|
Nazaj na vrh |
|
 |
RUros Član


Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1031 Aktiv.: 4.39
|
Objavljeno: Čet Feb 02, 2012 8:32 pm Naslov sporočila: |
|
|
Nastavitev oscilatorja narediš na začetku takole: #define F_CPU xxxxxx. x-i predstavljajo frekvenco v Hz. To verjetno rabiš ker uporabljaš delay funkcijo ?
Za ADC- je pa tako, da si na začetku nastaviš registre kot želiš da delujejo. Seveda moraš prej v datasheetu pogledati kaj kateri register predstavlja (v datasheetu je zate pomemben le register summary pri vsakem poglavju o določeni periferiji). Tu se ti verjetno ustavi, in za te nastavitve iščeš nekakšen wizard ? |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Čet Feb 02, 2012 11:23 pm Naslov sporočila: |
|
|
Če programiraš v C (winavr):
V "Projects" -> "Configuration options" -> "General" nastavi "device" na tvoj uC.
V "Projects" -> "Configuration options" -> "Include directories" dodaj [pot do winavr]\avr\include\avr
Na začetku napiši #include <io.h>
Do registrov nato dostopaš preko njihovih imen (večinoma enaka, kot v *.PDF).
npr:
DDRC = [vrednost];
PORTC = [vrednost];
Citiram: |
Rad bi nastavil za TOSC1 ter TOSC2, ter še nekaj ostalih. |
Če nisem kaj spregledal, register TOSC1 in TOSC2 na ATMEGA8535 ne obstaja.
Pina PC7 in PC6, ki imata alternativno funkcijo prilopa oscilatorja, sta 7 in 6 bita porta C.
Stanje PC7 lahko prebereš z:
spremenljivka= PINC & (1<<7);
PC7 lahko definiraš kot izhod z
DDRC |= (1<<7);
PC7 lahko postaviš na '1'
PORTC |= (1<<7);
PC7 lahko postaviš na '0'
PORTC &= ~(1<<7);
[edit]
Če bi na TOSC1 in TOSC2 priklopil kristal, moraš izbrati vir takta za TIMER 1.
glej register Timer/Counter Control Register B (TCCR1B) in poglavje 16bit Timer Counter1 -> Timer/Counter Clock Sources. |
|
Nazaj na vrh |
|
 |
jkrivec Član

Pridružen-a: Pon 14 Nov 2011 13:29 Prispevkov: 51 Aktiv.: 0.31 Kraj: Rogaška Slatina
|
Objavljeno: Pet Feb 03, 2012 1:27 pm Naslov sporočila: |
|
|
Hvala int47, ta prispevek mi je zelo pomagal sam ne razumem kako to mislite da morem zbrat vir takta ker jaz sem zdej aktiviral oscilator na PC7 ter PC6 sam nisem razumel tega..... |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Pet Feb 03, 2012 2:46 pm Naslov sporočila: |
|
|
Nekatere stvari (recimo vir takta procesorja, hitrost internega takta procesorja,...) najlaže sprogramiraš s pomočjo programatorja. To so tako imenovani FUSE biti (varovalke). Do njih imaš pregled in dostop, ko se s programatorjem v AVRstudio povežeš na mikro. To tudi naredi (ampak spreminjaj za sedaj ne še nič!!!!) in si oglej, katere stvari se lahko tu spreminjajo.
Veliko večino registrov pa spreminjaš s svojim programom. Na začetku programa (header) običajno določiš, kateri pini so vhodi in izhodi, kateri pullup upori so vključeni... Velikokrat tu v headerju vklapljaš in nastavljaš mikrotovo periferijo (ADC pretvornike, timerje, USART komunikacijo,...).
Seveda se te stvari (registri) iz drugega odstavka lahko spremenijo tudi med izvajanjem programa. Prav tako se iz podobnih registrov brez problema bere in vanje piše v programu.
Ne moreš pa med izvajanjem programa mikrotu recimo naenkrat reči, naj si nastavi drugo hitrost delovanja -uro. (opomba: čeprav tega ne trdim, samo poizkušal še nisem ).. Tem nastavitvam pa so namenjeni fuse biti iz prvega poglavja.
Poišči še kak tutorial na netu in zraven malce poglej v mikrov datasheet  |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Sob Feb 04, 2012 4:31 pm Naslov sporočila: |
|
|
Timer lahko deluje v različnih režimih in lahko deluje z različnimi izvori takta.
Ob inicializaciji timerja je potrebno določiti kako in kaj (v registre vpisati ustrezne vrednosti).
jkrivec je napisal/a: |
...ker jaz sem zdej aktiviral oscilator na PC7 ter PC6 sam nisem razumel tega..... |
Če deluje, potem je verjetno OK.
V nasprotnem primeru napiši, kaj si naredil, kar bi rad naredil in kje je težava. |
|
Nazaj na vrh |
|
 |
jkrivec Član

Pridružen-a: Pon 14 Nov 2011 13:29 Prispevkov: 51 Aktiv.: 0.31 Kraj: Rogaška Slatina
|
Objavljeno: Pon Feb 06, 2012 1:11 pm Naslov sporočila: |
|
|
mene pa zanima kaj je narobe v tej kodi.....
#include <avr/io.h>
#include <util/delay.h>
//#define F_CPU 4000000UL
#define LCD_RS 0
#define LCD_RW 2
#define LCD_E 5
#define LCD_D4 0
#define LCD_D5 1
#define LCD_D6 2
#define LCD_D7 3
#define LDP PORTD
#define LCP PORTC
#define LDDR DDRD //
#define LCDR DDRD //
#define LCD_CLR 0 //DBO:clear display
#define LCD_HOME 2 //DB1:return to home position
int main(void)
{
LCD_init();
LCD_send_command(LCD_CLR);
LCD_send_command(LCD_HOME);
LCD_send_command(0x80+0);
LCD_string("test123 1");
LCD_send_command(0xc0+0);
LCD_string("test123 45");
}
void LCD_send_data(unsigned char ch)
{
LDP = (ch&0xf0);
LCP|=1<<LCD_RS;
LCP|=1<<LCD_E;
_delay_ms(1);
LCP|=0<<LCD_E;
_delay_ms(1);
LDP = ((ch&0x0f)<<4);
LCP|=1<<LCD_RS;
LCP|=1<<LCD_E;
_delay_ms(1);
LCP|=0<<LCD_E;
_delay_ms(1);
}
void LCD_send_command(unsigned char cmd)
{
LDP = (cmd&0x0f);
LCP|=0<<LCD_RS;
LCP|=1<<LCD_E;
_delay_ms(1);
LCP|=0<<LCD_E;
_delay_ms(1);
LDP = ((cmd&0x0f)<<4);
LCP|=0<<LCD_RS;
LCP|=1<<LCD_E;
_delay_ms(1);
LCP|=0<<LCD_E;
_delay_ms(1);
}
void LCD_init(void)
{
_delay_ms(15);
LDP=0x00;
LCP=0x00;
LDDR |=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4;
LCDR |=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;
LCD_send_command(0x28);
LCD_send_command(0x0c);
LCD_send_command(0x06);
}
void LCD_string(char* str)
{
unsigned char x=0;
while(str[x] !=0)
{
_delay_ms(1);
LCD_send_data(str[x]);
x++;
}
}
void delay_ms5(int ms)
{
for(int i=0;i<ms;i++)
{_delay_ms(1);
}
}
Uporabljam LCD DEM16216SGH ter atmega8535.......
Povezanega pa imam tako
RS---->PD0
R/W---->PD2
E--->PD5
DB4---->PC0
DB5----->PC1
DB6---->PC2
DB7----PC3
hvala za odgovor..  |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Pon Feb 06, 2012 2:48 pm Naslov sporočila: |
|
|
Ker si že tako splošno uganko postavil....
Kot prvo manjka nekaj v headerju programa. Vsaj nekaj, kar se začne z: #incl No, mogoče niti ne...
Drugače pa postavi vprašanje tako kot je treba, da ga drugi zastopijo! |
|
Nazaj na vrh |
|
 |
jkrivec Član

Pridružen-a: Pon 14 Nov 2011 13:29 Prispevkov: 51 Aktiv.: 0.31 Kraj: Rogaška Slatina
|
Objavljeno: Pon Feb 06, 2012 7:03 pm Naslov sporočila: |
|
|
Težava je v tem da jaz bi rad naredil projekt kjer bi vseboval accelerometer(adxl 212aez) ter lcd prikazovalnik. prikazoval bi pa rad vrednost senzorja oziroma kasneje kolikšen je pospešek oz pojemek(to so določene formule v datasheet od tega senzorja). Žal pa morem priznat da je moje znanje iz tega programiranja bol slabo....zato tukaj sprašujem za nasvete.
Pri zgoraj dodani kodi sem imel v mislih da bi kot sem napisal povezal lcd in atmega8535. Kodo sem napisal, ni mi javilo nobene napake, ampak tudi na lcdu se ni nič prikazalo, namreč prikazovalo bi naj samo string znakov. Namreč jaz bi rad prvo usposobil lcd da funkcionira kot more, ter nato bi dodal še senzor. Zanima me če sem prav določil porte v kodi? |
|
Nazaj na vrh |
|
 |
tiger Član

Pridružen-a: Čet 05 Feb 2004 0:22 Prispevkov: 1161 Aktiv.: 4.90
|
|
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: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|