 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 8:34 pm Naslov sporočila: Težava s PIC16F737 |
|
|
Pozdravljeni,
da ne odpiram nove teme z zelo zacetnimi tezavami s PICC programiranjem se obracam na vas kar tule.
Z mojim zacetniskim (ne)znanjem mi uspeva krmiliti izhode PICa, vhodov pa nikakor ne morem brati, oziroma jih spravit v funkcijo.
Moj testni programcek, narejen po nasvetih iz zacetka te teme zgleda tako:
(include vrstic in glave programa nisem kopiral ker v primeru izhodov deluje vse ok ..)
Koda: |
void main()
{
ANSEL = 0; //
CMCON = 7; // Turn off the comparators
TRISA = 0b11111111; //0=output, 1=input
TRISB = 0b00000000;
TRISC = 0b00001111;
while(1){
output_high(RC4);
if (input(RA7))
{
output_high(RB7);
}
else
{
output_low(RB7);
}
}
}
|
Problem je ze v compil-anju programa, saj mi pri ukazu ansel, cmcon in trisx javi napako.
btw.. delam s picom 16F737.
Hvala za vse nasvete in odgovore |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Jun 17, 2010 8:56 pm Naslov sporočila: |
|
|
1. kateri prevajalnik uporabljaš?
2. prilepi še program, kjer ti delujejo izhodi
3. morda ravno v glavi programa manjka bistven del....
Glede na to, pa da uporabljaš popolnoma drug PIC lahko tudi novo temo odpreš  |
|
Nazaj na vrh |
|
 |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 9:18 pm Naslov sporočila: |
|
|
bungee je napisal/a: |
1. kateri prevajalnik uporabljaš?
2. prilepi še program, kjer ti delujejo izhodi
3. morda ravno v glavi programa manjka bistven del....
Glede na to, pa da uporabljaš popolnoma drug PIC lahko tudi novo temo odpreš  |
Prevajalnik je PCWH compiler.
Program z izhodi je kar direktno v main napisana vrstica output_high(RB0);
glava programa je kopirana iz enega drugega primera in je taksna:
#include <16F767.h>
#fuses INTRC, NOWDT, NOPROTECT, NOMCLR, NOPUT
#use delay(clock=4000000)
#define RA0 PIN_A0
#define RA1 PIN_A1
#define RA2 PIN_A2
.....
#define RC7 PIN_C7 |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Čet Jun 17, 2010 9:38 pm Naslov sporočila: |
|
|
CCS ima definirane funkcije in se ni treba jajcat v stilu REGISTER=VREDNOST.
Lahko pa tudi to počneš, če hočeš imet asembler s C sintakso... _________________ Tule nisem več aktiven.
Nazadnje urejal/a gumby Čet Jun 17, 2010 9:43 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
jabcek Član

Pridružen-a: Pet 14 Nov 2008 20:26 Prispevkov: 40 Aktiv.: 0.20 Kraj: Liboje
|
|
Nazaj na vrh |
|
 |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 9:50 pm Naslov sporočila: |
|
|
bi lahko kdo kar napisal tak cist osnovni programcek za vklop izhoda ce je nek vhod na 1 prosim. Se mi zdi da je vsaka verzija teh compilerjev z drugacnimi ukazi... |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Jun 17, 2010 9:58 pm Naslov sporočila: |
|
|
Evo, pri CCS prevajalniku to narediš takole:
Koda: |
#include <16F767.h>
#device adc=8
#FUSES NOWDT, INTRC_IO, PUT, NOPROTECT, NOBROWNOUT, BORV20, NOMCLR, NODEBUG, NOFCMEN, NOIESO, BORSEN
#use delay(clock=8000000)
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ|OSC_TIMER1);
while(1)
{
if (input(Pin_A7)) output_high(Pin_B7);
else output_low(pin_b7);
}
} |
Za smer portov ti skrbi prevajalnik sam.
Če boš vseeno dodal še kakšen ukaz med pogoje lahko to izgleda tudi takole:
Koda: |
if (input(Pin_A7))
{
output_high(Pin_B7);
}
else
{
output_low(pin_b7);
} |
|
|
Nazaj na vrh |
|
 |
jabcek Član

Pridružen-a: Pet 14 Nov 2008 20:26 Prispevkov: 40 Aktiv.: 0.20 Kraj: Liboje
|
Objavljeno: Čet Jun 17, 2010 10:04 pm Naslov sporočila: |
|
|
v microchipovem MPLAB-u in HI-TECH compilerju
Koda: |
#include <pic.h>
#define STIKALO1 RB4 //(PORTB&0x10)
#define STIKALO2 RB5 //(PORTB&0x20)
char a;
void inicializacija(void)
{
TRISD = 0b00000000; // Vsi prikljueki kot izhodi
PORTD = 0b00000000; // Na vse izhode postavimo
TRISB = 0b00110000; // Določimo vhoda
}
int main()
{
inicializacija(); //inicializirajmo potrebno periferijo
a=0;
while (1)
{
PORTD=a;
if(!STIKALO1)
{
while (!STIKALO1){};
a=a+1; //Povečaš a
}
else if(!STIKALO2)
{
while (!STIKALO2){};
a=a-1; //Zmanjšaš a
}
}
} |
|
|
Nazaj na vrh |
|
 |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 10:15 pm Naslov sporočila: |
