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


Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.52 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Sob Nov 01, 2008 12:51 am Naslov sporočila: Utripanje ledice ; ne utripa |
|
|
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 ? |
|
Nazaj na vrh |
|
 |
PC_Master Član


Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.52 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Sob Nov 01, 2008 1:43 am Naslov sporočila: |
|
|
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 |
|
 |
bolha95 Član


Pridružen-a: Pet 14 Dec 2007 21:33 Prispevkov: 296 Aktiv.: 1.39 Kraj: Križe / Tržič
|
Objavljeno: Sob Nov 01, 2008 2:09 am Naslov sporočila: |
|
|
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 |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Sob Nov 01, 2008 2:11 am Naslov sporočila: |
|
|
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 |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Sob Nov 01, 2008 8:40 am Naslov sporočila: |
|
|
Poskusi z volatile u32 count, ali izklopi optimizacijo. |
|
Nazaj na vrh |
|
 |
PC_Master Član


Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.52 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Sob Nov 01, 2008 12:31 pm Naslov sporočila: |
|
|
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
Zdaj pa naslednji iziv. Probal bom ugotoviti, kako šteti, ko je input pin high.
Hvala za pomoc vsem  |
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|