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 

Pomoč pri spreminjanju programa
Pojdi na stran Prejšnja  1, 2
 
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
igo
Član
Član



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

PrispevekObjavljeno: Ned Avg 07, 2011 3:32 pm    Naslov sporočila:   Odgovori s citatom

Hja, za vrtenje na mestu bo treba stari XX_stoji nadomestiti z novim, ki med mirovanjem preveri še tipke za smer in s tem omogoča vrtenje.
_________________
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
S56NC
Član
Član



Pridružen-a: Pon 31 Jan 2011 17:26
Prispevkov: 280
Aktiv.: 1.51
Kraj: Strmca-Postojna

PrispevekObjavljeno: Ned Avg 07, 2011 5:04 pm    Naslov sporočila:   Odgovori s citatom

Hm... Ker sem omejen s tem zapečevanjem programov nisem vprogramiral originala in ga pomeril temveč sem testiral kar konlni program, ki sem ga zložil skupaj iz prješnih postov. XX_stoj sem zamenjal z novim in takšen program naložil:
Problemi... ja... ko se program v ruterju naloži in na vezju od mikrokontrolerja zasveti zelena ( in rdeča ne ugasne kot je v originalu ) pa hkrati z njo začnete svetiti tudi dve ledici vezane na izhode. Ko pritiskam tipke ni spremembe! Kaj bi bilo lahko narobe???
Koda:

process_input
; Pretvori iz temp ukaza:
;DESNO   temp,0
;LEVO   temp,1
;NAZAJ   temp,2
;NAPREJ   temp,3
; v ukaze za tranzistorje iz H-bridge za levi in desni motor:
;PORTA,3 = levLS + levDZ
;PORTA,2 = levLZ + levDS
;PORTA,1 = desLS + desDZ
;PORTA,0 = desLZ + desDS
;lev = levi motor
;des = desni motor
;LS = levo spodaj
;LZ = levo zgoraj
;DZ = desno zgoraj
;DS = desno spodaj

; Output result to PORTA
   MOVWF temp ; sprejet podatek v temp
   BTFSC temp,0 ;//Execute next line if temp,0 is HIGH
      BCF temp,1 ; Če gre naprej, blokira ukaz za nazaj
   BTFSC temp,2 ;//Execute next line if temp,2 is HIGH
      BCF temp,3 ; Če gre desno, blokira ukaz za levo
   BTFSC temp,6 ;//Execute next line if temp,6 is HIGH
      BCF temp,7 ; utripanje

   movf   temp,0 ; zdaj je temp očiščen izključujočih se ukazov
   andlw   b'00001100' ; bita 3,2 sta naprej,nazaj
   btfsc   STATUS,Z ; ali robot stoji?
   goto   XX_stoji ; ja, robot stoji
   btfss   temp,3 ;  je ukaz naprej?
   goto   XX_nazaj; ne, vozi nazaj
   movf   temp,0 ; ja, vozi naprej
   andlw   b'00000011' ; bita 1,0 sta levo,desno
   btfss   STATUS,Z ; je katera smer aktivna?
   goto   XX_naprej_ravno ; ne, vozi naravnost naprej
   btfsc   temp,0 ; ena smer je aktivna, vozi desno?
   goto   XX_naprej_desno ; ja, vozi naprej desno
; vozi naprej levo
   movlw b'00001010'; oba naprej
   btfss   temp,7
   movlw b'00000010'; levi motor utripa
   goto   XX_vozi
XX_naprej_desno ; vozi naprej desno
   movlw b'00001010'; oba naprej
   btfss   temp,7
   movlw b'00001000'; desni motor utripa
   goto   XX_vozi
XX_naprej_ravno
   movlw b'00001010'
   goto   XX_vozi

