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 

Program mi občasno ne dela - PIC se izgubi
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.07
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Pon Nov 13, 2006 10:29 am    Naslov sporočila:   Odgovori s citatom

pr2501 !
GJ ti je dal predvsem zelo konkretna in kratka navodila kako napisati dober program.
Program, ki se ga bo dalo obdržati ves čas pod kontrolo.
Opazil je v tvoji kodi vse kar sem opazil tudi jaz. Ti pa si ga ostro zavrnil. Nimaš prav.
Sam priznavaš, da si začetnik na tem področju, iščeš pomoč, torej jo sprejmi, četudi je taka kot ti jo je GJ ponudil, saj generalno rešuje probleme, ki se ti bodo pri programiranju šele pojavili.

Programsko kodo v višjem jeziku ti je svetoval, ker je taka koda bolj pregledna in lažje razumljiva za človeka. Zato se v njej tudi lažje napiše algoritem, ki deluje pravilno. Če višjih jezikov ne poznaš, se posluži vsj orodja poznanega pod imenom "diagram poteka".

Če bi se rad prilagodil mikrokontrolerju, potem piši v strojnem jeziku (upam da ne), če pa bi se rad vsaj malo prilagodil človeku, potem naj bo assemblerski zapis prilagojen človeku. Izgleda naj urejeno, ker je tako lažje razumevanje dogajanja v programu. V tvojem primeru je oblika še posebej važna, saj gre kot praviš za tvojo diplomo (in pri meni 100% s tako packarijo nebi uspel!).

Citiram:
Po tvojem pisanju lahko sklepam, da sem porabil mesec dni brezveze, in si unčil hrbet in oči.
Lej mene prav malo zanima kako se lepo programira mene zanima zakaj moja koda včasih dela včasih pa ne.

Po tvojem, bi jaz v glavi, ki je obešena na strop, moral imeti dve luknje. Celo življenje že pišem programe. Pišem jih tako, da so napisani lepo ! Razlog je v tem, da jih moram čez nekaj časa gledati ponovno in takrat mi je marsikaj prihranjenega.

Citiram:
Točno vem kaj sem zložil skupaj.

Verjamem. Pa boš to vedel tudi čez eno leto? V tvojem programu skoraj ni komentarja, razen tisto, kar si s copy/paste prenesel od drugje.

Oprosti, ker bom tvojo temo malček odpeljal v drugo smer, a se mi za vse uporabnike foruma to zdi koristno.
V prilogi objevljam programček pisan za nek moj merilni instrument. Ne poglabljajte se vanj, saj je to brez HW težko. Služi naj kot primer, kako naj bi koda bila pisana.



S9.doc
 Opis:

Download
 Ime datoteke:  S9.doc
 Velikost datoteke:  17.55 KB
 Downloadano:  38 krat



Nazadnje urejal/a VolkD Pon Nov 13, 2006 10:37 am; skupaj popravljeno 7 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Pon Nov 13, 2006 10:30 am    Naslov sporočila:   Odgovori s citatom

Ojla..

Večino ti je že Darko povedal..

pr2501 je napisal/a:
Tudi to torej ni razlog za nedelovanje kode.


Ne vem..
Koda je tako nepregledno napisana, da je težko ugotoviti kaj si si ti predstavljal, da mora delati.
Recimo imena registrov, ki jih poimenuješ le z enim karakterem recimo z 'w' , ki pa ima celo že preddoločen pomen.

Če že nisi naredil programske simulacije rabiš vsaj flowchard.
Daj najprej uredi kodo tako, da jo bo lahko še kdo drugi gledal in razumel.
Recimo ime registra 'O_HI_LO_b_f' brez komentarja bolj malo pomeni.
Komentarji so slabi ali pa jih celo ni.
Pa vsaj kodo podpisuj enakomerno..
Enkrat uporabljaš velke črke drugič male za pisanje ukazov memonika..
Port B uporabljaš kot debugger oziroma prikaz stanja z LED???
Ukazi niso opisani!

pr2501 je napisal/a:
Programskih jezikov ne poznam.


