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


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.07 Kraj: Divača (Kačiče)
|
Objavljeno: Pon Nov 13, 2006 10:29 am Naslov sporočila: |
|
|
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.
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Pon Nov 13, 2006 10:30 am Naslov sporočila: |
|
|
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..
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!
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Tor Nov 14, 2006 4:53 pm Naslov sporočila: |
|
|
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.
Opis: |
|
 Download |
Ime datoteke: |
tem.zip |
Velikost datoteke: |
24.2 KB |
Downloadano: |
5 krat |
|
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Nov 14, 2006 5:27 pm Naslov sporočila: |
|
|
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Tor Nov 14, 2006 6:22 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Tor Nov 14, 2006 7:12 pm Naslov sporočila: |
|
|
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Tor Nov 14, 2006 8:53 pm Naslov sporočila: |
|
|
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 |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Tor Nov 14, 2006 9:06 pm Naslov sporočila: |
|
|
Izvlečenje Pica iz podnožja med delovanjem, hmmm..., no ja... k sreči je Pic zelo trpežen kontroler .
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Tor Nov 14, 2006 9:29 pm Naslov sporočila: |
|
|
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Tor Nov 14, 2006 11:00 pm Naslov sporočila: |
|
|
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Tor Nov 14, 2006 11:05 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Sre Nov 15, 2006 12:31 am Naslov sporočila: |
|
|
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..
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.
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š..
LP GJ
|
|
Nazaj na vrh |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Sre Nov 15, 2006 11:52 am Naslov sporočila: |
|
|
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 |
|
 |
pr2501 Član

Pridružen-a: Sre 18 Okt 2006 10:40 Prispevkov: 28 Aktiv.: 0.12
|
Objavljeno: Ned Nov 19, 2006 3:32 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|