Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

mikroC, nekoliko pitanja

[es] :: Elektronika :: Mikrokontroleri :: mikroC, nekoliko pitanja

[ Pregleda: 3515 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.co.yu.

ICQ: 276002814


+9 Profil

icon mikroC, nekoliko pitanja02.03.2008. u 13:25 - pre 137 meseci
Nov sam u programiranju mikrokontrolera i imao bih nekoliko pitanja u vezi mikroC-a :)

Šema:


Code:
#include "D:\Documents and Settings\user\Desktop\LED_Disp.h"
int i=0;
void main() {
  TRISB    = 0;
  PORTB    = 0;
  TRISA    = 0x03;
  PORTA    = 0x00;
  
  for(;;) {
          if(i>9)
                 i=0;

       PORTB=LED_Disp(i);
       if(i==0)
               PORTA.F2=~PORTA.F2;
       if(PORTA.F0)
                     Delay_ms(500);
            else
                if(PORTA.F1)
                     Delay_ms(2000);
                else
                     Delay_ms(1833);
         i++;
  }
}


1. Zašto je greška ako se "i" deklariše kao lokalna promenljiva unutar main-a?
2. Zašto se pritiskom na odgovarajući taster ne menja brzina brojanja, nego je stalno 500ms? Ako napišem if(!PORTA.F0) onda je stalno 1833ms. Meni bi bilo logično da 500ms bude dok je pritisnut taster T1, a 2000ms dok je pritisnut T2, a ako nije pritisnut ni jedan od njih onda 1833ms. Zašto nije tako?
 
Odgovor na temu

POW R TOC H
Dark Side of The Moon

Član broj: 174541
Poruke: 31
*.cpe.vektor.net.



Profil

icon Re: mikroC, nekoliko pitanja02.03.2008. u 13:58 - pre 137 meseci
Sumnjam da ti mozemo odgovoriti na sva pitanja ako nam ne kazes sta je u LED_Disp.h...
Ali odma' da ti dam par saveta :
Umesto Delay_ms() koristi interrupt-e, jer su mnogo precizniji, a i nema potrebe da ti program spava dok ceka. Takodje, onu for petlju si mogao da ugnezdis u jednu while(1), i da je koristis za 'vrtenje' promenljive 'i' :

while(1)
{
for(i = 0; i < 10; i++)
{
...
}

}

sto je mnogo citljivije i elegantnije resenje.
Sto se tice promenljive i, meni radi kad se deklarise u funkiji main() :D
Nadam se da ti je ovo nekako pomoglo.
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.co.yu.

ICQ: 276002814


+9 Profil

icon Re: mikroC, nekoliko pitanja02.03.2008. u 15:25 - pre 137 meseci
Ovde je samo tabelica za prikaz cifara
Code:

/*LED_Disp.h*/
int LED_Disp(int x) {
            switch(x) {
                        case 0: return 0b01111110;
                        case 1: return 0b00001100;
                        case 2: return 0b10110110;
                        case 3: return 0b10011110;
                        case 4: return 0b11001100;
                        case 5: return 0b11011010;
                        case 6: return 0b11111010;
                        case 7: return 0b00001110;
                        case 8: return 0b11111110;
                        case 9: return 0b11011110;

          }
}


Hvala ;)
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.adsl-1.sezampro.yu.



Profil

icon Re: mikroC, nekoliko pitanja02.03.2008. u 20:37 - pre 137 meseci
Ja bih prvo proverio da li imas dobar kontakt na pinu A0 jer po tome kako si objasnio(la) tebi se ne menja stanje na tom pinu, proveri da li imas 5V i 0V na pinu prilikom pritiska i otpustanja tastera.

Varijablu mozes da postavis u main funkciji ali prvo definises varijablu pa onda redjas naredbe, funkcije ...

Malo prelistaj literaturu u vezi programiranja u c programskom jeziku jer ti je program prilicno necitak pa ces kod pisanja vecih programa i sam(a) biti zbunjen(a) u razumevanju koda koji si sam(a) napisao(la).

Cemu kasnjenje 1833? Ajde razlika 500 i 2000, ali razlika 1833 i 2000 je prilicno neprimetna.
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
84.119.31.*



+9 Profil

icon Re: mikroC, nekoliko pitanja02.03.2008. u 20:37 - pre 137 meseci
Code:

/*LED_Disp.h*/
int LED_Disp(int x) {
            switch(x) {
                        case 0: return 0b01111110;
...

Aj aj aj aj..
To se tako ne radi.
Prvo:
U Header File NE IDE C-KOD!
SAMO DEFINICIJE!
Ako već hoćeš da projekat podeliš na nekoliko fajlova radi preglednosti i lakšeg održavanja
programa onda funkciju int LED_Disp,(int x).. pripada u jedan fajl
sa ekstenzijom .c:
/*leddisp.c*/
#include leddisp.h

int LED_Disp(int x){...
/* end of leddisp.c*/

uz taj .c fajl pripada UVEK jedan .h fajl sa istim nazivom. U njemu su definicije:
/*leddisp.h*/
#ifndef _LEDDISP_H
#define _LEDDISP_H
#define abc ABC
...
extern int LED_Disp(int x);
#endif
/* end of leddisp.h*/

Drugo:
Kao dobar programerski stil se smatra ako funkcija ima SAMO JEDNU povratnu vrednost:
Code:

int LED_Disp(int x) {
int temp;
            switch(x) {
                        case 0: temp= 0b01111110; break;
                        case 1: temp= 0b00001100; break;
.
}// end of switch(x)
return temp; // Samo jedna povratna vrednost u jednoj funkciji
}


Treće:
Nađi neku dobru knjigu o C-programiranju


Pozdrav Branko

 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
84.119.31.*



+9 Profil

icon Re: mikroC, nekoliko pitanja02.03.2008. u 20:45 - pre 137 meseci
I još nešto:
Zašto će ti tip int(integer) kao parametar i povratna vrednost kada ti je mustra dugačka samo 8 bajta?
Za to je dovoljan tip char, pogotovo ako tu povratnu vrednost hoćeš da izbaciš na jedan port
mikrokontrolera na kojem ti se nalazi displej, koji je verovatno širok isto 8 bita.
Ovako ćeš možda imati problema zbog nekompatibilnosti tipova.


 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.co.yu.

ICQ: 276002814


+9 Profil

icon Re: mikroC, nekoliko pitanja02.03.2008. u 20:53 - pre 137 meseci
Našao sam problem - nisam dobro okrenuo prekidače....
Hvala na sugestijama, sa C/C++ -om sam dosta dugo upoznat i dobre knjige sam već čitao, ali se tokom pisanja uopšte nisam ni trudio da to lepo izgleda, troši što manje memorije i da je po ustaljenim "pravilima", već samo da služi svrsi, tj. drži vodu dok majstori odu :)
1833ms je zato što ne znam tačnu frekvenciju a ovako je približno 1s u stvarnosti.

Tnx ;)
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: mikroC, nekoliko pitanja03.03.2008. u 07:10 - pre 137 meseci
Uostalom:
Citat:

Ovde je samo tabelica za prikaz cifara

Code:

/*LED_Disp.h*/
int LED_Disp(int x) {
switch(x) {
case 0: return 0b01111110;
case 1: return 0b00001100;
case 2: return 0b10110110;
case 3: return 0b10011110;
case 4: return 0b11001100;
case 5: return 0b11011010;
case 6: return 0b11111010;
case 7: return 0b00001110;
case 8: return 0b11111110;
case 9: return 0b11011110;

}
}


Hvala ;)


Zašto topovima na vrabce?
Tako nešto se rešava jednostavnije sa jednom tabelom(Array):
Code:

char LED_Tabela[10]={
0b01111110,
0b00001100,
..
0b11011110,
};


A koristI se kao:
Code:

PORTB=LED_Tabela[cifra];


 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: mikroC, nekoliko pitanja12.03.2008. u 10:32 - pre 137 meseci
I ja se slazem da delay_ms nije najbolji nacin da to uradis. Drugo, ja bih ti predlozio da pogledas malo i oko oscilatora, tj frekfencije....mada radis se o fizickom pritiskanju tastera tako da ti to i nije toliko bitno
 
Odgovor na temu

POW R TOC H
Dark Side of The Moon

Član broj: 174541
Poruke: 31
*.cpe.vektor.net.



Profil

icon Re: mikroC, nekoliko pitanja12.03.2008. u 10:42 - pre 137 meseci
Cekaj sekund... enaB... Sa foruma SK, i Krstarice?
Onaj koji je bio samnom na seminaru elektronike?
Nazvao bih se fingerprint, ali je ime vec bilo zauzeto...
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.co.yu.

ICQ: 276002814


+9 Profil

icon Re: mikroC, nekoliko pitanja13.03.2008. u 05:16 - pre 137 meseci
Oscilator bih ubacio, ali nisam našao 2 ista kondenzatora tako male vrednosti(najmanje što sam isčeprkao su 1nF a sa tim neće da radi)


@POW R TOC H
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: mikroC, nekoliko pitanja

[ Pregleda: 3515 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.