Tole ti pa verjamem.. Confused

pr2501 je napisal/a:
Iz čega se razume da silim glavni program v ponovno inicjalizacijo.


Ahh.. sem narobe videl..
Labela _RESET je ponavadi pomeni nekaj čisto drugega..

pr2501 je napisal/a:
Po tvojem pisanju lahko sklepam, da sem porabil mesec dni brezveze, in si unčil hrbet in oči.

Če boš vregel puško v koruzo, verjetno res..

pr2501 je napisal/a:
Lej mene prav malo zanima kako se lepo programira mene zanima zakaj moja koda včasih dela včasih pa ne.


Eeee..
Brez tega pa ne gre..
Oziroma ne gre dolgo časa.. In pri tebi se je že ustavlo!Laughing

Kaj ti sploh ne dela?
Komunikacija ali program?

Možne napake..

Nikjer nisem zapazil, da preverjaš Overrun Error bit. Kar lahko pomeni, da ti komunikacija preneha, če pride do napake ti pa ga pozabiš zbrisati zastavico.

Watchdog imaš izklopljen/ ne uporabljaš! Zakaj?

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Tor Nov 14, 2006 4:53 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Možne napake..

Nikjer nisem zapazil, da preverjaš Overrun Error bit. Kar lahko pomeni, da ti komunikacija preneha, če pride do napake ti pa ga pozabiš zbrisati zastavico.

Watchdog imaš izklopljen/ ne uporabljaš! Zakaj?


Kako se uporablja Overrun Error bit in Watchdog (tajmer?) ?

V piponki sem ponovno poslal program s komentarji in blok diagrame poteka.

Regulacijo sem v simulatorju isprobal in mi dela.



tem.zip
 Opis:

Download
 Ime datoteke:  tem.zip
 Velikost datoteke:  24.2 KB
 Downloadano:  5 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Tor Nov 14, 2006 5:27 pm    Naslov sporočila:   Odgovori s citatom

Watch dog, če je vključen deluje tako, da vsake toliko časa sam od sebe pritisne na reset tipko mikrokontrolerja. V programu moraš vsake toliko časa resetirati watchdog timer. Če program pade v neko (neskončno) zanko, se reset watchdoga ne bo izvedel in bo ta zaradi tega pritisnil na reset tipko. Program se bo začel izvajati od začetka.

Watch dog ni narejen za reševanje šlampastega programiranja.

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Tor Nov 14, 2006 6:22 pm    Naslov sporočila:   Odgovori s citatom

Izgleda da se bo treba osredotočiti na branje iz MCu-ja.

Utemeljitev:
Ne morem videti kaka je vrednost temperature; samo recimo, ce mi dela ventilator (v trenutni situaciji) lahko s tem ko povisam vrednost za zeljeno temperaturo (v Hyper terminalu) vklopim grelec.
Torej lahko vnašam vrednosti novih parametrov v MCU in s tem spreminjam zahtevo po hlajenju ,oz. po gretju.
Iz tega sklpam da se berejo vrednosti pravilno. Nisem pa siguren , če se upošteva histereza (kar pa ni sedaj primaren problem (ali pa sploh ni problem)).
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 14, 2006 7:12 pm    Naslov sporočila:   Odgovori s citatom

pr2501 je napisal/a:
Kako se uporablja Overrun Error bit..?



Če slučajno pride do napake pri prenosu podatkov se ti postavi zastavica RCSTA, OERR, ki ti onemogoči nadaljno branje!

Kaj sedaj?
Zastavico programsko preverjaš in če je postavljena jo zbrišeš tako, da zbrišeš RCSTA, CREN in nakar ponovno postaviš RCSTA, CREN

Programsko nekako takole.. (pisano na pamet)
Koda:

;Preveri Overrun Error
        btfss    RCSTA, OERR
        bra      NiNapake
        bcf      RCSTA, CREN        ;Disables receiver
        bsf      RCSTA, CREN        ;Enables receiver
NiNapake


Ta del kode vstavi nekam kjer bo ciklično preverjal stanje RCSTA, OERR bita!

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Tor Nov 14, 2006 8:53 pm    Naslov sporočila:   Odgovori s citatom

