AYUDA para programa fuente

pkid

Bovino adolescente
#1
hola a todos bueno soy estudiante de electronica d 3er semestre
les explico hace unos dias un maestro me dejo que hiciera con un pic 18f4550 y cuatro displays (nada de utilizar ningun logico solo unos transistores) un desplegador de letras como un anuncio en los displays todo con lenguaje c en esto.el problema esq no puedo hacer el programa para que cumpla con lo que quiero
no se si alguien m pueda orientar en esto
gracias por su ayuda y atencion
aqui esta el diagrama del circuito http://www.subirimagenes.com/otros-dibujo-7185214.html
 
#2


Que es lo que quieres? un codigo que te muestre mensajes en el display?

Primero danos lo que tienes porque nadie te hara la tarea por ti mismo!
pero para que sepas como puede ir, te dejo un ejemplo de como hacerlo con binarios.

se espera que lo uses con PicBasic Pro de microEngineering Labs, Inc.; CCS PIC C de CCS y el ensamblador MPASM de Microchip.

El único avance que vamos a alcanzar en 7 Segmentos consiste en mandar las tramas que dibujan cada número o letra en este tipo de displays. Cada pin del PORTB está conectado a cada uno de los terminales del Display en la forma 0-a 1-b 2-c 3-d 4-e 5-f 6-g y 7-dp (decimal point).

Así un 0 (cero) se representa mediante la iluminación de los segmentos a b c d e y f por lo que deberemos sacar por el PORTB el número en binario '00111111' pero si queremos representar por ejemplo la letra F debemos iluminar los segmentos a e f y g, o lo que es lo mismo mandar al PORTB un '01110001'. Fácil y sencillo como juego de chiquillo.

(lo he publicado anteriormente en Google+ si quieres aprender deja ya FailBook y unete a la comunidad de pluseros Geek)



Aqui lo tienes para un PIC16F628

Código:
'****************************************************************
'* by Enigmaelectronica  2006
'* Cuenta de 0 a F en un Display de 7 Segmentos
'* conectado directamente a PORTB
'* Si PORTA.0 1 Va hacia arriba (De 0 de F)
'* Si PORTA.0 0 Va hacia abajo (De F a 0)
'****************************************************************

@ DEVICE PIC16F628,WDT_OFF,PWRT_ON,MCLR_ON,BOD_OFF,CPD_OFF,PROTECT_OFF

Define OSC 4

'* Variables ****************************************************

MyNUM VAR Byte

'* Redefiniciones ***********************************************

V7SEG Var PORTB

'* Constantes ***************************************************

ND0 Con %00111111
ND1 Con %00000110
ND2 Con %01011011
ND3 Con %01001111
ND4 Con %01100110
ND5 Con %01101101
ND6 Con %01111101
ND7 Con %00000111
ND8 Con %01111111
ND9 Con %01100111
NDA Con %01110111
NDB Con %01111100
NDC Con %00111001
NDD Con %01011110
NDE Con %01111001
NDF Con %01110001
NDP Con %10000000
NDW Con %00000000

Inicio:
   CMCON = %00000111 ' Pines PortA a Digital (No comparator)
   TRISA = %00001111 ' Los pines 0 a 3 del PORTA a Entrada
   TRISB = %00000000 ' Todos los pines del PORTB a Salida
   Gosub WV7SEG ' Pone a Low todos los Segmentos
   Pause 1500 ' Espera 1.5 Segundos antes de comenzar
   MyNUM = 0
Loop: 
   if PORTA.0 = 1 then
      Gosub IncMyNUM
   else 
      Gosub DecMyNUM
   Endif
   Gosub WV7SEG
   Gosub Act7SEG 
   Gosub Pausa
   Goto Loop 

WV7SEG: 
   V7SEG = NDW
   return

IncMyNUM: 
   MyNUM = MyNUM + 1
   if MyNUM = 16 then MyNUM = 0
   return

DecMyNUM: 
   if MyNUM = 0 then MyNUM = 16
   MyNUM = MyNUM - 1
   return

Act7SEG
   SELECT Case MyNUM
          Case 0 
             V7SEG = ND0
          Case 1
             V7SEG = ND1
          Case 2
             V7SEG = ND2
          Case 3
             V7SEG = ND3
          Case 4
             V7SEG = ND4
          Case 5
             V7SEG = ND5
          Case 6
             V7SEG = ND6
          Case 7
             V7SEG = ND7
          Case 8
             V7SEG = ND8
          Case 9
             V7SEG = ND9
          Case 10
             V7SEG = NDA
          Case 11
             V7SEG = NDB
          Case 12
             V7SEG = NDC
          Case 13
             V7SEG = NDD
          Case 14
             V7SEG = NDE
          Case 15
             V7SEG = NDF
          Case Else
             V7SEG = NDP
   END SELECT
   return

Pausa:
   Pause 333 
   return

End
 
#3
Si lo quieres en Assembler aqui lo tienes:

Código:
;7SEGasm

   LIST p=16F628         ;Decimos al ensamblador qué micro estamos usando
   include "P16F628.inc" ;Incluimos las definiciones de nuestro micro
   ERRORLEVEL 0, -302    ;suprime mensajes de "bank selection" al ensamblar
   __config 0x3D18       ;configuramos (oscilador, tipo etc.)

   cblock 0x20           ;Comienzo de los registros de propósito general 
                         ;RAM en el Bank0
      MiNum              ;Mi número contador
      count1             ;Usado en la rutina Delay
      counta             ;ídem
      countb             ;ídem
   endc

SEG_PORT Equ PORTB       ;Redefino Puerto donde conecto el Display 7Segmentos
SEG_TRIS Equ TRISB

   org 0x0000            ;org coloca el programa en el origen, 0x0000 para el 16F628,
                         ;Por aquí es por donde empieza el programa a ejecutarse
   movlw 0x07
   movwf CMCON           ;Deshabilito los comparadores
   bcf STATUS, IRP
   bcf STATUS, RP1
   bsf STATUS, RP0       ;Selecciono el Bank 1 para poder acceder a SEG_TRIS
   movlw 0x00
   movwf SEG_TRIS        ;Configuro todo el SEG_PORT para que sea de salida
   bcf STATUS, RP1
   bcf STATUS, RP0       ;Selecciono de nuevo el Bank 0
   clrf SEG_PORT         ;Limpio Display antes de empezar
Inicio
   movlw 0x00            ;Inicializo MiContador
   movwf MiNum

Main
   movfw MiNum           ;Cargo en W Offset actual 
   Call Display
   Call Del250           ;Espero 1/2 segundo
   Call Del250 
   incf MiNum, f         ;Incremento MiNumero
   movf MiNum, w         ;Cargo MiNum en W para testearlo y no pasarme de F
   sublw 0x10            ;Le resto 10 Hex
   btfss STATUS, Z       ;Si el resultado es cero salto a Inicio
   goto Main             ;En caso contrario a Main
   goto Inicio

Display
   Call LED_Table        ;Cargo W con el Pattern a dibujar
   movwf SEG_PORT        ;Envío el Pattern al PORT_SEG
   retlw 0x00

LED_Table
   addwf PCL,f           ;Sumo el Offset cargado al Program Counter (Low byte)
                         ;para saltar al retorno que me interesa 
   retlw b'00111111'     ;0
   retlw b'00000110'     ;1
   retlw b'01011011'     ;2
   retlw b'01001111'     ;3
   retlw b'01100110'     ;4
   retlw b'01101101'     ;5
   retlw b'01111101'     ;6
   retlw b'00000111'     ;7
   retlw b'01111111'     ;8
   retlw b'01100111'     ;9
   retlw b'01110111'     ;A
   retlw b'01111100'     ;B
   retlw b'00111001'     ;C
   retlw b'01011110'     ;D
   retlw b'01111001'     ;E
   retlw b'01110001'     ;F


;** Rutinas de Delay *************************************

Del250 
   movlw d'250' ;delay 250 ms
   goto Delay

Delay
   movwf count1
d1 movlw 0xC7 ;delay 1mS
   movwf counta
   movlw 0x01
   movwf countb
Delay_0
   decfsz counta, f
   goto $+2
   decfsz countb, f
   goto Delay_0

   decfsz count1 ,f
   goto d1
   retlw 0x00

   END
 

pkid

Bovino adolescente
#4
antes q nada gracias por contestar
bueno ahora si la parte dl programa compilador estoy ocupando el ccs y necesito el archivo hex para meterlo en la targeta entrenadora
en cuestion dl programa es en binario lo q ya tengo es definir los puertos q ocupare q son los d b como salidas y el a como entradas hasta ahi todo entiendo lo q sigue ya m confundio,
ya he hecho un programa contador para un solo display el caso no se si pueda utilizar el switch para el programa q quiero hacer.
no pido q m hagan la tarea solo q m guien como hacerlo ya q mi profe se ausento y cuando llego casi al final dl semestre se l ocurre q hagamos esto, no es escusa pero si m pudieran guiar estaria agradecido
 
Arriba