PIC assembly programmering hjelp

R

Rambo

Guest
Vel, jeg skriver et program for et styre som vil bli kontroll av en paintball pistol.Men jeg har kjørt på noen problemer.Jeg bruker PIC 12F675 microcontroller.Jeg har en LED koblet til pin 6 (GP1) slik at en "1" logikk på at pin vil resultere i lyset slått på.Jeg har en bryter mellom VDD og pin 7 (GP0).Pin 7 er også koblet til en rullegardin motstanden til jord.Programmet slår på LED for en kort tid når utløseren er trukket.Det har også en løkke som bare gjør at LED å blinke en gang uansett hvor lenge du holder utløseren-da dette er nødvendig for en paintball pistol.Jeg har sjekket koden igjen og igjen og jeg kan ikke finne noe galt med den.Det er nok noe enkelt, men jeg kan ikke se det.Forhåpentligvis noen andre kan ta noe jeg ikke kan se.
Her er programmet ....http://home.comcast.net/ ~ millersseven / timingtest.asm
Sist endret av Rambo den 15. Mar 2005 8:06, endret 1 gang totalt

 
Jeg forstår ikke problemet i koden?hva er un-forventet atferd på programmet?

 
Rambo,

sjekk denne (fra 12F675 datablad):

Merk: Ansel (9Fh) og (19h CMCON)
registre (9Fh) må initialiseres til
konfigurere en analog kanal som et digitalt
input.Pins konfigurert som analoge signaler vil
les 0.Det Ansel Registeret er definert for
den PIC12F675.

med vennlig hilsen

 
Problemet er at programmet ikke fungerer i det hele tatt.LED slås ikke på når input pin bringes høy som den burde.

CMan, jeg er ikke helt sikker på hva du sier.Er ikke bringe en av input pins til vdd ansett som en digital inngang?Jeg trodde en digital inngang var akkurat der pin kunne leses som enten høy eller lav (VDD eller VSS).Jeg er ganske ny i dette ting slik at jeg kunne være feil selv.

 
Hei,
Jeg arbeider nå med microntolller også og er ny i dette.Jeg har enoucnter slike problem før ..Først må spørre u hvis u er sikker på at u har laste ned programmet lyktes i brikken?For å teste, kan u skrive et enkelt program som vil tenne ledet av en utgang.

Don't let me know ..

 
Hei!

Hva C-Man sier er at du må slå av den analoge Comparators og bytte portene til digital I / O (i stedet for analog porter).Standard i 12F675 er analoge porter.

Bare skriv en verdi 7 til CMCON registrere og 0 til Ansel registrere eller med andre ord,
inkludere dette linjer i begynnelsen:

movlw 0x07
movwf CMCON
bSF STATUS, 5
movlw 0x00
movwf Ansel
BCF STATUS, 5

 
ahhh, skjønner jeg nå.Takk folkens, jeg gir deg beskjed hvis det fungerer.

 
Vel, jeg er et skritt nærmere å få det til å fungere.Løsningen du gav meg gjorde fastsette 1 problem, men nå har jeg en annen.Når jeg lukker bryteren og få input pin high, går lyspæren fra av til den som det skal.Men problemet er at lyspæren forblir på evig og slås ikke av, uansett hva jeg gjør.Det eneste jeg kan tenke på er at en eller annen måte programmet blir sittende fast i timing loop, og ikke kommer ut så førte aldri slås av.Alle andre ser noe galt?

 
Hei,
dette er hva u skrev
decfsz teller, 1; forsinkelse for den førte til være på
goto LOOP
decfsz count2, 1
goto LOOPkanskje kan prøve å se om dette fungerer,

decfsz count, 0, forsinkelse for de førte til være på
goto LOOP
decfsz count2, 0
goto LOOP

se om det kan fungerer ..<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />
 
Vel, jeg er veldig nær å få det til å fungere nå.Jeg oppdaterte linken for programmet øverst på siden.Nå sjekker den for innspill som det skal, og det slår ledet på for riktig mengde tid og deretter slås av.Problemet er at en eller anden måte den ikke komme tilbake til starten av programmet for å la det skje igjen.Det fungerer aldeles 1 gang, men fungerer ikke etter det.Jeg så over koden ganske mye og jeg kan ikke se hvor det blir sittende fast.Kanskje en av dere kan se det.Takk.

 
Ja, jeg kunne gjøre det, men det er et problem.Jeg trenger programmet bare blinke én gang for hver 1 gang jeg trekker på avtrekkeren.Derfor jeg trenger en slags løkke etter at den er ferdig å skyte, slik at den ikke gå tilbake til å se etter utløse (switch) trekker til avtrekkeren blir slapp igjen.Hvis du husker tidligere sagt dette programmet ville være for en paintball pistol.Hvis jeg ikke hadde den tilstanden, mye screwy ting ville skje.

 
først av alt ur programmet er veldig vanskelig å lese for board.the innganger utløses når det 0 wright? så hvorfor gjøre u legge til en ting som "subloop" har ingen mening tror jeg.
doesnt det gjøre 2triggering.try sletting
subloop og og goto start.hope det hjelper

 
Jeg skal forsøke å forklare hvorfor jeg trenger at subloop litt bedre, og hvorfor kan jeg ikke bare ubetinget gå tilbake til starten av programmet.Nå, når jeg faktisk gjør den virkelige programmet, skal jeg ha LED bare på i ca 6 millisekunder-ikke ,3 sekunder som vises i programmet.LED utløses når input pin går høyt.The very small på tide for LED er der problemet ligger.Hvis jeg hadde programmet går tilbake til start rett etter LED slått av, ville jeg teknisk må være i stand til å presse og gi slipp på en bryter i opp til 6 millisekunder.Og det er umulig.Så sløyfen nederst på programmet er å holde programmet inaktiv til bryteren er slapp og input pin vender tilbake til lave.Så når input pin går lav, vil det gå tilbake til starten av programmet, og vente på et annet bytte trekk.Hvis jeg ikke hadde den siste sløyfen der, og jeg gjorde hold bryteren lenger enn 6ms (som jeg ville), vil det slå LED tilbake på i lengre tid enn ønsket.Og når det gjelder tidspunkt for paintball våpen, må den være ganske presis.
Jeg håper det forklarer det litt bedre.Jeg ser ikke noe galt med koden akkurat nå, og jeg har sett den over massevis av ganger, og det virker som det skal fungere.Noen andre forslag?

 

Welcome to EDABoard.com

Sponsor

Back
Top