MCU bere vredu (najbrž tudi vedno).
Pošiljanje iz MCU v PC je problematično.
Trenutno mi dela zopet v redu (vse).
V delovanje sem ga spravil zopet tako, da sem ga za en cas izvlekel iz vezja in poiskusil z enim drugim picom in sem ga nato zopet vstavil v vezje.
zacel je delovati in mi sedaj deluje vredu. Spreminjam si zeljeno vrednost in opazujem kako mi potem sledi spremembi. Spreminjam tudi histerezo in .... tudi njo upošteva.

Torej kaj je narobe (zakaj mi preneha pravilno delovati) ostaja še naprej enigma.

Kar se tiče kondenzatorjev (nasploh) se spomnem (nekaj površno), da so imeli to lasnost, da so se sami popravljali.
Samo ugibam.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Tor Nov 14, 2006 9:06 pm    Naslov sporočila:   Odgovori s citatom

Izvlečenje Pica iz podnožja med delovanjem, hmmm..., no ja... Confused k sreči je Pic zelo trpežen kontroler Wink.
Kaj pa, če ima preprosto slab stik na kakšnem pinu? Malo očisti pine s čistilnim alkoholom (iz prve pomoči) in palčko za ušesa. Pa poskusi tudi podnožje očistiti, a pazi, da ga ne deformiraš.
Nasploh preveri Vse spoje ploščice z zunanjim svetom, saj med izvlačenjem Pica pretreseš tudi te spoje.
LP, Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Tor Nov 14, 2006 9:29 pm    Naslov sporočila:   Odgovori s citatom

Ta del kode pa sem vseeno vstavil v zanko ker se začne obdelovati prispeli znak iz tipkovnice.

Sedaj pa pišem še dodatek, da mi ne bo treba paziti kaj tipkam.
Kodo, ki bo za znak ki nebo število ali pa ukazna črka zanemaril.


Citiram:
Koda:

;Preveri Overrun Error
btfss RCSTA, OERR
bra NiNapake
bcf RCSTA, CREN ;Disables receiver
bsf RCSTA, CREN ;Enables receiver
NiNapake


Mislim pa da je trenutek ko se lahko zahvalim za pomoč.
Še posebej pa hvala GJ.

S spoštovanjem
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Tor Nov 14, 2006 11:00 pm    Naslov sporočila:   Odgovori s citatom

Zgleda da ne bo šlo brez jetkanja.


Izpostavil bom naslednji problem. Mogoče ima gdo preprosto rešitev.

Postavil sem območje, ko naj se regulacija ne vrši. Z drugimi besedami: Histerezo oz. dovoljeno odstopanje pd željene vrednosti.
ker saem se skušal izogniti pogostemu preklapljanju grelca in ventilatorja.
Samo...

Kaj se sedaj dogaja:

Če imam temperaturo 45°c in postavim zahtevo za 50°c pri histerezi 2°c .
Se bo vklopil grelec (saj se mora) in bo grel do 48°c. zaradi vstrajnosti bo temperatura še malo rasla in nato padla nazaj na 48°c. 2°manj od željene (tolko koliko je histereza). In pol se bo zacelo preklapljat z visoko frekvenco med grelcem in ventilatorjem.

Skratka je zadeva praktično neuporabna. Kako se da rešiti ta problem?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Tor Nov 14, 2006 11:05 pm    Naslov sporočila:   Odgovori s citatom

Saj ni hujse skode ker uporabljam optokoplerje in se sploh nebi zadeva vidla, če nebi ma ishodih imel tudi ledice za kontrolo.

Ne pravzaprav res je nefunkcjonalno , ker jaz hočem vzdrževati tem.50°c ne pa 48°c.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Sre Nov 15, 2006 12:31 am    Naslov sporočila:   Odgovori s citatom

pr2501 je napisal/a:
Izpostavil bom naslednji problem. Mogoče ima gdo preprosto rešitev.

...

Skratka je zadeva praktično neuporabna. Kako se da rešiti ta problem?


