Ir ao conteúdo
  • Cadastre-se

nasciment

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

posts postados por nasciment

  1. olá amigos! A linguagem é Basic o compilador é o picbasic pro, esse codigo é p/  placa pll fm,o problema é o seguinte a frequencia escolhida no pic ,nao sintetiza com o saa1057,por favor alguem sabe dizer onde esta o erro. o codigo completo é esse:

     

    '****************************************************************
    '*  compiler picbasic pro  compiler
    '*  Name    : PIC16F876A - SAA1057.BAS                                                       
    '*  Author  : [JCVB - CMC]                                                             
    '*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS]                
    '*          : All Rights Reserved                                                      
    '*  Date    : 15/09/2012                                                               
    '*  Version : 5.0                                                                      
    '*  Notes   :                                                                           
    '*          :                                                                         
    '****************************************************************
     '* DEVICE PIC16F876A, PROTECT_ON
     
     'CMCON =7
     'CVRCON =0
    INCLUDE "modedefs.bas"
    DEFINE OSC 4            'Cristal de 8 MHz
    DEFINE SHIFT_PAUSEUS 10
    OPTION_REG.7 = 0        'Activamos resistencias pull-up de PortB
    'DEFINE I2C_INTERNO 1 'Use p/ EEPROM interna em 16CExxx e 12CExxx
    'DEFINE I2C_LENTO 1 'Use p/ OSC >8mHz c/ dispositivos de veloc. padrão
    DEFINE ADC_BITS 10             ' Numero de bits
    DEFINE ADC_CLOCK 3             ' Pulso de reloj (3=rc)
    DEFINE ADC_SAMPLEUS 50      ' Tiempo antes del muestreo en uS
    ADCON1 = %10000011          ' Conversor AD, justificación derecha, referencia RA3
                                        ' todo el puerto analógico a excepción de RA5
    DEFINE LCD_BITS 4               'LCD en modo 4bits
    DEFINE LCD_DREG PORTB      'Los 4 bits conectados al PORTB
    DEFINE LCD_DBIST 0           'Parte baja del PORTB (RB0,RB1,RB2,RB3)
    DEFINE LCD_EREG PORTB      'Enabled conectado al PORTC
    DEFINE LCD_EBIT 6           'Enabled conectado a RC6
    DEFINE LCD_RSREG PORTB    'RS conectado al PORTC
    DEFINE LCD_RSBIT 5          'RS conectado a RC5
    TRISA = %11111111
    TRISB = %10010000   '11110000    888888888888888888888888888888888888888888888888888888
    TRISC = %01110000  '00010000 TROCADO C5 POR B5 E C6 PORB6    88888888888888888888888888
    PORTB = 0
    PORTC = 0
    MONITOR VAR BIT
    INDICE VAR BYTE
    CHAR1 VAR BYTE
    CHAR2 VAR BYTE
    CHAR3 VAR BYTE
    CHAR4 VAR BYTE
    CHAR5 VAR BYTE
    CHAR6 VAR BYTE
    CHAR7 VAR BYTE
    CHAR8 VAR BYTE
    CHAR9 VAR BYTE
    CHAR10 VAR BYTE
    CHAR11 VAR BYTE
    CHAR12 VAR BYTE
    CHAR13 VAR BYTE
    CHAR14 VAR BYTE
    CHAR15 VAR BYTE
    CHAR16 VAR BYTE
    Voltaje VAR WORD
    Temperatura VAR WORD
    Directa VAR WORD
    Reflejada VAR WORD
    Temp32 VAR WORD
    frecuencia VAR WORD
    FrecuenciaR VAR WORD
    ultimafrec VAR WORD
    config1057 VAR WORD
    tiempo VAR BYTE
    frech VAR BYTE
    frecl VAR BYTE
    I VAR BYTE
    Up VAR portb.4
    Down VAR portc.5  'era b5 88888888888888888888888888888888888888888888888888888888888
    Menu VAR portc.6   'erab6888888888888888888888888888888888888888888888888888888888888
    Program VAR portb.7
    lock VAR portc.4
    clb VAR portc.2
    dlen VAR portc.1
    dataa VAR portc.0
    potencia VAR portc.3
     
    config1057 = %1101110110010101  'WORDB
    'Detalle de WordB
    '0101    'Control de salida del pin 18 (Test point)
                '0000=1; 0001= contador programable; 0100=Frec. Ref.; 0101=Salida Lock/Unlock
    '1          BRM control del bus  1 = sw automatico;  0 = siempre en ON
    '00         PDM Detector de fase digital 0X = on/off automático; 10 = on; 11 = off
    '1          SLA Modo del Latch A  1 = síncrono; 0 = asíncrono
    '1          SB2 Habilita/deshabilita los últimos 8 bits de wordB 1 = habilita; 0 = deshabilita.
                '(Desde SLA hasta T0) Si es 0, los últimos 8 bits son colocados en 00000000
    '1110       Ganancia de corriente para el voltaje de error 0000=0.023; 0001=0.07; 0010=0.23; 0110=0.7; 1110=2,3
    '0          Frec. referencia 0 = 1Khz; 1 = 1.25Khz
    '1          Selector FM/AM 1 = FM; 0 = AM
    WRITE eeprom 0, [232,3,0,$20,$20,$20,$54,$45,$53,$49,$53,$20,$46,$49,$4D,$45,$20,$20,$20] 'Programa la EEPROM   3,232 = 1000 = 100.0 Mhz
    READ 0, frecl                   'Lee
    READ 1, frech                   'la EEPROM
    READ 2, MONITOR
    frecuencia = frech*256+frecl      'Une los bytes h y l
    ultimafrec = frecuencia
    LOW dLen
    Pause 100                       'Espera a que el LCD inicialize
       LCDOUT $FE, 1                    'Limpia pantalla
       LCDOUT $FE, 2                    'Cursor en la 1ra línea
       LCDOUT "   Tesis  PLL"           'Muestra texto en el LCD
       LCDOUT $FE, $C0                  'Va a la 2da línea
       LCDOUT "JCVB - CMC  2011"
    PAUSE 1000                           'Espera 1 Seg
    'CONFIG:                  'configura el SAA1057
       dlen = 1
       SHIFTOUT dataa, clb, 1, [CONFIG1057 \16]
       dlen = 0
       dataa = 0
       PAUSEUS 5
       clb = 1
       PAUSEUS 10
       clb = 0
       pause 1
    
    GOSUB registro      'establece frecuencia en el SAA1057
    ' Espera 5 segundos antes de empezar
    '***************************************************
    INICIO:
    LCDOUT $FE, 1                        'Limpia pantalla
    LCDOUT $FE, 2                       'Primera linea
    LCDOUT "Locking..."                'Muestra texto en el LCD
    FOR tiempo=5 TO 1 STEP -1
       LCDOUT $FE, $C0                      'Va a la 2da línea
       LCDOUT DEC tiempo, " segundos"
       PAUSE 1000                               ' Espera 500 mS
    NEXT tiempo
    potencia = 1
    REINICIO:
    GOSUB pll                        'escribe la frecuencia en el LCD
    READ 3, CHAR1
    READ 4, CHAR2
    READ 5, CHAR3
    READ 6, CHAR4
    READ 7, CHAR5
    READ 8, CHAR6
    READ 9, CHAR7
    READ 10, CHAR8
    READ 11, CHAR9
    READ 12, CHAR10
    READ 13, CHAR11
    READ 14, CHAR12
    READ 15, CHAR13
    READ 16, CHAR14
    READ 17, CHAR15
    READ 18, CHAR16
    LCDOUT $FE, $C0                      ' 2da línea
    LCDOUT CHAR1, char2, char3, char4, char5, char6, char7, char8, char9, char10, char11, char12, char13, char14, char15, char16
    PAUSE 100         
    
    '***************************************************
    'Programa Principal
    operando:
        IF  Menu = 0 THEN
            PAUSE 5000
            IF menu = 0 THEN
                PAUSE 100
                LCDOUT $FE, 1
                LCDOUT "Load..."
                LCDOUT $FE, $C0                      ' 2da línea
                LCDOUT "Nombre  Estacion"                  ' 2da línea
                PAUSE 3000
                indice = 1
                LCDOUT $FE, 1
                LCDOUT     char1, char2, char3, char4, char5, char6, char7, char8, char9, char10, char11, char12, char13, char14, char15, char16
                LCDOUT $FE, 2
                LCDOUT $FE, $0E
                GOTO cambia_nombre
            ENDIF
        ENDIF
        
        IF Program = 0 THEN
            PAUSE 5000
            IF program = 0 THEN
                PAUSE 100
                LCDOUT $FE, 1
                LCDOUT "Load..."
                LCDOUT $FE, $C0                      ' 2da línea
                LCDOUT "Prog. Frecuencia"              ' 2da línea            
                PAUSE 3000
                GOTO cambia_frecuencia
            ENDIF
        ENDIF
        IF Down = 0 THEN
            PAUSE 5000
            IF Down = 0 THEN
                pause 100
                LCDOUT $FE, 1
                LCDOUT "Load..."
                LCDOUT $FE, $C0                      '2da línea
                LCDOUT "Hardware Monitor"            '2da línea
                PAUSE 3000
                GOTO HARDWARE_MONITOR
            ENDIF
        ENDIF
        IF Up = 0 THEN
            PAUSE 5000
            IF Up = 0 THEN
                PAUSE 100
                LCDOUT $FE, 1
                LCDOUT "Load..."
                LCDOUT $FE, $C0                      '2da línea
                LCDOUT " Config Monitor"            '2da línea
                PAUSE 3000
                IF MONITOR = 1 THEN
                    LCDOUT $FE, 1
                    LCDOUT $FE, $C0                      '2da línea
                    LCDOUT "   Monitor ON"
                ELSE
                    LCDOUT $FE, 1
                    LCDOUT $FE, $C0                      '2da línea
                    LCDOUT "  Monitor  OFF"
                ENDIF
                GOTO CONFIG_MONITOR
            ENDIF
        ENDIF
        
        IF lock = 0 THEN
            LCDOUT $FE, 2, "Unlock"
            potencia = 0
        ELSE
            LCDOUT $FE, 2, "Lock  "
            potencia = 1
        ENDIF
        
        IF MONITOR = 1 THEN
            GOSUB SENSORES
            IF Reflejada > 5 OR Temperatura > 50 OR voltaje > 500 THEN
                GOTO PROTECCION
            ENDIF
        ENDIF
        
        PAUSE 1
    GOTO operando
    'Escribe registro
    registro:
       FrecuenciaR = frecuencia  * 10
       dlen = 1
       SHIFTOUT dataa, clb, 1, [FrecuenciaR\16]
       dlen = 0
       dataa = 0
       PAUSEUS 5
       clb = 1
       PAUSEUS 10
       clb = 0
       pause 1
    RETURN
    'fin escribe registro
    '***************************************************
    'Rutina del PLL. Escribe frecuencia en el SAA1057
    PLL:
        frecl = frecuencia
        frech = (frecuencia-frecl)/256      '888888888888888888888888888888888888888   8888
        
        IF ultimafrec <> frecuencia THEN     'Graba solo cuando hay cambio
            WRITE 0, frecl              'Graba eeprom
            WRITE 1, frech              'Graba eeprom
        ENDIF
        GOSUB registro
        IF frecuencia < 1000 THEN  '<108  88888888888888888888888888888               erro
            LCDOUT $FE, 1               'Limpia LCD
            LCDOUT "         ", DEC (frecuencia/10), ".", DEC1 frecuencia, "Mhz"
        ELSE
            LCDOUT $FE, 1               'Limpia LCD
            LCDOUT "        ", DEC (frecuencia/10), ".", DEC1 frecuencia, "Mhz"
        ENDIF
    RETURN
    
    '***********************************************
    'Rutina cambio de nombre a la Estación
    CAMBIA_NOMBRE:
        IF up = 0 THEN
            PAUSE 100
            SELECT CASE INDICE
                CASE 1: char1 = char1 + $01: IF char1 = $80 THEN: char1 = $7F
                        LCDOUT char1: LCDOUT $FE, $10
                CASE 2: char2 = char2 + $01: IF CHAR2 = $80 THEN: CHAR2 = $7F
                        LCDOUT char2: LCDOUT $FE, $10
                CASE 3: char3 = char3 + $01: IF CHAR3 = $80 THEN: CHAR3 = $7F
                        LCDOUT char3: LCDOUT $FE, $10
                CASE 4: char4 = char4 + $01: IF CHAR4 = $80 THEN: CHAR4 = $7F
                        LCDOUT char4: LCDOUT $FE, $10
                CASE 5: char5 = char5 + $01: IF CHAR5 = $80 THEN: CHAR5 = $7F
                        LCDOUT char5: LCDOUT $FE, $10
                CASE 6: char6 = char6 + $01: IF CHAR6 = $80 THEN: CHAR6 = $7F
                        LCDOUT char6: LCDOUT $FE, $10
                CASE 7: char7 = char7 + $01: IF CHAR7 = $80 THEN: CHAR7 = $7F
                        LCDOUT char7: LCDOUT $FE, $10
                CASE 8: char8 = char8 + $01: IF CHAR8 = $80 THEN: CHAR8 = $7F
                        LCDOUT char8: LCDOUT $FE, $10
                CASE 9: char9 = char9 + $01: IF CHAR9 = $80 THEN: CHAR9 = $7F
                        LCDOUT char9: LCDOUT $FE, $10
                CASE 10: char10 = char10 + $01: IF CHAR10 = $80 THEN: CHAR10 = $7F
                         LCDOUT char10: LCDOUT $FE, $10
                CASE 11: char11 = char11 + $01: IF CHAR11 = $80 THEN: CHAR11 = $7F
                         LCDOUT char11: LCDOUT $FE, $10
                CASE 12: char12 = char12 + $01: IF CHAR12 = $80 THEN: CHAR12 = $7F
                         LCDOUT char12: LCDOUT $FE, $10
                CASE 13: char13 = char13 + $01: IF CHAR13 = $80 THEN: CHAR13 = $7F
                         LCDOUT char13: LCDOUT $FE, $10
                CASE 14: char14 = char14 + $01: IF CHAR14 = $80 THEN: CHAR14 = $7F
                         LCDOUT char14: LCDOUT $FE, $10
                CASE 15: char15 = char15 + $01: IF CHAR15 = $80 THEN: CHAR15 = $7F
                         LCDOUT char15: LCDOUT $FE, $10
                CASE 16: char16 = char16 + $01: IF CHAR16 = $80 THEN: CHAR16 = $7F
                         LCDOUT char16: LCDOUT $FE, $10
            END SELECT        
        ENDIF
        IF Down = 0 THEN
            PAUSE 100
            SELECT CASE indice
                CASE 1: CHAR1 = CHAR1 - $01: IF CHAR1 = $1F THEN: CHAR1 = $20
                        LCDOUT char1: LCDOUT $FE, $10
                CASE 2: char2 = char2 - $01: IF CHAR2 = $1F THEN: CHAR2 = $20
                        LCDOUT char2: LCDOUT $FE, $10
                CASE 3: char3 = char3 - $01: IF CHAR3 = $1F THEN: CHAR3 = $20
                        LCDOUT char3: LCDOUT $FE, $10
                CASE 4: char4 = char4 - $01: IF CHAR4 = $1F THEN: CHAR4 = $20
                        LCDOUT char4: LCDOUT $FE, $10
                CASE 5: char5 = char5 - $01: IF CHAR5 = $1F THEN: CHAR5 = $20
                        LCDOUT char5: LCDOUT $FE, $10
                CASE 6: char6 = char6 - $01: IF CHAR6 = $1F THEN: CHAR6 = $20
                        LCDOUT char6: LCDOUT $FE, $10
                CASE 7: char7 = char7 - $01: IF CHAR7 = $1F THEN: CHAR7 = $20
                        LCDOUT char7: LCDOUT $FE, $10
                CASE 8: char8 = char8 - $01: IF CHAR8 = $1F THEN: CHAR8 = $20
                        LCDOUT char8: LCDOUT $FE, $10
                CASE 9: char9 = char9 - $01: IF CHAR9 = $1F THEN: CHAR9 = $20
                        LCDOUT char9: LCDOUT $FE, $10
                CASE 10: char10 = char10 - $01: IF CHAR10 = $1F THEN: CHAR10 = $20
                         LCDOUT char10: LCDOUT $FE, $10
                CASE 11: char11 = char11 - $01: IF CHAR11 = $1F THEN: CHAR11 = $20
                         LCDOUT char11: LCDOUT $FE, $10
                CASE 12: char12 = char12 - $01: IF CHAR12 = $1F THEN: CHAR12 = $20
                         LCDOUT char12: LCDOUT $FE, $10
                CASE 13: char13 = char13 - $01: IF CHAR13 = $1F THEN: CHAR13 = $20
                         LCDOUT char13: LCDOUT $FE, $10
                CASE 14: char14 = char14 - $01: IF CHAR14 = $1F THEN: CHAR14 = $20
                         LCDOUT char14: LCDOUT $FE, $10
                CASE 15: char15 = char15 - $01: IF CHAR15 = $1F THEN: CHAR15 = $20
                         LCDOUT char15: LCDOUT $FE, $10
                CASE 16: char16 = char16 - $01: IF CHAR16 = $1F THEN: CHAR16 = $20
                         LCDOUT char16: LCDOUT $FE, $10
            END SELECT        
        ENDIF
        PAUSE 100
        IF Menu = 0 THEN
            PAUSE 100
            indice = indice + 1
            IF INDICE = 17 THEN
                INDICE = 1
                LCDOUT $FE, $2
            ELSE
                LCDOUT $FE, $14
            ENDIF
            
        ENDIF
        IF program = 0 THEN
            PAUSE 100
            LCDOUT $FE, $C0
            WRITE 3, CHAR1
            WRITE 4, CHAR2
            WRITE 5, CHAR3
            WRITE 6, CHAR4
            WRITE 7, CHAR5
            WRITE 8, CHAR6
            WRITE 9, CHAR7
            WRITE 10, CHAR8
            WRITE 11, CHAR9
            WRITE 12, CHAR10
            WRITE 13, CHAR11
            WRITE 14, CHAR12
            WRITE 15, CHAR13
            WRITE 16, CHAR14
            WRITE 17, CHAR15
            WRITE 18, CHAR16        
            LCDOUT $FE, 1                        'Limpia pantalla
            LCDOUT "  Guardando..."            'Muestra texto en el LCD
            LCDOUT $FE, $0C
            PAUSE 2000
            GOTO REINICIO
        ENDIF
     GOTO CAMBIA_NOMBRE
    '********************************************
    'Cambio de Frecuencia
    CAMBIA_FRECUENCIA:
        GOSUB pll
        LCDOUT $FE, $C0    
        LCDOUT "Prog. Frecuencia"    
    FOR I=1 TO 200
        IF up=0 THEN
            PAUSE 200
            frecuencia = frecuencia + 1
            IF frecuencia < 1081 THEN   
                ELSE
                frecuencia = 1080
            ENDIF
        ENDIF
        
        IF down = 0 THEN
            PAUSE 200
            frecuencia = frecuencia-1
            IF frecuencia > 874 THEN    
                ELSE
                frecuencia = 875    
            ENDIF
        ENDIF
        IF Program = 0 THEN    
            PAUSE 100
            GOSUB registro
            LCDOUT $fe, 1
            LCDOUT $fe, 2
            LCDOUT "       OK"
            PAUSE 3000
            GOSUB pll  
            LCDOUT $FE, $C0              ' 2da línea
            LCDOUT       char1, char2, char3, char4, char5, char6, char7, char8, char9, char10, char11, char12, char13, char14, char15, char16
            PAUSE 100
            GOTO operando
        ENDIF
        PAUSE 1
    NEXT I
        
    GOTO CAMBIA_FRECUENCIA
    '***********************************
    'Monitor de Hardware
    HARDWARE_MONITOR:
        GOSUB sensores
        LCDOUT $FE, 1
        LCDOUT $FE, 2
        LCDOUT "V:", DEC (voltaje/10), ".", DEC1 voltaje, "V", "  ", "T:", DEC temperatura, "'C"
        LCDOUT $FE, $C0
        LCDOUT "D:", DEC (Directa/10),".", DEC1 directa, "W", "  ", "R:", DEC (reflejada/10), ".", DEC1 reflejada, "W"
        FOR I=1 TO 200
            PAUSE 1
            IF program =0 THEN: PAUSE 300: GOTO reinicio
        NEXT I
    GOTO HARDWARE_MONITOR
    
    '************************************
    'Adquisición de datos de los sensores
    SENSORES:
        ADCIN 0, directa
        IF directa <= 255 THEN
            directa = (directa * directa)/1000
        ELSE
            directa = directa * directa
            Temp32 = DIV32 1000
            directa = Temp32
        ENDIF
        ADCIN 1, reflejada
        reflejada = (reflejada * reflejada)/1000
        ADCIN 2, voltaje
        ADCIN 4, temperatura
        Temperatura = Temperatura/10
    RETURN
    '****************************************************
    'Configuración del Monitor de Hardware
    CONFIG_MONITOR:
        IF up = 0 THEN
            PAUSE 100
            IF MONITOR = 0 THEN
                MONITOR = 1
                LCDOUT $FE, 1
                LCDOUT $FE, $C0                  ' 2da línea
                LCDOUT "   Monitor ON"
            ENDIF
        ENDIF
        IF Down = 0 THEN
            PAUSE 100
            IF monitor = 1 THEN
                monitor = 0
                LCDOUT $FE, 1
                LCDOUT $FE, $C0                  ' 2da línea
                LCDOUT "  Monitor  OFF"
            ENDIF
        ENDIF
        IF Program = 0 THEN
            PAUSE 100
            LCDOUT $FE, 1
            LCDOUT $FE, 2                      ' 2da línea
            LCDOUT "Guardando..."
            PAUSE 1000
            WRITE 2, MONITOR
            GOTO REINICIO
        ENDIF
        IF Menu = 0 THEN
            PAUSE 100
            LCDOUT $FE, 1
            LCDOUT $FE, 2                      '2da línea
            LCDOUT "Cancelando..."
            PAUSE 1000
            GOTO reinicio            
        ENDIF
        
        PAUSE 10        
             
    GOTO CONFIG_MONITOR
    
    '****************************************************
    'Bloqueo del sistema
    PROTECCION:
       PORTC.7 = 1
       LCDOUT $FE, 1                        'Limpia pantalla
       LCDOUT $FE, 2                        'Cursor en la 1ra línea
       LCDOUT "     ERROR"               'Muestra texto en el LCD
        IF Reflejada > 5 THEN
            LCDOUT $FE, $C0                  'Va a la 2da línea
            LCDOUT "Pot.Ref. Elevada"
        ENDIF
        IF Temperatura > 50 THEN
            LCDOUT $FE, $C0                  'Va a la 2da línea
            LCDOUT "Tempera. Elevada"
        ENDIF
        IF voltaje > 500 THEN
            LCDOUT $FE, $C0                  'Va a la 2da línea
            LCDOUT "Voltaje  Elevado"
        ENDIF
        BLOQUEO:
            PAUSE 1000
        GOTO BLOQUEO
    END

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!