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



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

PrispevekObjavljeno: Pet Avg 05, 2011 10:07 am    Naslov sporočila:  Pomoč pri spreminjanju programa Odgovori s citatom

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
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: Pet Avg 05, 2011 9:08 pm    Naslov sporočila:   Odgovori s citatom

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 Question 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 Question 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 Question 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
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: Pet Avg 05, 2011 10:49 pm    Naslov sporočila:   Odgovori s citatom

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
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: Pet Avg 05, 2011 11:38 pm    Naslov sporočila:   Odgovori s citatom

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) Question
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
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: Sob Avg 06, 2011 9:31 am    Naslov sporočila:   Odgovori s citatom

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
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: Sob Avg 06, 2011 1:56 pm    Naslov sporočila:   Odgovori s citatom

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
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: Sob Avg 06, 2011 4:01 pm    Naslov sporočila:   Odgovori s citatom

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
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: Sob Avg 06, 2011 4:12 pm    Naslov sporočila:   Odgovori s citatom

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 ... Angel in nič gledal na uporabo velikih črk Whistle

_________________
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: Sob Avg 06, 2011 4:24 pm    Naslov sporočila:   Odgovori s citatom

Super. Hvala. Status pa sem tudi že sam pogruntal. Če ne del pa še kaj poročam.

Kapo dol

HVALA Applause
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: Sob Avg 06, 2011 9:35 pm    Naslov sporočila:   Odgovori s citatom

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
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: Sob Avg 06, 2011 10:29 pm    Naslov sporočila:   Odgovori s citatom

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 ... d'oh!
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
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: Sob Avg 06, 2011 10:41 pm    Naslov sporočila:   Odgovori s citatom

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 Very Happy
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: Sob Avg 06, 2011 11:10 pm    Naslov sporočila:   Odgovori s citatom

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
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 1:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.15

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

MPLab ima prav. Dejansko se ti labela XX_stoji v kodi ponovi dvakrat.
Revidiraj program.

_________________
LP, Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno 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 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: 233 dni


Powered by phpBB © 2001, 2005 phpBB Group