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 

Programiranje PIC v C-ju!
Pojdi na stran Prejšnja  1, 2, 3, 4 ... 11, 12, 13  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.24
Kraj: Žalec

PrispevekObjavljeno: Pet Sep 28, 2007 4:17 pm    Naslov sporočila:   Odgovori s citatom

Zanima me, kako v spodnjem programu ugotovim, kolikšna je zakasnitev med prižaganjem in ugašanjem LEDice, če imam frekvenco takta 4 MHz.

Koda:

void main()
{
   TRISA=0;
   TRISB=0;
   OPTION_REG=0;
   INTCON=0;

   char i;
   i=0;


zanka:
   i++;
   if (i<100) goto zanka;
   PORTB.0=!PORTB.0;
   i=0;
   goto zanka;
}

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.02

PrispevekObjavljeno: Pet Sep 28, 2007 4:24 pm    Naslov sporočila:   Odgovori s citatom

S stoparico ? Alternativa je stetje ciklov zanke v disassemblani kodi.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.24
Kraj: Žalec

PrispevekObjavljeno: Pet Sep 28, 2007 5:11 pm    Naslov sporočila:   Odgovori s citatom

Tole je disassemblana koda zanke. Torej, pri taktu 4 MHz traja en cikel 1us. Se pravi, da potem ta zanka traja 0.3 s (ker se zanka ponovi 100x, je potem 100*3us=0.3s)??? Imam prav?

Koda:

zanka:
i++;
BCF 0x3, 0x5                 ; ukaz bcf 1us
if (i<100) goto zanka;       ; ukaz goto 2us

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2751
Aktiv.: 12.33
Kraj: Trzic

PrispevekObjavljeno: Pet Sep 28, 2007 5:23 pm    Naslov sporočila:   Odgovori s citatom

kje pa je preverjanje pogoja?
A to si sam disassemblal? Ponavadi ti C prevajalnik to naredi v dodatno datoteko.

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.24
Kraj: Žalec

PrispevekObjavljeno: Pet Sep 28, 2007 5:29 pm    Naslov sporočila:   Odgovori s citatom

To mi vrže ven MPLAB, če kliknem na disassembly listing.

Koda:

1:                 void main()
2:                 {
3:                    TRISA=0;
  0001    1683     BSF 0x3, 0x5
4:                    TRISB=0;
  0004    0186     CLRF 0x6
5:                    OPTION_REG=0;
  0005    0181     CLRF 0x1
6:                    INTCON=0;
  0006    018B     CLRF 0xb
7:                 
8:                    char i;
9:                    i=0;
  0007    1283     BCF 0x3, 0x5
10:               
11:               
12:                zanka:
13:                   i++;
  0009    1283     BCF 0x3, 0x5
14:                   if (i<100) goto zanka;
  000C    3064     MOVLW 0x64
15:                   PORTB.0=!PORTB.0;
  0010    3001     MOVLW 0x1
16:                   i=0;
  0014    01A0     CLRF 0x20
17:                   goto zanka;
  0015    2809     GOTO 0x9


_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2751
Aktiv.: 12.33
Kraj: Trzic

PrispevekObjavljeno: Pet Sep 28, 2007 5:42 pm    Naslov sporočila:   Odgovori s citatom

Tukaj vmes kar nekaj ukazov manjka (če gledaš na naslove, se sploh hitro vidi).
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.24
Kraj: Žalec

PrispevekObjavljeno: Pet Sep 28, 2007 5:45 pm    Naslov sporočila:   Odgovori s citatom

Aha, to pa mi je napisal v dodatno datoteko.

Koda:

;void main()
         ;{
main
         ;   TRISA=0;
   BSF   0x03,RP0
   BCF   0x03,RP1
   CLRF  TRISA
         ;   TRISB=0;
   CLRF  TRISB
         ;   OPTION_REG=0;
   CLRF  OPTION_REG
         ;   INTCON=0;
   CLRF  INTCON
         ;
         ;   char i;
         ;   i=0;
   BCF   0x03,RP0
   CLRF  i
         ;
         ;
         ;zanka:
         ;   i++;
m001   BCF   0x03,RP0
   BCF   0x03,RP1
   INCF  i,1
         ;   if (i<100) goto zanka;
   MOVLW .100
   SUBWF i,W
   BTFSS 0x03,Carry
   GOTO  m001
         ;   PORTB.0=!PORTB.0;
   MOVLW .1
   BCF   0x03,RP0
   BCF   0x03,RP1
   XORWF PORTB,1
         ;   i=0;
   CLRF  i
         ;   goto zanka;
   GOTO  m001

   END

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.02

PrispevekObjavljeno: Pet Sep 28, 2007 5:55 pm    Naslov sporočila:   Odgovori s citatom

No, zdaj pa se enkrat prestej cikle. Upostevaj tudi, da ob zadnjem prehodu tisti goto preskocis, torej skupaj s predhodnim ukazom ne pozre 3 cikle, ampak 2.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



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

PrispevekObjavljeno: Pet Sep 28, 2007 7:07 pm    Naslov sporočila:   Odgovori s citatom

To boš imel kar veliko frekvenco.

Koda: je napisal/a:
(ker se zanka ponovi 100x, je potem 100*3us=0.3s)???

Pazi 1 us = 0,000001 s
100*3us=0.3ms , kar je 0,0003 s.
Pa t=1/f, torej je pri 4 MHz čas enega cikla 1/4000000, kar je 0,25 us.

Sicer pa bi jaz raje uporabil naslednji način, ki ti takoj dokaj natančno pove, da se port preklopi na vsake (v tem primeru) pol sekunde. Ta primer je torej veliko preprostejši, je pa res, da se z zgornjim nekaj več naučiš Very Happy .

Koda: je napisal/a:
......
#use delay(clock=4000000)

void main()
{
TRISA=0;
TRISB=0;
OPTION_REG=0;
INTCON=0;

zanka:
delay_ms(500); //zakasni 0,5s
PORTB.0=!PORTB.0; //negira port B
goto zanka;
}

Če je zakasnitev v ms prevelika, lahko uporabiš ukaz dalay_us(...);

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???


Nazadnje urejal/a gkrusi Sob Sep 29, 2007 4:02 pm; skupaj popravljeno 2 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2751
Aktiv.: 12.33
Kraj: Trzic

PrispevekObjavljeno: Pet Sep 28, 2007 10:00 pm    Naslov sporočila:   Odgovori s citatom

gkrusi, s tem nič kaj velik ne narediš. Pri velikih hitrostih moraš še vedno upoštevati asm ukaze.

Pa btw, to kar si napisal je sintaksa za CCS C Compiler, ki je drugi ne podpirajo (#use delay, delay_ms, delay_us, ...)

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.24
Kraj: Žalec

PrispevekObjavljeno: Pet Sep 28, 2007 10:56 pm    Naslov sporočila:   Odgovori s citatom

Sokrat je napisal/a:
No, zdaj pa se enkrat prestej cikle. Upostevaj tudi, da ob zadnjem prehodu tisti goto preskocis, torej skupaj s predhodnim ukazom ne pozre 3 cikle, ampak 2.


Ne razumem najbolj? Brick wall

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.02

PrispevekObjavljeno: Sob Sep 29, 2007 1:22 am    Naslov sporočila:   Odgovori s citatom

Ko si jih stel prvic, je bilo tvoje stetje zelo narobe, mar ne ? Wink Zdaj ko koncno ves koliko ukazov se dejansko izvrsi ob vsaki iteraciji zanke, jih lahko tudi prestejes in tako prides do tocnega casa izvedbe. Ta se precej (vec kot 100%) razlikuje od tvoje prvotve ocene ...

Je zdaj dovolj razumljivo ?

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 18.07
Kraj: Črnuče

PrispevekObjavljeno: Sob Sep 29, 2007 1:01 pm    Naslov sporočila:   Odgovori s citatom

Če ne gre drugače lahko prevedeno kodo potegneš v MPLAB, pa tam pogledaš koliko ciklov traja ena rutina / podprogram......
_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2751
Aktiv.: 12.33
Kraj: Trzic

PrispevekObjavljeno: Sob Sep 29, 2007 1:07 pm    Naslov sporočila:   Odgovori s citatom

Highlag je napisal/a:
Če ne gre drugače lahko prevedeno kodo potegneš v MPLAB, pa tam pogledaš koliko ciklov traja ena rutina / podprogram......


Če se da podprogram pognat iz simulacije (če ne komunicira s kakšnim hardware-om), potem se tega poslužujem tudi sam. C prevajalnik ponavadi namreč točno izpiše naslove v ROMu, kjer se nahajajo posamezni C ukazi in po uvažanju v MPLAB, si enostavno postavim breakpoint-e na tiste naslove. Poženeš simulacijo, počakaš da pride do prvega breakpointa in resetiraš štoparico.

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Consty
Član
Član



Pridružen-a: Čet 21 Avg 2008 13:15
Prispevkov: 15
Aktiv.: 0.08
Kraj: Celje

PrispevekObjavljeno: Sob Avg 23, 2008 11:44 am    Naslov sporočila:   Odgovori s citatom

Lep pozdrav vsem!
Ja mam pa en problem z inputi na pic-u.
Na faksu smo delal z assemblerjem... za doma pa sem si nabavil vellemanov komplet k8048 in pa program mikroC - da lahk delam v c-ju Smile.

Ne vem zakaj mi inputi ne delajo kot bi morali...
--
void main() {

TRISB = 0; //PORTB vsi output
TRISA = 1; //PORTA vsi input

while(1) {


if(PORTA.F0 = 1); // preverjanje A0
PORTB.F0 = 1; // postavi izhod B0 na 1

};
}
---
izhod je skos na 1 - pa lahk delam kar hočem Confused
Lahko kdo prosim pove v čem je problem - ko se že kr en lep čas mučim s tem Smile
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 -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4 ... 11, 12, 13  Naslednja
Stran 3 od 13

 
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: 82 dni


Powered by phpBB © 2001, 2005 phpBB Group