|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
alex007 Član
Pridružen-a: Pon 29 Dec 2003 0:19 Prispevkov: 56 Aktiv.: 0.25 Kraj: Sevnica
|
Objavljeno: Tor Jun 27, 2006 6:03 pm Naslov sporočila: mikroC |
|
|
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 |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.60
|
Objavljeno: Sre Jun 28, 2006 9:59 am Naslov sporočila: |
|
|
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 |
|
|
tomazek Član
Pridružen-a: Sre 27 Apr 2005 12:33 Prispevkov: 14 Aktiv.: 0.06
|
Objavljeno: Sob Dec 09, 2006 12:15 pm Naslov sporočila: |
|
|
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 |
|
|
IR ELECTRONIC(ARROW) Član
Pridružen-a: Sre 06 Dec 2006 10:08 Prispevkov: 47 Aktiv.: 0.22 Kraj: Ljubljana
|
Objavljeno: Sob Dec 09, 2006 1:47 pm Naslov sporočila: |
|
|
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 |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14558 Aktiv.: 65.20 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Dec 09, 2006 2:00 pm Naslov sporočila: |
|
|
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 _________________ lp
Silvo |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Sre Dec 02, 2009 10:34 pm Naslov sporočila: |
|
|
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 |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.62
|
Objavljeno: Sre Dec 02, 2009 10:39 pm Naslov sporočila: |
|
|
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 |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Sre Dec 02, 2009 10:51 pm Naslov sporočila: |
|
|
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 |
|
|
lojzek Član
Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3356 Aktiv.: 16.94
|
Objavljeno: Čet Dec 03, 2009 8:38 am Naslov sporočila: |
|
|
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 |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Čet Dec 03, 2009 10:27 am Naslov sporočila: |
|
|
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' _________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Čet Dec 03, 2009 2:07 pm Naslov sporočila: |
|
|
Sem si že pogruntal
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 |
|
|
bungee Član
Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.62 Kraj: Ljubljana
|
Objavljeno: Čet Dec 03, 2009 2:24 pm Naslov sporočila: |
|
|
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 |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Čet Dec 03, 2009 2:42 pm Naslov sporočila: |
|
|
Izbral sem napačen pic, ki teh registrov nima _________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.62
|
Objavljeno: Čet Dec 03, 2009 11:02 pm Naslov sporočila: |
|
|
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 |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Tor Dec 15, 2009 4:30 pm Naslov sporočila: |
|
|
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 |
|
|
|
|
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: 85 dni
Powered by phpBB © 2001, 2005 phpBB Group
|