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


Pridružen-a: Pon 31 Jan 2011 17:26 Prispevkov: 280 Aktiv.: 1.51 Kraj: Strmca-Postojna
|
Objavljeno: Pet Avg 05, 2011 10:07 am Naslov sporočila: Pomoč pri spreminjanju programa |
|
|
Lep pozdrav!
Ukvarjam se z projektom wifi robota, ki deluje preko predelanega ruterja Linksys na katerega je prek serijskih portov povezan z mikrokrmilnikom pic 16f628A. Trenutno sem v njega vprogramiral spodnjo kodo, ker pa je le ta narejena za krmiljenje Levo, Desno, Naprej, Nazaj bi jo rad spremenil na diferencialni pogon.
Naprej = port 1 in port 2
Nazaj = port 3 in port 4
Levo = port 4 in port 1
Desno = port 3 in port 2
( Porti niso dejanske vrednosti! Problem, ki se še poraja pa je kako spremeniti kodo do bo delovala Npr. hkrati naprej in v levo)
Na vas se obračam, ker sem popolnoma "Zelen" pri PIC uC. Če pa prav razmišljam bi moral spremeniti samo zgornje vrstice kjer so konfigurirani izhodni biti ?!?!
Stran z navodili in KODA:
http://www.jbprojects.net/projects/wifirobot/car_pic.asm
Lp |
|
| Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Pet Avg 05, 2011 9:08 pm Naslov sporočila: |
|
|
3/4 programa je balast.
Bistvo programa je "process_input".
Glede na vrednost sprejete spremenljivke "temp" se postavijo izhodi.
Kako predelati ta košček programa je odvisno od odgovorov na naslednja vprašanja:
1. S čim boš generiral znake Računalniška tipkovnica je precej neposrečen pripomoček za to. Neke vrste kombinacija "joystick-a" in mikrostikalc bi bila primernejša. V vsako smer nagiba bi imel 2 mikrostkalci, ki bi v odvisnosti od nagiba ročice dala ven pare vrednosti "00" , "01" , "11" , "10" . Tak par vrednosti bi bil za vse 4 smeri LLRRFFBB , kar je skupaj 8 bitov (Left, Right, Forward, Backward), pa še možnost hkratnega levo/desno ali naprej/nazaj je mehansko onemogočena.
(naprej + smer) in (nazaj + smer) je seveda možno.
To pomeni, da ima vsaka smer 00 (mirovanje) in 3 stopnje.
2. S čim boš krmilil motorčke S H-bridge vezavo? Tranzistorje pa s PWM? Dutycikel pa je 00 = 0% , 01=30% , 11 = 65% , 10 = 100% za FForward oziroma BBackward.
3. Ali je vsaj za smer uporabljen servo motorček V tem primeru 01, 11 in 10 pomenijo odklon v LLeft oziroma RRight.
Najprej to odgovori, šele potem program. _________________ 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: Pet Avg 05, 2011 10:49 pm Naslov sporočila: |
|
|
Hm.. program že deluje. Bere znake s tipkovnice in jih uspešno izvaja.
Poglej: http://www.jbprojects.net/projects/wifirobot/
Želim predefinirati le izhode namesto zavijanje z motorčkom na zavijanje nadiferencialni pogon. Motorčki niso krmiljeni na duty cicle ampak prek tranzistorja in mosfet-a na odprto zaprto.
Celotna stvari izgleda takole: Na računalniku je program, ki mi znake s tipkovnice kodira in po wifi omrežju pošlje na ruter. Na ruterju je program, ki znake pošilja po RS232 na PIC. Pic pa to pretvori na 5 izhodov na I/O.
Lp |
|
| Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Pet Avg 05, 2011 11:38 pm Naslov sporočila: |
|
|
| S5-norc je napisal/a: |
| Želim predefinirati le izhode namesto zavijanje z motorčkom na zavijanje na diferencialni pogon. |
Je to to?
Naravnost naprej: oba motorja naprej
Levo naprej: Desni motor hitro naprej, levi s polovično hitrostjo naprej
Desno naprej: Levi motor hitro naprej, desni s polovično hitrostjo naprej
Naravnost nazaj: oba motorja nazaj
Levo nazaj: Desni motor hitro nazaj, levi s polovično hitrostjo nazaj
Desno nazaj: Levi motor hitro nazaj, desni s polovično hitrostjo nazaj
Za tisto polovično hitrost se da uporabiti utripanje zelene ledice. Kako skombinirati ostale bite skupaj, je odvisno od tega:
Ali lahko hkrati držiš dve tipki (naprimer naprej in desno)
Ali delujeta naprej in nazaj kot stikali (vklopiš in ostane vklopljeno do preklica), ali kot tipki (dela, dokler je pritisnjena)? _________________ 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: Sob Avg 06, 2011 9:31 am Naslov sporočila: |
|
|
Da. Hkrati lahko bržiš dve tipki. In delujeta kot tipki in ne kot stikali.
Ja tako mislim. Le da bi poleg vseh imel še Levo in Desno pri katerem bi se vrtel en nazaj en naprej. Res bi se najbolje dalo urediti z utripanjem, čeprav ne vem zakaj ledice?? Samo princip ali...???
Drugače pa sem v mislih imel tako, da bi vezal na dva izhoda tranzistorja na motorja za naprej, na dva izhoda pa tranzistorja, ki bi jima na motorju obrnil + in - (za nazaj). Tako bi imel 4 možnosti, ki bi jih kombiniral za Naprej, Nazaj, Levo in Desno. Za naprej in v smer pa bi enden Bil odpr drugi bi pa pulziral.
Je mogoče? |
|
| Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Sob Avg 06, 2011 1:56 pm Naslov sporočila: |
|
|
| S5-norc je napisal/a: |
Da. Hkrati lahko bržiš dve tipki. In delujeta kot tipki in ne kot stikali.
Ja tako mislim. Le da bi poleg vseh imel še Levo in Desno pri katerem bi se vrtel en nazaj en naprej. Res bi se najbolje dalo urediti z utripanjem, čeprav ne vem zakaj ledice?? Samo princip ali...??? |
Tisti motor, ki utripa, vozi s polovično hitrostjo v isto smer, kot drugi motor. Če bi stal, bi bil polmer zavoja enak razdalji med kolesoma. Če bi se vrtel v obratno smer, bi se robot na mestu zavrtel.
| S5-norc je napisal/a: |
| Drugače pa sem v mislih imel tako, da bi vezal na dva izhoda tranzistorja na motorja za naprej, na dva izhoda pa tranzistorja, ki bi jima na motorju obrnil + in - (za nazaj). Tako bi imel 4 možnosti, ki bi jih kombiniral za Naprej, Nazaj, Levo in Desno. Za naprej in v smer pa bi enden Bil odpr drugi bi pa pulziral. Je mogoče? |
Za vsak MotorLevi in MotorDesni rabiš svoj H-bridge (išči gogle slike). Potem z vklopom tranzistorjev LevoZgoraj+DesnoSpodaj oziroma LevoSpodaj+DesnoZgoraj določiš smer toka skozi motor in s tem smer vrtenja.
| Koda: |
process_input
; Pretvori iz temp ukaza:
;DESNO temp,3
;LEVO temp,2
;NAZAJ temp,1
;NAPREJ temp,0
; 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'00000011' ; spodnja dva bita sta nazaj,naprej
btfsc status,Z ; ali robot stoji?
goto XX_stoji ; ja, robot stoji
sublw b'00000001 ;
btfss status,Z ; je ukaz naprej?
goto XX_nazaj; ne, vozi nazaj
movf temp,0 ; ja, vozi naprej
andlw b'00001100' ; bita 4,3 sta desno,levo
btfss status,Z ; je katera smer aktivna?
goto XX_naprej_ravno ; ne, vozi naravnost naprej
btfsc temp,3 ; 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'00001100' ; bita 4,3 sta desno,levo
btfss status,Z ; je katera smer aktivna?
goto XX_nazaj_ravno ; ne, vozi naravnost nazaj
btfsc temp,3 ; 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
clrf PORTA
movf temp,0
return
XX_vozi
movwf PORTA
movf temp,0
return |
Stari process_input nadomesti s tem in poveži izhode s H-bridge tranzistorji. _________________ 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: Sob Avg 06, 2011 4:01 pm Naslov sporočila: |
|
|
Noče mi spremeniti v HEX.
Message[302] C:\PIC\KODA.ASM 58 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PIC\KODA.ASM 61 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PIC\KODA.ASM 69 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PIC\KODA.ASM 71 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[113] C:\PIC\KODA.ASM 136 : Symbol not previously defined (status)
Error[113] C:\PIC\KODA.ASM 139 : Symbol not previously defined (status)
Error[113] C:\PIC\KODA.ASM 143 : Symbol not previously defined (status)
Error[113] C:\PIC\KODA.ASM 165 : Symbol not previously defined (status)
Eror pokaže na vse vrstice kjer piše STATUS,Z .
uporabljam pa MPLAB IDE |
|
| Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Sob Avg 06, 2011 4:12 pm Naslov sporočila: |
|
|
| S5-norc je napisal/a: |
Eror pokaže na vse vrstice kjer piše STATUS,Z .
|
Lahko dodaš:
status equ 0x03
Z equ 0x02
Druga možnost je, da vse STATUS in vse Z napišeš z velikimi črkami, saj so tako definirani v P16F628.INC .
Jaz sem samo tipkal ... in nič gledal na uporabo velikih črk  _________________ 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: Sob Avg 06, 2011 4:24 pm Naslov sporočila: |
|
|
Super. Hvala. Status pa sem tudi že sam pogruntal. Če ne del pa še kaj poročam.
Kapo dol
HVALA  |
|
| Nazaj na vrh |
|
 |
S56NC Član


Pridružen-a: Pon 31 Jan 2011 17:26 Prispevkov: 280 Aktiv.: 1.51 Kraj: Strmca-Postojna
|
Objavljeno: Sob Avg 06, 2011 9:35 pm Naslov sporočila: |
|
|
Na 4 porte sem priklopil 4 led diode. Ko pritisnem Naprej svetite dve, ko pritisnem Nazaj svetite drugi dve. Levo nič, Desno nič. Naprej levo nič, desno naprej nič, levo nazaj nič, desno nazaj pa prvi dve utripata pa še ena izmed drugih dveh tudi. Je to pravilno???
Pa kako vežem na H-bridge; http://www.bobblick.com/techref/projects/hbridge/hbridge.html Tako kot je prikazano tukaj bo vredu? Mislim da... bo program za tole drugačen in manj kompliciran:
input | output
A | B | A | B
---------------
0 0 | float
1 0 | 1 0
0 1 | 0 1
1 1 | 1 1 |
|
| Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Sob Avg 06, 2011 10:29 pm Naslov sporočila: |
|
|
| S5-norc je napisal/a: |
| Na 4 porte sem priklopil 4 led diode. Ko pritisnem Naprej svetite dve, ko pritisnem Nazaj svetite drugi dve. Levo nič, Desno nič. Naprej levo nič, desno naprej nič, levo nazaj nič, desno nazaj pa prvi dve utripata pa še ena izmed drugih dveh tudi. Je to pravilno??? |
Pravilno ni ...
Premalo podrobno sem si ogledal vezalno shemo ...
ni:
PORTA,3 DESNO
PORTA,2 LEVO
PORTA,1 NAZAJ
PORTA,0 NAPREJ
ampak:
PORTA,0 DESNO
PORTA,1 LEVO
PORTA,2 NAZAJ
PORTA,3 NAPREJ
Najprej z originalnim process_input preveri, če pri držanju dveh tipk res svetita pravi dve ledici. Če se ne obnaša, kot je predvideno, to napiši.
Šele potem vstavi to:
| 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
clrf PORTA
movf temp,0
return
XX_vozi
movwf PORTA
movf temp,0
return |
Ko stoji na mestu, ne reagira na levo/desno.
Ko se vozi naprej ali nazaj, pa je možno zavijati.
Če imaš 2 pogonski in eno ali dve prosto zavijajoči kolesi, bi lahko tudi na mestu zavijal. Pri navadnem 4-kolesniku bi se pa lahko kaj zlomilo. Kakšen je torej robot (zavijanje na mestu ni problem dodati)?
Tisti H-bridge je za en motor. Rabiš za 2 motorja rabiš 2 vezji. Vsak rabi 2 krmilna signala, skupaj so 4 signali. _________________ 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: Sob Avg 06, 2011 10:41 pm Naslov sporočila: |
|
|
Ja. Zavijanje je samo na dveh gosenicah. Zavrteti bi se moral tudi na mestu ja. No glede H-bridga ok, bom poskusil ta teden narediti dva. Jutri pa poročam kako se obnaša original in nov program, če dobim še tistega za zavijanje na mestu pa še tistega.
Do takrat hvala in Ln  |
|
| Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 15.32
|
Objavljeno: Sob Avg 06, 2011 11:10 pm Naslov sporočila: |
|
|
Aha, gosenice ...
| Koda: |
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_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
|
Ko stoji na mestu, se lahko vrti v levo/desno, a utripa, da se ne vrti prehitro.
@@ zakomentiraj, če želiš divje vrtenje na mestu.
@€ pa uporabi za manj ostro vrtenje naprej okrog notranje gosenice. _________________ 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 1:23 pm Naslov sporočila: |
|
|
MPLAB mi javlja napako, da se XX_stoji ponovi dvakrat.
| 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
clrf PORTA
movf temp,0
return
XX_vozi
movwf PORTA
movf temp,0
return
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_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 |
|
|
| Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.15
|
Objavljeno: Ned Avg 07, 2011 3:17 pm Naslov sporočila: |
|
|
MPLab ima prav. Dejansko se ti labela XX_stoji v kodi ponovi dvakrat.
Revidiraj program. _________________ LP, Matjaž |
|
| 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
|