Top Banner

of 113

PIC uControl + Ensamblador desde 0

Nov 04, 2015

Download

Documents

Totito_97

Tutorial sobre microcontroladores pics y lenguaje ensamblador para principiantes
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1

    Microcontroladores PIC Estructura, programacin y ejemplos prcticos

  • 2

    IntroduccinalPIC16F84A 3 MiPrimerPrograma,controldeunLED 6 CreacindeDemoras,LEDtitilando 9 CreacindeTablas,Controldisplay7Segmentos 12 DireccionamientoIndirecto,Controldisplay7Segmentos 16 Controldevariosdisplays7Segmentospormultiplexado 18 Controldevariosdisplays7SegmentoscondecodificadoresBCD 22 Interrupciones,RegistrosyguardadotemporariodeSTATUSyW 23 InterrupcinTMR0,modoTemporizador 25 InterrupcinTMR0,modoContador 28 InterrupcinRB0,ControldeLED 31 InterrupcinRB4aRB7,ControlTecladoMatricial 33 ControldelLCD,PantalladeCristalLquido 36 ComunicacinRS232 41 Introduccin 45 Timer1+Ejemplo 51 Timer2+Ejemplo 54 Mdulodecomunicacinserie(Usart)+Ejemplo 56 Comparadoresanalgicos+Ejemplo 60 IntroduccinMduloCCP 65 ModoCaptura 69 ModoPWM 71 Registrodedesplazamiento74LS164N 76 ComohacerCarteldeLEDs732 79Herramientas: Softwareparaescribirnuestrocdigoycompilar:MPLAB Softwareparasimular:Proteus Unaplaquitaprogramadora. SoftwareparagrabarnuestroPIC:WinPic800oelIcprog ConfigPIC:SoftwareutilitarioparacrearautomticamenteelcdigodeconfiguracindeestosPICs,ademsdetenerotras

    herramientasquenospermitecalculartemporizaciones,BaudRate,PWM,etc. Protoboard PIC16F84A PIC16F628A Cristalde4MHz Resistencias,capacitores,leds,Display,LCD,tecladomatricial,etctera.

    Hojasdedatos(datasheets): DatasheetdelPIC16F84A DatasheetdelPIC16F628A

  • 3

    IntroduccinalPIC16F84AEnestaentregaveremosendetallelaestructurainternadelmicrocontroladorPIC16F84A.Setratadeunmodeloantiguo,peroqueseutilizaconfrecuenciacomoherramientadeaprendizajeporqueesmuchomssencilloquelosmodelosmsmodernos.Resultaidealparaconocerlaspartesdeunmicrocontrolador,lafuncinquerealizanycmopodemoshacerquefuncionendelaformaquenosresulteconvenienteparanuestrosproyectos.IntroduccinElPIC16F84AestfabricadoentecnologaCMOS,poseememoriaFLASH,yconsumobajodepotencia.EstcompuestobsicamentedeunamemoriaROM(1024palabrasdememoriadeprograma),unamemoriaRAM(deaccesoaleatorio,68bytes),lneasdeentradaysalida(2Puertos)yunalgicadecontrolquecoordinalainteraccindelosdemsbloques.Estosmicrospertenecenalagamamediaydisponesdeunsetde35instrucciones,tipoRISC(ComputadorconSetdeInstruccionesReducido)pocasperomuypoderosas.AlgunasfuncionesespecialesquedisponeestePIC: Temporizadorprogramable(Timer).Sisequieremedirperiodosdetiempoentreeventos,generartemporizacionesosalidascon

    frecuenciaespecfica,etc.

    PerroGuardinoWatchdog.Consisteenuntemporizadorque,cuandosedesbordayapasapor0,provocaunresetautomtico,utilizadoparasistemasquenotienencontroldeunsupervisor,yalbloquearseelmicroseresetea.Siseutilizaelcdigodeberesetearloantesdequesedesborde.

    MemoriaEEPROMde64bytes,paraguardardatosquenosealteranapesardequitarlaalimentacin. Interrupciones,cuandounasealexterna,ounacondicininternaactivaunalneadeinterrupcin,dejandodeladolatareaque

    estejecutando,atiendedichainterrupcinyluegocontinaconloqueestabahaciendo.

    Proteccinantefallodealimentacin.SetratadeuncircuitoquereseteaalmicrocuandoelvoltajeVddesinferioralmnimo. Estadodebajoconsumo(Sleep).Sielmicrodebeesperarmuchotiemposinhacernada,poseeunainstruccinespecial,Sleep,que

    lopasaalestadodereposo.Alactivarseunainterrupcinsedespiertayreanudasutrabajo.(Resetexterno,desbordamientodeWatchdog,interrupcinporRB0,interrupcinporcambiodenivelenRB4aRB7,interrupcinporescrituracompletadaenEEPROM)

    Veamoseldiagramadepines,paravercmoestndistribuidossuspines.Estemicrocontroladorcuentacondospuertosconfigurablescomoestradasysalidas,yconstade18pinesloscualesseencuentranasignadosdelasiguientemanera:

    ElpuertoAtienesolocincopinesyelpin3,osea,elpinRA4/TOCKIpuedeserconfiguradoasuvezcomoentrada/salidaocomotemporizador/contador.Cuandoessalidasecomportacomocolectoabierto,porlotantodebemosponerunaresistenciaPullupaVddde1Kohm.Cuandoseconfiguracomoentrada,funcionacomodisparadorSchmittTriggerporloquepuedereconocersealesconunpocodedistorsin.ElpuertoBtiene8pinesquepuedenserconfiguradoscomoentrada/salida.RB0puedeprogramarseademscomoentradadeinterrupcinexterna.LospinesRB4aRB7puedenprogramarsepararesponderainterrupcionesporcambiodeestadoylospinesRB6yRB7secorrespondenconlneasdeentradaderelojyentradadedatoscuandoestaenmodoprogramacin.

  • 4

    MCLR/Vppeslaentradaderesetsiestanivelbajo,tambineshabilitadordetensindeprogramacin.CuandosutensinesVddelPICfuncionanormalmente.VssyVddsonlospinesdemasayalimentacin.Latensindealimentacinestcomprendidaentrelos2y5.5Volt.OSC1/CLKINyOSC2/CLKOUT,pinesdeentradaexternaderelojysalidadeosciladoracristalrespectivamente.Capacidaddecorrientedelospuertos:Lamximacapacidaddecorrientedecadaunodelospinesdelospuertosenmodosumideroesde25mAymodofuentede20mA.Lamximacapacidaddecorrientetotaldelospuestoses,PuertoA:Modosumidero80mA;Modofuente50mA.PuertoB:Modosumidero150mA;Modofuente100mA.ElOsciladorexterno:Esuncircuitoexternoqueleindicaalmicrocontroladorlavelocidadalaquedebetrabajar.Puedeutilizarcuatrotiposdistintos: RC,Osciladorconresistenciaycondensador(Pocopreciso) XT,Cristaldecuarzo. HS,Cristaldealtavelocidad LP,Cristaldebajafrecuenciaybajoconsumodepotencia.Almomentodeprogramarunmicrosedebeespecificarqutipodeosciladorseusa.Internamentelafrecuenciadelosciladoresdivididapor4,asquesitemeosunosciladorde4MHz,lafrecuenciadetrabajoesde1MHz,porloquecadainstruccinseejecutacada1us.AquutilizaremosuncristalXTde4MHzquedebeiracompaadodedoscondensadores:

    Reset:ElPIC16F84Aposeeuntemporizadorinternoconectadoalpindereset,quefuncionacuandosedaalimentacinalmicrocontrolador.Estohacequealencenderelsistemaelmicrocontroladorquedeenresetporuntiempomientrasseestabilizantodaslassealesdelcircuito.Paratenercontrolsobreelresetseutilizaelsiguientecircuito:

    EstructurainternadelMicrocontrolador

  • 5

    ArquitecturadelPIC,existendosarquitecturas,laclsicadeVonNeumannylaarquitecturaHarvard,estaltimaeslaqueusanlosPICs.Disponededosmemoriasindependientes,unaquecontienesoloinstruccionesylaotrasolocontienedatos.Ambasdisponendesusrespectivosbusesdeaccesoyesposiblerealizaroperacionesdeaccesosimultneamenteenambas.

    Memoriadelprograma:Aqualmacenamosnuestroprogramaocdigoquedebeejecutar,enelPIC16F84AesFLASH,esrpida,debajoconsumoyaltacapacidaddealmacenamiento.Sedivideen2048posiciones,peroestePICsolotieneimplementadas1024posiciones,de000hasta0x3FF.

    Cuandoocurreunreset,elcontadordeprograma(PC)apuntaaladireccin000,yelmicroinicianuevamente.Aqusedebeescribirtodolorelacionadoconlainiciacindelmismo,porejemploconfiguracindepuertos,etc.SiocurreunainterrupcinPCapuntaaladireccin004,yaqudebemosescribirelcdigonecesarioparaatenderadichainterrupcin.

  • 6

    MemoriaRAMesttica:Dondeseencuentranlos24registrosespecficos(SFR)y68registrosdepropsitogeneral(GPR).Sehalladivididaen2Bancosde128bytescadauno.AlgoquesedebetenerencuentaeslapilaoStack,queconstade8posiciones,cadaposicincontieneladireccinydatosdelainstruccinqueseestejecutando,ascuandoseejecutaunallamadacallounainterrupcin,elPCsabednderegresar.

    MiPrimerPrograma,controldeunLEDEnestaentregaescribiremosunprogramaquees,enelmundodelosPICs,elequivalentealclsicoHelloWorldqueseutilizacomoprimerprogramaduranteelaprendizajedecualquierlenguajedeprogramacin.DadoquetodavanosabemoscmoutilizarunapantallaLCDparaescribirunmensaje,nuestroHelloWorldserencenderyapagarunLEDconectadoaunpindelmicrocontrolador.Apesardesuaparentesencillez,esteejemplonospermitirconocerlosprimeroselementosdelaprogramacindeestaplataforma.Acontinuacinvamosadesarrollarnuestroprimerprograma.Consideramosdemuchautilidadrepasaratentamenteelcursodelenguajeassembler(MPLAB)queelusuarioLeonPichadesarrolladoenelforouControl.EsteprogramaactivarunledconectadoaRB0siemprequeelinterruptorconectadoaRA0estcerrado.Paraellovamosanecesitarelsiguientecircuito:

  • 7

    EnRA0tenemosconectadounpulsadordeformaquecuandolopulsemosseintroduzcauncerolgicoenelpinycuandonolopulsemosseintroduzcaununolgico.TenemosunLedconsucorrespondienteresistencialimitadoradecorrienteenelpinRB0.

    DiagramadeFlujo:

    Primeroquenadadebemosespecificarconquemicrocontroladorestamostrabajando,estolorealizamoseslasdosprimeraslneas:

    EnelarchivoP16F84A.incseencuentranlasdefinicionesdelasdireccionesdelosregistrosespecficos,losbitsutilizadosencadaregistroylosfusiblesdelmicro.

  • 8

    Configuracindefusibles:HayciertosaspectosdelPICquehandeseractivadosodesactivadosmediantehardwarealahoradeprogramarlo.Estoquieredecirquenosepuedenvolveracambiarhastaqueelchipnosereprogramedenuevo.ElPIC16F84Adisponede4fusesofusibles(losmodelossuperiorestienenms).Cadafuseactivaodesactivaunaopcindefuncionamiento:

    1. OSC:EstefusecontrolaelmododeoscilacinqueusarelPICparafuncionar.Comoyasabemos,elosciladorsepuedeconfigurarde4manerasdistintas,dependiendodelavelocidadydeltipodecircuitoosciladorempleado.

    2. WDT:ElfamosoperroguardindelPICseconfiguraaqu.Estaesunacapacidaddelmicrocontroladordeautorresetearse.3. PWRT:Siactivamosestefuse,loqueconseguimosesquesegenereunretardoenlainicializacindelmicrocontrolador.4. CP:ActivandoestefusetendremoslagarantadequeelcdigoqueescribamosenelPICnopuedaserledoporotrapersona,

    paraquenonoslocopien,modifiquen,etc.(CodeProtection).EstonoimpidequeelPICfuncionecomosiempre,niquenosepuedasobrescribirsucontenido

    Definicindevariablesqueutilizaremosennuestroproyecto:Enestecasosolodefiniremosbits,porejemploLedyPulsador.Paraorganizarnuestroprogramaloestructuraremosdelasiguientemanera:

    NivelDirectivaOperandos;Comentarios

    Configuracindepuertos:Paralaconfiguracinnecesitamoslossiguientesregistros: STATUS>003 PORTA>005 PORTB>006 TRISA>086 TRISB>086Pordefectolospuertosquedanconfiguradoscomoentradasdedatosysisequierecambiarhayqueconfigurarlos.EstoserealizaconlosregistrosTRISAyTRISB,teniendoencuentaquesiseasignauncero(0)aunpin,quedaracomosalidaysiseasignaununo(1),quedaracomoentrada.EnnuestrocasosenecesitacolocarTRISAiguala11111(osepuededejarpordefault)yTRISB11111110.Ahorabien,cuandoelPICarrancaseencuentraenelBanco0,TRISAyTRISBseencuentranenelBanco1,entoncesdebemoscambiardeBanco.EstoserealizaconelbitRP0delregistroSTATUS.SiesteseponeunceroaRP0,estaremosenelBanco0.Sisecolocaununo,estaremosenelBanco1.

    RegistrodetrabajoW:eselregistromsimportantequetieneelmicrocontroladoryesdenominadoACUMULADOR.EsteregistroalmacenatemporalmenteunodelosdatosqueintervienenenlaoperacindelaUnidadlgicayAritmtica(ALU).ALUcomoindicasunombre,realizalasoperacionesaritmticasylgicasprevistasenlacoleccindeinstruccionesdelmicrocontrolador.

  • 9

    YaconfiguradonuestroPIC,vamosarealizarlarutinaqueejecutar:

    Aqusolamenteenunbucleinfinitotesteamoscontinuamenteelestadodelpulsador,ysegnsuestadoseencenderoapagarelLed.Programacompleto:

    Buenoaquyatenemosnuestroprogramitaterminado,solofaltacompilarloysimularloparadetectarerrores,estoestamnimamenteexplicadoeneltutorialdelUtilitarioMPLABadjuntadoalprincipio.

    CreacindeDemoras,LEDtitilandoUnodelostemasmsimportantesalahoradeprogramarunaaplicacinenunPICeslacorrectaimplementacindelasrutinasdedemoras.Apesardequeaprimeravistapuedeparecerquenuestrocdigodeberaserlomsrpidoposibleycarecerporcompletodedemoras,lociertoesquecontinuamentenecesitamosdeestasrutinas,yaseaparaesperarqueunperifricoestlistooquehayatrascurridoeltiemponecesarioparaqueundatohayasidotransmitidoorecibido.Enestaentregaaprenderemosaprogramardemorasconunagranprecisin.DenominamosCiclodemaquinaalaunidadbsicadetiempoqueutilizaelmicrocontrolador,yequivalea4ciclosdereloj.sea,sitenemosunosciladorde4MHz,elcicloderelojseriade250nsyelciclomquinade1us.Lasinstruccionesdelmicrocontroladornecesitan1ciclomquina,exceptoalgunasexcepcionescomosonloscomandosqueincluyensaltos(goto,call,btfss,btfsc,return,etc)quenecesitandosciclosmquina.

  • 10

    Demorasmediantelazosimple:

    Entreparntesissemuestraelnmerodeciclosquedemoracadainstruccin.DemaneraqueelnmerodeciclosdeinstruccinTsubconsumidosporlarutina,incluyendolos2ciclosdelallamada(CALL)sernTsub=[2+1+1+(0xXX1)*(1+2)+2+2]ciclos=(3*0xXX+5)*TcyDondeTcyesladuracinensegundosdeunciclodeinstruccin.Utilizandounosciladorde4MHzlamayorduracinposibleesde770us,con0xXX=0xFF.DemorasmedianteLazosanidados:Paralogrardemorasdemayorduracindebenutilizarselazosanidados,poniendounlazodedemoradentrodeotro.

    LaduracindeestarutinaenciclosderelojserTsub=2+1+1+(0xXX)*[1+1+(0xYY1)*(1+2)+2+1+2]+[1+1+(0xYY1)*(1+2)+2+2+2]ciclosLocualsepuedesimplificarcomosigueTsub=[0xXX*((0xYY1)*3+7)+5]TcyEnestecasoeltiempomximodedemoraquesepuedeconseguiresdeaproximadamente196milisegundos.Buenoahoraqueseentiendecomoserealizanlasdemoras,lesadjuntounprogramitaqueobtieneelcdigonecesarioparaunapausa,ingresandoelvalordelamismaylafrecuenciadelosciladorutilizado.

    Ejemplo:Veamoscomocalculardemoras.SehartitilarunledconectadoaRB0siemprequeelinterruptorconectadoaRA0estcerrado.

  • 11

    DiagramadeFlujo:

    Programa:

  • 12

    CreacindeTablas,Controldisplay7SegmentosUnodeloscomponentesmsutilizadosparamostrarinformacinenlosproyectoscontroladosporunmicrocontroladorsonlosdisplaysde7segmentos.Constande7(uocho)diodosLEDconectadosenformade8,avecesconunpuntodecimal,ysoncapacesderepresentardgitosdel0al9.Enestaentregaveremoscmoutilizarlosennuestrosproyectos,alavezqueevitamoslosrebotesdeunpulsador.Comosiempre,unaentregamuyimportantedeestetutorial.CreacindeTablas:ControldeunDisplayde7Segmentos.UndisplayesunacoleccindeLEDsubicadosdeformaestratgica.SiselosagrupauniendosusctodosserdeCTODOCOMN,obienagrupandosusnodos,undisplaydeNODOCOMN.PorotroladoestosLEDspuedenserfabricadosenformadepuntososegmentos,talesasqueseencuentrandisplayde7segmentos,comolosdelaimagen:

    Elprogramaquerealizaremosleerlacantidaddevecesqueseactivaunpulsadorymostraremoselresultado.Conectaremoseldisplayenformadirecta,esdecirconectandoelpuertoBdelmicroalospinesdeldisplay,yluegoencendercadaunodelossegmentosdelparavisualizarelvalorcorrespondiente.Paraellocrearemosunatablaquecontengalosdistintoscdigosparaelnumeroquenecesitemosvisualizar.

  • 13

    Esobvioqueconunsolodisplaysolamentepodremoscontarde0a9.DiagramadeFlujo:

  • 14

    Antesdecontinuartrataredeexplicaralgunosregistrosimportantes:ElPC(ProgramCounteroContadordePrograma).Direccionamientodelprograma:Especificaladireccindelainstruccinqueseejecutar.Constade13bits,conloqueesposibledireccionarhasta8Kpalabras,peroenel16F84Asoloseimplementa1k.

    Lapartealtadelcontadordeprograma(PCH)nosepuedeaccederdirectamente,elladebecargarsedesdelos5bitsmsbajosdelregistrollamadoPCLATCH(direccin008).Enlacreacindetablas,laposicinaleerdelamismaserealizaconelcontroldelregistroPCL.Esteregistroesde8bits,porloquedireccionasolo256posiciones,porellosedebetenerencuenta: Laposicindelatablaenlamemoriadeprograma. Eltamaodelatabla,sinuestratablatienemsde255posiciones,siosidebemosmanejarlosbitsmssignificativosdePC

    [PCLATCH]).Paradevolverelvalordireccionadoseutilizaretlw,estainstruccindevuelveunvalorenelacumuladoralretornardeunasubrutina.Lacreacindelatablasehardelasiguienteforma:

    DondeValor0,Valor1,Valor2etc.sonlosvaloresquequeremosalmacenarenlatabla.Laestrategiaaseguirparaconsultaralgnvalordelatablaescargarenelacumulador(W)ladireccindelatabladondeseencuentraelvalorquequieresleerydespusllamaralasubrutinaTABLA(conunCALL).Advertencia:lacargadeWnopuedesuperarelnmerodevaloresdelatabla,sinoseestarejecutandounainstruccinerrneaprovocandounmalfuncionamientodelprograma.

  • 15

    Explicadolonecesariopasamosalcdigodelejemplo:

  • 16

    UnamaneramscmodadeescribirlatabladeinstruccionesRETLWpuedelograrseusandoladirectivaDT(DefineTable)delensamblador,lacualnospermitedefinirunatabladedatosquesersustituidaporunalistadeinstruccionesRETLW;as,latablaanteriorpuedequedarcomosigue:

    Controlantirebote:Enelmomentodepresionarunbotnpulsadorocualquierconmutadorelectromecnicoesinevitablequeseproduzcaunpequeoarcoelctricoduranteelbreveinstanteenquelasplacasdelcontactoseaproximanosealejandesuspuntosdeconexin.

    Laduracindeestedependedelacalidaddelosswitchesylavelocidaddeaccionamiento,peronoduramsde20milisegundos.Seadjunta

    DireccionamientoIndirecto,Controldisplay7SegmentosEnlaentregaanterioraprendimosautilizartablasparaguardardatos,yaplicamoseseconocimientoparaelaborarunprogramacapazdemostrardgitosenundisplayde7segmentos.Enlapresenteentradaveremosotrasformasdeimplementarunatabla,concretamentelaqueseconocecomodireccionamientoindirecto,medianteelusodelosregistrosFSRyINDF.Estonosbrindarunanuevamaneradeaccederatablasoarreglosdedatos.Otraformadecrearunatabla:DireccionamientoIndirecto.EnlaprogramacindelosmicrocontroladoresPIClamayoradelasinstruccionesempleandireccionamientodirecto,perotambinesposiblequeoperenenunmododedireccionamientoindirecto.Paraeldireccionamientoindirectoseempleandosregistrosespeciales:elFSRyelINDF(esteltimonoesunregistrofsico).ElregistroFSRseempleaparasealaroapuntaraunadireccindelamemoriaRAMcuyocontenidopuedeserledooescritodeformaindirectaempleandocualquierinstruccinqueusecomooperandoalregistroINDF.Estaformadedireccionamientoesparticularmentetilcuandosemanejantablasoarreglosdedatos.DirectovsIndirecto:

  • 17

    UtilizaremoseldireccionamientoIndirectoparacrearlatabladecontroldeldisplay.Aqunoutilizaremoselpulsador,soloseharelcontadorautomticode0a9.Aliniciarelmicrocontroladorcargaremoselcdigode7SegmentosparacontrolarelDisplayenlamemoriadeDatoscondireccionamientoindirecto.Luego,alrealizarelconteoleeremoselcdigocorrespondientealmacenadoyloenviaremosalPORTB.AquutilizamoselregistroSTATUSnuevamente,peroparacontroldelasoperacionesaritmticas.Nosotrosguardaremoselcdigode7Segmentosdel0al9,enlosregistros010a019.Sinuestrocontadornosdireccionaelregistroubicadoen0x1A,queserael10,loreseteamosydireccionamosel0,searegistro010.Estolohacemosrealizandolarestadelregistroseleccionadoy0x1A,FSR0x1A,ysielresultadoescero,reseteamos.ElbitZ(Zero)delregistroSTATUS,esteindicasiunaoperacinlgicaoaritmticarealizadadacomoresultadocero.TambintenemoselbitC(Carry)(0),queeninstruccionesaritmticasseactivacuandosepresentaunacarreodesdeelbitmassignificativodelresultado,elbitDC(DigitCarry),queenoperacionesaritmticasseactivasiocurreacarreoentreelbit3ybit4.Cdigocompleto:

  • 18

    Controldevariosdisplays7SegmentospormultiplexadoHemosvistocmoaccederadatosguardadosentablas,yaseademododirectocomodemodoindirecto.Enesasentregasutilizamosestemecanismopararepresentardgitossobreundisplayde7segmentos.Peroengeneralestosdisplaysseutilizanengrupos,avecesmuynumerosos.Cuandoestoocurreseimplementaloquesedenominamultiplexado,queeslatcnicaqueaprenderemosautilizarenlapresenteentregadeestetutorial.Paraelcontroldevariosdisplaylaideaesmultiplexarlasealenviadaporelmicrocontrolador,conladministraremoselencendidodecadadisplayysussegmentos(locualsehaceporprograma).Paraejemplificarharemosuncontadorautomticode0a999.Elhardwarenecesarioeselsiguiente:

  • 19

    DiagramasdeFlujo:

  • 20

    SeobservaqueelPuertoBseutilizaparaenviarlosdatosamostrarencadadisplay,mientrasqueporelPuertoAseleccionaseldisplayquemostraresedato.Supongamosquequieromostrar231,puesmuyfcil,pongoelpuertoBen0000110(cdigoparael1),yactivoahorael3transistorporunperiododetiempocorto,desactivamosestetransistor,cargamoselpuertoBcon1001111yactivamosel2transistorporuninstante,ylomismohacemosparamostrar1.Repetimosestamismasecuenciamientrassequieramostrarestevalor.Lasecuenciaestanrpidaqueelobservadornonotaelmomentoenquecambiasdedisplay.Controldeconteo:PararealizarelconteoincrementamoscontinuamenteUnidad,cuandoestllegaa10,lasreseteamosa0,eincrementamosen1Decena.LamismaoperacinserealizaconDecena,alllegara10sellevaa0yseincrementaCentena.

  • 21

  • 22

    Enesteejemplosemantienelavisualizacindelmismovalorduranteaprox.300ms,sepuededeterminaryaqueutilizamos3demorasde5msdespreciandolosciclosutilizadosenloscomandos,quesonaprox.30(30us).Entoncesporciclotenemos15ms,ypor20repeticiones,300ms.

    Controldevariosdisplays7SegmentoscondecodificadoresBCDSiemprehaymsdeunaformaderealizarunatarea,ylaprogramacindePICsnoesunaexcepcinaestaregla.Hemosvistocomocontrolarvariosdisplaysde7segmentosmedianteelmultiplexadodelassealesquegeneraelPIC,peroesanoeslanicaformadehacerlo.Hoyveremoscmoutilizarlospopularescircuitos74LS47,74LS249oelCD4511,quesonloquesedenominandecodificadoresBCD.DecodificadorBCD:LaotraposibilidadesutilizarundecodificadorBCDcomoel74LS47oel74LS249,oelCD4511.Estosintegradosdisponende4entradascorrespondientesauncdigobinarioBCD,y7salidasqueseconectanaundirectamenteaundisplay.

    Loimportantedeesteintegrado,esqueposee4pinesdeentraday7desalida,msunoscuantosdeconfiguracin.Elhechoesquelos4pinesdeentrada(A,B,CyD)sernlosquerecibanelcdigoenbinarioenviadoporelmicro.Unavezrecibidoeldato,elintegradoseharcargodedecodificarloyenviarloporlospinesdesalida(a,b,c,d,e,fyg)paramostrarloeneldisplay.Loquenecesitamossaberesquedatodeberenviaraldecodificador.Yesolopodemoshacerimplementandounatablacomolasiguiente:DCBAValorquemuestraelDisplay00000000110010200113010040101501106011171000810019Unavezquehemosconstruidolatabla,podemosimplementarelprogramacomohemoshechoantes,utilizandoelmododedireccionamientodirectooeldireccionamientoindirecto.

  • 23

    Interrupciones,RegistrosyguardadotemporariodeSTATUSyWUnadelascaractersticasmsinteresantesdelosmicrocontroladoreseselmanejodeinterrupciones.Enpocaspalabras,esunmecanismoqueinterrumpe(deahsunombre)laejecucinnormaldeunprogramacuandoocurreuneventodeterminado.Sepuedenprovocarinterrupcionesportiempo,porlamodificacindelestadodeunpin,etctera.Elconocimientodelastcnicasnecesariasparaprogramarinterrupcionesesfundamentalparaaprovecharafondounmicrocontrolador.INTERRUPCIONESUnadelascaractersticasmsimportantedelosmicrocontroladoresyquemencionamosaliniciodeltutorial,esquetienenlaposibilidaddemanejarinterrupciones.Setratadeunacontecimientoquehacequeelmicrodejedeladoloqueseencuentrarealizando,atiendaesesucesoyluegoregreseycontineconlosuyo.Haydostiposdeinterrupcionesposibles,unaesmedianteunaaccinexterna(esdecirporlaactivacindeunodesuspines),laotraesinterna(porejemplocuandoocurreeldesbordamientodeunodesusregistros)EnelPIC16F84Ahay4fuentesdeinterrupcin: PorelpinRB0/INT,queregresaalPICdelmodoSLEEP(interrupcinexterna). PorlospinesRB4aRB7,configuradoscomoentradayencasodequealgunodeelloscambiedeestado(interrupcinexterna). PordesbordamientodelregistroTMR0,cuandoesteregistropasade255a0endecimal(interrupcininterna). AlcompletarlaescrituradelaEEPROMdedatos(interrupcininterna).Cadafuentedeinterrupcinestcontroladapor2bits.Unbitlocaldeinterrupciones(TerminadoenE)depermisooprohibicindeejecucin.Siesten0bloquearlasolicituddeinterrupcin,ysiestaen1permitirlaejecucin.Unbitqueactacomosealizador(TerminadoenF)elcualesactivado(puestoa1)sisehaproducidolainterrupcin.Ademsexiste1bitdecontrolglobal,elbitGIE(INTCON)elcualsiestadesactivadobloqueatodaslassolicitudesdeinterrupcin.Loanteriordescritopuedeentenderseobservandoeldiagramalgicodelasiguientefigura:

    ElbitGIEseborraautomticamentecuandosereconoceunainterrupcinparaevitarqueseproduzcaotramientrasseestatendiendoalaprimerayalretornardelainterrupcinconlainstruccinRETFIE,elbitGIEsevuelveaactivarponindosea1.Encambiolosbitssealizadoresobanderasdeinterrupcindebenserpuestosaceroporeltratamientodelainterrupcinrealizadaporelusuario(elprogramador)Cuandounainterrupcinesthabilitada(subitlocaldehabilitacinestactivado,elbitGIEestactivado)yocurreeleventoquela

  • 24

    activa,elvalordePCseguardaenlaPILAyenstesecargael004(nicovectordeinterrupcin).Esapartirdeestadireccinquesedebecolocareltratamientodelainterrupcin,detectandopormediodelosbitsbanderasculdeloseventoshaocurridoyactuarsegnseaelcaso.Nota:ElnicoregistroquesesalvaenlaPILAesPC,parapreservaralgnotroregistrodebeserelpropioprogramadeatencinalainterrupcinelqueseencarguedesalvarsuestadoaliniciodelarutinaydedevolverlosalfinaldelmismo.Resumiendo,lasaccionesqueserealizanautomticamenteelmicrocontroladorylasqueelprogramadordebetenerencuentaensusprogramassonlassiguientes: Cuandoseactivaunaposiblecausadeinterrupcin,elflagcorrespondienteseactiva.Sielbitdepermisocorrespondienteesta1y

    elbitdehabilitacindetodaslasinterrupciones(GIE)esta1,seproducelainterrupcin.

    Paraevitarqueseproduzcaotrainterrupcinmientrasseestatendiendoaotraanterior,elbitGIEseponea0. ElvalordelPCseguardaenlaPILA ElPCsecargaconelvalor004,queeselvectordeinterrupciones Elprogramador,debecomenzarlarutinadeatencinalainterrupcinconunsaltoalaposicindememoriadondeseencuentrael

    programa,seguidamenteseguardantodoslosregistrosquepuedansermodificadosporesta,seguidamentesiestnhabilitadasvariasvasdeinterrupcin,sedebeexplorarelvalordelasbanderasparadeterminarlacausadelainterrupcin.

    Dependiendodelacausadelainterrupcin,larutinadeinterrupcinsebifurcaalasubrutinacorrespondiente. Sedebendevolverlosvaloresquetenanlosregistrosantesdeproducirselainterrupcinysedebenborrarporsoftwarelas

    banderasqueindicanlasfuentesdelasinterrupciones,antesdelretornoalprogramaprincipal.

    Cuandosellegaalaltimainstruccindelarutinadeinterrupcin,RETURN,secargaelPCconelvalorqueseguardinicialmenteenlaPILAyelbitGIEseponeautomticamentea1.

    Bitsutilizados: INTFparaRB0/INT,bit1deINTCON,sies1ocurriinterrupcinexterna RBIFparalospinesB4aRB7,bit0deINTCON,sies1porlomenosunpincambiodeestado T0IFparaTMR0,bit2deINTCON,sies1TMR0desbordado EEIFparalaEEPROM,bit4deEECON1,sies1sehacompletadoescritura GIE,bit7deINTCON,sies1habilitatodaslasinterrupciones EEIE,bit6deINTCON,sies1seactivainterrupcionesdeperifricos T0IE,bit5deINTCON,sies1int.TMR0activada INTE,bit4deINTCON,sies1int.Externaactivada RBIE,bit3,sies1int.PorRB4aRB7activadaTodosestosbitsalresetearseoiniciarseelmicroseencuentranen0.RutinadeServiciodeInterrupciones:PrimerodebesguardarelcontenidodelregistroW,elproblemademoverWaotroregistro(haciendousodemovf)esqueestainstruccincorrompelabanderaZ,modificandoelregistrodeSTATUS.SegnlahojadedatosotorgadaporMicrochip,enunodesusapartadosrecomiendaunasecuenciadecdigoquepermiteguardaryrestaurarlosregistrossinmodificarlos.

  • 25

    LosregistrosW_TempySTATUS_Tempsonregistrosalternativosparaguardartemporariamentesusvalorescorrespondientes.

    InterrupcinTMR0,modoTemporizadorEnestaoportunidadveremoscmotratarlasinterrupcionesquesedisparanmedianteelcontador/temporizadorde8bitsTMR0.Setratadeunregistroqueseincrementacontinuamente,aunritmoqueleimponeunpreescaleryelrelojinternodelmicrocontrolador.Puedefuncionarenmodotemporizador,yseguramenteencontrarsdecenasdeaplicacionesparatodoloqueaprendasenestaentrega.

    INTERRUPCIONPORTMR0ElTimer0esuncontador/temporizadorde8bits.ElregistroprincipaldeestemduloesTMR0(001).EsteregistroseincrementacontinuamenteaunafrecuenciaseleccionablemanejadaporunpreescaladoryelrelojinternoFosc/4(modotemporizador)obien,porunpreescaladoryunasealexterna(modocontador).Enlasiguientefigurasemuestraundiagramadebloquesdeestemdulo,endondeseindicanlosbitsqueafectansuoperacinylamaneraenquelohacen.

  • 26

    ElmodoTemporizadorEnelmodotemporizadorlasealderelojquecontrolaelincrementodelregistroTMR0eslafrecuenciaFcy=Fosc/4,lacualpuedeserdivididaopcionalmenteporelpreescalador.EstemodoesseleccionadoallimpiarelbitT0CS(OPTION_REG).EnestemodosiserealizaunaescrituraalregistroTMR0,suincrementoesinhibidoporlossiguientesdosciclosdeinstruccin(Tcy)ysielpreescaladorestasignadosepierdelacuentaperonosuasignacin.ElmodoContadorEnelmodocontador,lasealquecontrolalosincrementosdelregistroTMR0esunasealexternaqueprovienedelapatitaT0CKIponiendoelbitT0CSenalto.SepuedeseleccionarlatransicinqueprovocalosincrementosmedianteelbitTimer0SourceEdgeSelectT0SE(OPTION_REG),limpiandoestebitseseleccionalatransicindesubida,mientrasquealponerloenaltoseseleccionaladebajada.Observacin:Enestemodo,lasealconectadaaTOCKIesmuestreadadurantelosciclosQ2yQ4delrelojinterno,porelloesnecesarioquepermanezcaenaltoalmenospor2Toscmsunpequeoretardode20nsegylomismoenbajo.(Esdecir,sealesdemasiadorpidasnopodrnserdetectadas).Elpreescalador:Elpreescaladoresundivisordefrecuenciademduloseleccionable.Comosepuedeverenlafiguraanterior,elpreescaladorestcompartidoentreeltimer0yelmduloWatchdog,sinembargoslopuedeconectarseaunodelosdosyestoseestablecemedianteelbitPSA(OPTION_REG),as,conestebitenaltoelpreescaladoresasignadoalrelojdelWatchdog,mientrasqueconunnivelbajoenPSAelpreescaladordividirlafrecuenciaquemanejaalTimer0.Laseleccindelmdulo(valordedivisindefrecuencia)delpreescaladorsepuederealizarmediantelosbitsPS2,PS1,PS0(OPTION_REG)deacuerdoalasiguientetabla:

    Ejemplomodotemporizador:Paracalcularunatemporizacinsenecesitaeltiempodeunciclodeinstruccin(esdecir1microsegundo,sieststrabajandoconunXTde4Mhz),elvalordelDivisordeFrecuencia(elqueseleccionabasconlosbitsPS2,PS1yPS0),yfinalmenteelcomplementodelvalorcargadoenTMR0(esdecir255TMR0).Entoncestenemos:Temporizacin=Ciclodeinstruccin.(256TMR0).DivisordeFrecuenciaDeestemodosiqueremostemporizar4msconundivisordefrecuenciade32,tendramos:TMR0=256^[4000us/(1usx32)]TMR0=131VemosquelamximatemporizacinposibleesconTMR0=0,yDivisordeFrecuenciaen256,logrndoseunos65.5msaprox.ParaejemplificarelusodeestainterrupcinharemostitilarunledconectadoalPINRB0cada200ms,paraelloharemosunatemporizacinconTMR0de50msycontaremos4desbordesdelmismoparalograrlos200msnecesarios.Lointeresantedeusarinterrupcinesqueconelmicrosepuedeestarejecutandocualquiertareaynoocuparestetiempoenunbuclededemora.Elhardwarenecesarioesequivalentealprimerejemplorealizado.

  • 27

    Diagramadeflujo:

  • 28

    Unaayudaadicional:ElprogramitapresentadoenelprimerposttieneunautilidadquenosayudarenelclculodelpreescaleryvalorinicialdelTimerparaobtenerunatemporizacindeseada,apartedegenerarelcdigo.

    InterrupcinTMR0,modoContadorEnlaentregaanteriorcomenzamosavercmoaprovecharlasinterrupciones,yexplicamosquepodamosutilizarlasinterrupcionesenmodotemporizadoryenmodocontador.Cadaunodeestosmodostienesusventajas,yresultaadecuadoendiferentesaplicaciones.Enestaoportunidadveremosunejemplodelasinterrupcionesenmodocontador,contando(valgalaredundancia)elnmerodevecesqueseproduceuncambiodeestadoenunpindelPIC.Ejemplomodocontador:

  • 29

    ElsiguienteprogramarealizaelconteodelnmerodevecesqueproduceunatransicindebajoaaltoenlapatitaT0CKI.Elvalordelcontadorseincrementarunavezporcadadostransiciones,yaldetectarse10cambiamoselestadodelLEDconectadoaRB0.

    DiagramadeFlujo:

  • 30

    Cdigo:

  • 31

    InterrupcinRB0,ControldeLEDSeguimosaprendiendocomoutilizarlasinterrupciones.Yahemosvistoconanterioridadalgunasdesusparticularidades,yenestaoportunidadaprenderemoscomoutilizarinterrupcionesexternas,esdecir,lasquesedisparancomorespuestaauneventoquetienelugarfueradelmicrocontolador.ComenzaremosconlasqueprovienendemodificacionesenelestadodelpinRBO/INT.INTERRUPCIONEXTERNA,RB0/INTParaelcontroldelainterrupcinexternasenecesitandosbitsms,ellossonRPBU(OPTION_REG,queactivaodesactivalasresistenciasPullUpinternasdelPORTB,encasodequeeldispositivoconectadoalpuertoseadecolectorabiertoyelmsimportanteINTEDG(OPTION_REG),siestaen1,lainterrupcinsegeneraporflancoascendente,yen0,lainterrupcinsegeneraporflancodescendente.Paramostrarsuusoharemosunejemplosencilloquemuestrecomoseconfigura,elcualalpresionarunpulsadorconectadoaRB0cambiarelestadodeunledconectadoaRB1,paraelloconfiguramosquelainterrupcindegenereporflancoascendente.DiagramadeFlujo:

  • 32

    Cdigo:

    .

  • 33

    InterrupcinRB4aRB7,ControlTecladoMatricialContinuamosaprendiendoasacarprovechodelasinterrupcionesexternas.HabamosvistocomoutilizarloscambiosenelestadodelpinRB0/INT,yhoyaprenderemosautilizarlasqueprovienendelospinesRBAaRB7paradetectarqueteclasehapresionadoenuntecladomatricial.Estaentregaesmuyimportante,yaquenospermiteaprenderautilizarteclados,algomuycomnenlosproyectosqueutilizanmicrocontroladores.INTERRUPCIONEXTERNA,RB4aRB7AprovecharemosestainterrupcinparadetectarcuandosehapresionadounatecladeunTecladoMatricial.Untecladomatricialesunsimplearreglodebotonesconectadosenfilasycolumnas,demodoquesepuedenleervariosbotonesconelmnimonmerodepinesrequeridos.Untecladomatricial43solamenteocupa4lneasdeunpuertoparalasfilasyotras3lneasparalascolumnas,deestemodosepuedenleer12teclasutilizandosolamente7lneasdeunmicrocontrolador.Paradetectarlateclapresionadaseutilizaraelsiguientehardware:

    ConfiguraremosRB0aRB3comosalidasylascolocaremosanivelbajo.RB4aRB7configuradascomoentradas,yenestadonormal(sinpresindeteclas)estarnanivelalto.Alpresionarunateclaseconectaunafilaconunacolumna,seproduceuncambiodenivelenalgunadelascolumnas(denivelaltoabajo),ysegeneralainterrupcin.Paradetectarqueteclasehapresionado,secolocanRB0aRB3anivelalto,ysepasananivelbajodeaunaporvez,detectandosiseproducealgncambioenlascolumnas.

  • 34

    Seutilizaunavariablequeseincrementaconlacuentadelasteclasrevisadas,deestemodoaldetectarunapulsacinelvalordelacuentaserelvalordelateclapresionada.Sialfinalnosepresionningunateclalavariableseponeaceroylacuentavuelveacomenzar.EnnuestroejemplorepresentaremoslateclapresionadaenformabinariaconledsconectadosalpuertoA.DiagramadeFlujo:

  • 35

    Cdigo:

  • 36

    TambinconlavariableNTecla(NumerodeTeclapresionada)sepuedeutilizarcomoentradaaunatablaparacodificarenASCKIIlateclapresionada:Cdigo:

    ControldelLCD,PantalladeCristalLquidoCuandoexplicamoscomomostrarinformacinenunoomsdisplaysdeLEDsseguramentepensastequeenalgunoscasosseramejorutilizarunapequeapantallaLCDalfanumrica.Enestaentrega,luegodehabervistocmoutilizaruntecladomatricial,vamosaanalizarlasrutinasnecesariasparaquenuestrosproyectospuedanincorporarestasverstilespantallas.Conestoselementosnuestrosproyectosestarnalaalturadelosprofesionales.ControldelLCDLapantalladecristallquidooLCD(LiquidCrystalDisplay)esundispositivoControladodevisualizacingraficoparalapresentacindecaracteres,smbolosoinclusodibujos(enalgunosmodelos).Enestecasodisponede2filasde16caracterescadaunaycadacarcterdisponedeunamatrizde57puntos(pixels),aunqueloshaydeotronmerodefilasycaracteres.EstedispositivoestgobernadointernamenteporunmicrocontroladorHitachi44780yregulatodoslosparmetrosdepresentacin,estemodeloeselmscomnmenteusadoylainformacinqueseadjuntasebasarenelmanejodeesteuotroLCDcompatible.

  • 37

    ConexindelmduloLCDalPIC16F84Amediantebusde4bits.

    Enesteejemploharemosusodedosdirectivasmsdeensamblador.Estasson#DEFINEymacro.#DEFINEesempleadoparacrearsustitucionesdentrodeltextodelprogramaquelosimplifiquen.Laformacorrectaes#DEFINENOMBRETEXTO,conloque,cadavezqueelcompiladorencuentrelaordenNOMBRE,lasustituirporeltexto.Elproblemaquesenosplanteaesque,sibienesmsflexiblequeladirectivaEQU,puestoqueestaslonospermitaasignarunvalor,slosenospermitecon#DEFINEunalneadetexto,yestadebeserfija.

    Esteproblemasesolucionamediantemacro.Estadirectivatienelasiguienteforma:

    DeestemodoNOMBREsersustituidocomocomandoporlasecuenciacompletadefinidatrasmacrohastaendm,ylossucesivosargumentossern,asuvez,sustituidosdentrodeltexto.EnnuestroejemploloutilizaremosparaenviaruncarcterouncomandoalLCD,delasiguientemanera:Cdigo:

  • 38

    RutinasdeControl: LCD_Config_puertos:ConfiguralospuertosdelPICparaelusodelmduloLCD,soloafectaalospinesutilizados. LCD_Init:InicializaelmduloLCDparasucorrectofuncionamiento.Esnecesarioejecutarestasubrutinaalprincipiodelos

    programasquevayanautilizarlavisualizacinmedianteLCD. LCD_Bandera:ExploraelestadodelabanderaBusy(ocupado)delmduloLCDyesperaqueterminecualquiercomandoprevio

    antesdevolveralarutinaquelellamo. LCD_Enable:HabilitaelmduloLCDdurante2uspararecepcindedatosoenvo. LCD_Comando:ConfiguramduloLCDpararecibiruncomandomedianterutinaLCD_Envio_Data. LCD_Caracter:ConfiguramduloLCDpararecibiruncarctermedianterutinaLCD_Envio_Data. LCD_Envio_Data:EnvadatoalLCD,Cargandoelnibblealtoyluegoelnibblebajo.Nota:ObservarquelaslneasdecontrolybusdedatosesfcilmentemodificableenDeclaracindebitsparacontrolLCDyDeclaracindeBytesdelLCD.Comoejemplodeaplicacinsemuestraunejemplodondesevisualizaunmensaje(Ucontrol):Cdigo:

  • 39

  • 40

  • 41

    ComunicacinRS232Enestaentregallegaasufinlaprimerapartedeestecurso.Enefecto,conlaexplicacindecmoutilizarelpuertoserieRS232paraenviaryrecibirdatosconunmicrocontroladorterminamoslaseccindeestetutorialdedicadaalmicrocontroladorPIC16F84A.EnlaentregasiguienteaprovecharemostodoloaprendidoparacomenzaradesarrollartemasrelativosalmicrocontroladorPIC16F628A,mspotente,modernoyeconmicoelclsicoPIC16F84Aquehemosutilizadohastaestemomento.ElRS232esunestndardecomunicacionespropuestoporlaAsociacindeIndustriasElectrnicas(EIA)lacualdefinelainterfasemecnica,lospines,lassealesylosprotocolosquedebecumplirlacomunicacinserial.Lavelocidadsemideenbaudios(bits/segundo)yestnormalizadaa2400,4800,9600,19200,38400,etc.Yslosonnecesariosdoscables,unodetransmisinyotroderecepcin.TodaslasnormasRS232cumplenconlossiguientesnivelesdevoltaje: Un1lgicoesunvoltajecomprendidoentre5vy15v Un0lgicoesunvoltajecomprendidoentre+5vy+15v

    Lospuertosseriessonaccesiblesmedianteconectores.LanormaRS232establecedostiposdeconectoresllamadosDB25yDB9,machosyhembras.LanormaRS232seestableciparaconectarunordenadorconunmodem,porloqueaparecenmuchaspatillasenlosconectoresDB25queenotrotipodeaplicacionesnoseutilizanyenlasqueesmscomnutilizarelconectorDB9.CadaunadelaspatillasdelconectorRS232tieneunafuncinespecfica.PatillasdelDB9:

  • 42

    LospinesqueportanlosdatossonRxDyTxDlosdemsseencargandeotrostrabajos,elDTRindicaqueelordenadorestaencendido,DSRqueeldispositivoconectadoalpuertoestaencendido,RTSqueelordenadoralnoestarocupadopuederecibirdatos,alrevsdeCTSqueloqueinformaesqueeseldispositivoelquepuederecibirdatos,DCDdetectaqueexistenpresenciadedatos,etc.Formatodeunbyte:ElprotocoloestablecidoporlanormaRS232envalainformacinestructuradaen4partes: Bitdeiniciooarranque(START).Esunpasode12Va+12V,esdecirdeun1aun0lgicoenlalgicanegativadelanorma

    RS232.

    Bitsdedatos(Datas)LosbitsdedatossonenviadosalreceptordespusdelbitStart.ElbitdemenospesoLSBestrasmitidoprimero.Uncarcterdedatossueleconsistiren7u8bits.

    BitdeParidad(Parity)Dependiendodelaconfiguracindelatransmisinunbitdeparidadpuedeserenviadodespusdelosbitsdedatos.Conestebitsesueledescubrirerroresenlatransmisin,puededarparidadparoimpar.

    BitdeParada(STOP)lalneaquea12Vdespusdelltimobitenviado,esdecirquedaa1enlgicanegativadelanorma.Elprotocolopermite1,1.5o2bitsdeparada.

    MAX232:EnelmercadohaymuchoscircuitosintegradosquepermitenlaconversinentrenivelesTTLynivelesRS232.ElmsdestacadoeseltransceptorMAX232:

    EsteconviertelosnivelesRS232avoltajesTTLyviceversasinrequerirmsqueunafuentede+5Vyunpardecapacitores.ParaejemplificarelusodeesteprotocoloparaestablecercomunicacinconlaPC,haremosunprogramitaquerecibaladatadelaPCyselareenviaremosinmediatamente.

  • 43

    ParalarecepcindedatosaprovecharemoslainterrupcinexternaporRB0,configuradaenflancodescendente(detectarcuandolaPCenviunbitdeStart).DejapasaruntiempounaymediavecesmayorqueelperiododetransmisinparasaltarseelbitdeStartyleeelprimerbitensumitad.Leeelrestodelosbitsdedatos,esperandountiempoigualaladuracindelperiodoentrelecturaylecturaparatestearlosenmitaddelbit.KbhitindicasihallegadoonoundatodesdePC.Paraelenvodedatosseenvaun0duranteuntiempoigualalperiododelavelocidaddetransmisin.EsteeselbitdeStart.Luegoseenvaelbitcorrespondientealdatoaenviar:Sivaaenviarun0permaneceenbajoduranteelperiodocorrespondienteysisevaaescribirun1permaneceenaltoduranteelperiodocorrespondiente.Alenviarlos8bitsdedatosseenvaunbitdeStop,nivelaltoduranteunperiodo.Losparmetrosadoptadosparalacomunicacinsonlossiguientes: Velocidad9600baudios Datode8bits SinParidad 1bitdeStopParaestablecercomunicacinconelmicrocontroladorutilizaremoselsoftwareSiow,esunmonitordelpuertoseriemuysencillodeusar,solohayqueconfigurarlosparmetrosdecomunicacin.(TambinsepuedeusarelHyperterminaldeWindows)

  • 44

    Cdigo:

  • 45

    ConlaexplicacindecmoutilizarelpuertoserieRS232paraenviaryrecibirdatosconunmicrocontroladorterminamoslaseccindeestetutorialdedicadaalmicrocontroladorPIC16F84A.EnlaentregasiguienteaprovecharemostodoloaprendidoparacomenzaradesarrollartemasrelativosalmicrocontroladorPIC16F628A,mspotente,modernoyeconmicoelclsicoPIC16F84Aquehemosutilizadohastaestemomento

    IntroduccinalPIC16F628ACuandocomenzamosatrabajarconmicrocontroladoresenASMnecesitamosdetodalaayudaconlaquepodamoscontar.YahemosvistoenprofundidadelmicrocontroladorPIC16F84A,yahoraeselturnodesuhermanomayorPIC16F628A.Aligualquelaprimerapartedeltutorial,estaconstadevarioscaptulosqueestamossegurosdequeteresultarnmuytiles.Estaentregaesalgomslargadelonormal,peroteaseguramosquevalelapena.PIC16F628A

  • 46

    HarunaintroduccinalosmicrosyrealizareejemplosparalosmdulosquenotraeelPIC16F84A.Empezarporsuscaractersticasprincipales Conjuntoreducidodeinstrucciones(RISC).Solamente35instruccionesqueaprenderautilizar Osciladorinternode4MHz Operaconunafrecuenciaderelojexternadehasta20MHz(ciclodemquinade200ns) Memoriadeprograma:2048locacionesde14bits Memoriadedatos:MemoriaRAMde224bytes(8bitsporregistro) MemoriaEEPROM:128bytes(8bitsporregistro) Stackde8niveles 16TerminalesdeI/Oquesoportancorrientesdehasta25mA 3Temporizadores Mdulodecomunicacinserie(Usart MduloCCP(captura/comparacin/PWM) 2Comparadoresanalgicos,unareferenciadevoltajeprogramable Nota:LosmdulosdescriptosparaelPIC16F628AsonidnticosalosdelPIC16F648A,lonicoquevaraentreellossonlassiguientes

    caractersticas: Memoriadeprograma:PIC16F648A4096locacionesde14bits Memoriadedatos:PIC16F648AMemoriaRAMde256bytes(8bitsporregistro) MemoriaEEPROM:PIC16F648A256bytes(8bitsporregistro)DeaquenadelantemerefieroalPIC16F628AperolosejemplossonaplicablesalPIC16F648Ahaciendoelcambiodeencabezado:

    Puertos:LosPIC16F628/648Acuentancondospuertos(PORTAyPORTB),algunospinesdeestospuertosdeentrada/salidasonmultiplexadosconunafuncinalternativadelosperifricosdeldispositivo.Cuandounperifricoesactivadoelpinnopuedeserusadoparapropsitosgeneralesdee/s.ElPUERTOAesunpuertodeentradade8bits.Todoslospines,exceptoRA5,puedenserconfiguradoscomoentradaosalidaconlarespectivaconfiguracindelregistroTRISA.ElpinRA4estamultiplexadoconlaentradaderelojT0CKIycomosalidasecomportacomocolectoabierto,porlotantodebemosponerunaresistenciaPullupaVdd.ElpinRA5esundisparadorSchmittsolodeentradaynocuentaconcontroladoresdesalida,segnlaconfiguracin,puedeserusadocomoMclr(Resetexterno),yademssirvetambinparaentrarenelmododeprogramacincuandoseaplicaunatensinigualaVpp(13,4Vmnimo).LosdemspinesdelpuertotrabajandeentradacomodisparadordeSchmittTriggerycomosalidalgicaCMOS.LospinesRA0RA3sirvendeentradaparaelcomparadoranalgico.Importante:SiseutilizaenpuertoAcomoI/ODigital,sedebedeshabilitarlosComparadoresAnalgicos,cargandoun007enCMCON.

  • 47

    ElPUERTOBesunpuertobidireccionalde8bits,delcualporsoftwaresepuedenhabilitarresistenciasdepullupinternas.ElPORTBesmultiplexadoconinterrupcionesexternas,talescomodeteccindeflancoporRB0,cambiodenivelporRB4aRB7,USART,elmduloCCPyelrelojdeentrada/salidaTMR1.Otrospines: VDD:Pindealimentacinpositiva.De2a5,5Vcc VSS:Pindealimentacinnegativa.Seconectaatierraoa0Vcc MCLR:MasterClear(Reset).Sielnivellgicodeesteterminalesbajo(0Vcc),elmicrocontroladorpermaneceinactivo.EsteResetse

    controlamediantelapalabradeconfiguracindelPIC OSC1/CLKIN:Entradadeosciladorexterno OSC2/CLKOUT:Salidadeloscilador.Dependiendodecmoseconfigurepuedeproporcionarunasalidaderelojpormediodeeste

    pinOrganizacindelamemoria:

    Organizacindelamemoria

  • 48

    ElPIC16F628Aposeeuncontadordeprogramade13bits,capazdedireccionarunespaciodememoriade8Kx14.Sinembargo,nicamentelosprimeros2Kx14,desde0000hhasta07FFh,estnimplementados.Losvectoresdereseteinterrupcinestnenlasdirecciones0000hy0004h,respectivamente.Lapila(stack)esde8niveles,locualsignificaquepuedesoportarhasta8direccionesderetornodesubrutina.ElPIC16F628AposeeunespaciodememoriaRAMdedatosde5128,divididoen4bancosde128bytescadauno.Sinembargo,sloestnimplementados330bytes,correspondiendo224alreadelosregistrosdepropsitogeneral(GPR)y36alreadelosregistrosdefuncinespecial(SFR).Losrestantes70bytesimplementadossonespejosdealgunosSFRdeusofrecuente,ascomodelosltimos16GPRdelbanco0.Porejemplo,lasposiciones0Bh,8Bh,10Bhy18BhcorrespondenalregistroINTCON,demodoqueunaoperacinhechaencualquieradeellos,sereflejaautomticamenteenlosotros.Sedice,entonces,quelasposiciones8Bh,10Bhy18Bhestnmapeadasenlaposicin0Bh.Estacaractersticaagilizaelaccesoaestosregistros,puestoquenosiempreesnecesarioespecificarelbancodondeseencuentran.LaseleccindelbancodeubicacindeunSFRounGPRparticularsehacemediantelosbits6(RP1)y5(RP0)delregistroSTATUS.

    Registros

  • 49

    Interrupciones:Registrosutilizados:INTCON:RegistrodelecturayescrituraquecontienevariosbitsdesealizacinyhabilitacinparaeldesbordamientodelTMR0,cambiosobreelpuertoRBeinterrupcinexternaenlapatillaRB0/INT. 0.RBIF:IndicadordeinterrupcinporcambiodeestadoRB4RB7 1.INTF:Indicadordeinterrupcinexterna 2.T0IF:IndicadordeinterrupcinpordesbordamientodeTimer0 3.RBIE:HabilitacindeinterrupcinporcambiodeestadoRB4RB7 4.INTE:Habilitacindeinterrupcinexterna 5.T0IE:HabilitacindeinterrupcinpordesbordamientodeTimer0 6.PEIE:Habilitacindeinterrupcindeperifricos 7.GIE:HabilitacingeneraldeinterrupcionesPIR1:ElregistroPIR1contienelosbitsdesealizacinindividualdelasinterrupcionesdeperifricos0.TMR1IF:IndicadordeinterrupcinpordesbordamientodeTimer1 1.TMR2IF:IndicadordeinterrupcinpordesbordamientodeTimer2 2.CCP1IF:IndicadordeinterrupcindelmdulodeCaptura/Comparacin. a)ModoComparador:CoincidenciaentreTMR1yCCP1 b)ModoCaptura:HaocurridounacapturadeTMR1 3.NoImplementado. 4.TXIF:IndicadordeinterrupcindefindetransmisinUSART 5.RCIF:IndicadordeinterrupcindellegadadedatosUSART 6.CMIF:Indicadordeinterrupcinporcambiodeestadodealgunadelassalidasdeloscomparadores. 7.EEIF:Indicadordeinterrupcindefindeescrituraeeprominterna.PIE1:Registroqueposeelosbitsdehabilitacinindividualparalasinterrupcionesdeperifricos.ElbitPEIEdelregistroINTCONdebeser1parapermitirlahabilitacindecualquierinterrupcindeperifrico. 0.TMR1IE:HabilitacindeinterrupcinpordesbordamientodeTimer1 1.TMR2IE:HabilitacindeinterrupcinpordesbordamientodeTimer2 2.CCP1IE:HabilitacindeinterrupcindelmdulodeCaptura/Comparacin/PWM. 3.NoImplementado. 4.TXIE:HabilitacindeinterrupcindefindetransmisinUSART 5.RCIE:HabilitacindeinterrupcindellegadadedatosUSART 6.CMIE:Habilitacindeinterrupcinporcambiodeestadodealgunadelassalidasdeloscomparadores. 7.EEIE:Habilitacindeinterrupcindefindeescrituraeeprominterna.LgicadeInterrupciones:

  • 50

    PalabradeConfiguracin:ElPIC16F628hasidoconstruidoconcaractersticastalesquesepuedeconfigurarparafuncionarenmodosdeoperacinquenonecesitancomponentesexternostalescomoelcircuitoderelojodereset.Estoimplicaqueesnecesarioconfigurarsumododeoperacinatravsdeunapalabradeconfiguracin.Lapalabradeconfiguracinseencuentramapeadaenladireccin2007hdelamemoriadeprogramaysolopuedeseraccedidadurantelaprogramacindedispositivo.

    PalabradeConfiguracin

    CP1:CP0:BitsdeproteccindecdigoLosbits1310encargadosdeprotegerlamemoriadeprograma.CPD:Bitdeproteccinparacdigodedatos 1=Proteccindeshabilitadadelamemoriadedatos. 0=Proteccinhabilitadaenlamemoriadedatos.LVP:Habilitacindelaprogramacinporvoltajebajo 1=LVPhabilitado,laterminalRB4/PGMtienetalfuncin. 0=LCP:deshabilitado,RB4/PGMesunaterminalI/O.BODEN:Bitderesetporvoltajedealimentacinbajo 1=ResetporBODhabilitado 0=ResetporBODdeshabilitadoMCLRE:Habilitaciondelterminaldereset 1=TerminalderesetenRA5. 0=MCLRconectadointernamenteaVdd,RA5esunpinI/O.PWRTEN:Bitdehabilitacindetemporizadoralenergizar 1=PWRThabilitado. 0=PWRTdeshabilitado.WDTEN:BitsdehabilitacindeWatchDog 1=WDThabilitado 0=WDTdeshabilitado.FOSC2:FOSC1:FOSC0:Bitsdeseleccindeltipodeoscilador

  • 51

    Timer1+EjemploComenzaremosaanalizarlosmdulosTImer0,Timer1yTimer2delmicrocontroladorPIC16F628A.Enrealidad,elprimerodelostresnotienediferenciasconelqueseincluyeenelmicrocontroladorPIC16F84A,porloquesimplementepodemosleerloescritoenlaprimerapartedeestaseriedeentradas.Enelresto,porsupuesto,haydiferenciasqueyamismovamosaanalizar.ElMdulodelTimer0,comodecamos,esidnticoaldelPIC16F84A.ElMdulodelTimer1:ElTimer1adiferenciadelTimer0esuntemporizador/contadorde16bits.Elconteoesrealizadopordosregistrosde8bits:(TMR1H(0Fh)yTMR1L(0Eh))quesontantoleblescomoescribibles.As,elregistroTMR1seincrementade0000haFFFFhyenlasiguientecuentasereiniciaen0000hyassucesivamente,alreciclarseseactiva(enalto)labanderaTMR1IF(PIR1),lacualpuedeserutilizadaparagenerarunainterrupcin,obien,paraserconsultadaporpoleo.Enlasiguientefigurasemuestraundiagramadebloquesdeestemdulo,endondeseindicanlosbitsqueafectansuoperacinylamaneraenquelohacen:

  • 52

    ModotemporizadorEnestemodoelTimerseincrementa(sinoseconsiderapreescalador)encadaciclodeinstruccin(alafrecuenciaFosc/4).EstemodoseseleccionalimpiandoelbitTMR1CS(T1CON).ElpreescaladorquesepuedeintercalarentreelrelojFosc/4yelregistroTMR1puedetenerslounode4valores:1/1,1/2,1/4y1/8.Enestecasolatemporizacindecalcula:

    Temporizacin=Ciclodeinstruccin.(65536TMR1).DivisordeFrecuenciaVemosquelamximatemporizacinposibleesconTMR1=0,yDivisordeFrecuenciaen8,logrndoseunos524.3msaprox.Modocontador:ElTimer1tambinpuedeoperarcomocontadorasncronoosncronocontandolosflancosascendentesqueocurrenenpinRB6/T1OSO/T1CKIponiendoa1elbitTMR1CS.DespusdequeelTimer1seprogrameenmodocontador,elmduloesperarunflancodebajadaantesdecomenzarlosincrementosconlosflancosdesubida.Contadorsincronizado:SiSYNCT1seborra,laentradaexternaderelojsesincronizaconlafaseinternadereloj.LasincronizacinseproducedespusdelaetapadelPredivisor.Estebloqueesuncontadorcclicoasncrono.Contadorasincrnico:SielbitdecontrolSYNCT1seactiva,laentradaderelojexternanoquedasincronizadaconelrelojinterno.EltemporizadorcontinuarfuncionandoduranteelestadodeSLEEP,ypuedeprovocarunainterrupcinensudesbordamientoquesaquedesusiestaalaCPU.OsciladordelTimer1:SedebeconectaruncristaldecuarzoentrelaspatillasT1OSI(entrada)yT1OSO(salidadelamplificadoroscilador).ElosciladorsehabilitaconelbitT1OSCEN(T1CON),yfuncionarenbajoconsumoapartirde200KHz.EsteosciladorcontinafuncionandoaunquelaCPUentreenmodoSLEEP,yestdiseadoespecialmenteparatrabajara32.768Hz.Configuraciones:ElTimer1poseeunbitparahabilitacin/deshabilitacin,esteeselbitTMR1ON(T1CON)yhabilitaenalto.Adems,elTimer1poseeunaentradainternadeRESET,elcualpuedeseractivadoporunocualquieradelosmdulosCCP.AcontinuacinsedescribeelprincipalregistrorelacionadoconelTimer1ytodossusbits,exceptolosquetienenqueverconelmodocontador:RegistroT1CON(10h)

    PrincipalregistrorelacionadoconelTimer1ytodossusbits.

    Bits5:4T1CKPS1:T1CKPS0.Bitsdeseleccindelvalordeldivisordefrecuenciadelpreescalador: 11=divisor1/8 10=divisor1/4 01=divisor1/2 00=divisor1/1bit3T1OSCEN:BitdecontroldehabilitacindeosciladorparaTMR1. 1=Osciladorhabilitado. 0=Osciladoranulado.Bit2T1SYNC:BitdecontroldesincronizacindelaentradaderelojexternodeTimer1.TMR1CS=1 1=Entradaderelojexternonosincronizada. 0=Entradaderelojexternosincronizada

  • 53

    TMR1CS=0Enestacircunstancia,Timer1usaelrelojinterno.Bit1TMR1CS.Bitdeseleccindelafuentedereloj 1=Modocontador(fuentedereloj:patitaRB6/T1OSO/T1CKI) 0=ModoTemporizador(fuentederelojFosc/4)Bit0TMR1ON.Bitdehabilitacin/deshabilitacindelTimer1: 1=habilitaTimer1 0=DeshabilitaTimer1ConfigPICtraeunaherramientaadicionalquenosayudaaseleccionarelpreescaleryvalorinicialdelTimerparaobtenerunatemporizacindeseada:

    Paraejemplificarharemosunsimpleejemplodondeloutilizamoscomotemporizador.SehartitilarunledconectadoalPINRB0cada300ms.ComosepuedeveresidnticoalejemplorealizadoparaTimer0delPIC16F84A,soloqueenestecasononecesitaremosunregistroadicionalparalograrlademoradeseada.Hardware:

  • 54

    Cdigo:

    Timer2+EjemploSeguimosanalizandolosmdulosTImer0,Timer1yTimer2delmicrocontroladorPIC16F628A.Enlaentregaanteriornosocupamosdelosdosprimeros,ehicimosnotarqueelprimerodeellosnotienediferenciasconelqueseincluyeenelmicrocontroladorPIC16F84A,porloquesimplementepodamosaplicarloaprendidoenlaprimerapartedeestaseriedeentradas.Hoynosocupamosdelosdetallesdeltercerodeellos,parasacartodoeljugoalasposibilidadesdelTimer2.ElMdulodelTimer2:ElTimer2esuntemporizador(sinopcindetrabajarcomocontador)de8bits.SuregistroprincipaldenominadoTMR2(11h)esunregistrode8bitsqueseincrementacontinuamentealafrecuenciaseleccionadadeFosc/4divididaporunpreescalador.EnlasiguientefigurasemuestraundiagramadebloquesdelmdulodelTimer2.

    Elpreescalador:LafrecuenciaqueincrementaalregistroTMR2puedeserdivididaporunpreescaladorporunfactorde1/1,1/4o1/16,seleccionableporlosbitsT2CKPS1:T2CKPS0(T2CON)ElRegistrodecomparacinodePeriodo:Enoperacin,elcontenidodelregistroTMR2secomparacontinuamenteconunregistrodeperiododenominadoPR2(92h)cuyovalorpodemosestablecerporsoftware.CadavezquelacuentadeTMR2esigualaPR2,sereiniciaelconteoenTMR2desdecero,yademssegeneraunasealdesalida,lacualestratadaporunpostescalador,parapodergenerarunasealTMR2IF(PIR1)quepuedeserusadaparasolicitarunainterrupcin,oparaserledaporpoleo.

  • 55

    ElPostescalador:ElpostescaladordividelafrecuenciaconqueocurreunaactivacindelabanderaTMR2IF,esdecir,sielvalordelpostescaladores1/1,estabanderaseactivarcadavezqueTMR2sereinicie,encambio,sies1/16(porejemplo),TMR2IFseactivarcada16reiniciosdeTMR2.EnformasimilaralosotrosdosTimers,estabanderadebeserlimpiadapreviamente,sisequieredetectarsuactivacin,estopuedeserhechoenlarutinadeatencinalainterrupcin,obienenlarutinaqueladetectaporpoleo.ElvalordedivisindelpostescaladorpuedeestablecerseporsoftwaremediantelosbitsT2OUPS3:T2OUPS0(T2CON).Enestecasolatemporizacindecalculaas:

    Temporizacin=Ciclodeinstruccin.(PR2TMR2).DivisordeFrecuenciaPre.DivisordefrecuenciaPostVemosquelamximatemporizacinposibleesconTMR2=0,yDivisordeFrecuenciaPreen16,DivisordefrecuenciaPosten16,logrndoseunos65.5msaprox.AcontinuacinsedescribeelprincipalregistrorelacionadoconelTimer2ytodossusbits.RegistroT2CON(12h)

    Bits6:3T2OUPS3:T2OUPS0Bitsdeseleccindelvalordeldivisordefrecuenciadelpostescalador,deacuerdoalasiguientetabla: 0000=divisor1/1 0001=divisor1/2 0010=divisor1/3 1111=divisor1/16Bit2TMR2ONBitdeencendidodelTimer2 1=Enciende(energiza)elTimer2 0=Apaga(desconecta)elTimer2Bits1:0T2CKPS1:T2CKPS0Bitsdeconfiguracindelvalordelpreescaladordeacuerdoalasiguientetabla: 00=divisor1/1 01=divisor1/4 1x=divisor1/16Ejemplodeconfiguracinparalograrunatemporizacinde20ms:Cdigo:

  • 56

    Mdulodecomunicacinserie(Usart)+EjemploLuegodeanalizarlosmdulosTImer0,Timer1yTimer2delmicrocontroladorPIC16F628AEnvamosaverlosdetallesdesuUSART.Aligualqueantes,estaentradatienesuequivalenteenlaprimerapartedeestecurso,cuandoestudiamoselmicrocontroladorPIC16F84A,porloserademuchaayudavolveraleerloescritoenlaprimerapartedeestaseriedeentradas.Enelresto,porsupuesto,haydiferenciasqueyamismovamosaanalizar.LaUSARTdelPIC16F628:LaUSARTdelPIC16F628Apuedeserconfiguradaparaoperarentresmodos:

    1. ModoAsncrono(fullduplex(transmisinyrecepcinsimultneas)),2. ModoSncronoMaestro(halfduplex)3. ModoSncronoEsclavo(halfduplex)

    Aqusolotrataremoselmodoasncrono.ModoAsncrono:EnestemodolaUSARTusaunformatoestndarNRZasncrono,elcualparalasincronizacinusa:1bitdeinicio(I),8o9bitsdedatosy1bitdeparo(P).MientrasnoseestntransmitiendodatoslaUSARTenvacontinuamenteunbitdemarca.ElmodoasncronoseseleccionalimpiandoelbitSYNCdelregistroTXSTA(98H).ElmodoasncronoesdeshabilitadoduranteelmodoSLEEP.CadadatoestransmitidoyrecibidocomenzandoporelLSB.ElhardwarenomanejabitdeParidad,peroelnovenobitpuedeserusadoparaestefinymanejadoporsoftware.ElmduloAsncronodelaUSARTconstadelossiguientesmdulosfundamentales: Elcircuitodemuestreo Elgeneradordefrecuenciadetransmisin(BaudRate) Eltransmisorasncrono Elreceptorasncrono.Elcircuitodemuestreo:Eldatoenlapatitaderecepcin(RB1/RX/DT)esmuestreadotresvecesparapoderdecidirmedianteuncircuitodemayora,sisetratadeunnivelaltoounnivelbajo.ElGeneradordeBaudRate(BRG):Estegeneradorconsistedeuncontador/divisordefrecuenciade8bitscontroladoporelregistroSPBRG(99H).Detalmaneraquelafrecuenciadetransmisinsecalculadeacuerdoalasiguientetabla:

    EnestatablaX=valorde8bitsenelregistrodeldivisor,SPBRG.ElbitBRGHcorrespondeaTXSTA.EneldatasheetdelPIC16F628haytablasdondesemuestranalgunosvaloresbaudestndares,eldivisornecesario(X=SPBRG)bajodiferentesfrecuenciasFoscyelerrorproducidoenporcentaje.

  • 57

    Eltransmisorasncrono:EnlasiguientefigurasemuestraeldiagramadebloquesdeltransmisordelaUSART:

    Elcorazndeestemduloeselregistrodecorrimiento(transmitshiftregister,TSR).LanicamaneradeaccederalregistroTSResatravsdelregistroTXREG(19H).Paratransmitirundato,elprogramadeberponerloprimeroenelregistroTXREG.EncuantoelTSRterminadeenviareldatoquetena(encuantotransmiteelbitdeparo)leeeldatocontenidoenTXREG(sihayalguno)estoocurreenuncicloTCY.EncuantoeldatodeTXREGestransferidoalTSRelTXREGquedavacoestacondicinesindicadamedianteelbitbanderaTXIF(queeselbit4delregistroPIR1(0Ch)),elcualseponeenalto.EstebitNOpuedeserlimpiadoporsoftware,slodurauninstanteenbajocuandoseescribeunnuevodatoaTXREG.Siseescribeundatoseguidodeotro(backtoback)aTXREGelprimerosetransfiereinmediatamenteaTSRyelotrotienequeesperarhastaqueelTSRterminedeenviarelbitdeStopdelprimero.DuranteestaesperaTXIFpermaneceenbajo.Existeotrobit,llamadoTRMT(TXSTA),elcualmuestraelestadodelTSR.TRMTseponeenaltocuandoTSRestvaco,yenbajocuandoTSResttransmitiendoundato.MientrasqueTXIFpuedegenerarunainterrupcinTRMTnolopuedehacer,TRMTestpensadoparaserconsultadoporpoleo(sinusarinterrupciones).ParahabilitarelmdulodetransmisinesnecesarioponerenaltoelbitTXEN(TXSTA),mientrasnosehabiliteelmdulo,lapatitadetransmisin(RB2/TX/CK)semantieneenaltaimpedancia.SiTXENesdeshabilitadaalamitaddeunatransmisin,estserabortadayeltransmisorserreseteado.SiseestusandounnovenobitTX9(TXSTA),stedeberserescritoantesdeescribirlos8bitsrestantesaTXREG,yaqueencuantoseescribeundatoaesteregistroinmediatamenteestransferidoaTSR(sisteestvaco).Deacuerdoaloanterior,lainicializacindelmdulodetransmisinconsisteenlossiguientespasos:

    1. InicializarbaudrateescribiendoalregistroSPBRGeldivisoradecuadoyopcionalmentealbitBRGH.2. HabilitarcomunicacinasncronalimpiandoelbitSYNCyponiendoelbitSPEN.3. Sisevanausarinterrupciones,ponerelbitTXIE(PIE).4. PonerelbitTX9sisedeseatransmitirdatosde9bits5. HabilitartransmisinponiendoelbitTXEN,locualpondrelbitTXIF.6. ColocarelnovenobitdeldatoenTX9Dsiseestnusandodatosde9bits.7. CargareldatoalregistroTXREG(inicialatransmisin).

    Elreceptorasncrono:Elmduloderecepcinessimilaraldetransmisin,enlasiguientefigurasemuestranlosbloquesqueloconstituyen:

  • 58

    Unavezquesehaseleccionadoelmodoasncrono,larecepcinsehabilitaponiendoenaltoelbitCREN(RCSTA)EldatoesrecibidomediantelalneaRB1/RX/DT,lacualmanejaunregistrodecorrimientodealtavelocidad(16veceselBaudrate).ElcorazndelreceptoreselregistrodecorrimientoRSR.Esteregistronoesaccesibleporsoftware,pero,cuandoeldatorecibidosehacompletado(seharecibidoelbitdeStop)eldatodeRSRestransferidoautomticamentealregistroRCREG(1Ah)sisteestvacoyalmismotiempoespuestoenaltolabanderaderecepcinRCIF(PIR1).LanicamaneradelimpiarlabanderaRCIFesleyendoel/losdatosdelregistroRCREG.ElregistroRCREGpuedecontenerhastadosdatos,yaqueesunbufferdoblequefuncionacomounacoladedosposiciones.SilasdosposicionesdelregistroRCREGestnllenas(nohansidoledas)ysedetectaelbitdeStopdeuntercerdatoderecepcin,locualocasionauntransferenciaautomticadeldatorecibidoaRCREG,estodestruirelprimerdatorecibidoyactivarelindicadordesobreescrituraOERR(RCSTA).Paraevitaresto,sedebernleerlosdosdatosenRSREGhaciendodoslecturasconsecutivas.LanicamaneradelimpiarelbitOERRunavezquehasidoactivadoesreseteandoelmduloderecepcin(limpiandoCRENyvolvindoloaponer),sinoselimpiaOERRsebloquealatransferenciadedatosdeRSRaRCREGynopuedehabermsrecepcindedatos.Sisedetectaunbitnivelbajoenlaposicindelbitdestopseponeelindicadordeerrordeencuadre(frameerror)FERRRCSTA.TantoesteindicadorcomoelnovenobitRX9Ddelosdatosestnenunacoladedosposicionesaligualquelosdatosrecibidos,demaneraquealleerRCREGseactualizanFERRyRX9Dconnuevosvalores,porlocualestosbitsdebernserledosantesdeleerRCREGparanoperdersuinformacin.Deacuerdoaloanterior,lainicializacindelmduloderecepcinescomosigue:

    1. InicializarelbaudrateescribiendoalregistroSPBRGeldivisoradecuadoyopcionalmentealbitBRGH.2. HabilitarelpuertoserieasncronolimpiandoelbitSYNCyponiendoelbitSPEN.3. Sisevanausarinterrupciones,ponerelbitRCIE(PIE).4. Sisedesearecepcindedatosde9bitssedeberponerelbitRX9(RCSTA).5. HabilitarlarecepcinponiendoelbitCREN(RCSTA)6. ElbitRCIFsepondrcuandolarecepcindeundatosecompleteysegenerarunainterrupcinsiRCIEestpuesto.7. LeerelregistroRCSTAparaobtenerelnovenobit(siseestnrecibiendodatosde9bits)oparadeterminarsihaocurridoun

    errorderecepcin.8. Leerlos8bitsdeldatorecibidoleyendoelregistroRCREG.9. SiocurrialgnerroresteselimpiaallimpiarelbitCREN,elcualdebervolveraponersesisedeseacontinuarlarecepcin.

    ConfigPICpermiteseleccionaralgunosparmetrosparaconfigurarelmduloUSARTdelpic,ygenerarelcdigodeayudaVeamosunejemplo.EnestecasousandoelmduloUsartdelPIC16F628AylainterrupcinquegeneraelmismoalrecibirundatoharemosunejemplodondeesperamosdatodesdePC,lorecibimosyloreenviamosinmediatamente:Hardwarenecesario:

  • 59

    Cdigo:

  • 60

    Comparadoresanalgicos+EjemploEnestaentregaanalizaremoslosmdulosdecomparacinanalgicaytensindereferencia.EstosmdulosestnpresentesenelPIC16F628AperonoenelmicrocontroladorPIC16F84A,porloquesetratadeuntemacompletamentenuevoenestaserie.Comoversacontinuacin,esuntemamuyimportanteyextenso,porloqueseguramentedeberemosdividirloen3o4entradas.ElMduloComparador:DisponededoscomparadoresanalgicosC1yC2cuyasentradaspuedenserseleccionadasentrelospinesRA0aRA3ycuyassalidaspuedenutilizarseparalecturadigitalinternaobienconectarseadospinesdesalida:RA4yRA5.Tambinpodraserposibleemplearunniveldetensinconfigurableygeneradoporotrobloque,eldenominadoMdulodeReferenciadeTensin.ElmultiplexadoparalaseleccindelasentradasacompararylassalidasagenerardependedelregistrodecontroldecomparacinCMCON(0x1F).Existen8configuracionesposiblesdeentradasysalidasdecomparacinqueseseleccionanconlos3bitsmenossignificativos(CM2CM1CM0).EnesemismoregistrosepuedenleerlosestadosenlasalidadecadaunodeloscomparadoresC1yC2ysisedeseainvertironolalgicadelresultadodelacomparacinqueaparecealasalida.RegistroCMCOM

    Bit7.C2OUT:BitdesalidadelComparador2.CuandoC2INV=0: SiC2Vin+>C2Vin=1 SiC2Vin+C2Vin=0 SiC2Vin+C1Vin=1 SiC1Vin+C1Vin=0 SiC1Vin+Bit5.C2INV:BitdeinversindelasalidadelComparador2.

    1=C2Salidainvertida. 0=C2Salidanoinvertida.Bit4.C1INV:BitdeinversindelasalidadelComparador1. 1=C1Salidainvertida. 0=C1Salidanoinvertida.Bit3.CIS:SelectordepindeentradaalComparador.CuandoCM=001: 1=C1VinconectadoaRA3. 0=C1VinconectadoaRA0.

  • 61

    CuandoCM=010: 1=C1VinconectadoaRA3.C2VinconectadoaRA2. 0=C1VinconectadoaRA0.C2VinconectadoaRA1.Bit20.CM:bitsdeseleccindeconfiguracindelosComparadores.

  • 62

    MododeTrabajodelosComparadores:SilaentradaanalgicaVIN+esmayorquelaentradaanalgicaVIN,entonceslasalidadelcomparadorserunestadodigitalaltoSilaentradaanalgicaVIN+esmenorquelaentradaanalgicaVIN,entonceslasalidadelcomparadorserunestadodigitalbajo

    Lasreassombreadasdelasalidadelcomparadorenlafigurarepresentanlaincertidumbredebidoatensionesdedesviacinytiempoderespuesta.

    ReferenciasdeComparacin:Lareferenciadetensinparalacomparacinpuedeser:Externa:seconectaracualquieradelospinesdeentradaexternosdelcomparadoryesatensindeberestarcomprendidaentreVDDyVSSInterna:sepuedeemplearunareferenciadetensingeneradaanivelinternoporpartedeunmdulointernoespecficopresentedentrodelmicrocontroladorcuandoseconfiguranlosbitsCMconlacombinacin110MdulodeReferenciadeTensinparaComparacin:Setratadeundivisorresistivoapartirdelatensindealimentacindelmicrocontrolador.RegistroVRCON(9Fh):

    VRSeleccindelatensindereferencia:SiVRR=1:Vref=(VR.Vdd)/24

    SiVRR=0:Vref=(Vdd.1/4)+(VR.Vdd)/24InterrupcionesdelMdulodeComparacin:ElmdulodecomparacinpuedegenerarunainterrupcinporactivacindelflagCMIF(FlagdeInterrupcindelComparador)presenteenelregistroPIR1.ElflagCMIFsepondra1siseproduceuncambioenlasalidadecualquieradelosdoscomparadores(C1OUToC2OUT)desdelaltimalecturaqueserealizdelregistroCMCON.Elflagdebeponerseaceroporsoftwareperoademsdeberealizarsepreviamenteunaoperacindelectura(oescritura)delregistroCMCONparaquedejededarseladiscrepanciaentreelvaloractualyelvalorledo.Paraqueseproduzcalainterrupcindebenencontrarseactivadaslamscaraparticular(CMIEenPIE2),ladeperifricos(PEIE)ylaglobal(GIE).CaractersticaespecialdelMduloComparador:Siuncomparadorseencuentraactivoysesitaalmicrocontroladorenmododebajoconsumo(SLEEP),elcomparadorpermaneceractivoylasinterrupcionessiestnactivadasmediantesusmscarassernfuncionalesypodrnsacaralmicrodesumododebajoconsumosicambialasalidadealgunodeloscomparadoresdesdelaltimalectura.

  • 63

    ConfigPICpermiteseleccionarlaconfiguracindelmdulocomparadoranalgicoytensindereferencia,generandoelcdigodeconfiguracin.Amododeejemploconectaremosunpotencimetroalcomparador1,fijandounatensindereferenciainternaa3.59Volteinvirtiendolasalidadelcomparador.CuandolatensinsobreelpinRA0(C1Vin)seamayora3.59Voltharemostitilarunled10vecesamododealarma.Hardwarenecesario:

    DiagramadeFlujo:

  • 64

    Cdigo:

  • 65

    IntroduccinMduloCCPElprimermduloqueveremosendetalleeselMduloCCP.LosmicrocontroladoresPIC16F628A/648AdisponendeunmdulodeCaptura/Comparacin/PWMqueenconjuntoconlostemporizadores,permiterealizarenformasencillalastareasdemedicindetiempoyfrecuencia,ygeneracindesealesdigitales.Contresmodosdefuncionamientoqueveremosenprofundidadapartirdeestaentrega.MduloCCPLosmicrocontroladoresPIC16F628A/648AdisponendeunmdulodeCaptura/Comparacin/PWMqueenconjuntoconlostemporizadores,permiterealizarenformasencillalastareasdemedicindetiempoyfrecuencia,ygeneracindesealesdigitales.ElmduloCCPtiene3modosdefuncionamiento,quesedescribenacontinuacin: Modocaptura:PermitecapturarelvalorquetieneenregistroTMR1cuandoocurreuneventoespecialenlaterminalRB3/CCP1. Modocomparacin:Permitecompararelvalorde16bitsdelTMR1conunvalorpreviamentedefinidoenlosregistrosCCPRL1Hy

    CCPR1L

    ModoPWM:PermitegenerarsealesdigitalesmoduladasenanchodepulsoAcontinuacinsedaunbreveresumendelosregistrosrelacionadosconcadamdulo:Elregistroprincipaldeestemdulosecomponededosregistrosde8bits,denominadosCCPR1H(16h)(partemssignificativa)yCCPR1L(15h)(partemenossignificativa).LaoperacindelmdulosecontrolamedianteelregistroCCP1CON(17h)yeldisparodeeventoespecial,elcualesgeneradoalalcanzarselaigualdadenunregistrodecomparacinresetearelTimer1.Seleccindelmododeoperacin:LaseleccindelmodoenquetrabajaraelmduloCCPserealizamedianteloscuatrobitsmenossignificativosdelregistroCCP1CON,esdecir,mediantelosbitsCCP1M3:CCP1M0(CCP1CON)deacuerdoalosiguiente:

    0000Captura/Comparacin/PWMdeshabilitados 0100Capturacadatransicindebajada 0101Capturacadatransicindesubida 0110Capturacadacuartatransicindesubida 0111Capturacada16transicionesdesubida 1000Comparacin,ponesalidacadacoincidencia 1001Comparacin,limpiasalidacadacoincidencia 1010Comparacin,generainterrupcincadacoincidencia(SeseteabitCCP1IF,salidainalterada) 1011Comparacin,disparaeventoespecial(SeseteabitCCP1IF,reseteaTMR1(TMR1IFinalterado)) 11xxModoPWMElMododeCaptura:EnelmododecapturaelregistroCCPR1(CCPR1H:CCPR1L)capturaelvalorde16bitsregistroTMR1cuandoocurreuneventoenlapatitaRB3/CCP1.Eleventoencuestinpuedeespecificarsepreviamentecomoalgunodelossiguientes:

  • 66

    Cadatransicindebajada Cadatransicindesubida Cadacuartatransicindesubida CadadieciseisavatransicindesubidaAdemsdequeelvalordeTMR1escapturado,labanderadesolicituddeinterrupcinCCP1IFesactivada,lacualdeberserlimpiadaporsoftwareparapoderdetectarlasiseestconsultandoporpoleo.EltipodeaccinquesedeseadetectarenestapatitaseconfiguramediantelosbitsdecontrolCCP1M3:CCP1M0(CCP1CON).SiocurreotroeventodecapturaantesdequehayasidoledoelregistroCCPR1,elvalorcapturadoanteriorseperder,yaqueconlanuevacapturaesteregistroesreescrito.EnlafigurasiguientesemuestraundiagramadebloquesendondeseilustralamaneraenquetrabajaelmduloCCPenmododecaptura:

    ElpreescaladordelCCP:ElvalordelpreescaladorseconfiguramediantelosbitsCCP1M3:CCP1M0.Sinembargo,alrealizaruncambioenlaconfiguracindelpreescaladorsepuedegenerarunainterrupcinfalsa,paraevitarloanteriorsedeberapagarelmduloCCP(limpiandoelregistroCCP1CON)previamentealcambiodevalordelpreescalador.EstepreescaladoresindependientealpreescaladordelTimer1(elcualpuedeusarsecomoyaseexplicconsusposiblesdivisoresde1/1,1/2,1/4,18).Configuraciones:SedebeconfigurarelCCP1comoentradaatravsdelregistroTRISB.ElTimer1debeestarenmodotemporizadoromodocontadorsincronizadoAlcambiarelmododecapturahayquetenerinhabilitadaslasinterrupcionesyborrarelflagparaevitarinterrupcionesespreas.SielpinRB3/CCP1esconfiguradocomosalida,sedebertenerencuentaqueunaescrituraalpuertoBpuedecausarunacondicindecaptura.Ejemplo:ParaejemplificarelusodelmduloCCPenmodocapturavamosarealizarlamedidadelperiododeunaondacuadradaparaasdeterminarsufrecuencia.Laformadetrabajarvaaserlasiguiente:ConfiguramosCCPmodocapturaconcadatransicindesubidadelpinRB3/CCP1conTimer1modotemporizador1/1.Alllegarunflancoascendente,reseteamosTimer1yesperamosalsiguienteflancoascendente,enelcualseguardaelvalorcapturadoyloenviamosalaPCparapoderdeterminarlafrecuenciadelaseal.Loquehemoscapturadoeslacantidaddeciclosderelojtranscurridosenunciclodelasealamedir.ConestevaloryelToscalcualtrabajaelmicrocontroladorpodemosdeterminarelperiododelaseal.Periodo(s)=(4/20MHz).CCPR1Frecuencia(Hz)=1/Periodo

  • 67

    Conuncristalde20MHzpodemosmedirdesdeaprox.77Hzhastalos500kHz,claroqueamsfrecuenciamserrorenlasmediciones.Porejemplo,conalgunosensayosqueherealizadoa1kHzsetieneunerrorde+1Hz,10kHz+5Hz,100kHz+0.5kHz,200kHz+2kHz,etc.ParadeterminarlafrecuenciaadjuntounprogramitahechoenVisualBasicquetoma10valoresenviadosdesdeelmicrocontrolador,calculaunpromediodelperiodoydeterminalafrecuencia.Sehacedeestemodoparareducirelerrorcometidoaaltasfrecuencias(descargalodeac)

    Hardwarenecesario:

  • 68

    Cdigo:

  • 69

    ModoCapturaEnlaentregadehoyveremoscmoutilizarelmodocomparador.Enestemodo,elmicrocontroladorPIC16F628Aaprovechaelregistrode16bitsCCPR1(CCPR1H:CCPR1L)yelregistrode16bitsTMR1.Cuandoestosvalorescoincidensedisparaunainterrupcinquepodemosaprovecharpararealizaralgunaaccinennuestroproyecto.Setratadeotraentregamuyimportanteenestaseriedeentradas.ElModoComparador:Enelmododecomparacinelregistrode16bitsCCPR1(CCPR1H:CCPR1L)secomparaconstantementeconelvalordelregistrode16bitsTMR1.DemaneraquecuandosusvalorescoincidenademsdeactivarselabanderaparasolicitarinterrupcinCCP1IF(PIR1),puedeocurrirenlapatitaRB3/CCP1(previaconfiguracin)algunadelassiguientesacciones: RB3/CCP1Seponeenalto RB3/CCP1SeponeenBajo RB3/CCP1nocambiaLaaccinqueocurraenestapatitaseconfiguramediantelosbitsdecontrolCCP1M3:CCP1M0(CCP1CON).EnlafigurasiguientesemuestraundiagramadebloquesendondeseilustralamaneraenquetrabajaelmduloCCPenmodocomparador,

    Configuraciones:ElpinRB3/CCP1debeconfigurarsecomosalidalimpiandoelbitTRISBElTimer1debeestarcorriendoenmodotemporizador(oenmodocontadorsincronizado)AllimpiarelregistroCCP1CONellatchdesalidadelapatitaRB3/CCP1seforzaasuvalordefaultdecero.EnelmodointerrupcinsoftwarenoserealizaningunaaccinenelpinRB3/CCP1.ElmodoSpecialEventTriggerocurreinmediatamentealigualarseelparderegistrosTMR1H,TMR1LalparderegistrosCCPR1H,CCPR1L.ElparderegistrosTMR1H,TMR1LnosereseteanhastaelprximoflancoascendentedelclockdeTimer1.EstopermitequeelregistroCCPR1seaunregistrodeperiodoprogramableparaelTimer1Ejemplo:Enesteprogramasehaceusodelmododecomparacinpararealizarlaconmutacindeunasealcadavezquetranscurreuntiempo,elcualseajustaaloprimirunpulsadordeincrementoounodedecremento.

  • 70

    Hardwarenecesario:

    Cdigo:

  • 71

    ModoPWMHoyveremoselModoPWM(ModulacindeAnchodePulso).Esteimportantemodoeselquenospermite,porejemplo,modificarlaintensidadconlaquebrillaundiodoLEDogenerarunaondadesalidaconfrecuenciavariable,permitiendoalgunasaplicacionesqueaprioriparecenimposibles,comohacerhablaraunPIC.Porlopronto,antesdellegarasemejanteniveldesofisticacinveremoslosprincipiosbsicosdelPWMyalgunosejemplos.ModoPWM(ModulacindeAnchodePulso)Conestemododetrabajoseconsiguenimpulsoslgicoscuyaanchuradelnivelaltoesdeduracinvariable,quesondeenormeaplicacinenelcontroldedispositivostanpopularescomolosmotoresytriacs.ElpinRB3/CCP1estaconfiguradocomosalidaycambiaentrelosniveles0y1aintervalosdetiemposvariables,lograndounpulsocuyonivelaltotieneunanchovariabledentrodelintervalodelperiododetrabajo:

    ModoPWM

    LabasedetiemposeselTimer2msdosbitsadicionalesparatenerlos10.ElperiodosedeterminaconelregistroPR2,yaquecuandoTMR2=PR2: SeborraelTMR2 Seponea1elpinCCP1 SepasaelvalordelCCPR1LalCCPR1H(paraevitarglitch)

  • 72

    Deestamanera,deacuerdoalafiguraanterior,elsiguientevalordecomparacinparaTMR2enelcomparadorde10bitseselCiclodeTrabajo,elcualalalcanzarselimpiarlapatitaCCP1.ElciclodetrabajosedeterminaconelcontenidodelCCPR1LylosdosbitsdeCCP1CON(CCP1XyCCP1Y).PeriododelPWM:PeriodoPWM=(PR2+1).4.Tosc.TMR2PreescalerFrecuenciaPWM=1/PeriodoPWMCiclodeTrabajodelPWM:ElciclodeTrabajoseespecificaescribiendounvalorde10bitsalregistroCCPR1L(los8bitsmssignificativos(msb))ylosdosbitsmenossignificativos(lsb)aCCP1CON:

    CTPWM=(CCPR1L:CCP1CON).Tosc.TMR2PreescalerComosepuedeverenlafiguraanterior,elvalorquedeterminaladuracindeC.T.delPWMnoeselcargadoenCCPR1L,sinoenCCPR1H,elcualsloseactualizaenelmomentoenqueTMR2alcanzaelvalordePR2(esdecir,cadavezquesecompletaunperiodo).Porello,aunqueCCPR1Lpuedeserescritoencualquiermomento,elCiclodeTrabajosoloseactualizahastaqueterminaelperiodoqueestentranscurso.NohayotramaneradeescribiralregistroCCPR1H,yaqueesteesunregistrodeslolectura.ElnmerodedivisionesquesepuedentenerenunCiclodeTrabajoser2^n,dondeneselnmerodebitsusados,porlotantosuduracinmximaser:

    CTPWM=2^n.Tosc.TMR2PreescalerSinembargo,dependiendodelvalordeCiclodetrabajomximo(CT_PWM)deseado,noserposiblerealizarlas2^ndivisionesyporlotantonosepodrnusarlosnbitsderesolucin.Oalrevs,siseeligeunaresolucindeseadannoserposibletenercualquierCiclodeTrabajomximo(CT_PWM)Deseado.Delaecuacinanteriorsepuededespejarcualeslaresolucinmxima:

  • 73

    ResolucionPWM=log(CTPWM/Tosc.TMR2Preescaler)/log(2)Veamosconunejemplo,sifijamosPR2en100yusamospreescaler1/4conunosciladorde20MHz,tendremosunPWMdeperiodo80.8us.Elciclodetrabajonopuedesuperarestevalorporloquedespejandodelasecuacionesanteriores,CCPR1L:CCP1CONnopuedesermayora404.Aquseveclaramentequenosepuedenusarlos10bitsderesolucin,sino8.66bits.CasocontarioelpinRB3/CCP1nuncaserreseteado.EnlasiguientetablaseresumendiversaseleccionesderesolucinnylacorrespondientefrecuenciaF_PWMmxima,ascomoelvalordePR2conelqueselogra(paraunfrecuenciadelcristalde20Mhz):

    SecuenciadeconfiguracindelPWM:AcontinuacinseresumenlospasospararealizarlaconfiguracininicialdelPWM:EstablecerelperiododelPWMescribiendoalregistroPR2. EstablecerelCiclodeTrabajodelPWMescribiendoalregistroCCPR1LyalosbitsCCP1CON. ConfigurarcomosalidaelpinCCP1,limpiandoelbitTRISB. ConfigurarelpreescaladordelTimer2yhabilitarelTimer2,escribiendoalregistroT2CON. ConfigurarelmduloCCP1paraoperacinPWM.PoniendoenaltolosbitsCCP1CON.ComoejemplogeneraremosdosfrecuenciasdistintasseleccionablesmediantelaaccindeunpulsadorconectadoraRB0.Unadelassealesserde500Hzylaotrade2kHz,conciclodetrabajode50%.Conosciladorde4MHzypreescaler1/16tendremos:Sealde500HzPR2=124(0x7C)CCPR1L&2bits=250(0xFA)CCPR1L=0x3E&2bits=10Sealde2kHzPR2=30(0x1E)CCPR1L&2bits=62(0x3E)CCPR1L=0x0F&2bits=10Hardwarenecesario:

  • 74

    Cdigo:

    Veamosotroejemplo:EnestesefijalafrecuenciadePWMen2kHzysevaraelciclodetrabajocon2pulsadoresdecontrolconectadosaRB0yRB1.SolosemodificaenbytealtodelCT,seaelregistroCCPR1LconloqueCTsevarade4en4.

  • 75

    Hardwarenecesario:

    Cdigo:

  • 76

    Registrodedesplazamiento74LS164NEnalgunaoportunidadhemoshabladodelaimportanciadelosregistrosdedesplazamientoalahoradecontrolardisplays.Esquegraciasaestosintegradossepuedeevitaralmicrocontroladorlatareadeactualizarconstantementeelestadodelosmismos,yaqueelregistrodedesplazamientoseencargademantenerencendidoslossegmentosqueseannecesarios.Enestaentregaveremoscmorealizaresecontrolconelpopularchip74LS164.ControldeDisplayscon74LS164Aqurealizounnuevoejemplodemanejodevariosdisplaysde7segmentos.Enestecasorealizaremoselcontrolde3displaysconlaayudadelregistrodedesplazamiento74LS164.LasventajasqueconllevaelusodeesteCIesquenonecesitaremosmultiplexarlasealenviadaalosdisplays,algoquelimitamuchoalmicrocontrolador,yaquedeberefrescarloscontinuamente.Y,obviamente,ladesventajaesquenecesitaremosun74LS164porcadadisplay.Hardware:(lospines7y14del74LS164vanaGNDy5V,ysedebeagregarunaresistenciaacadalneaqueuneel74LS164coneldisplay)

  • 77

    Conestecircuitosepuedenmanejar3displays+los3puntos.Elprimerbitqueingresaserempujadoporlosdems.Ejemploparaenviar12.7:

    Cdigo:

  • 78

  • 79

    ComohacerCarteldeLEDs732.Conestaentregafinalizamoslasegundapartedeestetutorial.Alolargode25entradashemosvistotodolonecesarioparapoderprogramarprcticamentecualquieraplicacinutilizandolospopularesmicrocontroladoresPIC16F84AyPIC16F628A.Nosdespedimosconlaexplicacindeloqueparamuchosesunproyectomuyinteresante:lacreacindeuncarteldeLEDsquepasamensajes.

    CarteldeLedsenASMParamostrarunejemplosencillovamosausarunatablaparaguardarelmensajeamostraryunasolavariable(8bits)paraindicarellargoycontroldelaposicinaenviar.Porelloellargodelmensajeestarrestringidoa255bytesquesereducenen6porlaposicindelatablaenlamemoriadeprograma.Laformadeguardarcadaletradelmensajeserlasiguiente:

    Cadabyteindicaunacolumnadelaletra,dondeun0esledapagadoy1ledencendido.Nota:Esunaformadehacerlo,lacuallaaprenddelamigoBrunoFenunodesustantosaportesLuegoelmensajepuedesermayoralcartelutilizadoparamostrarloasqueesnecesarioefectuarundesplazamientodelmensajesobreelcarteloloqueeslomismodesplazarelcartelsobreelmensaje.Paraelloseutilizarunavariablequeindicalaposicininicialdentrodelmensaje,enlacualcomienzaamostrarseenelcartel.Comodeseamosqueelmensajesearotativoelproblemasepresentaenlasltimasposicionesdondesedebemostrarlapartefinaldelmensajeyempezaramostrarelinicio.Loquehacemosesdividiren2laformademostrarelmensaje,cuandoPosicinInicial+LargodelCartelseamenoraLargodelmensajeycuandoseamayor:

  • 80

    Bueno,msomenossehaexplicadocomovamosatrabajarconelmensaje,ahorasedebeentendercomovaafuncionarelmultiplexadodelosleds.Vamosarealizarlamultiplexacinporfilas,seaquevamosaseleccionarunafilayvamosaactualizarsusvalorespormedioderegistrosdedesplazamientos.Eltiempodeactualizacinnodebesuperarlos20ms!Paraactualizarusaremosunavariablequeindiquequefilahadeactualizarse,porejemploparaactualizarlafilaunolavariableFilaActualser00000001.Ahoraparasaberquevalorestenemosquemandaralosregistrosdedesplazamientoiremostomandocadaunadelascolumnas(PosicionEnviar)aactualizar,aremosunANDconFilaActualydeterminaremossienviarun1oun0.(PosicionEnviar(AND)FilaActual)=FilaActual? Si>Enviamosun1 No>Enviamosun0Hardwareparasimulacin:

  • 81

    Cdigo:

  • 82

  • 83

  • 84

    Consideracionesparaconstruccinreal:ParalaconstruccinrealsedebeagregarlapartedepotenciadadoqueelPICysegnelregistrodedesplazamientoqueseutilicenosoncapacesdemanejarlascorrientesnecesarias,paraellosecolocantransistoresparaelcontroldelasfilasyseagregaelULN2803/2003enseriealosregistrosdedesplazamiento,unaformadehacerloseralasiguiente:

    Ycambiarrutinadeefectivizara:

  • 85

    Otraforma:

    Otraforma

    Perodebentenerencuentaqueparaencenderunledsedebeenviaralregistrodedesplazamientouncero.

  • Lenguaje ensamblador desde cero Lo primero que hay que saber para este lenguaje, es que cada lnea de cdigo, es una instruccin que realiza el CP o un paso que realiza el CP. A diferencia de otros lenguajes, como por ejemplo el C, una lnea de instruccin, puede llevar uno o ms pasos que el CP debe realizar. Ms adelante entendern el porqu. A esto ltimo dicho, nos explica el porqu de un programa escrito en ASM (assembler) lleva menos lnea de instruccin que el mismo programa realizado en otro lenguaje. Esto se traduce que, cuanto menos lneas de cdigo, menor consumo de la memoria de programa. Nota: Entendemos por el mismo cdigo, al realizar un software para realizar una dicha tarea. Una tarea que debe realizar nuestro microcontrolador, puede ser escrito en diferentes lenguajes, y es el programa que se utiliz quien lo traduce a formato hex (1 y 0). Ahora, Qu es el CP? El CP o PC es el Contador de Programa. Es el encargado de leer cada instruccin y realizar la accin solicitada por el software. Para dar un ejemplo un poco ms claro, digamos que el CP, es una persona. Esta persona se le da un papel que tiene diferentes tareas a realizar. Estas tareas, estn una debajo de la otra y lee lnea por lnea y hace lo que le dice esa lnea. Cada lnea, posee una instruccin que se debe hacer. Cuando termin de hacer esa instruccin, contina con la lnea de abajo. Supongamos que tenemos un papel que dice:

    Levantar la mano izquierda. Bajar la mano izquierda. Saltar tres veces en el mismo lugar. Levantar la mano derecha. Saltar una vez en el mismo lugar. Bajar la mano derecha.

    El CP, har esas tareas sin negarse y lo har fielmente a lo que est escrito. Por lo que, si hace una tarea mal, es porque le pusimos una o ms instrucciones mal. Si bien, el CP har lo que nosotros le pidamos, el CP nos pide que respetemos algunas cosas. Estas cosas, dependern de cada microcontrolador y que debemos saber para poder programar en forma correcta al PIC.

    Cmo es la estructura del lenguaje ASM? Es muy fcil, posee 4 columnas bien diferenciadas y que no es problema acordarse.

    La primera columna se llama ETIQUETA y sirve para darle el nombre a una posicin de la memoria del programa al que se necesita apuntar. Los que no se den cuenta, ya lo harn.

    La segunda columna, se llama INSTRUCCIN y lo que justamente hace, es una instruccin a realizar por el CP.

    La tercera columna, se llama OPERANDO y es el operando de una instruccin, o sea, de la segunda columna. Hay instrucciones que no tienen operando y las veremos ms adelante.

  • Y la cuarta columna, se llama OBSERVACIONES y sirve solo para el programador, o sea, el usuario que est programando el PIC. En otras palabras, a nosotros. Siempre comienza con ; (punto y coma)

    Si no sirve para el PIC, Para qu complicarla ms? Todo lo contrario, es para ayudar al programador de que no se olvide que intent hacer. Todos los lenguajes, desde los ms bsicos hasta los ms avanzados, tienen esta caractersticas ya que en el pondremos que es lo que queremos hacer o explicar el programa. Si bien, estas observaciones se utilizan en la cuarta columna, no es obligacin colocarla en esta columna, si no que puede ir al margen de la planilla en dnde estamos programando. Y es aqu dnde explicaremos la porcin de una rutina para entenderlo ms adelante. Bien, veremos a continuacin, como se escriben las columnas: ETIQUETAS INSTRUCCIN OPERANDO ;OBSERVACIONES O, podemos verlo as: ;OBSERVACIONES ;OBSERVACIONES ;OBSERVACIONES (y la cantidad que necesitemos) ETIQUETAS INSTRUCCIN OPERANDO ;OBSERVACIONES

    Antes de empezar a ver las instrucciones, debemos concentrarnos en los registros. Qu son los registros? Los registros, son posiciones de memoria el cual se utilizan para ir configurando el pic mientras se corre el programa, cambiar de bancos para acceder a otras partes de memorias, son banderas que nos van diciendo que est pasando con distintas operaciones, son habilitaciones o deshabilitaciones para mdulos que trae el PIC. Por ejemplo, conversor Analgico/Digital, PWM. Estos registros, tienen una ancho de bit de acuerdo al PIC, que hay de 8 bit, 16 bit y 32 bit. Excepto la palabra configuracin y que la veremos ms adelante. El tamao de los registro depende del tipo de microcontrolador. Cada registro, posee un nombre, y cada bit o un grupo de bit, se puede utilizar para lo descripto anteriormente (habilitar/deshabilitar, etc.). A continuacin, veremos una posicin de la RAM y sus 4 bancos. Este, es del PIC16F877

  • Como notarn, en las cuatro columnas, hay nombres. Estos nombres son todos los registros que posee este PIC. Vern que hay registros que se repiten. No quiere decir que estn duplicados, triplicados o cuadriplicados, si no que se puede acceder a ellos no importa en qu banco estemos trabajando. (Ya lo entendern, no se preocupen). Cada vez que se programe el PIC y se necesite trabajar con uno de estos registros, se debe acceder al banco que est dicho nombre. Es por eso, que esta tabla es muy importante a la hora de trabajar.

  • Aprovechando que sub esta tabla del pic, cuando de ejemplos de programacin, ser sobre este pic. Microchip provee en forma gratuita estos Datasheet. Y hay uno por cada PIC. Por lo que si no tienen este Datasheet, descrguenlo de la pgina de Microchip. Cuando empecemos a programar, lo necesitarn.

    Uno de los registros muy utilizado, es el registro de trabajo W, el cual, se utiliza para mover un dato/valor de un registro a otro, cargar valores en un registro, y con la ayuda de la ALU puede hacer operaciones matemticas. Observen con atencin el diagrama de bloque dnde se encuentra W

    Ahora bien, si W es un registro, dnde est ubicado, ya que en el mapa de memoria no lo

  • encuentro? El registro W no est implementado en la memoria RAM, ni en la posicin 0x00 ni en otra posicin. W es un registro independiente que tiene un bus directo con la ALU (un camino privado). La ALU es la nica entidad que puede leer o escribir este registro de trabajo. El direccionamiento indirecto hace uso de los registros FSR e INDF. INDF es completamente ajeno a W. Un direccionamiento indirecto usa el registro FSR como apuntador al contenido de otros registros. Cualquier instruccin que hace uso de INDF (0x00) como direccin invoca un direccionamiento indirecto. Los microcontroladores PIC, poseen tres tipos de memorias. Memoria de Programa: Es la ubicacin fsica dnde se guarda el firmware que hemos creado, o

    sea, nuestro programa. Y tiene un ciclo de 100.000 de lectura y/o escrituras antes de estropearse y es del tipo FLASH.

    Memoria de datos de uso general: Es la memoria RAM del PIC. Recordemos, que los registros estn sobre la memoria RAM y la memoria de uso general, comienza despus de los registros.

    Memoria de datos EEPROM: Puede almacenar datos ms de 40 aos sin energa y 1.000.000 de ciclos de escritura y lectura

    El PIC 16F877, tiene una memoria de programa de 8Kb por un ancho de 14 Byte, o sea que cada posicin de memoria tiene 14 bytes (B'11111111111111', o H'3FFF') Cada lnea de instruccin ocupa una posicin en la memoria de programa, as que, podemos poner hasta 8.192 instrucciones. La RAM de uso general (ms los registros) trae 368 bytes con un ancho de 8 bytes (B'11111111', o H'FF'). Esto quiere decir, que tenemos 368 posiciones para nuestro uso. La EEPROM trae 256 bytes con un ancho de 8 bytes. Tenemos 256 posiciones para nuestro uso.

    Ahora, vamos a estudiar el registro STATUS y luego continuaremos con las instrucciones. Registro STATUS Si entendieron hasta ac, se acordar que los registros poseen un ancho de 8 bytes. Cada byte, puede contener un 1 o 0. Vemos ahora en detalle el registro STATUS:

  • Este registro, tiene 3 Bytes dedicado para las operaciones matemticas, 3 bytes dedicado al cambio de banco de memoria y 2 bytes dedicado para saber qu o quin produjo un Power Up (despertar del micro). Y se puede leer y escribir en l (cambiar datos). Los analizamos desde el ms significativo (MSB) hasta el menos significativo (LSB). BIT 7: Se llama IRP y sirve para el direccionamiento indirecto para cambiar el banco de memoria. 1 = Banco 2 y 3 0 = Banco 0 y 1 BIT 6 y BIT 5 Se llaman RP1 y RP0 respectivamente. Sirve para el direccionamiento directo para cambiar de banco de memoria.

  • 00 = Banco 0 01 = Banco 1 10 = Banco 2 11 = banco 3 BIT 4 Se llama TO (neg). Este bit se utiliza para saber quin despert al PIC. 1 = Despus que despierta (Power up) o por las instrucciones CLRWDT o SLEEP, se pone a 1 este bit. 0 = Se pone a 0 cuando el Watchdog o en castellano perro guardin (WDT) despierta al PIC. BIT 3 Se llama PD (neg). Este bit se utiliza para saber si el pic estaba durmiendo. 1 = Despus de que despierta (Power up) o por la instruccin CLRWDT, se pone a 1 0 = Se pone a 0 cuando se ejecuta la instruccin SLEEP BIT 2 Se llama Z y al igual que los dos bytes anteriores, es una bandera. Nos indica el resultado de una operacin aritmtica y lgica. 1 = La operacin aritmtica o lgica dio como resultado 0 0 = La operacin aritmtica o lgica no dio como resultado 0 BIT 1 Se llama DC. Digit carry/borrow (dgito llevar/prestar). Es afectado por las instrucciones ADDWF; ADDLW; SUBLW; SUBWF (Para la resta, la polaridad es inversa). 1 = Hubo un acarreo del 4to bit menos significativo al 5to bit. 0 = No hubo un acarreo del 4to bit menos significativo al 5to bit. BIT 0 Se llama C carry/borrow. Es afectado por las mismas instrucciones que afectan al bit DC. 1 = Hubo un acarreo del bit ms significativo (Bit 7) o sea cuando se excede de H'FF' 0 = No hubo acarreo del bit ms significativo

    Breve introduccin de las instrucciones Cada instruccin tiene un ancho de 14 Bits, es por eso que la memoria de programa tiene el mismo ancho. Justamente para poder alojar cada instruccin. Las instrucciones, estn divididas en tres grupos. Los cuales son:

    Byte-Oriented operation (Byte-Orientando a la operacin) Cada instruccin de este grupo est compuesta por:

    OPCODE (Cdigo) DESTINATION (Destino) FILE REGISTER ADDRESS (Direccin del archivo de registro)

    El OPCODE o cdigo, es el cdigo de cada instruccin