|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mucek4 Član
Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 13.25 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Pon Apr 18, 2011 7:36 am Naslov sporočila: |
|
|
MarkoM je napisal/a: |
...to je moj zadnji fuš s pici, ker imajo IDE v totalnem k...., malo boljši notepad.... |
Si že poizkusil Mplab X? Sicer je še v beta fazi ampak dela prav lepo.
|
|
Nazaj na vrh |
|
|
MarkoM Član
Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 13.18 Kraj: Lovrenc na P.
|
Objavljeno: Pon Apr 18, 2011 8:46 am Naslov sporočila: |
|
|
Ne, nisem. Mogoče bom nazaj vzel, da sem rekel, da je zadnji fuš s pici. Imam namreč še večjo zalogo raznoraznih 18f krmilnikov. Za kakšno malo stvar so dobri, kjer ni veliko programiranja. Drugače pa zdaj večinoma delam s cortexi in keilom, je le amerika proti mplabu, če prav bi lahko še boljši bil.
|
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.67 Kraj: Yogyakarta
|
Objavljeno: Pon Apr 18, 2011 7:42 pm Naslov sporočila: |
|
|
ja hvala bogu,
končno so nardili IDE kot se spodobi v NetBeans
že prej sem namreč včasih fajle tipkal v C++ netbeans-u
_________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.37 Kraj: Celje- Dobrna
|
Objavljeno: Ned Apr 08, 2012 10:42 am Naslov sporočila: |
|
|
Spet bom jaz malo težil.
Izdelujem svojo verzijo MPGuino, bi bo delovala na PIC-u. Sam program bo dokaj enostaven za napisati. Muči me samo vključitev podprograma za funkcije LCD-ja. Našel sem zelo dobro napisan driver za LCD.
LINK za driver: http://www.ccsinfo.com/forum/viewtopic.php?t=24661
Zdaj problem je ta, da dobi tale error: Error 128 "flex_lcd.c" Line 28(1,43): A #DEVICE required before this line
Sem malo googlal in sem našel tole temo: LINK Mislim, da je rešitev v tej temi, ampak ne razumem kaj točno moram narediti.
Uporabljam CCS in mplab.
Hvala vnaprej za odgovore!
EDIT: Sem rešil problem. Pod "source files" v mplabu mora biti samo glavni program. Podprogrami morajo biti v "other files"
A bi še koga zinamil tale "potovalni računalnik" ? Avto mora imeti el. vbrizg in el. senzor hitrosti.
Koda: |
#include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 4000000)
#include "flex_lcd.c"
//==========================
void main()
{
lcd_init(); // Always call this first.
lcd_putc("\fHello World\n");
lcd_putc("Line Number 2");
while(1);
}
|
Koda: |
// flex_lcd.c
// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver. Change these
// pins to fit your own board.
#define LCD_DB4 PIN_D0
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_D2
#define LCD_DB7 PIN_D3
#define LCD_E PIN_A1
#define LCD_RS PIN_A3
#define LCD_RW PIN_A2
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.
#define USE_LCD_RW 1
//========================================
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note: !! converts an integer expression
// to a boolean (1 or 0).
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));
delay_cycles(1);
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine. For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.
#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3
retval = 0;
output_high(LCD_E);
delay_cycles(1);
retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);
output_low(LCD_E);
return(retval);
}
#endif
//---------------------------------------
// Read a byte from the LCD and return it.
#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;
output_high(LCD_RW);
delay_cycles(1);
high = lcd_read_nibble();
low = lcd_read_nibble();
return( (high<<4) | low);
}
#endif
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif
if(address)
output_high(LCD_RS);
else
output_low(LCD_RS);
delay_cycles(1);
#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif
output_low(LCD_E);
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//----------------------------
void lcd_init(void)
{
int8 i;
output_low(LCD_RS);
#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif
output_low(LCD_E);
delay_ms(15);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(5);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
// If the R/W signal is not used, then
// the busy bit can't be polled. One of
// the init commands takes longer than
// the hard-coded delay of 60 us, so in
// that case, lets just do a 5 ms delay
// after all four of them.
#ifndef USE_LCD_RW
delay_ms(5);
#endif
}
}
//----------------------------
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//-----------------------------
void lcd_putc(char c)
{
switch(c)
{
case '\f':
lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n':
lcd_gotoxy(1,2);
break;
case '\b':
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);
break;
}
}
//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;
lcd_gotoxy(x,y);
// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));
output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);
return(value);
}
#endif |
[/code][/url]
|
|
Nazaj na vrh |
|
|
Peter123 Član
Pridružen-a: Tor 13 Jan 2009 15:34 Prispevkov: 1366 Aktiv.: 7.35 Kraj: Lj.
|
Objavljeno: Ned Apr 08, 2012 7:34 pm Naslov sporočila: |
|
|
@vitez93
Tudi mene bi zanimal tak računalnik, vendar na osnovi komunikacije K in L oziroma OBD2 protokola.
Kot vem so vsi podatki že v CPU ampak jih je potrebno brati in prikazovati.
|
|
Nazaj na vrh |
|
|
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.37 Kraj: Celje- Dobrna
|
Objavljeno: Pon Apr 09, 2012 1:01 pm Naslov sporočila: |
|
|
Glup CCS prevajalnik.
Ene pol leta nisem že pisal C programa za mikrokrmilnike in ko sem zdaj pisal mi je bilo logično, da mora biti tako:
Koda: |
if (PIN_B0 == 0)
{
.
.
.
}
|
In se kako urco čudim zakaj hudič ne dela. In grem pogledat en star program in vidim, da CCS hoče imeti to tako:
Koda: |
if (INPUT(PIN_B0) == 1)
{
.
.
.
}
|
@Peter123
Mogoče ti tole kej pomaga: http://code.google.com/p/opengauge/wiki/OBDuino32K
Lp, Robi
|
|
Nazaj na vrh |
|
|
hahalolek Član
Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.18 Kraj: Domžale
|
Objavljeno: Čet Apr 19, 2012 7:04 pm Naslov sporočila: |
|
|
Probam sestaviti program kjer bi ti ob pritisku tipke samo +1 ali -1 spremenilo vrednost. Ubistvu bi moral za +5, 5x pritisniti tipko.
Mi lahko kdo pomaga?
_________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.67 Kraj: Yogyakarta
|
Objavljeno: Čet Apr 19, 2012 11:07 pm Naslov sporočila: |
|
|
hahalolek je napisal/a: |
Probam sestaviti program kjer bi ti ob pritisku tipke samo +1 ali -1 spremenilo vrednost. Ubistvu bi moral za +5, 5x pritisniti tipko.
Mi lahko kdo pomaga? |
Pokazes program ki ga imas sedaj?
Predvidevam da ti sedaj zletijo stevilke kot bi ga 100x pritisnil?
Drugace sem pa ravno v sourceforge posobil kodo za merilec tlaka.
http://sourceforge.net/p/mx12005/code/ci/bf3d4cb93a586b833f5e9e1a38277b866e530621/tree/main.c
Tukaj si lahko ogledas primer za tipke cisto spodaj v kodi kako je narejeno ce ti ustreza.
_________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
hahalolek Član
Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.18 Kraj: Domžale
|
Objavljeno: Pet Apr 20, 2012 7:10 am Naslov sporočila: |
|
|
Kakor sem jaz znal prebrati ptogram se ti ce tipko drzis potem skos povecuje.
Rad bi pa naredip brez delayev ker imam se 7segmente displaye za krmilit.
_________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
|
Peter123 Član
Pridružen-a: Tor 13 Jan 2009 15:34 Prispevkov: 1366 Aktiv.: 7.35 Kraj: Lj.
|
Objavljeno: Pet Apr 20, 2012 7:24 am Naslov sporočila: |
|
|
7 segmentni prikazovalnik krmili z pomočjo interuptov in ne bo problema, lahko boš uporabil delaye za vse ostale funkcije.
|
|
Nazaj na vrh |
|
|
hahalolek Član
Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.18 Kraj: Domžale
|
Objavljeno: Pet Apr 20, 2012 7:46 am Naslov sporočila: |
|
|
Ok hvala za ta odgovor. Sem mislil da delay ustavi tudi interupt.
_________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.67 Kraj: Yogyakarta
|
Objavljeno: Pet Apr 20, 2012 8:45 am Naslov sporočila: |
|
|
imam jaz tudi z interupti,
samo je rutina za izpis displeyev v glavni zanki ker se tudi ADC vrednosti osvezijo v njej.
Poleg tega normalni pritiski tipk ne motijo prikaza.
Imas pa tudi opcijo tipke brat z interuptom ko se spremeni vrednost na njih.
V tem primeru ne rabis delayev ker se sprozi samo pri prehodu iz 0 v 1 recimo
_________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
matejmihelcic Član
Pridružen-a: Sob 14 Apr 2012 10:32 Prispevkov: 16 Aktiv.: 0.11 Kraj: Grahovo
|
Objavljeno: Čet Apr 26, 2012 9:48 pm Naslov sporočila: |
|
|
sicer ni v c-ju, je pa ena rešitev brez interuptov, ko pritisneš tipko se števec poveča program pa skoči iz zanke šele ko tipko spustiš
Opis: |
|
Download |
Ime datoteke: |
tipka.txt |
Velikost datoteke: |
150 Bytov |
Downloadano: |
12 krat |
|
|
Nazaj na vrh |
|
|
hahalolek Član
Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.18 Kraj: Domžale
|
Objavljeno: Tor Jun 26, 2012 8:54 pm Naslov sporočila: |
|
|
Zakaj mi ta funkcija za branje tipke, da bi povečal samo za +1 dela v preprostem programu, v bolj kompliciranem z interrupti pa ne?
Koda: |
if(PORTD.F0==1 && t==0){
Delay_ms(50);
t=1;
count++;
}
if(PORTD.F0==0 && t==1){
t=0;
} |
_________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
|
Umnik Član
Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.30 Kraj: Novo mesto
|
Objavljeno: Tor Jun 26, 2012 10:18 pm Naslov sporočila: |
|
|
hahalolek je napisal/a: |
Zakaj mi ta funkcija za branje tipke, da bi povečal samo za +1 dela v preprostem programu, v bolj kompliciranem z interrupti pa ne? |
Glede na napisano, ni mogoče podati odgovora. Potrebno je povedati še, kako sta deklarirani spremenljivki "t" in "count", ter kaj počne funkcija Delay_ms(...).
Oz. mogoče bom zadel: tisto spremenljivko, ki jo uporabljaš tudi v interruptu, deklariraj kot "volatile".
|
|
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: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|