Sunteți pe pagina 1din 9

Bienvenido(a), Visitante. Por favor, ingresa o regstrate. Perdistetu emaildeactivacin?

21 de Diciembre de 2009, 10:49:39

229488 Mensajes en 25497 Temas por 23756 Usuarios ltimousuario:TheLordRayden

Siempre

Ingresar

Ingresarconnombredeusuario,contraseayduracindelasesin

Buscar:

Busca BsquedaAvanzada

TODOPIC Microcontroladores PIC Lenguaje C para microcontroladores PIC (Moderadores: etolocka, Modulay, pikman, pocher, RedPic, vszener, Sasin) Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC) Pginas: [1] 2 3 4

0Usuariosy1Visitanteestnviendo este tema. anterior prximo

Marcar como favorito

Autor
RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Tema:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)(Ledo6943veces)
Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
: 02 de Febrero de 2008, 11:14:35

Prembulo: Primerodecirosqueestabadudandoentrepostearestehiloaqu,enelsubforodeC,ohacerloeneldeRobticayaqueenelfondoloque deseodescribiresunalgoritmo,unaideadecmohaceralgomasqueunaimplementacindeesaideaenunidiomaconcreto,peroalfinal mehedecididoporsteyaqueesmientornohabitualyelforodeRobticalofrecuentopoco,masquenadapormidesconocimientodel temaaunquepocoapocoirentrandomasenl. PorahtengoyaposteadosalgunoshilosdedicadosaestetemadelosservosylosPWM's,concretamenterecuerdoControlando un SERVO con el PIC desde nuestro PC,El Termo-Servo o un servo controlado por temperatura. o Proyecto Radiocontrol : Receptor RC asistido por PIC ... Todoselloshantratadodeunnicoservo,apuntandoalgunasideasparapodermanejarmayorcantidaddeellos,perosinconcretarnada sobredichaposibilidad.ComoalgunodeustedessabisestoyempeadoenciertoproyectodetemasdeRC(radiocontrol)cuyas repercusionesenelforolastenisenloshilosProyecto de Barco a Vela radiocontrolado o el ConocismdulosRF?. En cualquiera de ellos sepreveemanejarnounosinomuchosservos,asqueahorahallegadoelmomentodeacometereltema. LaideadecmohacerlolahetomadoprestadadelagentedeIEAroboticsyquierodejaraquconstanciadeelloydemipblico agradecimiento. Introduccin: Novamosaentrarenunadescripcindetalladadecmomanejarunservo,paraelloaquienleinteresepuedevisitarunodeloshilos anteriormente mencionados, pero vamos a dar al menos un somero repaso al tema. Unservo,delosqueusamosloshobbystas,sealimentaconunos5VysecontrolamedianteunasealPWMconunafrecuenciade50Hz,o seaconunperiodode20ms,yconunDutyCyclequevaraentreel6%yel15%,oseaentreunperiodoenaltodeunos0.5msa2.5ms (estosvalorespuedencambiarsegnelmodeloconcretodeservoqueutilicemos,losHitecvandesdelos0.5alos2.5msylosFutaba desde los 0.3 a los 2.3 ms aproximadamente) Con un pulso de unos 0.7 ms el servo se posiciona en un extremo de su recorrido, con un pulso de unos 2.3 ms el servo se posiciona en el extremo contrario y con un pulso intermedio, de unos 1.5 ms, se posiciona en el centro de su recorrido. AqutenisuncronogramadecmoreaccionaunservoanteestostiposdepulsosPWM:

ImplementarlageneracindeunsolopulsoPWMnoescuestindifcilyenloshilosmencionadosantestenisformassencillasdehacerlo. Lacosasinembargosecomplicaconformevamosacumulandounatrasotralanecesidadde controlar mas y mas servos. Y todo es un problema de tiempos, conforme mas servos vamos intentando controlar nuestras rutinas se van complicando, ocupando mas tiempo de proceso,yempiezanaperderlaprecisinnecesariaenlageneracindelospulsosdecadaunodelosservos.stosempiezanatemblary a hacer cosas "raras", vibran, tiemblan, dan saltos ... y todo producido por una inestabilidad en los anchos de los pulsos que le llegan. Esmiintencinenestehiloladepresentarosunaformaeconmicaenrecursosytiemposdeproceso,enelPICparacontrolarhasta8

servosdeformaestableyprecisa,haciendoademsusodeunanicainterrupcin:LadeldesbordedelTimer1(rodandoa16bitsde precisin). Descripcindelalgoritmo: Para describiros el algoritmo tenemos que hacer un uso intensivo de la calculadora. El primer dato a tener en cuenta es la frecuencia del pulso PWM de los servos, que como dijimos anteriormente es de 50 Hz. Esto significa que cada pulso a cada servo tiene un periodo, o tiempo que transcurre entre dos flancos sucesivos:

. Este periodo lo podemos dividir entre 8 para obtener lo que vamos a denominar una "ventana" para cada uno de los servos.

. Dentrodecadaunadeestas"ventanas"detiempode2.5msdeduracinvamosacontrolarunsoloservo,perounotrasotrohasta completarlos8quesonnuestroobjetivo.Estosignificaqueindependientementedeltiempoqueestenaltoelpulsodeunservo,recordad quedecamosquepodaserentre0.7msy2.3ms,cada2.5msponemosenaltoelsiguienteservo,ycomohantranscurrido2.5msdesde lapuestaenaltodelanteriorsteyadebedehabersidobajadoporqueningnpulsoenaltopuedesobrepasarlos2.3ms. Estohacequedentrodecada2.5msseponeenaltoydespusenbajolasealdeunservo.Comoson8servosyporlotanto8 "ventanas"de2.5ms,acadaservoletocardenuevoponerlelasealenalto8*2.5ms=20ms.Oseaelperiodocorrespondienteala frecuencia de 50 Hz que necesita. Esto puede verse de forma mucho mas clara mediante el siguiente cronograma:

Fijaoscmolassealesdecadaunodelosservossevangenerandounatrasotra,deformasucesiva,peroseparadascadaunadela siguientelosmismos2.5mshastacompletarlos20msconlos8servos,ycmoindependientedeenqumomentosepongaenaltouno de ellos individualmente, a los 20 ms vuelve a tocarle a ese mismo ponerse en alto. Ahoralacuestinpasaporgenerarlos"timmings"necesariosparasercapacesdeproducirestetrendepulsosdeanchocontrolado. Recursos a utilizar: Comoospusemasarribaelprincipalrecursoautilizaresunanicainterrupcin,ladeldesbordedelTimer1.Peroantesdebemostratar otrotemarelacionadoconste. Una idea que a nadie se le debe escapar, pero que por mas obvia que sea no voy a dejar de mencionar, es la de que hace falta un PIC razonablementerpido.Conunpulsoalextremo,delos2.3ms,vamosatenerslo0.2msparadetectarelfindelpulsoyponerloabajo. NoesmiintencincalcularqufrecuenciaFOSCmnimapodramosutilizar,heescogidounPICquepuedevolara20Mhzconelque tenemosmasquesuficienteysideseisprobarconfrecuenciasmenoresosrogaraquemehicieseispartcipedelosresultados. Con un cristal de 20 Mhz y el Timer1 configurado para como contador de 16 bits, con prescaler a 1:1 tenemos los siguientes "timmings" :

El dato fundamental es el del tiempo de incremento de un Tick del Timer1, que resulta ser de 0.2 uS, o lo que es lo mimo 0.0002 ms. PodemosasexpresarenestaunidaddeTickslostiemposenaltodecadaunodelosservos.Sitodostuviesenqueestarenelcentrodesu recorridosusPWMdeberandeserde1.5msenalto:

