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 

Ali kdo uporablja PICC v MPLABU?

 
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
discovery
Član
Član



Pridružen-a: Sre 15 Mar 2006 10:59
Prispevkov: 12
Aktiv.: 0.05

PrispevekObjavljeno: Pet Apr 28, 2006 3:47 pm    Naslov sporočila:  Ali kdo uporablja PICC v MPLABU? Odgovori s citatom

Pozdravljeni!

Zanima me ce kdo programira z c umestnikom v Mplabu? Sam delam samo z to varijanto, tako da asemblerja ne lih stekam-oz. se nisem niti poglabljal.

Ce kdo uporablja picc bi prosil ce mi lahko pomaga. Ce prav stekam ukaz

data = input_b();

Prebere 8 bitno vrednost na portu B. Zanima me ce ima kdo idejo kako bi prebral samo 7 bitov in bi 8. ostal za output? porta A in C imam prav tako zasedena. Uporabljam pa 16f876.

Kaj pa ce bi bral posamezne bite...Se pravi 7 spremenljivk in vsaka prebere svoj bit, kako bi jih lahko zlozil v byte?

Ze v naprej hvala!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pet Apr 28, 2006 3:54 pm    Naslov sporočila:   Odgovori s citatom

Uh ... kaze, da "ne stekas" niti osnov programiranja v C-ju, niti slovenscine ali forumskih pravil Sad

Ce input_b() prebere osem bitov, potem bo input_b() & maska (kjer je maska 1 << stevilka bita) vrnil 7-bitno vrednost, en bit bo pa nic, ker njegova vsebina ne bo relevantna). Npr. ce je spodnjih 7 bitov vhod, osmi pa izhod, potem bi slo takole:

Koda:
sedembitna_vrednost = input_b() & 0x80


Ce morajo biti vrednosti na vsak nacin stisnjene skupaj (torej ce recimo manjka 3. bit, potem bi bili v bitih 0-1 originalni vrednosti, v 2-6 pa vrednosti bitov 3-7 iz porta), potem je resitev podobna (z eno dodatno spremenljivko).

Da bi vrednost posameznega bita spravil v drugo spremenljivko, bi uporabil podobno metodo:

Koda:
bitN = input_b() >> (N - 1) & 1


kjer je N recimo 1 (1. bit) do 8 (8. bit) oziroma brez - 1, ce je N stevilka bita (0-7).

Ne bo ti padla krona z glave, ce se potrudis najprej nauciti vsaj minimalne osnove, potem pa preides na konkretno aplikacijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
discovery
Član
Član



Pridružen-a: Sre 15 Mar 2006 10:59
Prispevkov: 12
Aktiv.: 0.05

PrispevekObjavljeno: Pet Apr 28, 2006 4:03 pm    Naslov sporočila:   Odgovori s citatom

Hvala za odgovor in hvala za opozorila!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
snow
Član
Član



Pridružen-a: Tor 27 Dec 2005 14:02
Prispevkov: 341
Aktiv.: 1.44
Kraj: Ljubljana || Velenje

PrispevekObjavljeno: Pet Apr 28, 2006 7:04 pm    Naslov sporočila:   Odgovori s citatom

Sokrat a ni za ohranitev spodnjih sedem bitov narediti AND z 0x7F (oziroma negiran 0x80)?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pet Apr 28, 2006 7:45 pm    Naslov sporočila:   Odgovori s citatom

Rolling Eyes Groza ... seveda je Brick wall Tako mi je sel na jetra tisti "ne stekam", da sem se ukvarjal z vsem drugim, samo z zapisanim izrazom ne, in sem ustrelil kozla Confused
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
discovery
Član
Član



Pridružen-a: Sre 15 Mar 2006 10:59
Prispevkov: 12
Aktiv.: 0.05

PrispevekObjavljeno: Sre Maj 03, 2006 3:54 pm    Naslov sporočila:   Odgovori s citatom

Torej projekt, ki ga sedaj delam, je "branje" 7 segmentnega prikazovalnika voltmetra in ko stevke na le tem mirujejo, bi rad, da se mi prizge ledica. Zaenkrat bi rad bral stotice in desetice, kasneje pa se enice. Prvo sem bral vsak bit posebej in ga primerjal z zakasnitvijo z novim stanjem bita. Stvar mi je delovala. Zaradi nadalnjega razvoja programa pa zelim brati vseh 7 bitov v eni besedi.
Sedaj sem napisal tak program:

#if defined(__PCM__)
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)

#elif defined (__PCH__)
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#endif

void main() {


int vhod_b, vhod_c, old_vhod_b, old_vhod_c;
int i, j;


while (TRUE)

{
delay_ms (500);
set_tris_b(0x7F);
set_tris_c(0x7F);
vhod_b = input_b() & 0x7F;
vhod_c = input_c() & 0x7F;

if (vhod_b==old_vhod_b)
i=1;
else
i=0;
if (vhod_c==old_vhod_c)
j=1;
else
j=0;

if (i==1 && j==1)
output_high (PIN_B7);
else
output_low (PIN_B7);

old_vhod_b=vhod_b;
old_vhod_c=vhod_c;

}
}

Nekaj imam narobe z branjem, ker tudi ce poizkusim, da mi namesto setiranja in resetiranja i-ja in j-ja, direktno setira in resetira PIN_B7 in PIN_C7, mi ne deluje.
Ali moram za branje besede se kaj definirati, razen spremenljivke in kateri so vhodi?

Hvala in lep pozdrav.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Sre Maj 03, 2006 4:25 pm    Naslov sporočila:   Odgovori s citatom

Ce je delovalo prej (ko te je zanimal samo en bit), potem mora delovati tudi zdaj, saj v obeh primerih preberes stanje celega 8-bitnega porta, le da za en bit ignoriras preostalih 7, tukaj pa preveris vseh 7 in ignoriras le tistega, kamor ni prikljuceno nic v zvezi s tvojim displayem.

Najbolj ocitna napaka v tvojem programu je, da na zacetku (pred vstopom v zanko) ne zapises vrednosti old_vhod_b in old_vhod_c.

Ce imas samo eno LEDico, potem ne potrebnujes kar dveh spremenljivok (i in j). Pravzaprav je tudi za 8 (osem) LEDic cisto dovolj ena enobajtna spremenljivka, pa se ta je v bistvu povsem odvec, saj bi pogoj lahko sestavil skupaj v eno vrstico in prepustil preracunavanje prevajalniku, na podlagi kombiniranega rezultata pa samo postavil ali ugasnil bit, ki upravlja LEDico.

Kodo za nastavitev smeri I/O porta lahko premaknes izven zanke (pred zanko), saj je v zanki povsem nepotrebna in samo nekoliko zavira izvajanje.

Moj predlog: spremeni program tako, da bo samo (brezpogojno) spreminjal stanje izbranega izhodnega pina, tako da bos zagotovo vedel ali ta del kode deluje ali ne. Sele ko bos to vedel, bo jasno, ali sploh pravilno pises na izhod.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
discovery
Član
Član



Pridružen-a: Sre 15 Mar 2006 10:59
Prispevkov: 12
Aktiv.: 0.05

PrispevekObjavljeno: Sre Maj 03, 2006 6:32 pm    Naslov sporočila:   Odgovori s citatom

Hvala Za vso pomoc! Napako sem resil.

Napaka sploh ni bila programska, ampak povrsnost pri sestavljanju hardverja.

L.p.
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
Stran 1 od 1

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


Powered by phpBB © 2001, 2005 phpBB Group