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 

mikroC
Pojdi na stran 1, 2, 3  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
alex007
Član
Član



Pridružen-a: Pon 29 Dec 2003 0:19
Prispevkov: 56
Aktiv.: 0.25
Kraj: Sevnica

PrispevekObjavljeno: Tor Jun 27, 2006 6:03 pm    Naslov sporočila:  mikroC Odgovori s citatom

Pozdravljeni

Zanima me, če kdo programira PIC-e v mikroC-ju in kje lahko dobim full verzijo, ker demo verzija mi ne zadostuje.

lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.62

PrispevekObjavljeno: Sre Jun 28, 2006 9:59 am    Naslov sporočila:   Odgovori s citatom

MikroC sem začel uporabljati pred kratkim. Sem zadovoljen z njim. Poleg tega je podpora na njihovem forumu kar obsežna.

Full version je pa treba kupiti za kar visoko ceno. Za enkrat tudi še ne podpira programiranja PIC10FXXX, tako da za te procesorje ni primeren (mimogrede ali kdo ve kateri C prevajalnik podpira 10F serijo in je brezplačen?).

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



Pridružen-a: Sre 27 Apr 2005 12:33
Prispevkov: 14
Aktiv.: 0.06

PrispevekObjavljeno: Sob Dec 09, 2006 12:15 pm    Naslov sporočila:   Odgovori s citatom

Jaz uporabljam mikroC full version. Dobil sem jo poleg programatorja(EasyPIC3). Je zelo vredu, saj že vsebuje veliko funkcij, kot so USART, AD,izpis na LCD...tako da nastaviš samo parametre!
_________________
Stran glejte vsi,to je moje klanje!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
IR ELECTRONIC(ARROW)
Član
Član



Pridružen-a: Sre 06 Dec 2006 10:08
Prispevkov: 47
Aktiv.: 0.22
Kraj: Ljubljana

PrispevekObjavljeno: Sob Dec 09, 2006 1:47 pm    Naslov sporočila:   Odgovori s citatom

matjazkariz je napisal/a:
MikroC sem začel uporabljati pred kratkim. Sem zadovoljen z njim. Poleg tega je podpora na njihovem forumu kar obsežna.

Full version je pa treba kupiti za kar visoko ceno. Za enkrat tudi še ne podpira programiranja PIC10FXXX, tako da za te procesorje ni primeren (mimogrede ali kdo ve kateri C prevajalnik podpira 10F serijo in je brezplačen?).

LP


Ziv!
Uporabljati C za PIC10 je nesmiselno.Tistih nekaj vrstic v ass. pa ja ni
neki problem.Microchip-ov assembler je pregleden pa tudi PIC10 nima interuptov in tudi ostalih funkcij ni kaj prevec.Tako da ne vidim smisla glede na njihovo majhnost programskega spomina

Armin

_________________
ARMIN ČATAK DFAE
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14551
Aktiv.: 65.53
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Dec 09, 2006 2:00 pm    Naslov sporočila:   Odgovori s citatom

Kot je napisal Armin serija 10Fxxx je zaradi majhnega pomnilnika primerna pred vsem za programiranje v nižjih programskih jezikih (assembler), sploh, če iz mikrokontrolerja želimo izvleči čim več. Tukaj primer mojega daljinčka Wink
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Član
Član



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

PrispevekObjavljeno: Sre Dec 02, 2009 10:34 pm    Naslov sporočila:   Odgovori s citatom

V MicroC gledam primer v helpu za merjenje temperature z DS18x20 pa me muči tale stavek pri pretvarjanju temperature v znak:

text[1] = (temp_whole/10)%10 + 48

Če je npr. temp_whole=10.5, kaj dobim v polju text[1]?

Mi lahko kdo to malo razloži kako pridem do rezultata.

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



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sre Dec 02, 2009 10:39 pm    Naslov sporočila:   Odgovori s citatom

Kater tip je katera spremenljivka?
Za 10.5 rabiš float, nad katerim pa operator % nima ravno nekega smisla...

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NUFAN
Član
Član



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

PrispevekObjavljeno: Sre Dec 02, 2009 10:51 pm    Naslov sporočila:   Odgovori s citatom

char *text = "000.000";
char temp_whole;

Pripenjam program:

Koda:
const unsigned short TEMP_RESOLUTION = 9;

char *text = "000.000";
unsigned temp;

void Display_Temperature(unsigned int temp2write) {
  const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
  char temp_whole;
  unsigned int temp_fraction;

  // Poglej, če je temperatura negativna
  if (temp2write & 0x8000) {
    text[0] = '-';
    temp2write = ~temp2write + 1;
  }

  // extract temp_whole
  temp_whole = temp2write >> RES_SHIFT;

  // Pretvori temp_whole v znake
  if (temp_whole/100)
     text[0] = temp_whole/100  + 48;
  else
     text[0] = '0';

  text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  text[2] =  temp_whole%10     + 48;             // Extract ones digit

  // extract temp_fraction and convert it to unsigned int
  temp_fraction  = temp2write << (4-RES_SHIFT);
  temp_fraction &= 0x000F;
  temp_fraction *= 625;

  // Pretvori temp_fraction v zbake
  text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit
  text[5] = (temp_fraction/100)%10 + 48;         // Extract hundreds digit
  text[6] = (temp_fraction/10)%10  + 48;         // Extract tens digit
  text[7] =  temp_fraction%10      + 48;         // Extract ones digit

  // Ipiši temperaturo na LCD
  Lcd_Out(2, 5, text);
}