AssihabilitamoslainterrupcinpordesbordamientodelTimer1laprimeravezquedesbordeponemosenaltoelpincorrespondienteal Servonmero1yprecargamoselvalordelTimer1con7.500ticksantesdeldesborde,queseproducealos65.535ticks,conloque ponemos el Timer1 a 65.535 - 7.500=58.035,deestaformaobtendremoslasiguienteinterrupcincuandotranscurranesos7.500ticks. Cuandolainterrupcinsaltadenuevoyentramosporsegundaveztenemosqueprefijarentonceseltiempoquehadetranscurrirpara completar la ventana de 2.5 ms hasta el comienzo del control del siguiente servo. Como en nuestro ejemplo hemos utilizado un valor de 1.5 ms7.500Tickstendremosahoraqueesperar2.5ms- 1.5 ms = 1 ms por lo que vamos a precargar de nuevo el Timer1 con 65.535 5.000=60.535ynuestrainterrupcinsaltardenuevotranscurrido1ms. Ahora le toca al siguiente Servo con el que procederemos de la misma forma: ponemos en alto el pin del servo 2, precargamos el Timer1 restandoaldesbordeennumerodetickscorrespondienteasuanchodepulso,esperamoslasiguienteinterrupcinenlaqueponemosen bajo el pin del servo y precargamos de nuevo con los ticks necesarios para completar los 2.5 ms de su ventana y de nuevo a empezar pero con el siguiente servo. Esta es la idea fundamental. Cada dos interrupciones se controla completamente un Servo y entre ambas transcurre exactamente 2.5 ms, independiente del estado en alto que tenga que tener cada servo, cada 16 interrupciones se vuelve de nuevo al principio, al primer servo, y han transcurrido exactamente 20 ms. Conunasimpletablade8enterosde16bitsparaguardarelnmerodeticksquetienequeestarenaltocadapulsodecadaservoycon dossimplesclculosaritmticosdesumayrestaenunanicainterrupcintenemosperfectamentecontroladoshasto8servos. ImplementacinenCCSC: PararealizarlaimplementacindeestealgoritmoenCcomenzaremosporcomentaralgunosdetallesimportantes. Vamos a usar la directiva #use fast_io(X) y fijar el funcionamiento de los pines con el set_tris_x(). Esto hace que el compilador no incluya losset_tris()automticamentecadavezqueseencuentraunoutput_low()ooutput_high()conloquequitaremosinstruccionesinnecesarias deenmedioyganaremosenvelocidadyprecisinennuestroprograma. EnelejemploquehepreparadointeractuoconelPICmedianteelcanalseriedelmismoconunMAX232.Asquehehabilitadotambinla interrupcinporrecepcinserie.Comolostiempos,"timmings"lesllambamos,sonfundamentalesenestaaplicacinvamostambina usarladirectiva#prioritytimer1,rdaquenosvaahacerprioritarialainterrupcindeltimer1sobreladerecepcinserie.Anteladudael Timer1ganaynosotrosconlenestabilidadyprecisin. He creado una tabla int16 Servo_PWM[8] en la que guardo los Ticks de ancho que tienen que durar cada uno de los pulsos de cada uno de losservos.Sonlosnecesariospararestrselosa65.535trasiniciodecadapulsoyparasumrselosalanchodelaventanatrassufinal paracolocarlainterrupcinaliniciodelsiguientepulso. Comoeliniciodeunpulsodeservosiemprellegaconunainterrupcinimparyelfinaldeesemismopulsollegaconlainterrupcinparme he creado un int1 flag_Phase que va a hacerme saber si estoy al comienzo o al final de cada pulso. Siestoyalfinal,flag_Phase=1,entoncesincrementoelnmerodelsiguienteServoquemetocatrataryqueseralqueletengoque levantarlasealenlasiguienteinterrupcin.Sialincrementarelsiguienteservoesmayorqueelltimovuelvoaponerloa0yrecomienzo de nuevo con el primero. El programa queda tal como sigue: Cdigo