|
|
tnx, sem skopiral to kodo in se vidi da vhodi delujejo. Vendar se pa dogaja se to da namesto da bi se izhodi pri else delu ugasnili, utripajo z neko visoko frekvenco, tako kot da bi se v naslednjem ciklu programa nazaj vklopli. Morda potrebna nastavitev kakih pull up ali pull down internih uporov? |
|
Nazaj na vrh |
|
 |
frenki Moderator



Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6732 Aktiv.: 28.42 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Čet Jun 17, 2010 10:21 pm Naslov sporočila: |
|
|
taubek je napisal/a: |
... da ne odpiram nove teme ... |
O tem smo enkrat že debatirali. In mimogrede ... a veš da se na začetku stavka uporablja velike začetnice? Pa da slovenski jezik pozna tudi znake kot so ČŠŽ?
Tole je zadnje opozorilo na to temo. Naslednji prispevek, ki ne bo v skladu z dogovorjenimi pravili in standardi leti ne glede na vsebino med smeti. Tole velja zate in ostale, ki preizkušate meje tolerance.
Lp, Frenki |
|
Nazaj na vrh |
|
 |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 10:31 pm Naslov sporočila: |
|
|
Pardon, frenki se opravičujem za pravopisne napake in neodprto novo temo.
Jabcek, kodo sem spremenil in namesto output_high (RB7) napisal output_b(0x80), namesto output_low pa output_b(0x00). Zadeva sedaj deluje ok za vse ostale izhode ki jih trenutno uporabljam, na RB7 pa LED se vedno utripa in ne ugasne.
Mi pa ne da na vse izhode 5V ampak na nekatere ja na nekatere pa manj. Mogoce se kak predlog glede tega?
Sicer pa hvala za primerček glede branja vhodov. |
|
Nazaj na vrh |
|
 |
jabcek Član

Pridružen-a: Pet 14 Nov 2008 20:26 Prispevkov: 40 Aktiv.: 0.20 Kraj: Liboje
|
Objavljeno: Čet Jun 17, 2010 10:41 pm Naslov sporočila: |
|
|
Nekateri porti so narejeni tako, da nimajo na vseh pinih dovoljenih vhodov oz. izhodov (ponekod jih moreš ročno nastavit, ponekod pa jih sploh ne moreš).
Pri meni, kolikor sem meril, sem imel vedno padce napetosti tam kjer sem imel gor diode. Brez diod pa je bilo 5v.
Sicer pa za diode tako ali tako ne potrebuješ 5v. |
|
Nazaj na vrh |
|
 |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 10:54 pm Naslov sporočila: |
|
|
jabcek je napisal/a: |
Nekateri porti so narejeni tako, da nimajo na vseh pinih dovoljenih vhodov oz. izhodov (ponekod jih moreš ročno nastavit, ponekod pa jih sploh ne moreš).
Pri meni, kolikor sem meril, sem imel vedno padce napetosti tam kjer sem imel gor diode. Brez diod pa je bilo 5v.
Sicer pa za diode tako ali tako ne potrebuješ 5v. |
Več diod mam proženih preko tranzistorjev ki se ne odprejo popolnoma če ni na njih vsaj 5V.
Ta isti sistem sem uporabljal že pred tem poskušanjem z vhodi. Sem mel varjante raznih knightriderjev, ki so se časovno izvajale ena za drugo. Za učenje programiranja in malo igranja je bilo to ok. Zdaj bi pa rad malo nadgradil svoje znanje tako da bi z večstopenjskim stikalom izbiral funkcijo utripanja LED in potem počasi naprej koliko bo pač čas dopuščal..
Izhodna napetost na pinih je okrog 3,7V namesto 5V. Taksna napetost mi pa odpre tranzistor namesto na 12V na približno 8V. |
|
Nazaj na vrh |
|
 |
jabcek Član

Pridružen-a: Pet 14 Nov 2008 20:26 Prispevkov: 40 Aktiv.: 0.20 Kraj: Liboje
|
Objavljeno: Čet Jun 17, 2010 11:00 pm Naslov sporočila: |
|
|
Pa uporabi tranzistorje, ki potrebujejo manjšo napetost. |
|
Nazaj na vrh |
|
 |
taubek Član


Pridružen-a: Čet 21 Feb 2008 0:37 Prispevkov: 174 Aktiv.: 0.83 Kraj: Malecnik pri MB
|
Objavljeno: Čet Jun 17, 2010 11:06 pm Naslov sporočila: |
|
|
ne vem zakaj v tem primeru nebi šlo s temi, če je pri časovnem zaporedju funkcij vse delalo ok... |
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|