Jump to content
PLC Forum


Eramita Analogico

Problemi programmazione uscite con PIC16F629

Recommended Posts

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.

 

Edited by Eramita Analogico
Link to post
Share on other sites

Eramita Analogico
Posted (edited)

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.

 

Edited by Eramita Analogico
Link to post
Share on other sites
DavidOne71

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 to post
Share on other sites
Eramita Analogico

Grazie, mancava cmcon per disattivare il comparatore.

Ciao

 

Link to post
Share on other sites
DavidOne71

mi era venuto in mente

👍

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...