[ AxeXea @ 25.12.2012. 18:16 ] @
Pisao sam jedan jednostvan primer za PIC16F877A...,i imam problem.
Program treba da ispise brojeve od 1 do recimo 7 na LCDu.Prvo da napise broj 1,pa obrise displej,pa broj 2 itd.
evo koda:

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;
// LCD konekcija

short int i; // varijabla petlje

void main(){

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor

Delay_ms(500);

// petlja
for(i=0; i<=7; i++) // Petlja
{
Lcd_Out(2,1,i); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor
}

Sa ovim ja na displeju dobivam neke brljotine,kao da igram pakmana :)
U pitanju je MikroC.

[ vukboban @ 25.12.2012. 19:17 ] @
A kako si ti to sve fizicki povezao?daj neku semu...

Mislim da " i " prvo moras da pretvoris u tekst naredbom IntToStr,pa tekst ide na LCD

[ AxeXea @ 25.12.2012. 19:27 ] @
Fizicki!?
Pa mislim da je iz samog koda sve jasno.Mikrokontroler je PIC16F877a,LCD je 4bitno spojen na port B.Nema nikakvog drugog hardvera.
[ Genie_1984 @ 25.12.2012. 19:30 ] @
Odgovor na tvoje pitanje je u prototipu LCD_Out funkcije

Code:


void Lcd_Out(char row, char column, char *text);



kao što vidiš tvoja promenljiva 'i' nije odgovarajućeg tipa

Jedna od mogućnosti je da iskoristiš LCD_chr:

Code:

Lcd_chr(2,1, i+48 ); // i+48 je ASCII code za broj -
                           //nedostatak samo brojevi od 0..9 pa za veće brojeve potrebno je malo manipulacije


druga je da iskoristiš ByteToStr ,ShortToStr,WordToStr,IntToStr,LongToStr,LongWordToStr,FloatToStr funkcije.
I to naravno ima nedostataka,probaj pa će ti biti jasno koji je....

npr

Code:

...
char tmp[3];

...
ShortToStr(i,tmp)
Lcd_Out(2, 1, tmp);
...

[ vukboban @ 25.12.2012. 19:30 ] @
Pa recimo da li si B3 povezao na D7,da li su d1,d2,d3,d4 svi na gnd itd...
pretvori promenljivu u tekst,pa tekst salji na lcd!
[ AxeXea @ 25.12.2012. 19:43 ] @
OK,mislim da ce inttostr da resi problem.Probacu malo kasnije veceras da prepakujem kod.
LCD je pravilno spojen jer neki drugi kodovi normalno rade na njemu.
Hvala svima na pomoci.Javicu se kasnije...
[ AxeXea @ 25.12.2012. 20:36 ] @
Evo ovako sam ja to sad spakovao,ali sad mi prijavljuje gresku u kompajleru :(

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;
// LCD konekcija

short int i = 0; // varijabla petlje
char txt[7];
IntToStr(i, txt);


void main(){

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor


Delay_ms(500);


// petlja
for(i=0; i<=7; i++) // Petlja
{
Lcd_Out(2,1,txt); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor
}
}
[ AxeXea @ 25.12.2012. 21:10 ] @
Resen problem,proradilo je!

Evo kompletnog koda koji radi:

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;
// LCD konekcija

short int i; // varijabla petlje
char txt[7];



void main(){

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor


Delay_ms(500);


// petlja
for(i=0; i<=7; i++) // Petlja
{
IntToStr(i, txt);
Lcd_Out(2,1,txt); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor
}
}


Hvala svima na pomoci!
[ Genie_1984 @ 25.12.2012. 21:21 ] @
Probaj i ovako

Code:


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;
// LCD konekcija

short i; // varijabla petlje


//u slučaju da ti treba int
/*
void LCD_Int(char row, char column, int value) 
{

     char tmp[5],i=0;
     tmp[0]=value/10000;
     tmp[1]=(value%10000)/1000;
     tmp[2]=(value%1000)/100;
     tmp[3]=(value%100)/10;
     tmp[4]=value%10;
     Lcd_Out(row,column,"");
     while(!tmp[i]&&i<4)i++;
     while(i<5) {LCD_chr_cp(tmp[i]+48); i++; }
}
*/

void LCD_Short(char row, char column, short value)
{

     char tmp[3],i=0;
     tmp[0]=value/100;
     tmp[1]=(value%100)/10;
     tmp[2]=value%10;
     Lcd_Out(row,column,"");
     while(!tmp[i]&&i<2)i++;
     while(i<3) {LCD_chr_cp(tmp[i]+ 0x30); i++; }
}

void main()
{

     Lcd_Init(); // Inicijalizacija LCDa
     Lcd_Cmd(_LCD_CLEAR); // obrisi displej
     Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor

     Delay_ms(500);

     // petlja
     for(i=0; i<127; i++) // Petlja
     {
        LCD_Short(2,1,i); // Upisi i u drugi red,prvo mesto
        Delay_ms(500);
        Lcd_Cmd(_LCD_CLEAR); // obrisi displej
     }
}

[ AxeXea @ 25.12.2012. 21:36 ] @
Radi lepo i na taj nacin...broji do 127 i na kraju obrise displej.
Proucavacu ovo malo :)
Kad sam poceo da pisem,misleo sam da ce bito kod od 4 reda :)
Hvala.
[ Genie_1984 @ 25.12.2012. 21:57 ] @
Razlika izmedju tvog i mog koda je u tome što u tvom deo

