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 

Timingi v c

 
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
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Sob Jan 27, 2007 12:04 am    Naslov sporočila:  Timingi v c Odgovori s citatom

Spisal sem kratek program. Sicer program dela vredu ampak imam težavo da je izhodni podatek krajši od vhodnega. Zdaj pa me zanima kako bi to lahko popravil ker niti nevem kaj bi lahko storil.
Koda:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.5 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date    : 24.1.2007
Author  : madzi                           
Company : none                           
Comments:


Chip type           : ATmega88
Program type        : Application
Clock frequency     : 16,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega88.h>
#include <avr035.h>
#include <delay.h>
#define delay_rtx 15
 
unsigned char data[500];
unsigned int a;
unsigned char b;

void inicializacija(void){
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x07;

// Port C initialization
// Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=0 State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x20;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
}


void oddajanje(){
for(a=0;a<500;a++){
        for(b=0;b<8;b++){
                delay_us(delay_rtx);
                delay_us(2) ;               
                PORTC.5=bit_get(data[a],b);       //pošlji na oddajnik
                PORTB.0=bit_get(data[a],b);       //pošlji na led
                }
        }
PORTC.5=0;
PORTB.0=0;
}


void sprejem(){
for(a=0;a<500;a++){
        for(b=0;b<8;b++){
                delay_us(delay_rtx);
                if(PIND.3){
                bit_set(data[a],b);
                }
                else{
                bit_clear(data[a],b);
                }
                PORTB.2=PIND.3;               
                }
        }
}
 
   
void main(void){
inicializacija();


PORTC.5=0;
PORTB.1=1;
do{     
        PORTB.2=PIND.3;
       
        switch (PINC){
                case 4:
                sprejem();                   
                break;                 
                case 8:                       
                oddajanje();
                break;
               
                }             
    }
while (1);
}   



Prosim če bi kdo malo pogledal in mi kaj svetoval

Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Ned Jan 28, 2007 6:22 pm    Naslov sporočila:   Odgovori s citatom

Res noben neve kako naj popravim funkciji oddajanje in sprejem da bosta za zapis in branje porabili enak čas?
Poskušal sem z delayi ampak mi nekak ne uspe.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Domenius
Član
Član



Pridružen-a: Sre 30 Nov 2005 14:15
Prispevkov: 1188
Aktiv.: 5.01
Kraj: Medvode

PrispevekObjavljeno: Ned Jan 28, 2007 6:27 pm    Naslov sporočila:   Odgovori s citatom

Če se da, v programu poglej koliko časa trajata obe zanki. Drugače pa poglej koliko ciklov traja vsaka - kar je v bistvu isto. Potem pa krajši dodaj toliko delay-a, da se bo izvajala enako dolgo kot daljša.
_________________
It's electric!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.06
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Pon Jan 29, 2007 1:09 am    Naslov sporočila:   Odgovori s citatom

madzi, preglej listo prevajanja. Tam boš videl assemblersko kodo. Vse dele, ki so različni med seboj primerjaj glede na porabljeno število ciklov. Koliko ciklov porabi katera instrukcija boš našel v AVR Instruction manual. Ko ugotoviš razliko ciklov, dodaj v rutino, ki ima manj ciklov preprost assemblerski ukaz "nop" za vsak cikel.
To narediš z:
asm("nop");

Če je razlika v ciklih zelo velika si lahko pomagaš tudi z dodajanjem C kode kot je "i++" v to rutino. Le razliko dodane C kode ki še ostane popolniš z "nop".

Upam, da si razumel kaj sem ti hotel povedati.

_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
trot
Član
Član



Pridružen-a: Čet 18 Jan 2007 20:25
Prispevkov: 1282
Aktiv.: 5.72
Kraj: glej fogl

PrispevekObjavljeno: Pon Jan 29, 2007 9:08 am    Naslov sporočila:   Odgovori s citatom

Lahko pa zadevo simuliraš z AVR studio 4, kjer ti točno kaže koliko instrukcij je uC izvedel in koliko časa je za to porabil (in vse ostalo). Program je zaston in ga dobiš na atmelovi strani.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Tor Jan 30, 2007 6:30 pm    Naslov sporočila:   Odgovori s citatom

Hvala za odgovore ampak sem uporabil malo lažji način od štetja ciklov v asm kodi.
Naredil sem si analizator preko lpt porta in za takšno opazovanje je čisto vredu.
Imam pa en problem.
V funkciji oddajanje pride do zamika pri prvi for zanki.
Torej če pogledate kodo imam 2 for zanki. Prva izbere polje (ki jih je 500) druga pa zapisuje posamezni bit v polje. In tu je težava. Ko program zapiše 8mi bit in gre na naslednje polje se pojavi zakasnitev ki je dolga približno 60 mi s.
Na spodnji sliki sem označil z številko 1 to zakasnitev. Z št. 2 je označenih 8b (zapisoval sem same 1ke).
Zdaj pa me zanima kako bi lahko to zakasnitev odpravil.
Imam pa eno idejo ampak nevem če bi delovala. Bi lahko program tako zapisal da bi uporabil bitni dostop do vseh bitov v polju? Od bita 1 do 8 že sedaj dostopam pa me zanima če bi lahko še dalje. Recimo 9, 10, 11, 12 pa vse do 4000 kolikor jih pač ima polje z 500 znaki in 8b na znak.
Sem napisal program ki bi naj to počel ampak se obesi. Oz. nevem če se ravno obesi ampak ne dobim nobenega signala iz njega.



untitled.JPG
 Opis:

Download
 Ime datoteke:  untitled.JPG
 Velikost datoteke:  4.97 KB
 Downloadano:  1229 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
cfrik
Član
Član



Pridružen-a: Sre 24 Jan 2007 16:15
Prispevkov: 39
Aktiv.: 0.17
Kraj: Trbovlje

PrispevekObjavljeno: Sre Jan 31, 2007 12:20 am    Naslov sporočila:   Odgovori s citatom

Zdravo!


Preveri koliko časa porabiš za klic funkcije bit_get(data[a],b) , ker jo pri oddaji kličeš dvakrat pri sprejemu pa samo enkrat. Nekja časa pa procesor rabi za prireditev izhodov na določeno vrednost. Sam delam z ATTiny 2313 in sem imel probleme s timingom pri pisanju rutine za sprejem RC5 kode, problem je bil v nekaterih nepotrebnih ukazih, ki se izvajajo več cilov.

_________________
lepo je imeti poklic in hobi na istem področju vendar je časa premalo
Nazaj na vrh
Odsoten 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