XX_nazaj
   movf   temp,0 ; vozi nazaj
   andlw   b'00000011' ; bita 1,0 sta levo,desno
   btfss   STATUS,Z ; je katera smer aktivna?
   goto   XX_nazaj_ravno ; ne, vozi naravnost nazaj
   btfsc   temp,0 ; ena smer je aktivna, vozi desno?
   goto   XX_nazaj_desno ; ja, vozi nazaj desno
; vozi nazaj levo
   movlw b'00000101'; oba nazaj
   btfss   temp,7
   movlw b'00000001'; levi motor utripa
   goto   XX_vozi
XX_nazaj_desno ; vozi nazaj desno
   movlw b'00000101'; oba nazaj
   btfss   temp,7
   movlw b'00000100'; desni motor utripa
   goto   XX_vozi
XX_nazaj_ravno
   movlw b'00000101'
   goto   XX_vozi
XX_stoji
   btfsc   temp,0 ; je ena smer je aktivna, vrti desno?
   goto   XX_vrti_desno ; ja, vrti v desno
   btfsc   temp,1 ; je ena smer je aktivna, vrti levo?
   goto   XX_vrti_levo ; ja, vrti v levo
   movlw b'00000000'; stoji na mestu
   goto   XX_vozi
XX_vozi
   movwf PORTA
   movf   temp,0
XX_vrti_levo ; vrti levo
   movlw b'00000110'; levi nazaj , desni naprej ; @€ b'00000010 ; levi stoji, desni naprej
   btfss   temp,7 ;@@
   movlw b'00000000';@@ vsak motor utripa, da se ne vrti preveč divje na mestu
   goto   XX_vozi
XX_vrti_desno ; vrti desno
   movlw b'00001001'; levi naprej , desni nazaj ; @€ b'00001000 ; levi naprej, desni stoji
   btfss   temp,7 ;@@
   movlw b'00000000';@@ vsak motor utripa, da se ne vrti preveč divje na mestu
   goto   XX_vozi
  return
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S56NC
Član
Član



Pridružen-a: Pon 31 Jan 2011 17:26
Prispevkov: 280
Aktiv.: 1.51
Kraj: Strmca-Postojna

PrispevekObjavljeno: Ned Avg 07, 2011 5:11 pm    Naslov sporočila:   Odgovori s citatom

Pa še nekaj. Ali je razlika, če je program pisan za 16f628 jaz pa programiram z njim 16f628a. Program je v originalu pisan za ta čip in na avtorjevi strani je zraven shema, kjer piše A. Pravtako v tekstu!
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.: 15.32

PrispevekObjavljeno: Ned Avg 07, 2011 5:30 pm    Naslov sporočila:   Odgovori s citatom

S5-norc je napisal/a:
Hm... Ker sem omejen s tem zapečevanjem programov nisem vprogramiral originala in ga pomeril temveč sem testiral kar končni program, ki sem ga zložil skupaj iz prejšnih postov.
Kako to misliš "omejitev zapečevanja programov"? Preden boš 10000-krat vprogramiral program, bo še rahlo trajalo.

Daj notri original program in poročaj, katere ledice svetijo glede na pritisnjene tipke !
Od tega je odvisno vse.

V tisti projekt se nisem poglabljal, zato moj process_input temelji na predpostavkah, da pritisnjena tipka povzroči svetenje ustrezne ledice. Če to ne drži, moj process_input ne bo prav deloval.

Zlasti pozoren bodi na jakost svetenja ledic, če držiš eno ali dve tipki. Če bosta pri dveh tipkah ledici svetili manj, se lahko izmenjuje ukaz za naprej/nazaj in ukaz za levo/desno.

Že tako je vprašljivo, kako tipkovnica pošilja več pritisnjenih tipk hkrati.

Arrow Arrow DODANO: pravkar sem opazil, da si narobe vrinil XX_vrti_levo in XX_vrti_desno. Tisti return čisto spodaj premakni na konec XX_vozi ! Se pravi nad XX_vrti_levo. To je vzrok za čudno obnašanje.