IntToStr(i, txt);
Lcd_Out(2,1,txt);

ispiše txt[7] na LCD, pa ako je broj 1 - ispiše 5 praznih mesta i onda 1(sedmi je null terminator zbog stringa) ,dok moj ispiše odmah 1

to je zato što IntToStr popunjava txt sa brojem sa desno na levo pa ostatak niza popuni praznim mestom.
A to zna da smara,jer ako treba npr pre broja da se ispiše string od 12 slova pa onda broj sa 2 cifre moraš prvo da ispišeš broj
pa onda reč od početka. Malo nezgrapno objašnjeno ali nadam se da shvataš šta hoću reći....

Pozdrav
[ AxeXea @ 25.12.2012. 22:24 ] @
Da,pokusao sam da menjam tu sedmicu,ali tad kod nece da radi,odnosno radi ali brljavi neke heroglife.
Aj jos jedno pitanje.Probao sam da napravim da broji unazad od recimo 100 do 0,medjutim nece da radi,kad sam koristio i-- dobio sam da recimo krene od 0 prema minusu odnosno u negativne brojeve,bilo sta drugo da probam nece da radi,prazan displej.
[ Genie_1984 @ 25.12.2012. 22:29 ] @
Pa samo izmeniš for petlju
Code:


     for(i=100; i>=0; i--) // Petlja
     {
        LCD_Short(2,1,i); // Upisi i u drugi red,prvo mesto
        Delay_ms(500);
        Lcd_Cmd(_LCD_CLEAR); // obrisi displej
     }



Pozdrav
[ AxeXea @ 25.12.2012. 22:33 ] @
Probao bas tako...,ali dobijem samo prazan displej?
[ AxeXea @ 25.12.2012. 22:38 ] @
OK,radi...greska je bila u <>
Hvala mnogo na pomoci.
[ vukboban @ 26.12.2012. 18:15 ] @
Za brojeve do 255 koristi short promenljivu,onda je txt[4],t.j. imas 4 prazna mesta
[ MirkoDamnjanovic @ 23.01.2013. 12:20 ] @
Sta koristis od biblioteka?

Uvukao sam xlcd.h i kada kompajliram tvoj kod izbaci mi problem na "sbit LCD_RS at RB4_bit;" pa sve redom dalje.

Ako bi mogao da mi posaljes potrebne fajlove da bi radio sa LCD-om.
[ bogdan.kecman @ 23.01.2013. 12:41 ] @
Citat:
MirkoDamnjanovic
Uvukao sam xlcd.h i kada kompajliram tvoj kod izbaci mi problem na "sbit LCD_RS at RB4_bit;" pa sve redom dalje.


