home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


possibile creare un ne555 con i comparatori del PIC ?
     
Autore Messaggio opzioni
acilde




una ogni 10 livelli


postato il:
20.12.2022, alle ore 21:13
si tratterebbe di implementare un sistema con le ottime caratteristiche dei circuiti con NE555 (oscillatori, monostabili, soglie, isteresi, ecc...) ma che utilizzi i comparatori per generare interrupt che sarebbero sfruttabilssimi all' interno di codice per i piu' svariati usi, non creare un codice che simuli il 555.


clikka sulle mie stelline per vedere i miei progetti
I motori di ricerca sono tuoi amici( G0o9\e non proprio...) , usarli prima di chiedere non sarebbe male.
La terra è l'aereo che ci trasporta nel cielo
ma dal quale non possiamo scendere (almeno per ora) , perchè danneggiarlo?
diegobincoletto




una ogni 10 livelli una ogni 10 livelli


postato il:
21.12.2022, alle ore 12:47
Rimango dell'opinione che se devi scrivere del codice, tanto vale fare solo quello.
Puoi usare gli ingressi AD del micro per leggere i segnali d'ingresso, se serve, ed eventualmente collegaci un potenziometro o una tensione esterna (tipo pin 5 del 555).

Altrimenti, se bastano le funzioni del 555 uso quello.



Scusate, passavo di qua\'...
L'unica rivoluzione possibile
è quella di migliorare se stessi.
pippodue




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
21.12.2022, alle ore 12:55
Dico una cosa ovvia, i comparatori danno l'interrupt solo nell'istante in cui la soglia viene attraversata, mentre leggendo da un adc dobbiamo a ripetere il confronto in continuazione.


anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire)
acilde




una ogni 10 livelli


postato il:
21.12.2022, alle ore 19:36
in
pippodue:
Dico una cosa ovvia, i comparatori danno l'interrupt solo nell'istante in cui la soglia viene attraversata, mentre leggendo da un adc dobbiamo a ripetere il confronto in continuazione.


infatti e' proprio quello che aspiro ad ottenere,
slegare il software pic da eventi esterni per esempio varia la resistenza di una fotoresistenza , o una ptc/ntc, una variazione di capacita' o altre cose che si possono fare basndosi sugli schemi col NE555.

il software fa altro mentre la parte che farebbe il 555 la fanno i comparatori
con poco altro.

In oltre non tutti i pic hanno l'adc



clikka sulle mie stelline per vedere i miei progetti
I motori di ricerca sono tuoi amici( G0o9\e non proprio...) , usarli prima di chiedere non sarebbe male.
La terra è l'aereo che ci trasporta nel cielo
ma dal quale non possiamo scendere (almeno per ora) , perchè danneggiarlo?
acilde




una ogni 10 livelli


postato il:
21.12.2022, alle ore 19:48
nel data sheet del pic 16F627a-28a 48a paragrafo 10 pag.65
forniscono questo codice vorrei abbinarlo alla gestione dei timer
per esempio misurare la variazione di periodo o di duty cycle

 FLAG_REG EQU 0X20
CLRF FLAG_REG ;Init flag register
CLRF PORTA ;Init PORTA
MOVF CMCON, W ;Load comparator bits
ANDLW 0xC0 ;Mask comparator bits
IORWF FLAG_REG,F ;Store bits in flag register
MOVLW 0x03 ;Init comparator mode
MOVWF CMCON ;CM<2:0> = 011
BSF STATUS,RP0 ;Select Bank1
MOVLW 0x07 ;Initialize data direction
MOVWF TRISA ;Set RA<2:0> as inputs
;RA<4:3> as outputs
;TRISA<7:5> always read â€˜0’
BCF STATUS,RP0 ;Select Bank 0
CALL DELAY10 ;10?s delay
MOVF CMCON,F ;Read CMCON to end change
;condition
BCF PIR1,CMIF ;Clear pending interrupts
BSF STATUS,RP0 ;Select Bank 1
BSF PIE1,CMIE ;Enable comparator interrupts
BCF STATUS,RP0 ;Select Bank 0
BSF INTCON,PEIE ;Enable peripheral interrupts
BSF INTCON,GIE ;Global interrupt enable 



clikka sulle mie stelline per vedere i miei progetti
I motori di ricerca sono tuoi amici( G0o9\e non proprio...) , usarli prima di chiedere non sarebbe male.
La terra è l'aereo che ci trasporta nel cielo
ma dal quale non possiamo scendere (almeno per ora) , perchè danneggiarlo?
acilde




una ogni 10 livelli


postato il:
05.01.2023, alle ore 18:17
riprendo la questione
acilde:
nel data sheet del pic 16F627a-28a 48a paragrafo 10 pag.65
forniscono questo codice vorrei abbinarlo alla gestione dei timer
per esempio misurare la variazione di periodo o di duty cycle

 FLAG_REG EQU 0X20