GeSHi (csharp):

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.

#include <18f1320.h> #fuses HS,NOMCLR,PUT,NOWDT,NOPROTECT,BROWNOUT,BORV45,NOLVP,NOCPD,NODEBUG,NOWRT #use delay(clock=20000000) #use rs232(baud=115200, xmit=PIN_B1, rcv=PIN_B4) #use fast_io(A) #use fast_io(B) #priority timer1,rda #define SERVO1 PIN_B5 #define SERVO2 PIN_B3 #define SERVO3 PIN_A0 #define SERVO4 PIN_A4 #define SERVO5 PIN_B2 #define SERVO6 PIN_A3 #define SERVO7 PIN_B0 #define SERVO8 PIN_B5 constint16Ticks4Window=12500// PWM Window for servo = 2.5 ms x 8 = 20 ms constint16Ticks4Minimum=3500//PWMHighforMinimumPosition=0.7ms constint16Ticks4Center=7500//PWMHighforCenterPosition=1.5ms

Mi montaje funcionando: Solotengo4servosdisponiblesasquesolo4leheconectadofsicamente,peroelprogramacontemplalos8aunquelos4ltimosnolos secuencia en dos interrupciones sino que una de ellas salta inmediatamente y es la segunda la que hace todo el recorrido de la ventana de esos servos.

Yesteeselpequeomenquemehepreparadoparacontrolarsufuncionamiento:

Os aseguro que los servos se desplazan suavemente, sin vibraciones ni temblores, entre ambos extremos siguiendo puntualmente las ordenes que les mando desde el PC. Enestemen,comovis,manejotodoslosservosalavez,dehecholoquehagoessolocargarlatablaServo_PWMconlosvalores extremosycentralydejoquelainterrupcinhagaelresto.Ylaverdadesquevaabsolutamentedelujo.

Eraunaespinitaquetenaclavadahacetiempoyqueporfinhepodidoquitarme.Yqueracompartirlocontodosustedes. Ea,yaestbienporhoy.Maanams.

ltimamodificacin:19deJuniode2009,05:48:21 por RedPic Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

Enlnea

Thanathos
Nuevo Usuario Desconectado Sexo: Mensajes: 8

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #1 : 03 de Febrero de 2008, 12:13:26

Ante todo saludos estimado REDPIC, si a alguien debo lo que se es a ti. Definitivamente otra vez me dejaste sin palabras... Me voy a poner a analizar tu codigo, lo mire asi rapidito y tiene cosas de verdad interezantes... 1pregunta,QuePorcentajedemaquinaconsumeelprograma?,esquehaceunosdiashiceunprogramaigualpara8servosconun877y la verdad gastaba maquina.
Enlnea

darklord
Nuevo Usuario Desconectado

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #2 : 03 de Febrero de 2008, 01:43:23

Muybueno!!!
Sexo: Mexico Mensajes: 14

HeseguidotusavancesentupginaDiego,ymegustamuchotuformadeescribirtantoelcdigocomolosartculos,todomuybien estructurado.Estababuscandoalgoritmosparacontrolarservosydicontuartculo,voyaanalizarlo,peroantetodo,graciaspor compartirlo. No te ha pasado por la cabeza la idea de un controlador de servos USB? Recibe un coordial saludo.

ltimamodificacin:03deFebrerode2008,01:52:08 por darklord Visita mi blog: http://tech-freaks.net

Enlnea

Nocturno
Administrador HroeTodopic Desconectado Sexo: Cuba Mensajes: 11327

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #3 : 03 de Febrero de 2008, 04:04:40

DonDiego,felicidadesporunnuevomagnficoartculo. Dices que cuando se solapan varios servos en el mismo pulso ascendente, para luego bajar cuando a cada uno le corresponda, has observadovibracionesextraas. Aunque me encanta la forma de resolverlo que has tenido, reservando una parcela de tiempo exclusiva para cada uno, yo sospecho que la velocidaddelPICesmsquesuficienteparamanejarconsolturaunasituacincomolaplanteada. Nocreesqueexistelaposibilidaddequelacausafueraotra?,estuvistepeleandomuchoconesaideahastaabandonarla?

Enlnea UnsaludodesdeSevilla,Espaa.

Visita MicroPIC!do! !s!


RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #4 : 03 de Febrero de 2008, 06:32:12

Eltematalcomolotenaanteriormenteplanteadotenaunfalloevidenteconelejemplosimpledetodoslosservosalamismaposicin. TenalainterrupcindeTimer1quesoloservaparagenerarunpulsocada20ms,precargandoeltimerconelvalorcorrespondiente,y poniendoenaltotodaslassealesdetodoslosservos. Ydespusenelmain()eindependientedelavelocidadalaquecorrieseelPICtenialabateradecomparacionesdetiempostranscurridos paracadaservo,encasodesobrepasarsuvalordebaponerlosabajo.Estollevabaalaparadojadequesitodoslosservosestabanenla mismaposicintodoslassealesdebancaeralmismotiempo,cosaatodaslucesimposible. Ytambin,silosservostenanposicionescercanasperonoiguales,losuficientementecercacomoparadependerdeltiempodeproceso delqueleprecedaodelquelesucedaenelflujodelprogramaresultabaquelaestabilidadabsolutadeunservodependadelaposicin de sus vecinos. No,nointentseguirporahporquemedabacuentadequejamsibaaconseguirprecisin. Deberasverahoracomorespondenestosalaumentotickatickdelanchodepulso,escasiinapreciableelmovimientoqueproduce,suave yfirme.

Enlnea Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #5 : 03 de Febrero de 2008, 06:36:48

Cita de: darklord en 03 de Febrero de 2008, 01:43:23 No te ha pasado por la cabeza la idea de un controlador de servos USB?

Si,claroques.Peroeltemaesqueelmtodoporquelehagallegarlasposiciones,omejordicholovaloresdelasposicionesala memoria del PIC es irrelevante y no necesito una velocidad tan grande como el USB me puede brindar. Ademslaaplicacinparalaqueestamosinvestigandotodoestodelosservos,yotrascosascomolosmotoresDCoPaP,esparaser radiocontroladosenunmodelonavalyahvaaserdifcilusarelUSB.
Enlnea Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

Nocturno
Administrador HroeTodopic Desconectado Sexo: Cuba Mensajes: 11327

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #6 : 03 de Febrero de 2008, 06:47:57

Abundandoenlaidea,ysinnimodedartelacoams,porqueyalotienessolucionado. Imaginaqueenelmomentodelevantarlassealeshacesun"if"concondicinTRUEporcadaservolocualloslevantartodos,perocon un miniretraso entre ellos que corresponde al tiempo que tarda el pic en pasar de cada uno al siguiente. Yahoraenelmomentodebajarlashaceslomismo,un"if"paracadaservoqueintroduciracadaunounminiretrasoequivalentealque usaste al levantarlas. Enteora,seracomosiponesesediagramadetiempostanchuloquehaspintado,peroconlasseales"casi"superpuestas,slodecaladas por ese miniretraso que comentaba antes. Nocreesquefuncionara?
Enlnea UnsaludodesdeSevilla,Espaa.

Visita MicroPIC!do! !s!


RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #7 : 03 de Febrero de 2008, 07:02:11

Si,deberafuncionarperfectamente.Deechoessimilaraloqueestoyhaciendoconlainterrupcinsalvoquela"ventana"ladefinenlosif() consecutivos de subida y bajada. Peroyeselnicoperoqueleencuentro,estaenelrestodelprograma.Medecidaponerlainterrupcinenlazadaservotrasservopara tener todo el main() para mi solo, como la cama cuando mi esposa se va a ver a la nieta. Asenelmain()puedohacerydeshacerclculostodolocomplejoquequierasabiendosiemprequelosservosestnatendidos correctamente.Cuantoterminounclculoactualizoeldoble-bytedeeseservoysquecuandoletoqueseiralaposicinadecuada,o puedoestarsensandootrospuertosodedicadoaltemadelascomunicacionesmientraselsistemadepulsosPWMesten"automtico".
Enlnea Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

Nocturno
Administrador HroeTodopic Desconectado Sexo: Cuba Mensajes: 11327

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #8 : 03 de Febrero de 2008, 07:12:38

Perfecto.Quesepasquehasconseguidoincrementarenunaunidadmipiladeinsatisfacciones,enformadeproyectosquemegustara hacer y no tengo tiempo.

Enlnea UnsaludodesdeSevilla,Espaa.

Visita MicroPIC!do! !s!


RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #9 : 03 de Febrero de 2008, 07:21:00

Tbiensabesqueyotampocotengotiempo,peroestolohagocomomedidateraputica.Olohagoaplenasatisfaccinocaigoenfermo. Devezencuandohayquehacercosascomoesta,notodopuedenserIacedesesfindetrasfinde.

Enlnea

Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

stk500
Moderadores Come y duerme en el foro Desconectado Sexo: Alemania Mensajes: 1973

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #10 : 03 de Febrero de 2008, 07:26:12

FelicitacionesDiegoportugranClasecomosiempre

estupendoServoTutorialnoshasdadosmuchasgracias

Enlnea un saludo Rafael

jfmateos2
Moderadores Come y duerme en el foro Desconectado Sexo: Antartica Mensajes: 2157

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #11 : 03 de Febrero de 2008, 07:33:23

Enhorabuena RedPIC. Mesurgeunadudaalleertucdigo.Enlugardeusarestetipodeifconsecutivosdelosque,obviamente,nopuedenserciertosmsde unoalavez,enlosPICstambinseramseficienterecurriraestructurasswitch...caseoif...elseif? Cdigo:

if(Servo_Idx==0&&SERVO1_ON)output_high(SERVO1) if(Servo_Idx==1&&SERVO2_ON)output_high(SERVO2) if(Servo_Idx==2&&SERVO3_ON)output_high(SERVO3) if(Servo_Idx==3&&SERVO4_ON)output_high(SERVO4) if(Servo_Idx==4&&SERVO5_ON)output_high(SERVO5) if(Servo_Idx==5&&SERVO6_ON)output_high(SERVO6) if(Servo_Idx==6&&SERVO7_ON)output_high(SERVO7) if(Servo_Idx==7&&SERVO8_ON)output_high(SERVO8)

Enlnea Qumetraigoentremanos? VelocmetrodigitalinalmbricoparaCitroenC5 Linterna sin pilas alimentada por motor paso a paso ComunicacinPHP-RS232-P I C P I C-Tengu

RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #12 : 03 de Febrero de 2008, 08:01:36

Cita de: jfmateos2 en 03 de Febrero de 2008, 07:33:23 Enhorabuena RedPIC. Mesurgeunadudaalleertucdigo.Enlugardeusarestetipodeifconsecutivosdelosque,obviamente,nopuedenserciertosmsde unoalavez,enlosPICstambinseramseficienterecurriraestructurasswitch...caseoif...elseif? Cdigo:

if(Servo_Idx==0&&SERVO1_ON)output_high(SERVO1) if(Servo_Idx==1&&SERVO2_ON)output_high(SERVO2) if(Servo_Idx==2&&SERVO3_ON)output_high(SERVO3) if(Servo_Idx==3&&SERVO4_ON)output_high(SERVO4) if(Servo_Idx==4&&SERVO5_ON)output_high(SERVO5) if(Servo_Idx==5&&SERVO6_ON)output_high(SERVO6) if(Servo_Idx==6&&SERVO7_ON)output_high(SERVO7) if(Servo_Idx==7&&SERVO8_ON)output_high(SERVO8)


Si.Aslotenaantes. Perodeestemodoloveacomomasbonito,masesttico.
Enlnea Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

Nocturno
Administrador HroeTodopic Desconectado Sexo: Cuba Mensajes: 11327

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #13 : 03 de Febrero de 2008, 08:05:23

Me suena que se compilan igual los switch/case que los if/else.

Enlnea UnsaludodesdeSevilla,Espaa.

Visita MicroPIC!do! !s!


RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #14 : 03 de Febrero de 2008, 08:09:07

Nolohecomprobadoperoladiferenciadebesermnima. AdemaselSwitchsoloswitcheabaentrelosservosydentrodecadacasetenaqueponerunif()parasabersielservoeseestabaono activo, asi que decidi poner solo el if(). Ademasasilarutinasiempretardalomismo,mientrasqueconelswitch()tardamenosconelprimeroytodoconelltimo.Quenosesi tendrimportanciaonoperoahest.
Enlnea Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

Marttyn
Colaborador Come y duerme en el foro Desconectado Sexo: Argentina Mensajes: 1076

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #15 : 04 de Febrero de 2008, 02:19:52

Perfecto Diego! Tu siempre con tu faceta de profesor haces que los demas aprendamos de manera amena. La verdad te felicito! Bueno,creoquetodosporaquisabeisquelosservosmeenvantan!el50%demispostsonsobreellos Yo resolvi una situacion similar de manera similar... en uno de los interminables post sobre servos alguien habia hablado (supongo que sera a quien le das las gracias al principio) sobre lo que tu comentas de dividir en 8 el timer para poder controlar efectivamente cada servo... Amimeocurrialomismoqueati,losmuycabr****vibraban!!llevounaopeleandomecasidiaadiaconellos,yloquetucomentases la mejor solucion que encontre hasta el momento. La unica diferencia es que hay algo me libera al timer1 de tanta tarea, algo que tambien comentaban en ese post, y es el uso del CCP1 (queporsupuestoaprendiausarenunodetusejemplitos ) El codigo lo tengo de la siguiente manera: el timer 1 esta dividido en 8 partes como el tuyo, pero SIEMPRE ocurre el overflow 2,5mS despues de haber comenzado, no le cargo la duracion del pulso en alto, PERO SI le cargo al CCP (en modo compare) el valor correspondiente para que el pulso de ese servo dure lo indicado. luego la interrupcion CCP se encarga de bajar el pulso cuando correspode. en resumen, el timer1 sube el pulso y el ccp lo baja... no se si esta manera tiene alguna desventaja o ventaja, pero por lo visto los a los dos nos funciona todo sin problemas, con una solucion muy parecida. Un saludo y espero que sigas instruyendonos como hasta ahora! Gracias otr vez!
Enlnea Lagentevelascosasqueexistenysepreguntaporqu. Yoprefieroimaginarloquenoexisteypreguntarmeporquno.

Las cucarachas dicen "No al debugger!"

jfh900
Moderadores Ser supremo Desconectado Sexo: Espaa Mensajes: 3205

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #16 : 04 de Febrero de 2008, 02:31:52

Pueshaycontroladorasde30servosfuncionandocomoest: http://www.jvmbots.com/viewtopic.php?t=431&postdays=0&postorder=asc&start=0 Y creo que funcionan como comentaba Manolo. De la estabilidad no dice nada. Manolotuhasimplementadoloquecomentaste? Un saludo

Enlnea * Cuando hables, procura que tus palabras sean mejores que el silencio. * 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein. * No hay nada peor que un experto para evitar el progreso en un campo *"Lavidaescomounanovela.Noimportaquesealarga,sinoqueestbiennarrada"Seneca DesdeEspaaJess

Nocturno
Administrador HroeTodopic Desconectado Sexo: Cuba Mensajes: 11327

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #17 : 04 de Febrero de 2008, 02:38:58

No,noloheprobado,slopensabaenvozalta. Pero conozco la controladora del amigo Julio, lo que demuestra que es posible.

Enlnea UnsaludodesdeSevilla,Espaa.

Visita MicroPIC!do! !s!


Marttyn
Colaborador Come y duerme en el foro Desconectado

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #18 : 04 de Febrero de 2008, 02:59:07

porciertodiego,mehazlevantadolacuriosidad.despuesdemasdeunaometidoenestodelospicsnuncahehechonadacon comunicacion rs232. asi que inmediatamente me meti en tu post Lo minimo para comunicaciones RS232 Hardware y software mire lo que

Sexo: Argentina Mensajes: 1076

senecesitayyameestoyllendoalatiendadeelectronicaparacomprarunmax232,4condensadoresde1uFyunode10uF a ver que sale de todo esto! algo es seguro... mientras mas cosas aprendo, mas ideas tengo, y mas cosas quiero hacer... y con la pila de cosas pendientes que tengo NOESBUENOseguiraprendiendocosas! salu2

Las cucarachas dicen "No al debugger!" Lagentevelascosasqueexistenysepreguntaporqu. Yoprefieroimaginarloquenoexisteypreguntarmeporquno.

Enlnea

RedPic
Administrador HroeTodopic Desconectado Sexo: Tibet Mensajes: 4608

Re:Algoritmoparacontrolarhasta8servosconunasolainterrupcin(enC)
Respuesta #19 : 04 de Febrero de 2008, 04:14:46

AhoraelamigoPochermehamandadounpardecdigosqueeltenapara8y16Servos.Elde8estambinunaformadehacerloqueyo he hecho con el Timer1 escrito de otra forma. El de 16 tengo que estudiarlo para ver cual es su modo de funcionamiento. Marttyn,sihevistotusprogresosconestodelosservosysabaqueteinteresabanhastalaneurosis.Sinembargotuhilodelosservos "vibrantes"sololosegualprincipioynolleguavertusolucin.Silodeseasposteaaqutcodigoyunaexplicacindecomolohacescon el CCP Compare. Juanfran,micdigonosirveparamasde8servos,peroquieroprobarcondosotresinterrupcionesa8servoscadaunahastaalcanzar16 o24servosaverquepasaconellos.Elproblemaesquefsicamentesolotengo5servosyvoyatenerquehacercomoconlodelos8y queesirmovindolospordistintospinesparavercomosoportancadaunodeellosycomprobarsi"tiemblan"ono. Yhablandode"temblar".DeloscincoServostengounoquetiemblaenelextremodemximaseala2.3ms.Noeselcanalalquelo conecteyaqueintercambindoloconcualquierotrosiguevibrandosiempreelmismoynoelcanalalquelotenapuesto.Imaginoqueel pobreyaestviejoyaquetienemasde15aosyestuvoalgunosaosmontadoenunavin.Letengomuchocario.

Enlnea Contra la estupidez los propios dioses luchan en vano. Schiller Lasuperacindelareligincomofelicidadilusoriadelpuebloeslareivindicacindesufelicidadreal.Karl Marx Alprincipio,elHombrecreaDiosylocreasuimagenysemejanza.Ludwig Feuerbach LaReliginnosayudamuchoasolucionarunosproblemasquenotendramossinoexistieselaReligin.Jaume Perich MiGeb:Picmania

Pginas: [1] 2 3 4

anterior prximo

Ir a: => Lenguaje C para microcontroladores PIC

6 ir

Powered by SMF 1.1.11 | SMF 2006-2008, Simple Machines LLC Pginacreadaen0.199segundoscon20consultas.

S-ar putea să vă placă și