sbit ... je MikroC lelemudija (nisu ga oni izmislili, sbit sluzi za definisanje adrese bitova jos iz vremena 8051 ali u PIC svetu mislim da samo mikroC koristi sbit) a mikroC ima svoje interne zatvorene biblioteke. Ti ako si uvlacio xlcd.h bice da koristis neki microchip kompajler, oni ne koriste sbit, i sa lcd-om rade drugacije
[ MirkoDamnjanovic @ 23.01.2013. 13:20 ] @
Aha znaci tako. Ceo dan sam izgubio pokusavajuci da napisem bilo sta na LCD i nista. Nadjem neki primer da se uvuce xlcd.h (prekopirao sam ga iz xc8 direktorijuma u aplikaciju) i prijavlje mi greske na bilo kom pozivanju metoda.

Plz ako znas neki sajt sa primerom koji ce da radi na xc8 lite compileru.
[ goran_68 @ 23.01.2013. 14:34 ] @
Uradiću ti primer večeras ako ti nije kasno.
[ MirkoDamnjanovic @ 23.01.2013. 14:39 ] @
Nije, hvala puno.
[ goran_68 @ 23.01.2013. 21:23 ] @
Evo nešto na brzinu ali vidi se kako i šta se radi. Ukoliko koristiš razvojni sistem koji je Siniša uradio bitno je da ti svi dip prekidači budu u položaju OFF. LCD je na tom razvojnom sistemu povezan na "gornja" četiri pina PORTB RB4-RB7 dok su RS i E linije vezane na RA1 i RA3. RW linija je na GND. Sve ove postavke definisane su u hd447780.h. Ukoliko je tvoj LCD povezan drugačije moraš da koriguješ taj fajl. Funkcije koje se pozivaju su Microchip-ove i nešto se razlikuju (starija su varijanta ali nema suštinske razlike) od onih koje si i sam našao u XC folderu gde se nalaze sors fajlovi. Kod mene je to:

c:\Program Files\Microchip\xc8\v1.12\sources\pic18\plib\XLCD

Ja sam ih samo skupio u jedan fajl hd447780.c
[ MirkoDamnjanovic @ 25.01.2013. 07:41 ] @

XLCDClear();
XLCDGoto(0,6);
XLCDPutROMString("i = ");

while(1)
{
for(i=0;i<10;i++)
{
XLCDGoto(0,10);
XLCDPut(i + 0x30); // na LCD se šalje ascii karakter
_delay(1000000); // Pauza od približno jedne sekunde
}
}

Ako moze objasnjenje kako ovo radi. Najvise sam radio sa C#, pa sam spremajuci zenu za ispit iz C a prosao cist C ali ovo mi je skroz ludo :)

Pitanje 1. Kakve veze ima XLCDPutROMString("i = "); sa ispisom na ekranu i inkrementom brojeva koji se posle 9 resetuje na 0.

Pitanje 2. Za 0x30 sam nasao da je broj dekadni broj 48 a kao karakter 0 i ne mogu da skapiram kakve to veze ima sa ovim sto se desava na displeju.




[ ZAS011 @ 25.01.2013. 08:43 ] @
Code:
XLCDPut(i + 0x30); // na LCD se šalje ascii karakter

Ako je 0x30 "0", kao što si i sam zaključio, upotrebi logiku da ti 'kaže' šta je
Code:
i + 0x30

ako se i menja u rasponu od 0 do 9

za XLCD... pogledaj XLCD biblioteku, biće ti jasnije šta ovo malecko programče radi, a to što tadi je ispisivanje cifara 0 do 9

evo i "izgleda" 2x16 LCD-a:



















[ goran_68 @ 25.01.2013. 08:58 ] @
1. XLCDPutROMString("i = "); će na LCD ispisati ovo što je u zagradi, odnosno i =
Time si pripremio da taj statični deo teksta ispišeš ispred for petlje jer nema potrebe da ga u for ponavljaš.
2. U for petlji ćeš samo posle i = dodavati u svakom prolazu ispis za trenutnu vrednost promenljive i. Da bi pisao karaktere po Hitachi HD44780 baziranom LCD, kakvih je inače najviše, potrebno je da mu pošalješ ascii kod karaktera koji želiš da ispišeš. ASCII tabelu ćeš naći na netu ukoliko je nemaš. Videćeš da cifre 0-9 imaju ascii kodove od 0x30 do 0x39. Dakle na trenutnu vrednost promenljive i moraš dodati 0x30 (decimalno 48) kako bi takav podatak prosledio funkciji XLCDPut().

U prvom prolazu kroz for ćeš na displeju imati: i = 0
U drugom: i = 1
itd..

Dva dokumenta koja opisuju rad sa HD44780 baziranim LCD možeš skinuti sa:
http://lcd-linux.sourceforge.net/pdfdocs/lcd1.pdf
http://lcd-linux.sourceforge.net/pdfdocs/lcd2.pdf


[ MirkoDamnjanovic @ 25.01.2013. 09:27 ] @
Znaci postavljamo statican tekst i dole petlja trci po ascii tabeli 10 mesta ispisujuci karaktere od 0x030 do 0x39.

Sve jasno, thanks
[ MirkoDamnjanovic @ 30.01.2013. 13:12 ] @
Drugari, kako treba da se definise lcd na Sinisinom razvojnom sistemu ako radimo preko MikroC-a?

[ ZAS011 @ 30.01.2013. 14:28 ] @
Imaš ovde: http://www.elitesecurity.org/p3212250 šemu razvojnog, odatle se vidi kako je povezan LCD i shodno tome izvršiš postavljanje parametara za MikroC.
Kako se radi pridodeljivanje pinova, zavisi od verzije MikroC-a koju koristiš, piše inače sve u Help-u

Za MikroC PRO V5.8.0:

Code:
sbit LCD_RS at RA1_bit;
sbit LCD_EN at RA3_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;