Počasi je čas, da pogledaš datasheet od PIC-a in malo preletiš ukaze. Boš lažje razumel dogajanje v programu.

_________________
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
S56NC
Član
Član



Pridružen-a: Pon 31 Jan 2011 17:26
Prispevkov: 280
Aktiv.: 1.51
Kraj: Strmca-Postojna

PrispevekObjavljeno: Ned Avg 07, 2011 8:12 pm    Naslov sporočila:   Odgovori s citatom

No zdajle sem izmeril original program in... za naprej gori led naprej, nazaj.. nazaj, levo...levo, desno desno.., tudi smer-vozi delujejo po principu da gori led naprej in v stran razen ko pritisnem tipki nazaj in desno pa kar vse 4 utripajo ? Ali je napaka v programu v ruterju ? Ja glede programa... Zelo natančno pregledujem vrstice in počasi začenjam razumeti kaj pomeni kakšne. Vsekakor pa ni tako, da se bom za vsako malenkost obračal na forumaše ampak ker sem do sedaj bolj na ATMELu o PICu nevem dosti.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S56NC
Član
Član



Pridružen-a: Pon 31 Jan 2011 17:26
Prispevkov: 280
Aktiv.: 1.51
Kraj: Strmca-Postojna

PrispevekObjavljeno: Ned Avg 07, 2011 9:11 pm    Naslov sporočila:   Odgovori s citatom

Popravljen Return in deluje. Samo, če se komu sanja zakaj se rdeča led ne ugasne... ampak... stvar deluje vredu, čeprav naprej/nazaj in smer ne delujeta. Ampak to se lahko izniči s tem da med vožnjo naprej/nazaj pritiskaš željeno smer. Opažam da enako kot pri originalu: ko pritisnem nazaj in desno skupaj se odprata oba izhoda za nazaj in desno ter izhod za levo utripa.

Hvala

P.S: IGO žal mi je da me ne bo ta teden s letalskim klubom v Krškem na taboru...
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.: 15.32

PrispevekObjavljeno: Ned Avg 07, 2011 10:02 pm    Naslov sporočila:   Odgovori s citatom

S5-norc je napisal/a:
Popravljen Return in deluje. Samo, če se komu sanja zakaj se rdeča led ne ugasne...
Meni . V XX_vozi se je "izgubilo" pisanje na PORTB Whistle
S5-norc je napisal/a:

ampak... stvar deluje vredu, čeprav naprej/nazaj in smer ne delujeta. Ampak to se lahko izniči s tem da med vožnjo naprej/nazaj pritiskaš željeno smer. Opažam da enako kot pri originalu: ko pritisnem nazaj in desno skupaj se odprata oba izhoda za nazaj in desno ter izhod za levo utripa.

Hvala

P.S: IGO žal mi je da me ne bo ta teden s letalskim klubom v Krškem na taboru...

Tole je očiščen program. Je pa problem, če je hrošč tudi v programčku, ki bere tipkovnico (nazaj+desno). Tistega ne grem predelovat. Že tako pri pisanju besedila ne moreš hkrati držati dve tipki. Bi moral napraviti programček, ki bere 8 tipk (12396874)numerične tipkovnice.
Koda:
process_input
; Pretvori iz temp ukaza:
;DESNO   temp,0
;LEVO   temp,1
;NAZAJ   temp,2
;NAPREJ   temp,3
; v ukaze za tranzistorje iz H-bridge za levi in desni motor:
;PORTA,3 = levLS + levDZ
;PORTA,2 = levLZ + levDS
;PORTA,1 = desLS + desDZ
;PORTA,0 = desLZ + desDS
;lev = levi motor
;des = desni motor
;LS = levo spodaj
;LZ = levo zgoraj
;DZ = desno zgoraj
;DS = desno spodaj

; Output result to PORTA
   MOVWF temp ; sprejet podatek v temp
   BTFSC temp,0 ;//Execute next line if temp,0 is HIGH
      BCF temp,1 ; Če gre naprej, blokira ukaz za nazaj
   BTFSC temp,2 ;//Execute next line if temp,2 is HIGH
      BCF temp,3 ; Če gre desno, blokira ukaz za levo
   BTFSC temp,6 ;//Execute next line if temp,6 is HIGH
      BCF temp,7 ; utripanje

   movf   temp,0 ; zdaj je temp očiščen izključujočih se ukazov
   andlw   b'00001100' ; bita 3,2 sta naprej,nazaj
   btfsc   STATUS,Z ; ali robot stoji?
   goto   XX_stoji ; ja, robot stoji
   btfss   temp,3 ;  ne, robot ne stoji. Je ukaz naprej?
   goto   XX_nazaj; ne, vozi nazaj
   btfsc   temp,0 ;  ja, vozi naprej . Je smer desno aktivna?
   goto   XX_naprej_desno ; ja, vozi naprej desno
   btfsc   temp,1 ;ne, je smer levo aktivna?
   goto   XX_naprej_levo ; ja, vozi naprej levo
   movlw b'00001010' ; ne, vozi naravnost naprej
   goto   XX_vozi
XX_naprej_levo ; vozi naprej levo
   movlw b'00001010'; oba naprej
   btfss   temp,7
   movlw b'00000010'; levi motor utripa
   goto   XX_vozi
XX_naprej_desno ; vozi naprej desno
   movlw b'00001010'; oba naprej
   btfss   temp,7
   movlw b'00001000'; desni motor utripa
   goto   XX_vozi

XX_nazaj
   btfsc   temp,0 ;  vozi nazaj . Je smer desno aktivna?
   goto   XX_nazaj_desno ; ja, vozi nazaj desno
   btfsc   temp,1 ;ne, je smer levo aktivna?
   goto   XX_nazaj_levo ; ja, vozi nazaj levo
   movlw b'00000101' ; ne, vozi naravnost nazaj
   goto   XX_vozi
XX_nazaj_levo ; vozi nazaj levo
   movlw b'00000101'; oba nazaj
   btfss   temp,7
   movlw b'00000001'; levi motor utripa
   goto   XX_vozi
XX_nazaj_desno ; vozi nazaj desno
   movlw b'00000101'; oba nazaj
   btfss   temp,7
   movlw b'00000100'; desni motor utripa
   goto   XX_vozi

XX_stoji
   btfsc   temp,0 ; je ena smer je aktivna, vrti desno?
   goto   XX_vrti_desno ; ja, vrti v desno
   btfsc   temp,1 ; je ena smer je aktivna, vrti levo?
   goto   XX_vrti_levo ; ja, vrti v levo
   movlw b'00000000'; ne, stoji na mestu
   goto   XX_vozi
XX_vrti_levo ; vrti levo
   movlw b'00000110'; levi nazaj , desni naprej ; @€ b'00000010 ; levi stoji, desni naprej
   btfss   temp,7 ;@@
   movlw b'00000000';@@ vsak motor utripa, da se ne vrti preveč divje na mestu
   goto   XX_vozi
XX_vrti_desno ; vrti desno
   movlw b'00001001'; levi naprej , desni nazaj ; @€ b'00001000 ; levi naprej, desni stoji
   btfss   temp,7 ;@@
   movlw b'00000000';@@ vsak motor utripa, da se ne vrti preveč divje na mestu
 ;  goto   XX_vozi
 
XX_vozi
   movwf PORTA
   movf temp,0
   andlw b'11110000'
   movwf PORTB
   movf temp,0
   return
Če gledaš tiste movlw b' .... ' konstante, morajo pri danem ukazu svetiti tiste ledice na PORTA, kjer je v konstanti '1'. Glej komentarje in primerjaj. Če pa že original ne dela prav, ne morem pomagati.
_________________
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
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
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: 232 dni


Powered by phpBB © 2001, 2005 phpBB Group