Autor Tema: rutina para evitar interferencias  (Leído 1523 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sebastianvera

  • PIC10
  • *
  • Mensajes: 37
rutina para evitar interferencias
« en: 14 de Mayo de 2005, 11:40:00 »
hola, estoy haciendo una cajita asi:

un pic16f628a controla un uln2803 (x porta.0 1 y 2 )q controla a su vez 3 reles para 3 motores
ademas el pic tiene dos les (portb.0 y portb.3)

en la eprom del pic guardo la programacion de las salidas, el pic va leyendo y asi para adelante, bien basiquito.

el asunto es q para modificar la memoria interna y controlar algunas cosas uso la puerta serial con una interrupcion, teoricamente la parte de picbasic esta correcta, todavia no llegue a conectarle nada a la puerta serial, aunque todo esto ya esta montado en su plaquita y su cajita.

dependiendo de mi suerte y no entiendo porque el programa salta solo a la parte de la interrupcion serial, sin tener nada conectado al serial, y mismo teniendo una proteccion en esta parte del codigo para que no se quede ahi, ahi se queda.

la pregunta es, cuales son los recaudos que se deben tomar para evitar ruidos de cualquier tipo en el pic, el pic tiene un capacitor 0.1uF otro de 100uF 25V las patas que no uso estan como salida, ya probe usar el resistor en el mclr, todo todo todo, y sigue haciendo lo mismo, lo que me falta hacer y no tengo muy claro es el brown out reset, tengo q leer un poco mas en microchip sobre esto.

Otra cosa, si a alguien le interesa este proyectito puedo postearlo, cuando pueda solucionar estas interferencias tengo q hacer la otra cajita para ver en tiempo real lo q esta pasando en esta plaquita y modificar su programacion.

muchas gracias gente! espero q el foro siga funcionando y no siga cayendo Sonrisa


@ device mclr_off,wdt_off,intrc_osc
intcon=%11000000

define hser_rcsta 90h
define hser_txsta 20h
define hser_baud 2400
define hser_clroerr 1

cmcon=7
trisa=%00000000
trisb=%00000010

ledf   var   portb.0
ledp   var   portb.3

index   var   byte
char1   Var byte
char2   var byte
char3   var byte
salida   var byte
tiempo   var byte
temp1   var byte
temp2   var byte
temp3   var byte
temp4   var byte
temp5   var   byte
temp6   var   byte
sale   var   bit
altera   var   bit
informa   var   bit

data     1,2,4,0,1,3,7,0,255
data @64,5,5,5,5,5,5,5,5,255

on interrupt goto serial
pie1.5 = 1
informa=0
DISABLE
"****************************************************************
inicio:
    porta=0
    index=0
    altera=0
    high ledp
    high ledf
    pause 2500
    low ledp
    high ledf

ENABLE
"****************************************************************
loop:
    read index,salida
    read (index+64),tiempo
    if salida < 241 then  
        porta = salida
        for temp1 = 1 to tiempo
            if informa= 1 then hserout[251,index,salida,tiempo,temp1]
            for temp2 = 1 to 10
                for temp3 = 1 to 10
                    pause 10
                next temp3
            next temp2
        next temp1
        index=index+1
        if index = 64 then index=0
    else
        index=0
    endif
goto loop
end

DISABLE
"****************************************************************
serial:
    high ledp
    low ledf
    sale=0
    REPEAT
        while pir1.5=1
            hserin [char1]
            select case char1
                CASE 255
                    sale = 1
                case 254
                    if pir1.5=1 then
                        hserin [char2]
                        if char2 <8 then
                            altera=1
                            porta=char2
                        endif
                    endif
                case 253
                    temp4=0
                    repeat
                        read temp4, char2
                        read (temp4+64), char3
                        hserout [249,temp4,char2,char3]
                        temp4 = temp4+1
                    until char2 = 255 or temp4 = 64
                    if altera = 0 then sale = 1
                case 252
                    hserout[254,salida]
                    if altera = 0 then sale = 1
                case 251
                    hserout[251,251,251,251,251]
                    if altera = 0 then sale = 1
                    informa=1
                case 250
                    hserout[251,250,250,250,250]
                    if altera = 0 then sale = 1
                    informa=0
                case 249
                    if pir1.5=1 then
                        hserin[char2]
                            if pir1.5=1 then
                                hserin[char3]
                                if pir1.5=1 then
                                    hserin [temp4]
                                    write char2,char3
                                    write (char2+64),temp4
                                    porta=0
                                    altera=1
                                endif
                            endif
                    endif
            end select
        wend
    UNTIL SALE = 1
    if altera = 1 then inicio
    low ledp
    HIGH ledf
resume

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: rutina para evitar interferencias
« Respuesta #1 en: 14 de Mayo de 2005, 15:41:00 »
hola, mire un poquitin nomas tu consulta pq el basic ya hace mucho q no lo uso, asi q pido disculpassi digo pavaas... pero , pareciera q una cosa es q se quede en la int del port serie, pero otra q vaya alli justo por eso,
a ver, de nuevo, como te aseguras q cuado la int es la serial vaya a la rutina de serial???

Desconectado sebastianvera

  • PIC10
  • *
  • Mensajes: 37
RE: rutina para evitar interferencias
« Respuesta #2 en: 14 de Mayo de 2005, 16:56:00 »
ok, wqtrp, gracias x responder, voy a ponerle un timeout al hserin y veo q pasa.

Desconectado sebastianvera

  • PIC10
  • *
  • Mensajes: 37
RE: rutina para evitar interferencias
« Respuesta #3 en: 16 de Mayo de 2005, 07:16:00 »
a ver si llegue a entender

con esto intcon=%11000000

activo las interrupciones globales y las perifericas

y con esto pie1.5 = 1

activo la interrupcion rcie

hay alguna interrupcion adicional que se haya activado junto con esto?


 

anything