|
Forum elektronikov Forum študentov elektronike
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
dkone Študent
Pridružen/-a: 05.11. 2008, 19:54 Prispevkov: 420
|
Objavljeno: 17 Mar 2009 10:40 Naslov sporočila: Vaja 3 |
|
|
Koda: |
#include "init.h"
#include "timer.h"
void timer0_init(int prescale, int *match, int control, int count);
void start_up()
{
int f=1;//frekvenca
float duty=50.0; //duty
int nhigh;
int nlow,n;
int fvpb;
int next=0;
int match[4];
init(12,cclk_2,~LED3,LED3,0);
timer0_init(9, match, 0, timer);
n = VPBDIV;
if(n == 0) n = 4;
fvpb = ((PLLSTAT & msel) + 1) * 12e6 / n;
nhigh =(int)(( duty/100 * fvpb/10) / f);
nlow = (int)(((1 - duty/100) * fvpb/10) / f);
T0TCR=counter_enable;
next = nlow;
while(1)
{
if(next-T0TC<0)
{
int pin = get_pin_value(11);
if(pin == 0)
{
set_pin_value(11, 1);
next+=nhigh;
} else
{
set_pin_value(11,0);
next+=nlow;
}
}
}
}
|
|
|
Nazaj na vrh |
|
|
dkone Študent
Pridružen/-a: 05.11. 2008, 19:54 Prispevkov: 420
|
Objavljeno: 17 Mar 2009 10:42 Naslov sporočila: |
|
|
Naj še povem,da če bo kdo kaj koli probal na svojem kupljenem šarmu,da mora popravit izhode LEDic,saj kar se tiče od serije 50000 naprej. To sem včeraj pogruntal ko kolegu ni deloval ta program,ki sem ga zgoraj napisal. LCD ter tipke,uart pa ostanejo enako.
glej komentar:
Koda: |
if(next-T0TC<0)
{
int pin = get_pin_value(11); namesto pin 11,daš lahko pine 4,5,6,7,na teh pinih so ledice pr tanovih šarmih
if(pin == 0)
{
set_pin_value(11, 1);
next+=nhigh;
} else
{
set_pin_value(11,0);
next+=nlow;
}
} |
|
|
Nazaj na vrh |
|
|
mangup Študent
Pridružen/-a: 05.11. 2008, 18:20 Prispevkov: 44
|
Objavljeno: 17 Mar 2009 11:37 Naslov sporočila: |
|
|
hvala za info!! |
|
Nazaj na vrh |
|
|
deadmeat Študent
Pridružen/-a: 07.11. 2008, 18:46 Prispevkov: 55
|
Objavljeno: 17 Mar 2009 12:11 Naslov sporočila: |
|
|
Še moja vaja, prvi del je zakomentiran, drugi pa je sicer napisan brez napak, za preizkus pa mi je zmanjkalo časa.
Dkone, timer.h inicjalizira že init.h tako da ni potrebno dodajati še te knižnjice.
Koda: |
#include "init.h"
#include "vic.h"
void preklop();
/*
void start_up()
{
int nhigh;
int nlow;
int duty = 50;
int fvpb = 60e6;
int next=0;
int match[4];
int f = 20;
init (60,cclk,~LED3,LED3,0);
timer0_init(0, match, 0, timer);
nhigh = (int)(duty/100.0 * fvpb / f );
nlow = (int)((1 - duty/100.0) * fvpb / f);
T0TCR=counter_enable;
next=nlow;
while(1)
{
if(next-T0TC<0)
{
int pin = get_pin_value(11);
if (pin==0)
{
set_pin_value(11,1);
next += nhigh;
}
else
{
set_pin_value(11,0);
next+=nlow;
}
}
}
}
*/
void start_up()
{
int match[4]={0,0,0,0};
voidfuncptr ff[16]={preklop,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ii[16]={timer0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int f=1;
int duty=50;
int n;
int fvpb;
int nhigh;
init (60,cclk,~LED3,LED3,0);
n = VPBDIV;
if(n == 0) n = 4;
fvpb = ((PLLSTAT & msel) + 1) * 12e6 / n;
nhigh = (int)(duty/100.0 * fvpb / f );
match[0]=nhigh;
timer0_init(0, match, mr0i, timer);
vic_init( 0, timer0, ff, ii, 0);
}
void preklop()
{
int f=1;
int duty=50;
int n = VPBDIV;
if(n == 0) n = 4;
int fvpb = ((PLLSTAT & msel) + 1) * 12e6 / n;
int nhigh = (int)(duty/100.0 * fvpb / f );
int nlow = (int)((1 - duty/100.0) * fvpb / f);
int pin = get_pin_value(11);
if (pin==0)
{
set_pin_value(11,1);
T0MR0=nhigh;
}
else
{
set_pin_value(11,0);
T0MR0=nlow;
}
T0IR = mr0_interrupt;
VICVectAddr = 0;
}
|
|
|
Nazaj na vrh |
|
|
deadmeat Študent
Pridružen/-a: 07.11. 2008, 18:46 Prispevkov: 55
|
Objavljeno: 17 Mar 2009 12:14 Naslov sporočila: |
|
|
Še nekaj, ker so iste vaje tudi na izpitu bi bilo lepo da bi zbrali vse vaje popolno, se pravi oba dela. Pa tudi fajn bi bilo če bi bile vrstice komentirane.
Kdor ima šarm lahko še poizkusi če zadeva deluje. |
|
Nazaj na vrh |
|
|
luka Študent
Pridružen/-a: 10.11. 2008, 21:32 Prispevkov: 296 Kraj: Ig
|
Objavljeno: 21 Mar 2009 12:34 Naslov sporočila: |
|
|
Dajem še svojo kodo, kjer je še nekaj komentarjev.
Koda: |
#include "init.h"
void start_up()
{
int m[4]={5,4,3,1};//za timer0_init 3 vrednost
init(12, cclk, ~LED3, LED3, 1); //{hitrost jedra,faktor deljenja jedra,vsi so vhodi razen LED3,kateri naj bo izhod,vrednost vhodov}
timer0_init(0,m,0,timer); //določimo vrednosti timerja {ne bo delil, vrednosti kdaj naj gleda, naj nič ne naredi če doseze vrednosti, naj sledi timerju in ne drugemu komu stejem}
T0TCR=counter_enable;//stevec zazenemo
int fvpb=12000000;
float duty=0.01;//mora bit med 0 in 1, z njim določimo frekvenco utripanja
int f=2;
int nhigh=(duty*fvpb)/f;
int nlow=((1-duty)*fvpb)/f;
int next=nlow;
while(1)
{
if((next-T0TC)<0)//primerja next z registrom ki steje impulze
{
int pin = get_pin_value(11);//določim spremnljivko,dobi vrednost 11 pina(Led3)
if(pin==0)//primerja če je ta enaka 0
{
set_pin_value(11, 1);//nastavi ta pin na 1
next+=nhigh;
}
else
{
set_pin_value(11, 0);//nastavi pin na 0
next+=nlow;
}
}
}
}
|
|
|
Nazaj na vrh |
|
|
twne Študent
Pridružen/-a: 10.06. 2009, 19:34 Prispevkov: 30
|
Objavljeno: 01 Jun 2011 19:12 Naslov sporočila: |
|
|
kaj točno naredita vrstici: next+=nhigh in next+=nlow?
kar mi nikakor ni jasno... |
|
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
|
|