CLRF FLAG_REG ;Init flag register
CLRF PORTA ;Init PORTA
MOVF CMCON, W ;Load comparator bits
ANDLW 0xC0 ;Mask comparator bits
IORWF FLAG_REG,F ;Store bits in flag register
MOVLW 0x03 ;Init comparator mode
MOVWF CMCON ;CM<2:0> = 011
BSF STATUS,RP0 ;Select Bank1
MOVLW 0x07 ;Initialize data direction
MOVWF TRISA ;Set RA<2:0> as inputs
;RA<4:3> as outputs
;TRISA<7:5> always read â€˜0’
BCF STATUS,RP0 ;Select Bank 0
CALL DELAY10 ;10?s delay
MOVF CMCON,F ;Read CMCON to end change
;condition
BCF PIR1,CMIF ;Clear pending interrupts
BSF STATUS,RP0 ;Select Bank 1
BSF PIE1,CMIE ;Enable comparator interrupts
BCF STATUS,RP0 ;Select Bank 0
BSF INTCON,PEIE ;Enable peripheral interrupts
BSF INTCON,GIE ;Global interrupt enable 



secondo qualcuno di piu' esperto c'e' qualche possibilita' di semplificarlo?



clikka sulle mie stelline per vedere i miei progetti
I motori di ricerca sono tuoi amici( G0o9\e non proprio...) , usarli prima di chiedere non sarebbe male.
La terra è l'aereo che ci trasporta nel cielo
ma dal quale non possiamo scendere (almeno per ora) , perchè danneggiarlo?
acilde




una ogni 10 livelli


postato il:
15.02.2023, alle ore 17:47
ci sto provando ma non vuole funzionare, qualcun altro ci prova ?


clikka sulle mie stelline per vedere i miei progetti
I motori di ricerca sono tuoi amici( G0o9\e non proprio...) , usarli prima di chiedere non sarebbe male.
La terra è l'aereo che ci trasporta nel cielo
ma dal quale non possiamo scendere (almeno per ora) , perchè danneggiarlo?
acilde




una ogni 10 livelli


postato il:
18.02.2023, alle ore 22:03
rcc.roberto vorrei sfruttare i 16f628a /648a che ho.
il link non mi fa accedere (non sono iscritto a facebook e non intendo farlo)
in oltre non mi sono mai comperato un arduino, non lo ho ancora considerato , intanto speravo di utilizzare quei quattro o cinque pic che mi avanzano nei cassetti comperati e quasi mai usati se non in in progetti gia' fatti (tranne in uno che ho realizzato da zero, il vu meter col 12f675 che poi ho portato da 8 a 12led e al quale ho fatto pure il peak hold, magari un giorno lo posto su grix )



clikka sulle mie stelline per vedere i miei progetti
I motori di ricerca sono tuoi amici( G0o9\e non proprio...) , usarli prima di chiedere non sarebbe male.
La terra è l'aereo che ci trasporta nel cielo
ma dal quale non possiamo scendere (almeno per ora) , perchè danneggiarlo?
rcc.roberto



[pagine pubblicate]

postato il:
18.02.2023, alle ore 22:39
pensavo che pur essendo per Arduino potesse darti una idea di come procedere.
primok




una ogni 100 livelli
una ogni 10 livelli


postato il:
27.02.2023, alle ore 22:35
 ; Codice assembler per realizzare un NE55
; Compilatore pic-as (V2.36) MPLAB-X IDE V6.00
; PIC 16F628A quarzo 20 MHz  
; In questo esempio sono usati :
; 1. Interrupt su RB0 per accendere e spegnere un led sulla porta b -->pin RB2
; 2. Interrupt per comparatori C1 e C2. Uscita OUT su RB4, DISCH su RB3
; 3. TRIGGER su RA1, THRESHOLD SU RA3,control voltage su RA0   
#include <xc.inc>

CONFIG  FOSC = HS             ; Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
CONFIG  WDTE = OFF            ; Watchdog Timer Enable bit (WDT disabled)
CONFIG  PWRTE = OFF           ; Power-up Timer Enable bit (PWRT disabled)
CONFIG  MCLRE = ON            ; RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
CONFIG  BOREN = ON            ; Brown-out Detect Enable bit (BOD enabled)
CONFIG  LVP = OFF             ; Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
CONFIG  CPD = OFF             ; Data EE Memory Code Protection bit (Data memory code protection off)
CONFIG  CP = OFF              ; Flash Program Memory Code Protection bit (Code protection off)       
    

  
DELAY_A EQU 0x70
DELAY_B EQU 0x71
DELAY_C EQU 0x72
DELAY_D  EQU 0x73
VAR_DELAY EQU 0x74
DCounter1 EQU 0X75
DCounter2 EQU 0X76
DCounter3 EQU 0X77
  
  
psect   RESET_VECT,class=CODE,delta=2 ; PIC10/12/16
  
RESET_VECT:
    
    goto setup
    
    psect   INT_VECT,class=CODE,delta=2 ; PIC10/12/16
    
INT_VECT:
    
       BTFSC  INTCON,1;//Se flag INTF=1
       
    call int_isr ;chiama la routine int_isr
 
      BTFSC PIR1,6 //Se  CMIF=1
     
    call int_isr_comp ;chiama la routine int_isr_comp
   