void main() {
  ANSEL  = 0;                                    // Nastavi AN pine kot digitalni V/I
  ANSELH = 0;
  Lcd_Init();                                    // Inicializacija LCD
  Lcd_Cmd(_LCD_CLEAR);                           // Pobriši LCD
  Lcd_Cmd(_LCD_CURSOR_OFF);                      // Kurzor OFF
  Lcd_Out(1, 1, " Temperature:   ");
  // Izpiši znak za stopinje celzija (°C)
  Lcd_Chr(2,13,223);  // Različni LCD-ji imajo tudi različno kodo za stopinje:
                      // 178 namesto 223

  Lcd_Chr(2,14,'C');

  //--- Glavna zanka
  do {
    //--- Branje temperature
    Ow_Reset(&PORTA, 5);                         // Onewire reset signal
    Ow_Write(&PORTA, 5, 0xCC);                   // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0x44);                   // Issue command CONVERT_T
    Delay_us(120);                               // Zakasnitev 120 us

    Ow_Reset(&PORTA, 5);
    Ow_Write(&PORTA, 5, 0xCC);                   // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0xBE);                   // Issue command READ_SCRATCHPAD

    temp =  Ow_Read(&PORTA, 5);
    temp = (Ow_Read(&PORTA, 5) << 8) + temp;

    //--- Pobriši in izpiši rezltat na LCD
    Display_Temperature(temp);

    Delay_ms(500);
  } while (1);

}

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



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Čet Dec 03, 2009 8:38 am    Naslov sporočila:   Odgovori s citatom

NUFAN je napisal/a:
V MicroC gledam primer v helpu za merjenje temperature z DS18x20 pa me muči tale stavek pri pretvarjanju temperature v znak:

text[1] = (temp_whole/10)%10 + 48

Če je npr. temp_whole=10.5, kaj dobim v polju text[1]?

Mi lahko kdo to malo razloži kako pridem do rezultata.


Kolikor sem "na peš" računal - na primeru številke 125, tale del: (temp_whole/10) iz 125 dobi ven 12 (char ne more imeti decimalnih vrednosti). potem se pa rezultat deli tako: %10, da dobiš ostanek, ki potem vrne rezultat 2. Tista 48 pa predstavlja ASCII znak "0", in ko našemu končnemu rezultatu 2 prišteješ 48, dobiš 50, kar predstavlja ASCII znak "2", ki ga potem lahko izpišeš na zaslon.

Skratka, tale račun iz neke številke izvleče vrednost desetic in ga pretvori v ASCII znak.

Pa vidim, da je ta funkcija še enostavnejša od tiste, ki jo jaz uporabljam. Si jo velja zapomniti Think
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Član
Član



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

PrispevekObjavljeno: Čet Dec 03, 2009 10:27 am    Naslov sporočila:   Odgovori s citatom

Ta primer za 125 mi je jasen. Kaj pa za 10.5?

temp_whole/10= 10.5/10=1, potem pa še 1%10= 9 + 48 pa dobim znak '9' Sad

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



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

PrispevekObjavljeno: Čet Dec 03, 2009 2:07 pm    Naslov sporočila:   Odgovori s citatom

Sem si že pogruntal Wink

Me pa še to zanima. Ko prevedem program mi za ANSEL = 0 in ANSELH = 0 javi napako Undeclared identifier 'ANSEL' in expression ter Undeclared identifier 'ANSELH' in expression. Kaj je to narobe?

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



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.66
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 03, 2009 2:24 pm    Naslov sporočila:   Odgovori s citatom

ANSEL in ANSEH sta PIC registra. Definirat moraš, kje se nahajata. Na žalost ti lahko povem le kako se to naredi v CCS.

Koda:
#define ANSEL 188
#define ANSEL 189


Torej definiraš kje se nahaja register s tem imenom.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NUFAN
Član
Član



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

PrispevekObjavljeno: Čet Dec 03, 2009 2:42 pm    Naslov sporočila:   Odgovori s citatom

Izbral sem napačen pic, ki teh registrov nima Brick wall 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
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Čet Dec 03, 2009 11:02 pm    Naslov sporočila:   Odgovori s citatom

NUFAN je napisal/a:
Ta primer za 125 mi je jasen. Kaj pa za 10.5?


temp_whole je definiran kot char, torej ima lahko vrednosti 0-255.
Celoštevične vrednosti.
10.5 ni celo število...

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NUFAN
Član
Član



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

PrispevekObjavljeno: Tor Dec 15, 2009 4:30 pm    Naslov sporočila:   Odgovori s citatom

V mikroC PRO for PIC pišem program za iskanje senzorjev in me zanima, zakaj mi za vrstico 54 javi tole napako:

Koda:

        Line  Message No.
error: 54     316                 Identifier expected, but '0' found   
error: 54     401                 ; expected, but '0' found   
error: 54     423                '}' expected ';' found   


To imam definirano na začetku programa. So takšne definicije sploh dovoljene v tem compilerju?

Koda:

#define DQ PORTB             // Port na katerega je priključen senzor
#define PIN 0                    // Pin na katerega je priključen senzor
#define DQ_REG TRISB     // Izbran register


Ta funkcija se nahaja pred glavnih programom (main).

Koda:

52:   void OW_Low()
53:  {
54:     DQ_REG.PIN = 0;       // 1-wire pin izhod
55:     DQ.PIN = 0;           // 1-wire pin = 0
56    }


To napako mi javi za vsako vrstico, kjer se pojavlja DQ_REG.PIN = 0, medtem ko DQ.PIN = 0 normalno prebavi. Verjetno gre za neveljavno sintakso, a kako naj drugače napišem.
Rad bi imel vse na začetku definirano tako, da ne bi bilo treba popravljati celotnega programa, če spremenim port ali pin na katerega so priključeni senzorji.

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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 1, 2, 3  Naslednja
Stran 1 od 3

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


Powered by phpBB © 2001, 2005 phpBB Group