Jeeep.. Wink

Zadovoljivo obladovnje regulacije ni preprosta stvar.

Nisi se niti toliko potrudil, da bi povedal, kaj naj bi regulator reguliral, no morada sem pa to spregledal. Laughing
Nisi povedal za koliko ti lahko največ odstopa temperatura.
Niti ne vemo kako hiter odziv imaš na merjenemu mediju.
Veš kakšen je odzivni čas temperaturnega tipala?
Niti ne vemo kako krmiliš grelec. Zgolj on/off. Ga krmiliš s trijaki? Kako drugače?
V katerem trenutku potrebuješ hlajenje z ventilatorjem?

Obstaja kar nekaj uporabnih načinov kako krmiliti, vendar morajo biti vsaj zgornji podatki znani!

Saj, jaz sem precej navajan brati misli, ampak malo bolj se pa pri pravopisu vseeno lahko potrudiš..Rolling Eyes

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Sre Nov 15, 2006 11:52 am    Naslov sporočila:   Odgovori s citatom

1.Zamenjal sem še vrstni red poganjanja izvršnih členov:

Sedaj imam:
regulation
btfss HEATE_VEN,0
call ventilate
btfsC HEATE_VEN,0 ; real biger than wish
call heat
return

Prej sem ime:
regulation
btfsC HEATE_VEN,0 ; real biger than wish
call heat
btfss HEATE_VEN,0
call ventilate
return

In mi sedaj deluje dosti bolše. (čeprav se mi je pri prvem pomiselku na to zadeva
zdela precej nekoristna sem vseeno probal)

2.Potem:
Iz glavne zanke sem izvlekel ven regulacijo. V glavni zanki sem pustil le kontrolo, če ni temperatura presegla kritično temperaturo in šele potem kličem regulacijo.

3.In sem še pred vsakim odštevanjem uvedel Brisanje Carry bita. (saj sem vedel, da je to pomembno...samo...)

Princip regulacije je upisan v blok shemi v zadnji priponki.
Edina sprememba je opisana v točki 2 tega posta.


Na žalost bom moral trenutno prekiniti moje delo.
Jutri odhajam na operacijo kolena. Grem, da mi zakrpajo poleg stranske (ki so mi jo že pri prvi operaciji) še prednjo vez.

Tako da se bom oglasil šele čez nekaj dni.

Potem bom poskušal izmeriti odziv na vklop grelca.
Za senzor uporabljam LM35. izvršne člene pa ulapljam preko optokoplerjev.

še enkrat se zahvaljujem in upam da bom tako uspešno sodelovanje nadaljevali v kratkem.

LP
Ivan
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pr2501
Član
Član



Pridružen-a: Sre 18 Okt 2006 10:40
Prispevkov: 28
Aktiv.: 0.12

PrispevekObjavljeno: Ned Nov 19, 2006 3:32 pm    Naslov sporočila:   Odgovori s citatom

Ponovnone berem pravih vrednosti v Hyper terminal.
Naveličal sem se. Šel bom na faks in s osciloskopom poskušal ugotoviti napako.


Naučil sem se simulirati prenos (komunikacijo) in ugotovil da je z delom programa za komunikacijo vse v redu. Uporabljam Stimulus controler(RCREG).

Nikakor pa ne morem simulirati vrednost na AN0 vhodu.
Potem sem poiskušal še Scl generator, oz. SCL workbook in v izbiri register selection nastavil za direktno pisanje v reg. ADRESL:
-ADRESL
-demand
-0000
-1
-adc.txt
-yes
-hex

Izpiše se naslednje:
ADC-W0001: Tad time is less than 1.60us
ADC-W0008: No stimulus file attached to ADRESL for A/D.

uporabljam 18f4455 brez zunanje ure:
_FOSC_HS_1H


Kako ali kaj moram narediti, da bom lahko simuliral neko vrednost v ADRESL.
Najraje bi se nučil asinhrono generirati različne vrednosti, tako da dokončam še regulacijski del programa. Usposobiti moram še alarem.
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 -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

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


Powered by phpBB © 2001, 2005 phpBB Group