Newsgroup: it.hobby.elettronica.digitale
Titolo: Pic16f88 OSCCON

Dopo innumerevoli tentativi ho capito che non ho capito!!
Domanda: come cavolo la setto la freq dell'oscillatore interno?
ho provato cosi:
include "p16f88.inc"
	__config _INTRC_IO		
	org	0x0000
 
		clrf    ANSEL           ; setup PORT A for digital I/O
		;movlw   b'01110000'     ; select 8-MHz INTOSC clock
		movlw   b'01100010'     ; select 4-MHz INTOSC clock
         	movwf   OSCCON          ;
		movlw	0x07
		movwf	CMCON		;turn comparators off
	bsf STATUS, RP0 		;select bank 1
					;pone a 1 il bit relativo al valore contenuto in RP0
					;nel registro STATUS
					;RP0 è un bit che se vero seleziona il banco 1
					;altrimenti il banco 0
					;Banking requires the use of control bits for bank
					;selection.
					;These control bits are located in the STATUS Register.
	movlw b'00000000' 		;set PortB all outputs
					;pone il valore 0 nel registro W
	movwf TRISB 			;sposta il valore in W (0) nel registro TRISB
					;in tal modo setta tutta la porta B come
					; uscita
	bcf STATUS, RP0 		;select bank 0
					; l?istruzione riporta a 0 il bit nel registro STATUS
;-------------------------------------------------------------------------------
Loop
	movlw 0xff
 
	movwf PORTB
	nop 				;the nop's make up the time taken by the goto
	nop 				;giving a square wave output
	movlw 0x00
 
	movwf PORTB 			;set all bits off
	goto Loop 			;go back and do it again
end
Sembra che lampeggi ad altissima freq.
Ho provato vari osccon, ma nulla!
Cakkio

 ha scritto nel messaggio
news:%pfnh.275$Je6...@nntpserver.swip.net...


 
Il datasheet l'ho letto parecchie volte, ma dove tro info piů precise?
In giro ci sono solo tutorial per il 16f84a che monta il cristallo 
esterno ed il gioco č fatto, ma cosa faccio quando ho un pic con 
oscillatore interno? Non ho trovato nulla di specifico, č sempre tutto 
molto generico.
Grazie per la dritta!
Ciao
Siro

_siro_ ha scritto:
  > Il datasheet l'ho letto parecchie volte, ma dove tro info più precise?
  > Grazie per la dritta!
Ciao!
Sì, ti confermo che OSCCON è sul banco 1, quindi dovresti modificare in 
questo modo:
	clrf    ANSEL           ; setup PORT A for digital I/O
	banksel	OSCCON		; Change memory bank (0 -> 1)
         ;movlw   b'01110000'     ; select 8-MHz INTOSC clock
         movlw   b'01100010'     ; select 4-MHz INTOSC clock
	movwf   OSCCON          ;
	banksel	PORTA		; Restore original memory bank (1 -> 0)
L'istruzione banksel è una istruzione del compilatore che setta il banco 
che contiene il SFR indicato, oppure in alternativa puoi fare come hai 
fatto tu:
	clrf    ANSEL           ; setup PORT A for digital I/O
         bsf	STATUS, RP0	; Change memory bank (0 -> 1)
         ;movlw   b'01110000'     ; select 8-MHz INTOSC clock
         movlw   b'01100010'     ; select 4-MHz INTOSC clock
	movwf   OSCCON          ;
	bcf	STATUS, RP1	; Restore original memory bank (1 -> 0)
In pratica le due istruzioni sono equivalenti, io di solito scelgo la 
prima perchè è più chiara, ma è essenzialmente questione di "gusti". ;-)
Trovi i banchi sul DS a pagina 13.
Un altra cosa: Anche se dovessi mettere l'oscillazione al minimo (che 
nel caso di questo microcontroller è di 31,25KHz), dovresti mettere una 
routine di ritardo altrimenti non vedrai il lampeggio, tieni presente 
che l'occhio umano percepisce una frequenza massima di circa 10Hz!!
Con il clock interno a 4 MHz, io farei così:
Prima di ORG 0x00 inserirei:
#define	d1	0x20
#define	d2	0x21
#define	d3	0x22
E poi sostituirei la routine con questa:
	clrf	PORTB
Loop
	comf	PORTB, f	; Invert the status of the SFR
	movwf PORTB
	call Delay		; Delay of 1 second
	goto Loop             ;go back and do it again
Delay
	movlw	0x07
	movwf	d1
	movlw	0x2F
	movwf	d2
	movlw	0x03
	movwf	d3
DelayA
	decfsz	d1, f
	goto	$ + 2
	decfsz	d2, f
	goto	$ + 2
	decfsz	d3, f
	goto	DelayA
	goto	$ + 1
	goto	$ + 1
	goto	$ + 1
	return
end
Spero di esserti stato utile.
Ciao!
-- 
Stefano Martini
Sito WEB: 
http://www.lemming.it

 Ciao!
Decisamente SI! Grazie.
Mi mancava il ritardo, ora mi spiego perchč non vedevo lampeggiare il 
led. Comunque non riesco ad usare il 'F88 perchč non č supportato dal 
picc-lite. Io preferisco programmare in C anche se prendo spunto dal 
codice in asm.
Grazie ancora
Ciao