MikroC programiranje

poruka: 11
|
čitano: 6.383
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
MikroC programiranje

Pozz svima

Nisam nigdje nasao temu vezano za ovo programiranje pa sam odlucio otvoriti novu temu pa ako mi neko moze pomoci oko ovoga zadatka

 

Treba napisati program koji ce ispisivati brojeve redom od 0-9999 na ova cetiri 7-segmentna display-a (kod spajanja display-a izvrseno je multipleksiranje) ,ja imam jedan dio zadatka uradjen samo ne znam kako bih ovo uradio ovo je ono sto sam ja dosad uradio :

 

 

 

 

unsigned short shifter, digit, portd_index;

unsigned int   number;

unsigned short portd_array[4];

 

void interrupt() {

  PORTA = 0;               

  PORTD = portd_array[portd_index];    

  PORTA = shifter;             

 

 

  shifter <<= 1;

  if (shifter > 8)

   shifter = 1;

 

 

  portd_index++ ;

  if (portd_index > 3)

   portd_index = 0;           

  TMR0   =   0;              

  INTCON = 0x20;             

}

 

unsigned short mask(unsigned short num) {

  switch (num) {

   case 0 : return 0x3F;

   case 1 : return 0x06;

   case 2 : return 0x5B;

   case 3 : return 0x4F;

   case 4 : return 0x66;

   case 5 : return 0x6D;

   case 6 : return 0x7D;

   case 7 : return 0x07;

   case 8 : return 0x7F;

   case 9 : return 0x6F;

  } //case end

}//~

 

 

 

void main() {

  OPTION_REG    = 0x80;      

  portd_index   = 0;

  shifter     = 1;

  TMR0       = 0;

  INTCON      = 0xA0;      

  PORTA      = 0;       

  TRISA      = 0;       

  PORTD      = 0;       

  TRISD      = 0;      

  while(1) {

  x++;

  Delay_ms(250);

 

  portd_array[0] = mask(1);

  portd_array[1] = mask(2);

  portd_array[2] = mask(3);

  portd_array[3] = mask(4);

 

  }

}

 

 

evo na slici je sema ovog kola za koje treba napisati program

Poruka je uređivana zadnji put sri 12.12.2012 16:13 (eagle05).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
MikroC programiranje

Itko?

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: MikroC programiranje
eagle05 kaže...

Itko?

Teško da će ti iko pomoći oko ovoga ovdje, koliko znam mogao bi kolega Djuro von Prekoplotovich, ali ga nema zadnjih dana, poslao sam mu mail da ga čekamo jer i mene ovo zanima, jer sam neki dan nešto radio sa sedmosegmentnim displejima.

13 godina
neaktivan
offline
MikroC programiranje

Pošto nemam baš puno vremena, pisati ću brzo.

 

Pod pretpostavkom da su segmenti dobro spojeni - multipleks radi tako da na port RD staviš željenu vrijednost segmenta i decimalne točke (mask()).

A onda sa RA0 do RA2 aktiviraš pojedini segment (šiftanje u interruptu).

 

Provjeri ovo:

INTCON = 0x20;

Na kraju interrupt rutine si globalno isključio sve interrupte (GIE bit), ali ih poslije nisi uključio.

 

Uputstva za rad s TMR0 timerom pogledaj ovdje:

http://ww1.microchip.com/downloads/en/DeviceDoc/51702A.pdf

 

Imaš dvije opcije - prva je simulator, pa ćeš u njemu detektirati okida li se ispravno interrupt i vidjeti mijenja li se ispravno stanje na portovima.

To je uvijek nekako najbolja opcija za početak.

 

Pošto pretpostavaljam kako nemaš opremu kao osciloskop i slično - druga opcija je da batališ ovaj kod, pa u beskonačnoj petlji main funkcije bez interrupta odradiš test - postavi segment, setiraj PORTA, spavaj jedno vrijeme (dovoljno dugo da vidiš stanje segmenta (npr 500ms ili 1 sekunda)) i zatim aktiviraj idući segment.

 
0 0 hvala 1
15 godina
neaktivan
offline
MikroC programiranje

Uradio sam ovaj zadatak za ispis od 0-9999 na cetiri 7-segmentna displaya ,sad trebam  napisati program koji ce  ispisivati od 0-9999 na LCD-Display-u ,pa ako neko ima uradjen zadatak ili neku stranicu gdje bih mogao pronaci kako se to radi bio bih mu zahvalan

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
MikroC programiranje

Itko?

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
MikroC programiranje

Mislim da malo ljudi ovdje ima telepatske sposobnosti, pa tako i znati o kakvom tipu LCD displaya se radi - 7 segmentni, alfanumerički, grafički...

 
0 0 hvala 0
15 godina
neaktivan
offline
MikroC programiranje

evo radi se o ovoj shemi spoja ,znaci treba da se napise program za brojac od 0-9999 

ja sam uradio ovo ali nece ne radi pravilno kad ga pokrenem u proteusu ne ispisuje dobro brojeve

 

 

sbit LCD_RS at RB4_bit;

