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 

Utripanje ledice ; ne utripa

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.52
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Sob Nov 01, 2008 12:51 am    Naslov sporočila:  Utripanje ledice ; ne utripa Odgovori s citatom

Zivijo , naslednji program :

Koda:

#include <avr/io.h>

/// Typedefs //////////
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

/// Defines ///////////
#define forever         117
#define LEDOFF          PORTB |= (1<<0)
#define LEDON           PORTB &= ~(1<<0)

/// Prototypes ////////
void InitPorts (void);
void Delay (u32 count);

int main(void)
{
    InitPorts();

    while (forever)
    {
        LEDON; Delay(20000);
        LEDOFF; Delay(20000);
    }
}

void InitPorts(void)
{
    DDRB |= 1<<DDB0;
}

void Delay(u32 count)
{
    while(count--);
}


sem sprobal na AtMega88.

"Skompila" lepo, sprogramira lepo, ampak LEDica se samo prižge in ostane tako za vedno. Nekako sumim, da mikroprocesorjeva ura ne teče ali pa program porabi toliko cajta za Delay funkcijo.

Okolje : WinAVR - avrdude
Programer: tip avr911 - myAVR mySmartUSB MK2

Brez kristala.

Kaj bi bilo lahko narobe Sad ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.52
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Sob Nov 01, 2008 1:43 am    Naslov sporočila:   Odgovori s citatom

Zivijo. Ugotovil sem kaj je narobe. Sicer je malo nelogicno ampak... Zgleda da mi optimizera kodo in odreže funkcijo "Delay".

Se da to kako spremeniti?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
bolha95
Član
Član



Pridružen-a: Pet 14 Dec 2007 21:33
Prispevkov: 296
Aktiv.: 1.39
Kraj: Križe / Tržič

PrispevekObjavljeno: Sob Nov 01, 2008 2:09 am    Naslov sporočila:   Odgovori s citatom

PC_Master je napisal/a:
Zivijo. Ugotovil sem kaj je narobe. Sicer je malo nelogicno ampak... Zgleda da mi optimizera kodo in odreže funkcijo "Delay".

Se da to kako spremeniti?


Uporabi delay funkcijo iz knjižnice. Malo preglej dokumentacijo knjižnice.

V program vstavi
#include <util/delay.h>

funkcijo kličeš z
_delay_ms(1000);

_________________
LP,
Robi
Kjer se znanje konča, se domišljija začne
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Sob Nov 01, 2008 2:11 am    Naslov sporočila:   Odgovori s citatom

Ne vem kak je s tvojim prevajalnikom, ampak pazi tudi na vrednost, ki jo vneseš v delay ukaz. Ima namreč neko najvišjo dovoljeno vrednost.
_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Sob Nov 01, 2008 8:40 am    Naslov sporočila:   Odgovori s citatom

Poskusi z volatile u32 count, ali izklopi optimizacijo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.52
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Sob Nov 01, 2008 12:31 pm    Naslov sporočila:   Odgovori s citatom

Zivijo!

Koda zdaj deluje odlicno z optimizacijo vkljuceno (3)

Koda:

#include <util/delay.h>
#include <avr/io.h>

/// Typedefs //////////
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

/// Defines ///////////
#define LEDOFF          PORTB &= ~(1<<0)
#define LEDON           PORTB |= (1<<0)
#define delay(x)       _delay_ms(x)

/// Prototypes ////////
void InitPorts (void);

int main(void)
{
   
    InitPorts();
   
   
    while (1)
    {
   LEDON;
    delay(1000);
   LEDOFF;
    delay(1000);
   
    }
}

void InitPorts(void)
{
    DDRB |= 1<<DDB0;
   DDRB |= 1<<DDB1;
}


Pa še natancno je Dancing

Zdaj pa naslednji iziv. Probal bom ugotoviti, kako šteti, ko je input pin high.

Hvala za pomoc vsem Very Happy
Nazaj na vrh
Skrit 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 -> AVR, LPC900, x51 Č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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group