Forum elektronikov Seznam forumov Forum elektronikov
Forum študentov elektronike
 
 Pogosta vprašanjaPogosta vprašanja   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   RSS Feed   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Zasebna sporočilaZasebna sporočila   PrijavaPrijava 




Vaja 3

 
Objavi novo temo   Odgovori na to temo    Forum elektronikov Seznam forumov -> Osnove mikroprocesorskih sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
dkone
Študent


Pridružen/-a: 05.11. 2008, 19:54
Prispevkov: 420

PrispevekObjavljeno: 17 Mar 2009 10:40    Naslov sporočila: Vaja 3 Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Študent


Pridružen/-a: 05.11. 2008, 19:54
Prispevkov: 420

PrispevekObjavljeno: 17 Mar 2009 10:42    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
mangup
Študent


Pridružen/-a: 05.11. 2008, 18:20
Prispevkov: 44

PrispevekObjavljeno: 17 Mar 2009 11:37    Naslov sporočila: Odgovori s citatom

hvala za info!!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
deadmeat
Študent


Pridružen/-a: 07.11. 2008, 18:46
Prispevkov: 55

PrispevekObjavljeno: 17 Mar 2009 12:11    Naslov sporočila: Odgovori s citatom

Š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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
deadmeat
Študent


Pridružen/-a: 07.11. 2008, 18:46
Prispevkov: 55

PrispevekObjavljeno: 17 Mar 2009 12:14    Naslov sporočila: Odgovori s citatom

Š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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
luka
Študent


Pridružen/-a: 10.11. 2008, 21:32
Prispevkov: 296
Kraj: Ig

PrispevekObjavljeno: 21 Mar 2009 12:34    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
twne
Študent


Pridružen/-a: 10.06. 2009, 19:34
Prispevkov: 30

PrispevekObjavljeno: 01 Jun 2011 19:12    Naslov sporočila: Odgovori s citatom

kaj točno naredita vrstici: next+=nhigh in next+=nlow?

kar mi nikakor ni jasno...
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Forum elektronikov Seznam forumov -> Osnove mikroprocesorskih sistemov Časovni pas GMT + 1 ura, srednjeevropski - zimski č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


MojForum.si - brezplačno gostovanje forumov. Powered by phpBB 2.