retfie
;---------------Gestione interrupt INT0 su RB0 -----------------------    
int_isr:
    
     BTFSC  PORTB,2;//se bit 2 della porta b Ã¨ 1
         goto led_off

led_on:
    
    BSF PORTB,2; Setta a 1 l'uscita RB2
    goto end_isr_end 
     
led_off:
        BCF PORTB,2; Resetta a 0 l'uscita RB2

end_isr_end:
       
    BCF INTCON,1; Azzera Interrupt flag INTF
       
 return
;----------------- Gestione comparatori C1 e C2 -----------------------------
 
int_isr_comp:
    
      BTFSC  CMCON,6;;//se Se C1OUT=1
      
         goto OUT_OFF ;Spegne l'uscita OUT
       
      BTFSC  CMCON,7;;//se Se C2OUT=1
      
         goto OUT_ON ;Accende l'uscita OUT
    

OUT_OFF:
    
    BSF PORTB,3 ;DISCH=1
    BCF PORTB,4 ;OUT=0
    goto comp_end_isr_end
  
OUT_ON:

     BSF PORTB,4 ;OUT=1
     BCF PORTB,3 ;DISCH=0
   
     comp_end_isr_end:
     
    BCF PIR1,6 ;Resetta il flag CMIF

 return 
;---------------------------------------------------------------------------
;         Impostazione porta A e B , Interrupt Comparatori e INT0
;---------------------------------------------------------------------------
 
setup:
;--------------------- SETTAGGIO PORTB -------------------------------------
    
    BSF STATUS,5 ;RP0=1,RP1=0 accesso al bank 1 A0h-FF per il pic 16F628A
    movlw 0x01 ;
    movwf TRISB ;Porta B tutte uscite
    
    ;--------------------- SETTAGGIO PORTA ---------------------------------
    movlw 0x0F ;
    movwf TRISA ;Porta B tutte uscite
    
    ;--------------------- INTERRUPT FRONTE DISCESA SU RB0 ------------------
    BCF OPTION_REG,6; INT0 fronte di discesa 
    
    BSF PIE1,6;Abilitazione interrupt comparatori 
   
    BCF STATUS,5 ;RP0=0,RP1=0  accesso al bank 0 20-7Fh per il pic 16F628A
  
     ;--------------------- SETTAGGIO COMPARATORI -----------------------------
    MOVLW 0x04 ;Init comparatore CMCON=4, comparatori separati
    MOVWF CMCON ;CM<2:0> = 100  
   

    ;------------------------AZZERAMENTO PORTA A E B  --------------------------
    CLRF PORTB
    CLRF PORTA
    BCF INTCON,1 ;azzera INTF
    BCF PIR1,6 ;Clear pending interrupts

    
    BCF STATUS,5 ;Select Bank 0
    BSF INTCON,6 ;Enable peripheral interrupts
  
    movlw (1<<7)|(1<<4);abilita GIE e abilita INTE
    IORWF INTCON

    BCF STATUS,0; azzera carry BCF INTCON,0
    
main:
    ;lampeggio led su RB1
    BSF PORTB,1
    call _delay_500ms ;500 msec

    BCF PORTB,1
    call _delay_500ms ;500 msec
 
  goto main ;loop
 
;-----------------------------------------------------------------------------    
 _delay_500ms:
    
       movlw 0x5 ;50 nsec
       movwf DELAY_D  ;50 nsec
       
        delay_d: 
    
call _delay_100ms;100 nsec
decfsz DELAY_D,1; ;50nsec
goto delay_d ;100nsec

return ;100nsec
    
 ;---------------------------------------------------------------------------- 
_delay_100ms:
    
movlw 0xFE ;50 nsec
movwf DELAY_A  ;50 nsec

delay_a: 
    
call delay_nest_b;100 nsec
decfsz DELAY_A,1; ;50nsec
goto delay_a ;100nsec

return ;100nsec

;--------------  98,05 us---------------------------------------------------
delay_nest_b:;100nsec
movlw 140 ;50nsec
movwf DELAY_B;50nsec

delay_b: 
call delay_nest_c;100nsec
decfsz DELAY_B,1; ;50nsec
goto delay_b ;;100nsec
return ;   //100 nsec

;--------------   450nsec ---------------------------------------------------
delay_nest_c:;100nsec
movlw 2 ;;50nsec
movwf DELAY_C;50nsec

delay_c: 
decfsz DELAY_C,1; //50 nsec

goto delay_c ;   //100 nsec
return ;   //100 nsec
;-----------------------------------------------------------------------------

DELAY:
MOVLW 0Xb5
MOVWF DCounter1
MOVLW 0Xaf
MOVWF DCounter2
MOVLW 0X0d
MOVWF DCounter3
LOOP:
DECFSZ DCounter1, 1
GOTO LOOP
DECFSZ DCounter2, 1
GOTO LOOP
DECFSZ DCounter3, 1
GOTO LOOP
RETURN
;-----------------------------------------------------------------------------

END RESET_VECT 



Più piccola è la mente più grande è la presunzione.
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale