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 1, 2  Naslednja
 
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
pr2501
Član
Član



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

PrispevekObjavljeno: Ned Nov 12, 2006 6:33 pm    Naslov sporočila:  Program mi občasno ne dela - PIC se izgubi Odgovori s citatom

SPISAL SEM PROGRAM, KI MI VČASIH DELA IN VČASIH PA NE
Zanima me če se da iz spodnje kode razumeti kaj mi povzroča da se pic izgubi.?
Kodo sem predelal tako da so noter le zanke (call in goto)
Koda:



                 ORG   0x0000
                  goto Main      ;go to start of main code
                 ORG   0x0008
;_______________________________________________________________INTERRUPT______________________
int   
retfie
Main            
INI
tibet                 
                 call ADC                 
                 call arrived_sign_from_PC
                 call subReal_wish          
            call sub_H_E ;                   
            btfsc DO_reg,0                 
                 call regulation               
                 btfsS DO_reg,0   
       CALL _RESET   
                 call sub_real_critic         
                 BTFSC alarm,0
                 CALL  alarm_ON                      
     NOP                   
goto tibet
;==========================================================================================
ADC   
RETURN
;___________________________________________________________________
;_____________________________________________________________
;______________________________________________________
arrived_sign_from_PC
              btfsc       main_flag,0  ; Check for a new character
               call       sign         ; Did not find one go check again (or do other stuff)
return
;___________________________________________________________________________________
;______________________________________________________________________________   
sign   
bcf        main_flag,0     ; Clear flag bit so that we don't look at it again
CALL set_flag
call test_a_flag
return


set_flag;____________________________________________________________________set_flag
call set_in_w
call set_in_H
call set_in_c
call read_w_TEM
call read_Hysteresis
call read_c_TEM
call read_R_TEM
RETURN                   

set_in_w
return

set_in_H
return

set_in_c
return

read_w_TEM
return

read_Hysteresis
return

read_c_TEM
return

read_R_TEM
return


test_a_flag; _____________________________________________________test_a_flag
call   write_w
call   write_h
call   write_c
call  read_w
call   read_h
call   read_c
call  read_R                     
returN
 
write_w
call start_DIGIT_in
btfsS end_packet,0
goto wait
call BCDtoBin
wait
return

write_c
call start_DIGIT_in
btfss end_packet,0
goto wait1
call BCDtoBin
wait1
return

write_h
call start_DIGIT_in
btfss end_packet,0
goto wait2
call BCDtoBin
wait2
return

read_w
call    BinTObcd          
call    send
return

read_h          
call    BinTObcd           
call    send
return

read_c   
call    BinTObcd              
call    send
return

read_R 
call    BinTObcd          
call    send
return

;;_______________________________________________________________________WRITE INTO MCU
start_DIGIT_in;     
return   
BCDtoBin   
RETURN
;;_______________________________________________________________________READ FROM MCU
BinTObcd
RETURN

send   
return
;________________________________________________________________________________________
;_________________________________________________________________________________________
;__________________________________________________________________________________________
;REGULATION
sub_real_critic 
 RETURN

subReal_wish
 CALL    negativ     
 RETURN

negativ
 RETURN

sub_H_E
 RETURN

regulation
call heate
call ventilate
return

heate
return

ventilate
return

_RESET
RETURN

alarm_ON
return

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



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Ned Nov 12, 2006 6:58 pm    Naslov sporočila:   Odgovori s citatom

Če pričakuješ, da se bo nekdo za uro ali več poglobil v tvojo kodo, vsaj malo več napiši, kje se izgubi, to simuliraš ali [slovenščina je zame španska vas] v vezju, kaj sploh dela, ...
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
pr2501
Član
Član



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

PrispevekObjavljeno: Ned Nov 12, 2006 7:34 pm    Naslov sporočila:   Odgovori s citatom

Sedaj sem poslal kodo v celoti.
Poslal sem le zanke, ker mislim da je napaka nekje v povezovanju med glavno zanko in subrutinami.


