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 

Programiranje PIC v C-ju!
Pojdi na stran Prejšnja  1, 2, 3 ... , 11, 12, 13  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
hahalolek
Član
Član



Pridružen-a: Sob 29 Maj 2010 11:49
Prispevkov: 199
Aktiv.: 1.18
Kraj: Domžale

PrispevekObjavljeno: Sre Jun 27, 2012 9:44 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



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

PrispevekObjavljeno: Pon Jul 02, 2012 2:37 am    Naslov sporočila:   Odgovori s citatom

predvsem je vprašanje, kje definiraš spremenljivko Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
hahalolek
Član
Član



Pridružen-a: Sob 29 Maj 2010 11:49
Prispevkov: 199
Aktiv.: 1.18
Kraj: Domžale

PrispevekObjavljeno: Pon Jul 02, 2012 12:30 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vitez93
Član
Član



Pridružen-a: Pet 19 Sep 2008 20:00
Prispevkov: 1018
Aktiv.: 5.37
Kraj: Celje- Dobrna

PrispevekObjavljeno: Ned Dec 15, 2013 11:34 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Pon Dec 16, 2013 12:10 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
vitez93
Član
Član



Pridružen-a: Pet 19 Sep 2008 20:00
Prispevkov: 1018
Aktiv.: 5.37
Kraj: Celje- Dobrna

PrispevekObjavljeno: Pet Maj 02, 2014 1:34 pm    Naslov sporočila:   Odgovori s citatom

Š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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.67
Kraj: Yogyakarta

PrispevekObjavljeno: Pet Maj 02, 2014 4:49 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vitez93
Član
Član



Pridružen-a: Pet 19 Sep 2008 20:00
Prispevkov: 1018
Aktiv.: 5.37
Kraj: Celje- Dobrna

PrispevekObjavljeno: Pet Maj 02, 2014 4:50 pm    Naslov sporočila:   Odgovori s citatom

Ni bila napaka na programu, sem prestavil branje signala na vžig in je ok. Bom pa zaokrožil na 25.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
marcc
Član
Član



Pridružen-a: Ned 29 Mar 2009 11:08
Prispevkov: 201
Aktiv.: 1.10
Kraj: Polzela

PrispevekObjavljeno: Sob Jun 27, 2015 7:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
cero
Član
Član



Pridružen-a: Čet 31 Jul 2003 17:37
Prispevkov: 1179
Aktiv.: 5.29
Kraj: vipava

PrispevekObjavljeno: Sob Jun 27, 2015 8:25 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
marcc
Član
Član



Pridružen-a: Ned 29 Mar 2009 11:08
Prispevkov: 201
Aktiv.: 1.10
Kraj: Polzela

PrispevekObjavljeno: Ned Jun 28, 2015 6:16 pm    Naslov sporočila:   Odgovori s citatom

Hvala cero.
Ostalo sem/bom našel še drugje.

Lp, M
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xfce
Član
Član



Pridružen-a: Čet 28 Jul 2011 8:06
Prispevkov: 521
Aktiv.: 3.36

PrispevekObjavljeno: Pon Jun 29, 2015 10:31 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
marcc
Član
Član



Pridružen-a: Ned 29 Mar 2009 11:08
Prispevkov: 201
Aktiv.: 1.10
Kraj: Polzela

PrispevekObjavljeno: Čet Jul 02, 2015 12:47 pm    Naslov sporočila:   Odgovori s citatom

Hvala,
meljem kot hrček literature Very Happy

Lp, M
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mvodicar
Član
Član



Pridružen-a: Pet 19 Jun 2015 15:32
Prispevkov: 27
Aktiv.: 0.25
Kraj: Grosuplje

PrispevekObjavljeno: Ned Okt 04, 2015 6:08 pm    Naslov sporočila:  Množenje Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 992
Aktiv.: 4.45
Kraj: Rače

PrispevekObjavljeno: Ned Okt 04, 2015 7:17 pm    Naslov sporočila:   Odgovori s citatom

Spremenljivke senzor1(2,3) deklariraj kot unsigned long, ali pa pri računanju uporabi: (unsigned long)senzor1*323/100.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno 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 Prejšnja  1, 2, 3 ... , 11, 12, 13  Naslednja
Stran 12 od 13

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


Powered by phpBB © 2001, 2005 phpBB Group