|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
plutakis Novinec
Pridružen/-a: Tor Mar 2007 9:22 Prispevkov: 1 Kraj: Ljubljana
|
Objavljeno: Pet Mar 30, 2007 4:06 pm Naslov sporočila: programiranje ure s kristalom,atmel m8535 |
|
|
pozdrav,
tako, prescaler sem nastavil na tako vrednost, da bi Casovnik2 moral preplaviti vsako sekundo... vendar se Casovnik sploh ne premakne iz svoje zacetne lege.
Po mojem mnenju sem naredil prakticno vse potrebne korake opisane v application notesu.
prilagam del kode, kjer se nastavi asinhroni casovnik. (while zanka je zakomentirana zato, ker tukaj se program ustavi. torej se tisti register nikoli ne posodobi. kar mi daje slutiti, da je bodisi kristal - ceprav sem kupil dva - ali pa prevajalnik kriv (ali pa moje neznanje) za ta kiks). Da se Casovnik ne premakne nikamor sem pregledal preko UARTA.
Koda: | #define GLOBAL_INTERUPTS_ENABLED SREG |= (1<<0x08);
#define GLOBAL_INTERUPTS_DISABLED SREG &= ~(1<<0x08);
#define PRESCALER_SECONDS 0x05
#define RESET_TIMER_2 0x00
#define UPDATE_NOT_FINISHED 0x07
/* ******************************************* */
/* function: init_function */
/* Arguments: */
/* Return: */
/* Description: init the ports and interupts */
/* ******************************************* */
VOID init_function(VOID)
{
int temp0;
int temp1;
/* Wait for external clock crystal to stabilize */
for(temp0 = 0;temp0 < 0x0040; temp0++)
{
for(temp1 = 0;temp1<0xFFFF;temp1++);
}
DDRA = 0x00; /* PortA as input clock manipulation */
DDRB = 0xff; /* PortB as output for values on displays */
DDRC = 0x3f; /* Pin C0-C5 as output*/
DDRD = 0xff; /*PortD as output for turning the displays/UART on*/
/*The procedure to properly enable asynchr. in TC2 pp.132*/
TIMSK &=~((1<<TOIE2)|(1<<OCIE2));/*Disable TC2 interrupt*/
ASSR |= (1<<AS2); /*set TC2 to be asynchronous*/
TCNT2 = RESET_TIMER_2; /*reset the TC register*/
TCCR2 = PRESCALER_SECONDS; /*prescale the timer to overflow every 1s*/
/*while(ASSR & UPDATE_NOT_FINISHED);*//*wait until TC2 is updated*/
TransmitString("Update Succeess!!");
TIMSK |= (1<<TOIE2); /*set 8-bit Timer/Counter2 Overflow*/
/*Interrupt Enable*/
GLOBAL_INTERUPTS_ENABLED /*global Interrupt Enable*/ |
kristal dela super, sem ga pogledal preko oscilatorja.
Torej je bodisi koda bodisi prevajalnik... Morebiti je pa logika okoli kristala znotraj AVRMEGA8535 nedelujoca?
pomeril sem se z osciloskopom vse skupaj. signal na pinih TOSC1 in TOSC2 plese, frekvenca ni niti priblizno stabilna, kaj sele 32kHz....
do prekinitev tako sploh ne pridem. drugace sem probal prižigati LEDiko, ampak kot rečeno do prekinitve ne pride, ker se časovnik ne premakne.
Seveda se niti ne more, ker ga baše ura.
Pomeril sem še glavno uro in tiktaka lepo pri 8 MHz.
morebiti ni pravi kristal? ampak v specifikacijah nisem našel nobenih posebnih zahtev razen frekvence. |
|
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 You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|