sbit LCD_RS_Direction at TRISA1_bit;
sbit LCD_EN_Direction at TRISA3_bit;
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;
[ MirkoDamnjanovic @ 30.01.2013. 14:39 ] @
Bukvalno ovog trenutka sam nasao shemu i po semi nasao Sinisine konektore :)
Hvala na brzoj pomoci :)
[ MirkoDamnjanovic @ 31.01.2013. 08:15 ] @
Ne znam u cemu je ali ne dobijam nista na ekranu. Samo kursor jednom blinkne i to je sve :(

sbit LCD_RS at RA1_bit;
sbit LCD_EN at RA3_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;

sbit LCD_RS_Direction at TRISA1_bit;
sbit LCD_EN_Direction at TRISA3_bit;
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;

// LCD konekcija

void main()
{
Lcd_Init();
Lcd_Out(1,1,"HELLO!");
}
[ rsinisa @ 31.01.2013. 08:23 ] @
Jesi probao da podesiš kontrast?

Pozdrav.
Sinisha
[ MirkoDamnjanovic @ 31.01.2013. 08:41 ] @
Jesam to je ok. Radi primer u xc8 koji je postavljen pre par postova od @gorana_68.
Ali ovaj nece da radi a nemam ideju u cemu je problem.

sbit LCD_RS at RA1_bit;
sbit LCD_EN at RA3_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;

sbit LCD_RS_Direction at TRISA1_bit;
sbit LCD_EN_Direction at TRISA3_bit;
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;

// LCD konekcija

void main()
{
Lcd_Init();
Lcd_Out(1,1,"HELLO!");
}

U device mi stoji P16F1827 i MCU je 4.000000 MHz.
[ ZAS011 @ 31.01.2013. 09:14 ] @
Da ti nije kojim slučajem uključen PLL?
To ume da pokarabasa tajminge, a MikroE biblioteke ne posmatraju Busy displeja.
[ MirkoDamnjanovic @ 31.01.2013. 09:28 ] @
Gde to da pogledam?


Ovo se nesto igram za Proteus pa ne stoji P16F1827 na 4MHz...

[Ovu poruku je menjao MirkoDamnjanovic dana 31.01.2013. u 10:42 GMT+1]
[ ZAS011 @ 31.01.2013. 09:51 ] @
Fenomenalno, koristiš 16F1827 a daješ skrinšot podešavanja za 16F877

Code:
Config1 
        FOSC_LP,_        ; LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins
        FOSC_XT,_        ; XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins
        FOSC_HS,_        ; HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins
        FOSC_EXTRC,_    ; EXTRC oscillator: External RC circuit connected to CLKIN pin
        FOSC_INTOSC,_    ; INTOSC oscillator: I/O function on CLKIN pin
        FOSC_ECL,_        ; ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin
        FOSC_ECM,_        ; ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin
        FOSC_ECH,_        ; ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin
        WDTE_OFF,_        ; WDT disabled
'        WDTE_SWDTEN,_    ; WDT controlled by the SWDTEN bit in the WDTCON register
'        WDTE_NSLEEP,_    ; WDT enabled while running and disabled in Sleep
'        WDTE_ON,_        ; WDT enabled
        PWRTE_ON,_        ; PWRT enabled
'        PWRTE_OFF,_        ; PWRT disabled
'        MCLRE_OFF,_        ; MCLR/VPP pin function is digital input
        MCLRE_ON,_        ; MCLR/VPP pin function is MCLR
'        CP_ON,_            ; Program memory code protection is enabled
        CP_OFF,_        ; Program memory code protection is disabled
'        CPD_ON,_        ; Data memory code protection is enabled
        CPD_OFF,_        ; Data memory code protection is disabled
        BOREN_OFF,_        ; Brown-out Reset disabled
'        BOREN_SBODEN,_    ; Brown-out Reset controlled by the SBOREN bit in the BORCON register
'        BOREN_NSLEEP,_    ; Brown-out Reset enabled while running and disabled in Sleep
'        BOREN_ON,_        ; Brown-out Reset enabled
'        CLKOUTEN_ON,_    ; CLKOUT function is enabled on the CLKOUT pin
        CLKOUTEN_OFF,_    ; CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin
        IESO_OFF,_        ; Internal/External Switchover mode is disabled
'        IESO_ON,_        ; Internal/External Switchover mode is enabled
        FCMEN_OFF        ; Fail-Safe Clock Monitor is disabled
'        FCMEN_ON        ; Fail-Safe Clock Monitor is enabled
Config2 
'        WRT_ALL,_        ; 000h to FFFh write protected, no addresses may be modified by EECON control
'        WRT_HALF,_        ; 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control
'        WRT_BOOT,_        ; 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control
        WRT_OFF,_        ; Write protection off
        PLLEN_OFF,_        ; 4x PLL disabled   <=====
'        PLLEN_ON,_        ; 4x PLL enabled   <=====
        STVREN_OFF,_    ; Stack Overflow or Underflow will not cause a Reset
'        STVREN_ON,_        ; Stack Overflow or Underflow will cause a Reset
        BORV_25,_        ; Brown-out Reset Voltage (VBOR) set to 2.5 V
'        BORV_19,_        ; Brown-out Reset Voltage (VBOR) set to 1.9 V
        LVP_OFF            ; High-voltage on MCLR/VPP must be used for programming
'        LVP_ON            ; Low-voltage programming enabled

[ MirkoDamnjanovic @ 31.01.2013. 10:48 ] @
Izvinjavam se jos jednom za pogresan screenshot.

Za sta se koristi ovaj mikroProg Suite?

Sta da radim sa ovim kodom config-a?



[ ZAS011 @ 31.01.2013. 14:21 ] @
Citat:
Za sta se koristi ovaj mikroProg Suite?

Za "prženje" mikrokontrolera MikroE programatorima/razvojnim sistemima.
Citat:
Sta da radim sa ovim kodom config-a?

To su ti svi konfiguracioni bit-ovi koje ima 16F1827
[ MirkoDamnjanovic @ 31.01.2013. 14:39 ] @
* Ako sam te skapirao mikroProg Suite ima istu svrhu kao i PicKit2 Programmer

* Pokusavao sam u Edit Project da podesavam i nista nisam uspeo.

[ ZAS011 @ 31.01.2013. 15:43 ] @
Koju verziju MikroC-a koristiš?
Ovako izgleda podešavanje u MikroC Pro V 5.8.0

[ MirkoDamnjanovic @ 31.01.2013. 16:37 ] @
Koristim 5.6.1. Vizuelno je isti, ima sve iste opcije...

Elem gomila konfiguracionih opcija je drugacija od ovoga sto si mi poslao. Sutra cu da podesim identicno pa da probam na razvojnom sistemu.


Hvala na pomoci/trudu
Pozdrav
[ ZAS011 @ 31.01.2013. 17:53 ] @
Ove opcije na poslednja 2 skrinšota bi morao da imaš i to SVE pošto su to konfiguracioni bit-ovi za 16F1827
Ako ih nemaš sve, ili nemaš tog PIConju u listi podržanih kontrolera, apdejtuj kompajler.
[ MirkoDamnjanovic @ 01.02.2013. 07:38 ] @
Imam sve opcije. Cak sam probao i sa 5.8.0 MikroC om i ista prica.

Pojavi se prilikom upisa par upitnika koji pretrce preko ekrana i to je sve.

@ZAS011 ti imas Sinisin razvojni sistem i tebi ovako radi?
[ ZAS011 @ 01.02.2013. 09:42 ] @
Ja nemam Sinišin razvojni, imam EasyPic6. Probaću tokom dana
[ MirkoDamnjanovic @ 01.02.2013. 11:44 ] @
Napravio sam novi projekat, napravio jednostavnu app da pali led lampicu, dodao da nesto napise na lcd i proradilo je.

Samo da za nekoga ako bude imao isti problem dam izgled podesavanja koja inace nisam dirao kao ni prvi put kad sam se ovde javio za problem.

[ ZAS011 @ 01.02.2013. 12:13 ] @
Da li koristiš interni oscilator kontrolera ili imaš kvaercni kristal?
Ako koristiš interni oscilator, loše ti je podešavanje u projektu.
[ MirkoDamnjanovic @ 01.02.2013. 12:41 ] @
Interni koristim. Sad sam stavio INTOSC.. i radi i sa tim podesavanjem.

Ja mislim da sada i da mu obrisem celu aplikaciju, stavim PIC12Fxxx, podesim da nema nikakav oscilator i nema lcd-a da ce da radi. HEHE :P



[ ZAS011 @ 01.02.2013. 15:26 ] @
I bez PIConje da radi, bil bi najbolje.
MikroC će teško da ti bilo šta odradi ako u projektu ne postaviš koji je PIConja, na kojoj frekvenciji radi, ...
Nisu kompajleri vidoviti pa da im se "javlja" šta je u tvojoj glavi

Uzmi na primer 12F615 i 12F629, i jedan i drugi imaju interni oscilator, prvi od 8 MHz a drugi od 4 MHz. Većini kompajlera je po difoltu postavljeno da PIConja radi na 4 MHz, na osnovu toga se postavljaju kojekakva kašnjenja (delay) za rutine za ispis na LCD, izračunavanje za Pause_Ms, ...
[ MirkoDamnjanovic @ 07.02.2013. 12:48 ] @
Ima li neko void koji stampa float vrednost?
[ ZAS011 @ 07.02.2013. 16:16 ] @
Citat:
MirkoDamnjanovic: Ima li neko void koji stampa float vrednost?

void = ništa (ništavilo), tako da void ne može ništa da uradi
Nego, ako koristiš MikroC, pogledaj u Help-u da li ima nešto kao FloatToStr()
To je Funkcija, funkcije nešto rade.
[ goran_68 @ 07.02.2013. 20:17 ] @
Evo ti primer iz uputstva za Microchip-ov XC8:


Code:

#include <stdlib.h>
#include <stdio.h>
void main (void)
{
char * buf;
float input = 12.34;
int status;

   buf = ftoa(input, &status);
   printf("The buffer holds %s\n", buf);
}



Pretpostavljam da si tako nešto hteo.
[ MirkoDamnjanovic @ 08.02.2013. 07:06 ] @
@goran_68 imao sam mnogo problema sa xc8 nasao komentare da je golo g. pa sam presao na mikroc pro.

Znam za FloatToStr(int,string); nego tu ima jedan problemcic. String definisemo na pocetku kao char[7] i on kad convertuje zadati int u string pa pustis da stampa u prvom redu prvo polje on ce odstampati tako sto ce da uzme 6 praznih i na sedmo ce da upise taj konvertovan broj. Kako broj raste (dvocifren, trocifren) on ce da uzima na levo polja. Znaci ako je dvocifren 5 polja ce biti prazno pa onda ispisuje cifre. @Axe*** koristi metodu za prepakivanje tog dobijenog stringa i pomocu metode LCD_Int() prepakuje i ispise na lcd-u tako da jednocifren uzme jedno polje itd. A sa povecanjem na dvocifren zauzima dalja polja na desno.

Ono sto meni treba je void() koji ce za zadati float da mi na lcd-u ne zauzima nepotrebno gomilu celija, i da imam ispis sa 1 ili 2 decimale.


Ovo je primer sa pocetka teme koji koristim kao pocetnu tacku.

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;
// LCD konekcija

short i; // varijabla petlje


//u slučaju da ti treba int
/*
void LCD_Int(char row, char column, int value)
{

char tmp[5],i=0;
tmp[0]=value/10000;
tmp[1]=(value%10000)/1000;
tmp[2]=(value%1000)/100;
tmp[3]=(value%100)/10;
tmp[4]=value%10;
Lcd_Out(row,column,"");
while(!tmp&&i<4)i++;
while(i<5) {LCD_chr_cp(tmp+48); i++; }
}
*/

void LCD_Short(char row, char column, short value)
{

char tmp[3],i=0;
tmp[0]=value/100;
tmp[1]=(value%100)/10;
tmp[2]=value%10;
Lcd_Out(row,column,"");
while(!tmp&&i<2)i++;
while(i<3) {LCD_chr_cp(tmp+ 0x30); i++; }
}

void main()
{

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor

Delay_ms(500);

// petlja
for(i=0; i<127; i++) // Petlja
{
LCD_Short(2,1,i); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
}
}
[ goran_68 @ 08.02.2013. 08:08 ] @
Nisi dobro ispratio komentare vezane za XC8 a probleme si imao jer nisi čitao dokumentaciju. Trenutni problem koji imaš možeš rešiti tako što ćeš proveravati sadržaj tmp[0], tmp[1]... pa ako su nule onda se povlačiš za jedno mesto ulevo.
[ MirkoDamnjanovic @ 08.02.2013. 08:38 ] @
Aha tako to radi.
A kako da mu kazem da ispise samo 2 decimale? U obicnom C-u jednostavno float = 3.413123 2f; i to radi. Ali ne mogu da nadjem kako to da radim pri prikazu na lcd-u.
[ ZAS011 @ 08.02.2013. 09:03 ] @
Citat:
MirkoDamnjanovic: Aha tako to radi.
A kako da mu kazem da ispise samo 2 decimale? U obicnom C-u jednostavno float = 3.413123 2f; i to radi. Ali ne mogu da nadjem kako to da radim pri prikazu na lcd-u.

Počni da čitaš dokumentaciju. Bez toga nećeš stići nigde.
[ goran_68 @ 08.02.2013. 10:47 ] @
Evo na primer kreni od 3.5.7 How Do I Use Printf to Send Text to a Peripheral? iz uputstva za XC8. Baš ono što ti treba.