|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
hahalolek Član
Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.17 Kraj: Domžale
|
Objavljeno: Sre Jun 27, 2012 9:44 am Naslov sporočila: |
|
|
count je unsigned int,
t je pa bit.
Obadva sta na začetku definirana kot 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 |
|
|
bungee Član
Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.62 Kraj: Ljubljana
|
Objavljeno: Pon Jul 02, 2012 2:37 am Naslov sporočila: |
|
|
predvsem je vprašanje, kje definiraš spremenljivko |
|
Nazaj na vrh |
|
|
hahalolek Član
Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.17 Kraj: Domžale
|
Objavljeno: Pon Jul 02, 2012 12:30 pm Naslov sporočila: |
|
|
Sem že rešil.
Napaka je bila v kodi in ne definiranju spremenljivk. _________________ 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 |
|
|
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.34 Kraj: Celje- Dobrna
|
Objavljeno: Ned Dec 15, 2013 11:34 am Naslov sporočila: |
|
|
Imam čuden problem. Na dveh pinih generiram freqency sweep, frekvence od 10 hz do 250 hz in nazaj do 0. Najprej sem to počel na 16f887, je delalo v nulo. Potem sem naredil vezje z 16f610. Izhoda sta RC3 in RC2. Nekakšni pulzi so na izhodih, ampak je frekvenca in širina pulzov popolnoma naključna. Če sta izhoda RC5 in RA5, sta signala dobra. Torej sam algoritem deluje. Problem imam samo z nekaterimi pini na C portu. V simulatorju sem preveril register za komparator in je izključen. Kaj mi še ostane? |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.03 Kraj: Koroška-Mežica
|
Objavljeno: Pon Dec 16, 2013 12:10 pm Naslov sporočila: |
|
|
Simulator lahko zavaja, saj lahko po privzetem načinu ima izklopljene raznorazne periferije. Preveri, če si res izklopil komparatorje in AD pretvornike (če so na teh pinih). Drugače pa imaš v datasheetih bolj proti koncu ponavadi podane začetne vrednosti v vseh registrih. Nedavno me je ta podatek rešil več dni ugotavljanja banalne napake. _________________ return;
brake; |
|
Nazaj na vrh |
|
|
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.34 Kraj: Celje- Dobrna
|
Objavljeno: Pet Maj 02, 2014 1:34 pm Naslov sporočila: |
|
|
Še enkrat rabim vašo pomoč. Merim obrate motorja, ko so obrati konstantni, kaže super, skačejo ene 20 obratov gor dol ampak to je normalno. Ko pa dejanski obrati malo skočijo, pa pokaže preveč, potem se pa spet umirijo. Je tole programska napaka, ali je kaj druga krivo. Pulze merim na signalu injektorja, 12V pulzi preko zenner diode.
Koda: |
long long rpm;
long long rpm_avg;
int stevec1 = 0;
int rpm_t = 0;
long rpm_o = 0;
int i;
short r_bit=0;
#define stolpec1 0
#define stolpec2 1
#define stolpec3 2
#define stolpec4 3
#define rele PIN_E0
void lcd_load_custom_chars(void);
#use delay(clock = 4000000)
char str[6];
int32 x = 1234;
#INT_EXT
void prekinitev()
{
DISABLE_INTERRUPTS(global);
cas_rpm2=get_timer1();
cas_rpm=cas_rpm+cas_rpm2;
set_timer1(0);
rpm=(60000000/cas_rpm);
cas_rpm=0;
rpm_t=rpm/1000;
rpm_o=rpm%1000;
rpm_o=(rpm_o/200)-1;
if (rpm_t < 15) {
sprintf(str, "%06lu", rpm);
lcd_gotoxy(1,1);
lcd_putc(" ");
lcd_putc(" ");
lcd_putc(str[2]);
lcd_putc(str[3]);
lcd_putc(str[4]);
lcd_putc(str[5]);
if (r_bit==0 && rpm >= 2570)
{
output_high(rele);
r_bit=1;
}
if (r_bit==1 && rpm <= 2500)
{
output_low(rele);
r_bit=0;
}
rpm_avg=0;
stevec1=0;
}
clear_interrupt(INT_EXT);
ENABLE_INTERRUPTS(global);
return;
}
#INT_TIMER1
void prekinitev2()
{
DISABLE_INTERRUPTS(global);
cas_rpm=cas_rpm+65535;
clear_interrupt(INT_TIMER1);
ENABLE_INTERRUPTS(global);
return;
}
void main()
{
lcd_init(); // Always call this first.
lcd_load_custom_chars();
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
rpm=(0);
sprintf(str, "%06lu", rpm);
lcd_putc(" ");
lcd_putc(" ");
lcd_putc(str[2]);
lcd_putc(str[3]);
lcd_putc(str[4]);
lcd_putc(str[5]);
lcd_putc(" rpm");
lcd_gotoxy(14,1);
lcd_putc("RVe");
ENABLE_INTERRUPTS(global);
ENABLE_INTERRUPTS(INT_EXT);
ENABLE_INTERRUPTS(INT_TIMER1);
EXT_INT_EDGE(H_TO_L);
while(1);
{
}
}
const int8 lcd_custom_chars[] =
{
// Char Number 0 -- Up Arrow
0b00010000, // .....O..
0b00010000, // ....OOO.
0b00010000, // ...OOOOO
0b00010000, // .....O..
0b00010000, // .....O..
0b00010000, // .....O..
0b00010000, // .....O..
0b00010000, // ........
// Char Number 1
0b00011000, // .....O..
0b00011000, // ....OOO.
0b00011000, // ...OOOOO
0b00011000, // .....O..
0b00011000, // .....O..
0b00011000, // .....O..
0b00011000, // .....O..
0b00011000, // .....O..
// Char Number 2
0b00011100, // .....O..
0b00011100, // ....OOO.
0b00011100, // ...OOOOO
0b00011100, // .....O..
0b00011100, // .....O..
0b00011100, // .....O..
0b00011100, // .....O..
0b00011100, // .....O..
// Char Number 3 -- Blank
0b00011110, // .....O..
0b00011110, // .....O..
0b00011110, // .....O..
0b00011110, // .....O..
0b00011110, // .....O..
0b00011110, // .....O..
0b00011110, // .....O..
0b00011110, // .....O..
};
void lcd_load_custom_chars(void)
{
int8 i;
// Set address counter pointing to CGRAM address 0.
lcd_send_byte(0, 0x40);
// Load custom lcd character data into CGRAM.
// It can only hold a maximum of 8 custom characters.
for(i = 0; i < sizeof(lcd_custom_chars); i++)
{
lcd_send_byte(1, lcd_custom_chars[i]);
}
// Set address counter pointing back to the DDRAM.
lcd_send_byte(0, 0x80);
} |
|
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.65 Kraj: Yogyakarta
|
Objavljeno: Pet Maj 02, 2014 4:49 pm Naslov sporočila: |
|
|
ponavadije je dobro da naredis vsaj eno od teh 2 stvari
1. Povprecis meritve, recimo zadnje 4 ali zadnjih 10 meritev. S tem "zadusis" oscilacije
2. Zaokrocis rezultat na 100 ali 25. Tebi je brez pomena ali meritev pokaze 3437RPM ali pa ce to zaokrozis na 3425RPM ali celo kar na 3400RPM. _________________ 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.34 Kraj: Celje- Dobrna
|
Objavljeno: Pet Maj 02, 2014 4:50 pm Naslov sporočila: |
|
|
Ni bila napaka na programu, sem prestavil branje signala na vžig in je ok. Bom pa zaokrožil na 25. |
|
Nazaj na vrh |
|
|
marcc Član
Pridružen-a: Ned 29 Mar 2009 11:08 Prispevkov: 201 Aktiv.: 1.09 Kraj: Polzela
|
Objavljeno: Sob Jun 27, 2015 7:36 pm Naslov sporočila: |
|
|
Pozdravljeni!
Bi še želel svoj kozarček prisloniti, če ni panike.
Do zdaj sem uporabljal ASM jezik. Zaradi osebnih potreb sem preskočil na C jezik.
Uporabljam MPLABX 3.0 in XC8-1.34v compiler.
Prebral sem že nekaj gradiva, osnovne programe razumem (LED on/off) in lažje.... Problem se pojavi v knjižnjicah. V ASM jih nisem uporabljal, v C-ju so pa stalnice. Da bo bolj pregledno bom pisal kar v zaporednih številkah.
1- Če prav razumem je knjižnica kot nekakšen podprogram v ASM?
2- Ko zgeneriram source files dobim notr samo eno knjižnico in ta je #include <xc.h> Če razumem pravilno ta knjižnica vsebuje vse FSR registre za moj PIC?
4- Ali moram posebi dodati knjižnico za delay, LCD,......?
4- Knjižnice dodam v mapo libraries?
5- Zakaj imajo nekateri programi še dodano #include <pxxfxxxx.h>, če že imam xc.h?
Se opravičujem za takšna vprašanja, ampak sem zmeden. Lahko mi tudi daste kakšen link, kjer ste se vi naučili.
Najlepša hvala za pomoč in nasvete.
Lp, M |
|
Nazaj na vrh |
|
|
cero Član
Pridružen-a: Čet 31 Jul 2003 17:37 Prispevkov: 1179 Aktiv.: 5.27 Kraj: vipava
|
Objavljeno: Sob Jun 27, 2015 8:25 pm Naslov sporočila: |
|
|
Sicer ne vem konkretno kako je s picem, ampak za učenje c-ja lahko pogledaš tudi arduino tutoriale na web-u.
In ja knjižnice so že programi ki jih je nekdo spisal, da tebi ni treba pisati celih klobas, ampak napišeš samo par ukazov ki so preddefinirani v knjižnici.
Torej recimo če imaš vključeno knjižnico za lcd, lahko v programu zinicjaliziraš display samo z eno vrstico, prav tako lahko pišeš znake na display kar z enim ukazom "piši na lcd" |
|
Nazaj na vrh |
|
|
marcc Član
Pridružen-a: Ned 29 Mar 2009 11:08 Prispevkov: 201 Aktiv.: 1.09 Kraj: Polzela
|
Objavljeno: Ned Jun 28, 2015 6:16 pm Naslov sporočila: |
|
|
Hvala cero.
Ostalo sem/bom našel še drugje.
Lp, M |
|
Nazaj na vrh |
|
|
xfce Član
Pridružen-a: Čet 28 Jul 2011 8:06 Prispevkov: 521 Aktiv.: 3.34
|
Objavljeno: Pon Jun 29, 2015 10:31 am Naslov sporočila: |
|
|
marcc je napisal/a: |
Pozdravljeni!
5- Zakaj imajo nekateri programi še dodano #include <pxxfxxxx.h>, če že imam xc.h?
Lp, M |
xc.h izbere pravi pxxfxxxx.h za tvoj PIC, tako, da ni potrebno klicati pxxfxxxx.h
Koda: |
#include <xc.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include "variables.h"
#include "sensors.h"
#include "sUART.h" // simple UART
|
če kličeš knjižnice v isti datoteki kot je main.c, uporabiš narekovaje "", če pa kličeš standardne funkcije, ki so nekje shranjene pa uporabiš <>
Priporočam, da začetek prebereš kakšno knjigico o c jeziku, da imaš predstavo o celoti in potem podrobno naštudiraš zadeve, ki jih potrebuješ.
Nazadnje urejal/a xfce Čet Jul 02, 2015 1:03 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
marcc Član
Pridružen-a: Ned 29 Mar 2009 11:08 Prispevkov: 201 Aktiv.: 1.09 Kraj: Polzela
|
Objavljeno: Čet Jul 02, 2015 12:47 pm Naslov sporočila: |
|
|
Hvala,
meljem kot hrček literature
Lp, M |
|
Nazaj na vrh |
|
|
mvodicar Član
Pridružen-a: Pet 19 Jun 2015 15:32 Prispevkov: 27 Aktiv.: 0.25 Kraj: Grosuplje
|
Objavljeno: Ned Okt 04, 2015 6:08 pm Naslov sporočila: Množenje |
|
|
Zdravo!
imam problem pri množenju števil. Podatke ki jih dobim iz analognih vhodov bi rad pretvoril v °C. Vendar so rezultati pri množenju čisto napačni. Bi bil vesel če kdo od vas vidi napako.
Koda: |
int senzor1 ;
int senzor2 ;
int senzor3 ;
int pot ;
unsigned long temp1 = 0;
unsigned long temp2 = 0;
unsigned long temp3 ;
unsigned long zeljena ;
while (!AD1CON1bits.DONE);
senzor1 = ADC1BUF0 ;
senzor2 = ADC1BUF1 ;
senzor3 = ADC1BUF2 ;
pot = ADC1BUF3 ;
temp1 = (senzor1*323)/100;
temp2 = (senzor2*323)/100;
temp3 = (senzor3*323)/100;
zeljena = (pot*323)/100; |
|
|
Nazaj na vrh |
|
|
igor_k Član
Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 992 Aktiv.: 4.44 Kraj: Rače
|
Objavljeno: Ned Okt 04, 2015 7:17 pm Naslov sporočila: |
|
|
Spremenljivke senzor1(2,3) deklariraj kot unsigned long, ali pa pri računanju uporabi: (unsigned long)senzor1*323/100. |
|
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: 93 dni
Powered by phpBB © 2001, 2005 phpBB Group
|