sbit LCD_EN at RB5_bit;

sbit LCD_D4 at RB0_bit;

sbit LCD_D5 at RB1_bit;

sbit LCD_D6 at RB2_bit;

sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;

sbit LCD_EN_Direction at TRISB5_bit;

sbit LCD_D4_Direction at TRISB0_bit;

sbit LCD_D5_Direction at TRISB1_bit;

sbit LCD_D6_Direction at TRISB2_bit;

sbit LCD_D7_Direction at TRISB3_bit;

 

char txt1[]="LCD Brojac";     

unsigned int i = 0;

 

char *num = "0000";

 

void Display_init()   

{

 num[0] = i/1000 + 48;       

 num[1] = (i/100)%10 +48;     

 num[2] = (i/10)%10 + 48;     

 num[3] = i%10 +48;        

 Lcd_Out(2,1,num);           

}

void main()              

{

 Lcd_init();              

 Lcd_cmd(_LCD_CLEAR);           

 Lcd_cmd(_LCD_CURSOR_OFF);       

 Lcd_out(1,1,txt1);          

 

 while (1){

 

   int i = 0 ;

for(i=0; i<500; i++) {

if(i<10){

Lcd_Out(2,4,i%10+48);

Lcd_Out(2,3,48);

Lcd_Out(2,2,48);

Lcd_Out(2,1,48); }

else if (i<100){

Lcd_Out(2,4,i%10+48);

Lcd_Out(2,3,(i%100)/10 +48);

Lcd_Out(2,2,48);

Lcd_Out(2,1,48);}

else if (i<1000){

Lcd_Out(2,4,i%10+48);

Lcd_Out(2,3,(i%100)/10 +48);

Lcd_Out(2,2,(i%1000)/100 +48);

Lcd_Out(2,1,48);}

else if  (i<10000){

Lcd_Out(2,4,i%10+48);

Lcd_Out(2,3,(i%100)/10 +48);

Lcd_Out(2,2,(i%1000)/100 +48);

Lcd_Out(2,1,i/1000 +48);}           

   delay_ms(1000);           

   i ++;              

   if (i > 9999) {         

   i = 0;   }

   while (1);             

}  

}

}                   

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
MikroC programiranje

Ne koristim MikroC, vidim da pozivaš nekakve njegove ugrađene funkcije, pa ti oko toga ne mogu pomoći.

Također mi nije jasno gdje se povezuju varijable koje imaju u nazivu oznake LCD pinova sa funkcijama koje pričaju s displejom.

 

Slično kao i u mom prethodnom odgovoru, jedini način kojim možeš biti siguran da stvar radi je da najprije inicijaliziraš displej i pokušaš na njega ispisati jedan znak.

Time dakle provjeravaš je li sve živo i poštimano.

 

 

for petlja ti nije baš najsretnije riješena.

 

Ako kažeš:

for(i=0; i<500; i++)

to znači da nikada nećeš dostići 1000 ili 10000 što vidim u if-ovima ispod.

 

 

Ovo također nije lijepo:

if(i<10){

else if (i<100){

else if (i<1000){

jer svaki broj manji od 10 zadovoljava sva tri navedena uvjeta.

 

Editor je ubio formatiranje koda, a ja sam umoran pa mi se ne da gledati pažljivije - no jesi li stvarno htio da kod tamo pri dnu zaglavi u beskonačnoj petlji:

while (1); 

 

 

 

 
0 0 hvala 0
15 godina
neaktivan
offline
MikroC programiranje

Moze li mi neko objasniti ovih par stvari:

 

1. Zasto je npr. pocetna vrijednost TMR0=96(timer0)?U kojem vremenu se desava prekid?kako izracunati(Option registar=0x84,prescaler dodijeljen timer0 u omjeru 1:32)

 

2. Cemu sluzi varijabla cnt?Zasto ide do 400?

 

Frekvencija oscilatora je 8MHz,PIC16F887.

Moj PC  
1 0 hvala 1
15 godina
neaktivan
offline
MikroC programiranje

Ako se neko bavi sa programiranjem u MikroC-u bio bih mu zahvalan ako bi mi pomogao oko ovog problema:

Imam zadatak da uradim neki radar(misli se na radar koji je postavljen pored ceste)  koji ce raditi na principu da su one trake prije radara zamijenjene sa dva tastera.Kad se pritisne prvi taster pocne mjeriti vrijeme i kad pritisnemo drugi taster prestane mjeriti vrijeme,razmak izmedju onih crta smo uzeli 1metar i tako napisali formulu po kojoj ce mjeriti brzinu na osnovu ovog vremena i razmaka izmedju traka.Zadatak je da se ova brzina ispise na LCD display i na 7segmentne display-e.Ja sam uradio da mi ispisuje na LCD dispaly ,ali na 7segmentne nikako ne mogu napisati kod,a da to radi.

Evo ovdje ima sema u Proteusu i program u MikroC-u: http://www.2shared.com/file/aT6U9q8o/Radar__1_.html

Moj PC  
0 0 hvala 1
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice