torres.electronico
Well-known-Alfil
Buenas; estoy haciendo un nuevo proyecto sencillo, que basicamente es una pequeña fuente de poder variable con monitor de tension y corriente (1 adc para leer corrient - 1 adc para leer tension - 1 adc para leer un pote que sera el encargado de controlar el pwm en segundo plano conectado a un simple filtro para generar e 0 a 5Vcc)...
Cuando arranque todo, estaba probando unas librerias nuevas del lcd N3310 y me ganaron por cansancio... las librerias estan en el foro oficial del compilador , pero ese es ya otro tema que vere mas tarde si le dedico mas tiempo para entender, por que ni en el otro foro pueden entender por que hace un error raro; En fin, como estaba embalado como tren cargado, busque info y me tope con un topico donde intentan hacer un monitor de tension con caracterres gigantes....
no staba funcional el tema, asiq ue me puse a entender que hicieron, y donde estaba el problema... como lo solucione, pense que quizas a alguno le gustaria tener esta plantilla para hacer sus propios proyectos... aca va parte del programa:
Cuando arranque todo, estaba probando unas librerias nuevas del lcd N3310 y me ganaron por cansancio... las librerias estan en el foro oficial del compilador , pero ese es ya otro tema que vere mas tarde si le dedico mas tiempo para entender, por que ni en el otro foro pueden entender por que hace un error raro; En fin, como estaba embalado como tren cargado, busque info y me tope con un topico donde intentan hacer un monitor de tension con caracterres gigantes....
no staba funcional el tema, asiq ue me puse a entender que hicieron, y donde estaba el problema... como lo solucione, pense que quizas a alguno le gustaria tener esta plantilla para hacer sus propios proyectos... aca va parte del programa:
Código:
DEFINE ADC_BITS 10 ; ADCIN çözünürlük (Bits)
DEFINE ADC_CLOCK 3 ; ADC clock kaynagi (Fosc/8)
DEFINE ADC_SAMPLEUS 50 ; ADC örnekleme zamani (uSec)
CMCON=7
ADCON1=%10000010
TRISA=%00001111
TRISB=%00000000
TRISC=%00000000
PORTA=0
PORTB=0
PORTC=0
VOLT VAR WORD
HVD var word
AMPER var word
MV VAR BYTE
MA VAR BYTE
D_C var PORTB.0
RST VAR PORTB.1
SCK var PORTB.2
SDIN var PORTB.3
SCE VAR PORTB.4
LcdReg var byte
x var byte
y var byte
z var byte
a var byte
PosX var byte
PosY var byte
Chr var byte
LcdData var byte
Offset var byte
Char var byte
DATA @0,$3E,$51,$49,$45,$3E,_ ';// 0
$00,$42,$7F,$40,$00,_ ';// 1
$42,$61,$51,$49,$46,_ ';// 2
$21,$41,$45,$4B,$31,_ ';// 3
$18,$14,$12,$7F,$10,_ ';// 4
$27,$45,$45,$45,$39,_ ';// 5
$3C,$4A,$49,$49,$30,_ ';// 6
$01,$71,$09,$05,$03,_ ';// 7
$36,$49,$49,$49,$36,_ ';// 8
$06,$49,$49,$29,$1E,_ ';// 9
$08,$08,$3E,$08,$08,_ ';// +
$08,$08,$08,$08,$08,_ ';// -
$00,$60,$60,$00,$00,_ ';// .
$7E,$11,$11,$11,$7E,_ ';// A
$1F,$20,$40,$20,$1F,_ ';// V
$7F,$09,$09,$09,$01 ';// F
pause 100
LcdReg = %00100001 'LCD Extended Commands.
call PrintCtrlLcd
LcdReg = $C8 'Set LCD Vop (Contrast).Initial $c5
call PrintCtrlLcd
LcdReg = %00000110 'Set Temp coefficent.
call PrintCtrlLcd
LcdReg = %00010011 'LCD bias mode 1:48.
call PrintCtrlLcd
LcdReg = %00100000 'LCD Standard Commands
call PrintCtrlLcd
LcdReg = $0C 'LCD in normal mode. $0D inverse
call PrintCtrlLcd
GOSUB InicializaLCD
Call CursorHome
Gosub LCD_Clear
;*********************************************
;*********************************************
INICIO:
LCDOUT $FE,1
CALL BORDER_LINE
;--------------------------------------------------------
;En esta seccion colocan la rutina de lectura adc
;mas el acondicionamiento para imprimir en digitos
;--------------------------------------------------------
GOSUB N3310 , subprograma de control del display
GOTO INICIO
;******************************************
;******************************************
N3310:
'~~~~~~~~~~~~ cursor display volt
LcdReg = %10100000 + 17 ' cursor X
call PrintCtrlLcd
LcdReg = %01000010 +40 ' cursor Y
call PrintCtrlLcd
; --------- digitos de la lectura volt 00,0v osea "volt,milivolt"
Char = (VOLT dig 1)
call PrintChar
Char = (VOLT dig 0)
call PrintChar
Char = 12 ; imprimimos el caracter ","
call PrintChar
Char = (MV dig 0)
call PrintChar
;Char = (MV dig 1)
;call PrintChar
Char = 14 ;imprimimos el caracter "v"
call PrintChar
'~~~~~~~~~~~~~~~~~ cursor display amp
LcdReg = %10100000 + 17 ' cursor X
call PrintCtrlLcd
LcdReg = %01000010 + 50 ' cursor Y
call PrintCtrlLcd
'~~~~~~~~~~~~~~~~~ now display results
Char = (amper dig 1)
call PrintChar
Char = (amper dig 0)
call PrintChar
Char = 12 ; imprimimos el caracter ","
call PrintChar
Char = (Ma dig 1)
call PrintChar
Char = 13 ;imprimimos el caracter "a"
call PrintChar
RETURN
InicializaLCD:
D_C=1 ' Seleccionamos el registro de datos en RAM
SCE=1 ' Anulamos la seleccion del chip
pause 100 ' Hacemos una pausa de 100 ms
gosub Reset_LCD ' Reseteamos el LCD
return
Reset_LCD:
RST=0 ' Damos un pulso de reset durante 100 ms
pause 100
RST=1
SCE=0
RETURN
CursorHome:
SCK = 1
LcdReg = %10000000 ' cursor Home
call PrintCtrlLcd
LcdReg = %01000000 ' cursor Home
call PrintCtrlLcd
return
PrintChar:
offset = Char * 5
for a = 1 to 5
read offset, LcdReg
call PrintDataLcd
offset = offset + 1
next a
LcdReg = 0
call PrintDataLcd
return
PrintCtrlLcd: D_C = 0
PrintDataLcd:
for x = 1 to 8
SDIN = LcdReg.7
SCK = 1
LcdReg = LcdReg << 1
SCK = 0
next x
D_C = 1
return
LCD_Clear:
PosX=0:PosY=0:Gosub LCD_GotoXY
D_C = 1
FOR Chr=1 TO 252
LcdData=0:Gosub LCD_ByteOut
LcdData=0:Gosub LCD_ByteOut
next Chr
return
LCD_GotoXY:
D_C = 0
LcdData=%01000000 | PosY :Gosub LCD_ByteOut
LcdData=%10000000 | PosX :Gosub LCD_ByteOut
return
LCD_ByteOut:
SHIFTOUT SDIN,SCK,1,[LcdData]
return
Border_line:
'~~~~~~~~~~~~~~~~~ RAND 0
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000000 ' cursor Y
call PrintCtrlLcd
for y = 0 to 83
LOokup y, [$FF,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,_ ' UP-side "DIGITAL"
$01,$01,$01,$F9,$F9,$F9,$09,$09,$F9,$F9,$F1,$01,_
$01,$F9,$F9,$F9,$01,$01,$F1,$F9,$F9,$09,$09,$19,_
$19,$11,$01,$01,$F9,$F9,$F9,$01,$09,$09,$09,$F9,$F9,$F9,_
$09,$09,$09,$01,$F1,$F9,$F9,$09,$09,$F9,$F9,$F1,$01,$01,_
$F9,$F9,$F9,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,_
$01,$01,$01,$01,$01,$FF] ,LcdReg
call PrintDataLcd
next y
'~~~~~~~~~~~~~~~~~ RAND 1
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000001 ' cursor Y
call PrintCtrlLcd
for y = 0 to 83
LOokup y, [$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,_ ' DOWN-side "DIGITAL"
$00,$00,$00,$1F,$1F,$1F,$10,$10,$1F,$1F,$0F,$00,$00,_
$1F,$1F,$1F,$00,$00,$0F,$1F,$1F,$10,$11,$1F,$1F,_
$0F,$00,$00,$1F,$1F,$1F,$00,$00,$00,$00,$1F,$1F,$1F,$00,_
$00,$00,$00,$1F,$1F,$1F,$01,$01,$1F,$1F,$1F,$00,$00,$1F,$1F,_
$1F,$10,$10,$10,$10,$00,$00,$00,$00,$00,$00,$00,_
$00,$00,$00,$00,$00,$FF] ,LcdReg
call PrintDataLcd
next y
'=================================== RAND 2
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000010 ' cursor Y
call PrintCtrlLcd
LOokup 0, [$FF] , LcdReg
call PrintDataLcd
LcdReg = %10000000 + 83 ' cursor X
call PrintCtrlLcd
LcdReg = %01000010 ' cursor Y
call PrintCtrlLcd
LOokup 0, [$FF] , LcdReg
call PrintDataLcd
'=================================== RAND 3
; LcdReg = %10000000 ' cursor X
; call PrintCtrlLcd
; LcdReg = %01000011 ' cursor Y
; call PrintCtrlLcd
;
; LOokup 0, [$FF] , LcdReg
; call PrintDataLcd
;
; LcdReg = %10000000 + 48 ' cursor X
; call PrintCtrlLcd
; LcdReg = %01000011 ' cursor Y
; for y = 0 to 35
; LOokup y, [$18,$38,$60,$60,$38,$18,_ ' "VOLT"
; $00,$30,$78,$48,$78,$30,_
; $00,$78,$78,$40,$40,_
; $00,$08,$08,$78,$78,$08,$08,$00,_
; $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF] ,LcdReg
;
; call PrintDataLcd
; next y
'=================================== RAND 4
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000100 ' cursor Y
call PrintCtrlLcd
LOokup 0, [$FF] , LcdReg
call PrintDataLcd
LcdReg = %10000000 + 83 ' cursor X
call PrintCtrlLcd
LcdReg = %01000100 ' cursor Y
call PrintCtrlLcd
LOokup 0, [$FF] , LcdReg
call PrintDataLcd
'=================================== JOS
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000101 ' cursor Y
call PrintCtrlLcd
for y = 0 to 83
LOokup y, [$FF,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,_
$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,_
$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,_
$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,_
$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,_
$80,$80,$80,$80,$80,$80,$80,$80,$FF] ,LcdReg
call PrintDataLcd
next y
Return
'=======================================================================
End 'of program
;**********************************
;**********************************
Última edición: