Vai al contenuto
PLC Forum


Problemi programmazione uscite con PIC16F629


Eramita Analogico

Messaggi consigliati

Eramita Analogico

Buongiorno, sono nuovo del forum. Scrivo da Treviso e sono Paolo.

Vorrei avere un confronto su un problema che sto riscontrando sulla programmazione dei pin di uscita del PIC16F629

 

Premetto che sto scrivendo il programma in PIc Basic, però andando a leggere il file ASM generato in fase di compilazione sembrerebbe tutto in ordine, eppure non mi spiego una cosa.

In sostanza ho una routine di interrupt generata dal TMR0 che mi aggiorna periodicamente una serie di registri a scorrimento 74HC594 per estendere il numero di uscite del PIC (nella fattispecie sono 7 registri in serie, per un totale di 56 uscite)

I dati seriali li faccio uscire da GP0, il clock dello scorrimento da GP1 e il clock di caricamento delle uscite da GP2

 

Il problema è che quando imposto ad 1 l'uscita GP0 poi devo dare un breve impulso a 1 su GP1 per far avanzare lo scorrimento dei registri, però se vado a guardare con l'oscilloscopio questi segnali vedo che GP0 va regolarmente a 1 salvo tornare immediatamente a 0 quando GP1 va a 1.

Infatti sui registri vengono caricati tutti 0.

Se metto una piccola capacità (tipo 100 pF) su GP0 invece funziona tutto perché infatti il dato a 1 è leggermente ritardato e viene "preso" dal fronte di salita di GP1

Ma perché GP0 torna a zero da solo quando imposto GP1 a 1??

Ribadisco che dal file asm vedo bsf riferito a gp0 e subito dopo solamente bsf riferito a gp1, seguito a sua volta da bcf del solo gp1

 

Grazie in anticipo per eventuali indicazioni.

Saluti.

 

Modificato: da Eramita Analogico
Link al commento
Condividi su altri siti


Eramita Analogico

Scusate, il pic è 12F, non 16F

12F629 (8 pin)

 

 

Aggiornamento:

ho provato ad usare GP5 anziché GP0 per l'uscita seriale dei dati, e con lo stesso codice funziona. GP5 si comporta regolarmente. GP0 invece, settato a 1 subito dopo GP5 e subito prima di GP1, torna da solo a 0 quando GP1 va a 1

Si tratta di un bug forse? O c'è qualche impostazione particolare diversa da Trisio che non ho considerato?

Grazie, saluti.

 

Modificato: da Eramita Analogico
Link al commento
Condividi su altri siti

purtroppo non so programmare in basic con i pic

Con la simulazione di questo asm a me funziona

 

         processor 12F629
        include <p12f629.inc>
        __CONFIG    _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.
        RADIX    DEC

        cblock    0x20
Count1
Count2
        endc

        org 0

        errorlevel -302 

        bsf        STATUS,RP0

        movlw    b'11101100'
        movwf    TRISIO
        bcf        STATUS,RP0
        movlw    b'00000111'    ; Disattiva
        movwf    CMCON        ; i comparatori
        errorlevel +302 

ini        bsf        GPIO,0        ; Pin 6
        bsf        GPIO,1        ; Pin 6
        movlw    1
        call    D100ms
        bcf        GPIO,0
        bcf        GPIO,1
        movlw    1            ; Pin 6
        call    D100ms
        goto    ini


; Ritardo software di 100ms
D100ms
        clrf    Count1
        movlw    132
        movwf    Count2
Loop    decfsz    Count1,F
        goto    Loop
        decfsz  Count2,F
        goto    Loop
        return
 

Questo listato genera un onda quadra sulle uscite GP0 e GP1

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...