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

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Ned Avg 07, 2011 3:32 pm Naslov sporočila: |
|
|
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 |
|
 |
S56NC Član


Pridružen-a: Pon 31 Jan 2011 17:26 Prispevkov: 280 Aktiv.: 1.51 Kraj: Strmca-Postojna
|
Objavljeno: Ned Avg 07, 2011 5:04 pm Naslov sporočila: |
|
|
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 |
|
 |
S56NC Član


Pridružen-a: Pon 31 Jan 2011 17:26 Prispevkov: 280 Aktiv.: 1.51 Kraj: Strmca-Postojna
|
Objavljeno: Ned Avg 07, 2011 5:11 pm Naslov sporočila: |
|
|
| 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 |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Ned Avg 07, 2011 5:30 pm Naslov sporočila: |
|
|
| 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.
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 |
|
 |
S56NC Član


Pridružen-a: Pon 31 Jan 2011 17:26 Prispevkov: 280 Aktiv.: 1.51 Kraj: Strmca-Postojna
|
Objavljeno: Ned Avg 07, 2011 8:12 pm Naslov sporočila: |
|
|
| 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 |
|
 |
S56NC Član


Pridružen-a: Pon 31 Jan 2011 17:26 Prispevkov: 280 Aktiv.: 1.51 Kraj: Strmca-Postojna
|
Objavljeno: Ned Avg 07, 2011 9:11 pm Naslov sporočila: |
|
|
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 |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Ned Avg 07, 2011 10:02 pm Naslov sporočila: |
|
|
| 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
| 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 |
|
 |
|
|
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: 233 dni
Powered by phpBB © 2001, 2005 phpBB Group
|