reguliram temperaturo. Imam senzor grelec in ventilator.
Sestavil sem kodo, ki komunicira s Hiper terminalom.
Ko pošljem male črke: w(željena tem.),h(histereza,oz. dovoljeno odstopanje),c(kritična tem.), pomeni o da treba naslednje tri znake (številke)iz tipkovnice razvrstiti v dva registra za BCD v BIN pretvorbo. Pretvorjene vrednosti se potem uporabljajo v regulaciji.

Če pa napišem na tikovnici veliko črko W,H,C,R pomeni to branje iz MCU v Hiper terminal. Vrednosti najprej pretvorim v BCD in jih pošljem.


Kodo semsestavil iz posameznih blokov ki mi samostojno delujejo in sama koda
mi včasih deluje večinoma pa ne. Recimo učeraj zvečer sem jo pripravil do tega da je delovala, ko sem večkrat povlekel čip iz ležišča in ga potem vrniol nazaj pod napetostjo. Saj vem da to ni najbolj pametno početje ampak. Nevem več kaj storiti.

Priznati moram da imam še veliko lukenj v znannju programiranja.Zato prosim za pomoč.



Copy of Brazil.zip
 Opis:

Download
 Ime datoteke:  Copy of Brazil.zip
 Velikost datoteke:  6.18 KB
 Downloadano:  7 krat

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 12, 2006 7:39 pm    Naslov sporočila:   Odgovori s citatom

vidim da sem v prvem sporočilu poslal kodo dvakrat.
V drugem pa se nisem pravilno izjasnil kaj je v priponki.

Torej v priponki je celotna koda.
V prvem sporočilu pa samo zanke. (nažalost pa dvakrat)

Hvala

Ni se ti treba opravičevati, da si kodo poslal 2x, ampak imaš zgoraj desno gumb Uredi in enostavno popraviš. Sedaj sem jaz namesto tebe. aly.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Ned Nov 12, 2006 7:46 pm    Naslov sporočila:   Odgovori s citatom

Si slučajno poskusil z drugim PICem?
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
pr2501
Član
Član



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

PrispevekObjavljeno: Ned Nov 12, 2006 8:06 pm    Naslov sporočila:   Odgovori s citatom

Sem.
Večkrat sem izmenjal 2 pica med seboj.

Sploh pa imam eno vprašanje , kaj program lahko skače s klicanjem subrotin po mili volji ali so kakšna pravila.

Primer:

main
call 1
call 2

goto main

1
call 1a
call 1b
return

1a
call 1aa
call 1ab
return

1b
call 1ba
cal 1bb
return

1aa
call 1aaa
call 1aab
return


in v tem smislu naprej?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Djurodrljaca
Član
Član



Pridružen-a: Pet 19 Dec 2003 16:31
Prispevkov: 393
Aktiv.: 1.66
Kraj: Mengeš

PrispevekObjavljeno: Ned Nov 12, 2006 8:11 pm    Naslov sporočila:   Odgovori s citatom

Lahko, ampak mislim da ima ta PIC 32 nivojev oz ugnezdenih klicev.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



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

PrispevekObjavljeno: Ned Nov 12, 2006 8:12 pm    Naslov sporočila:   Odgovori s citatom

Ne more - omejitev je v globini in izvedbi stacka in ta je pri PICih mocno (in vnaprej) omejen. Obstaja prakticna meja, ki je odvisna od konkretnega PICa, ki ga uporabljas.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Djurodrljaca
Član
Član



Pridružen-a: Pet 19 Dec 2003 16:31
Prispevkov: 393
Aktiv.: 1.66
Kraj: Mengeš

PrispevekObjavljeno: Ned Nov 12, 2006 8:19 pm    Naslov sporočila:   Odgovori s citatom

Če se prav spomnim ima PIC za klice in prekinitve uporabljen HW stack, ki ima 31 nivojev (prej sem se zmotil za 1 nivo).
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: Ned Nov 12, 2006 9:04 pm    Naslov sporočila:   Odgovori s citatom

Mislim da nisem sel čez to mejo.
Kje se lahko sploh to vidi (pač na katerem nivoju si),?
pri uporabi MpLab simulatorja ?
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: Ned Nov 12, 2006 9:52 pm    Naslov sporočila:  Re: Program mi občasno ne dela - PIC se izgubi Odgovori s citatom

pr2501 je napisal/a:
SPISAL SEM PROGRAM, KI MI VČASIH DELA IN VČASIH PA NE
Zanima me če se da iz spodnje kode razumeti kaj mi povzroča da se pic izgubi.?
Kodo sem predelal tako da so noter le zanke (call in goto)


Ojla..

Sem le nahitro preletel tole solato.. Laughing
Še en, ki uporablja absolute MPLAB asm model namesto relocated MPLAB asm model.

Vidim, da si izklapljal opozorila prevajalnika Shocked , super še žal ti bo!
Razlog boš odkril, ko boš delal z večimi bankami, dokler pa imaš BSF register zmerom 0 bo pa delovalo.

Program je popolna zmeda..
Nekaj si zložil skupaj in sedaj pa bi rad, da ti nekdo pove kaj to je.. Wink

Če pogledva prekinitev je povsem očitno, da ni ravno smiselna.
Pospravljanje/restavriranje registrov ni potrebno ker to naredi hardware, le na koncu mora biti ukaz 'retfie 1'
Prekinitev se ti zgodi, ko UART sprejme karakter. Nakar ta byte preložiš v arrived_sign in prižgeš zastavico main_flag češ, da program ve, da ga čaka nov karkter.

V tem primeru sploh ne rabiš prekinitvene. Enostavno preverjaš v programu 'PIR1,RCIF' flag namesto tvojega 'main_flag'. Rolling Eyes
Seveda pa to v realnosti ponavadi ne gre..

Ne podpisuješ vrstic.. Le kdo bo potem to gledal za teboj?

Dej najprej napiši v kakšnem programskem jeziku (Pascal al pa C) glavni program.
Še bol pa je, če narediš kar simulacijo.

Najprej naredi delujočo komunikacijo.

Komunikacija mora biti 'task' zase (kot si zastvil toda ne dokončal)! Šele ko sprejmeš celoten ukaz/string na to upozoriš glavni program.

Glavni program mora delati povsem neodvisno od komunikacije!

Ne vem zakaj siliš glavni program na koncu v ponovno inicializacijo procesorja??? Če je ta trenutek kaj v UART bufferju bo verjetno izgubleno!

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: Pon Nov 13, 2006 1:07 am    Naslov sporočila:   Odgovori s citatom

Ojla..

Citiram:
Sem le nahitro preletel tole solato.. Laughing
Še en, ki uporablja absolute MPLAB asm model namesto relocated MPLAB asm model.


Solato nisem poslal zaradi vitaminov.
Citiram:

Vidim, da si izklapljal opozorila prevajalnika Shocked , super še žal ti bo!
Razlog boš odkril, ko boš delal z večimi bankami, dokler pa imaš BSF register zmerom 0 bo pa delovalo.


torej to ni razlog za nedelovanje kode. Ali mogoče je ?
Citiram:
Program je popolna zmeda..
Nekaj si zložil skupaj in sedaj pa bi rad, da ti nekdo pove kaj to je.. Wink



Točno vem kaj sem zložil skupaj.

Citiram:
Če pogledva prekinitev je povsem očitno, da ni ravno smiselna.
Pospravljanje/restavriranje registrov ni potrebno ker to naredi hardware, le na koncu mora biti ukaz 'retfie 1'
Prekinitev se ti zgodi, ko UART sprejme karakter. Nakar ta byte preložiš v arrived_sign in prižgeš zastavico main_flag češ, da program ve, da ga čaka nov karkter.


Tudi to torej ni razlog za nedelovanje kode.

Citiram:

Ne podpisuješ vrstic.. Le kdo bo potem to gledal za teboj?


Koda ni še končana in nisem jo še imel dajati v javnost.
Samo sedaj nimam več moči, da bi rešaval problem. In mi je počasi že vseeno pa čeprav se gre za mojo diplomo.

Citiram:
Dej najprej napiši v kakšnem programskem jeziku (Pascal al pa C) glavni program.
Še bol pa je, če narediš kar simulacijo
.

Programskih jezikov ne poznam. simulacijo pa sem tudi delal, najprej za komunikacijo in potem za vsak del zase.
Bom pa probal iti jutri skozi simulacijo celotne zadeve.

Citiram:
Najprej naredi delujočo komunikacijo.


Komunikacijo sem spisal prvo in deluje. In enako kot delujejo vsi ostali deli kode dobro vsak zase.

Citiram:
Komunikacija mora biti 'task' zase (kot si zastvil toda ne dokončal)! Šele ko sprejmeš celoten ukaz/string na to upozoriš glavni program.



Program (regulacija) teče medtem ko jaz tipkam, oz. ne čaka da odtipkam vse tri števila. In šele ko so odtipkana vsa tri števila se začne z BCD v Bin pretvorbo. In nato z pisanjem spremenljivk.

[/quote]
Glavni program mora delati povsem neodvisno od komunikacije![/quote]

saj deluje. Iz glavne zanke grem v komunikacijo le ko dobim ukaz za branje ali pisanje.
Citiram:
Ne vem zakaj siliš glavni program na koncu v ponovno inicializacijo procesorja??? Če je ta trenutek kaj v UART bufferju bo verjetno izgubleno!


tega pa nisem razumel. Iz čega se razume da silim glavni program v ponovno inicjalizacijo

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.
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: Pon Nov 13, 2006 8:21 am    Naslov sporočila:   Odgovori s citatom

Včeraj nisem izklapljal MCU-ja in danes še vedno dela. Ni da nepravilno deluje med obratovanjem. Če mi steče pri uklopu pol deluje.
Včeraj mi ni delal cel dan in je poptem zvečer začel Ko sem ga večkrat poiskusil vzeti iz ležišča ven in ka popnovno vtakniti.
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: Pon Nov 13, 2006 9:51 am    Naslov sporočila:   Odgovori s citatom

Določeni programi začno pravilno delovati šele po določenem času. Če uporabljaš na primer max232 in pcju(oziroma neki napravi) takoj ob vklopu pošlješ znak in čakaš na odgovor, boš čakal v neskončnost. Če ned čakanjem (neskončnosti) pritisneš reset, bo program magično začel delovati. Razlog je v tem, da ob zagonu max232 potrebuje precej časa, da začne delovati (polnjenje kondenzatorjev). Znak, ki ga prekmalu pošlje kontroler maxu bo do maxa prišel, ven iz njega pa ne.

Preveri, če nimaš tekega v programu. Glede na to, da program dela, ko začne delovati, imaš morda neko inicializacijo (software ali hardware) narejeno narobe.


Citiram:
Sploh pa imam eno vprašanje , kaj program lahko skače s klicanjem subrotin po mili volji ali so kakšna pravila.

Ja, so pravila. Omejitev je globina klicev procedur (nesting), to je kolikokrat lahko procedura v proceduri kliče proceduro. Določena je z tipom procesorja (dolžina stacka. Posledica je stack overflow, kar je zelo pogosta in fatalna napaka.
Procedura mora imetu svoj return stavek. Če ni returna, ali pa se gre ven iz procedure z goto stavkom, je nedelovanje zagotovljeno.

Jur


Nazadnje urejal/a jur Pon Nov 13, 2006 10:03 am; skupaj popravljeno 4 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.72
Kraj: Kranj - struževo

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

V programu imaš en kup klicev procedur. Vsak klic + interrupt ti zasede stack, ki je pri PICih fiksne dolžine. Po spominu (že 3 leta nisem delal s pici) je stack pri tamalih uC globok 8 lokacij. Za točen podatek poglej datasheet. Preverjaj v simulatorju stack pointer.
_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
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 1, 2  Naslednja
Stran 1 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: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group