BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Programmare pic12c508 (https://www.baronerosso.it/forum/circuiti-elettronici/117390-programmare-pic12c508.html)

Cessna 172SP 15 gennaio 09 19:08

Programmare pic12c508
 
Ciao.
Da tempo mi frulla per la testa l'idea di programmare i Pic...
Volevo fare un lampeggiatore a led.
L'assembler lo so usare decentemente e poi ci sono i datasheet ma ho ancora dei dubbi...
La resistenza di Pull-Up del pin mclr da quanti ohm deve essere?che resistenza deve essere?
Per l'oscillatore:lo hanno interno da 4mhz i 12c508 o no...sul datasheet non ho capito come usarlo...

sto lavorando a uno schemino...e alla relativa programmazione.


Grazie anticipatamente

marchino65 15 gennaio 09 20:12

Citazione:

Originalmente inviato da Cessna 172SP (Messaggio 1308078)
Ciao.
Da tempo mi frulla per la testa l'idea di programmare i Pic...
Volevo fare un lampeggiatore a led.
L'assembler lo so usare decentemente e poi ci sono i datasheet ma ho ancora dei dubbi...
La resistenza di Pull-Up del pin mclr da quanti ohm deve essere?che resistenza deve essere?
Per l'oscillatore:lo hanno interno da 4mhz i 12c508 o no...sul datasheet non ho capito come usarlo...

sto lavorando a uno schemino...e alla relativa programmazione.


Grazie anticipatamente

Ciao,
visto che inizi a programmare i Pic, ti consiglio di cominciare quelli con la serie F tipo 12F o 16F in quanto all'interno usano la Flash e sono riprogrammabili più volte.

Saluti

Cessna 172SP 15 gennaio 09 20:39

Grazie
 
Citazione:

Originalmente inviato da marchino65 (Messaggio 1308177)
Ciao,
visto che inizi a programmare i Pic, ti consiglio di cominciare quelli con la serie F tipo 12F o 16F in quanto all'interno usano la Flash e sono riprogrammabili più volte.

Saluti

Ok,grazie....di quelli conosco bene il 16f84a.
Ma fino a quante volte posso riprogrammarli???

marchino65 15 gennaio 09 20:48

Citazione:

Originalmente inviato da Cessna 172SP (Messaggio 1308229)
Ok,grazie....di quelli conosco bene il 16f84a.
Ma fino a quante volte posso riprogrammarli???

Ciao,
di preciso non mi ricordo, ma intorno alle migliaia.
Se vuoi usare un'alternativa alle pic 12c508, ci sono le 12f675 sempre 8 pin ma riprogrammabili.

Saluti

marchino65 15 gennaio 09 21:23

Ciao,
sotto il codice in assembler per accendere un led, ma non mi chiedere spiegazioni, perchè programmo solo in Picbasic pro. :)

;************************************************* ***********************
; *
; Filename: BA_L1-Turn_on_LED.asm *
; Date: 7/9/07 *
; File Version: 1.0 *
; *
; Author: David Meiklejohn *
; Company: Gooligum Electronics *
; *
;************************************************* ***********************
; *
; Architecture: Baseline PIC *
; Processor: 12C508/509 *
; *
;************************************************* ***********************
; *
; Files required: none *
; *
;************************************************* ***********************
; *
; Description: Lesson 1, exercise 1 *
; *
; Turns on LED. LED remains on until power is removed. *
; *
;************************************************* ***********************
; *
; Pin assignments: *
; GP1 - indicator LED *
; *
;************************************************* ***********************

list p=12C509
#include <p12C509.inc>

; ext reset, no code protect, no watchdog, 4Mhz int clock
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC


;************************************************* *********************
RESET CODE 0x3FF ; processor reset vector
res 1 ; holds movlw with factory RC cal value

MAIN CODE 0x000 ; effective reset vector
movwf OSCCAL ; update OSCCAL with factory cal value

;***** Initialisation
start
movlw b'111101' ; configure GP1 (only) as an output
tris GPIO
movlw b'000010' ; set GP1 high
movwf GPIO

goto $ ; loop forever


END

Saluti

cl004 15 gennaio 09 23:25

La Res puoi anche ometterla, serve principalmente se vuoi mettere un pulsante di reset che porti a massa il pin MCLR

Cessna 172SP 16 gennaio 09 15:44

Ecco le mie prime righe:se il led è acceso lo spegne e viceversa..poi ci vorrà un delay..anche se +o- non so a che velocità lampeggia senza delay
********************************
PROCESSOR 16F84A
RADIX DEC
INCLUDE "P16F84A.INC"

__CONFIG 0x3FF1

LED EQU 0

ORG 0x0C

Count RES 2 "bit riservati per il delay che sto progettando"

ORG 0x00

bsf STATUS,RP0

movlw B'00011111'
movwf TRISA

movlw B'11111110'
movwf TRISB

bcf STATUS,RP0

bsf PORTB,LED

MainLoop

btfsc PORTB,LED
goto SetToZero

bsf PORTB,LED
goto MainLoop

SetToZero

bcf PORTB,LED
goto MainLoop

(spazio per il delay)

END

**************************

Dite che funzionerà?cmq i 2 bit riservati a count sono per il delay su cui sto lavorando..ovvero far compiere operazioni inutili al pic del tipo
*************
Delay
clrf Count
clrf Count+1

DelayLoop

decfsz Count,1
goto DelayLoop

decfsz Count+1,1
goto DelayLoop

return

**************
Dite che funziona così........o come al solito non ho capito niente???

Cessna 172SP 16 gennaio 09 17:55

Help
 
Ciao a tt
Come si calcola il valore delle resistenza..ovvero se ho un led da 3 v e lo voglio usare con la 12 volt come faccio a sapere il valore della resistenza da usare?

MSchiepp 16 gennaio 09 18:23

Citazione:

Originalmente inviato da Cessna 172SP (Messaggio 1309397)
Dite che funziona così........o come al solito non ho capito niente???

Facile che funzioni, ma se devi imparare impara bene!
Per i ritardi non si usa quasi mai (a meno di ritardi veramente molto piccoli) mettere in loop il processore e fargli 'perdere tempo', ma si usano i timer, che danno anche tanti altri vantaggi.
Se non ti serve (come primo esercizio) precisione setti il prescaler del Timer0 a 4 e avrai un overflow del timer ogni 1,024 millisecondi.
Aspetti che il bit T0IF vada a 1, lo azzeri e quando torna a 1 sai che è passato 1,024 ms e il tuo ciclo diventa più o meno così:

Loop:
- testa T0IF fino a quando lo trova 1
- azzera T0IF
- decrementa il contatore di ritardo e controlla se è 0
se 0: ripristina il valore del contatore
accende ( o spegne) il led
salta a Loop
se >0: salta a loop

questo ti da ritardi di 256 ms al massimo, sufficienti per vedere il lampeggio del led. Per aumentare il ritardo puoi usare due contatori per il ritardo.

Per accendere o spegnere il led puoi semplicemente fare questo:

movlw 1 (nel tuo caso 1 perchè LED è sul bit 0)
xorwf PORTB,f

Buon divertimento!

Michele

Cessna 172SP 16 gennaio 09 19:05

Citazione:

Originalmente inviato da MSchiepp (Messaggio 1309673)
Facile che funzioni, ma se devi imparare impara bene!
Per i ritardi non si usa quasi mai (a meno di ritardi veramente molto piccoli) mettere in loop il processore e fargli 'perdere tempo', ma si usano i timer, che danno anche tanti altri vantaggi.
Se non ti serve (come primo esercizio) precisione setti il prescaler del Timer0 a 4 e avrai un overflow del timer ogni 1,024 millisecondi.
Aspetti che il bit T0IF vada a 1, lo azzeri e quando torna a 1 sai che è passato 1,024 ms e il tuo ciclo diventa più o meno così:

Loop:
- testa T0IF fino a quando lo trova 1
- azzera T0IF
- decrementa il contatore di ritardo e controlla se è 0
se 0: ripristina il valore del contatore
accende ( o spegne) il led
salta a Loop
se >0: salta a loop

questo ti da ritardi di 256 ms al massimo, sufficienti per vedere il lampeggio del led. Per aumentare il ritardo puoi usare due contatori per il ritardo.

Per accendere o spegnere il led puoi semplicemente fare questo:

movlw 1 (nel tuo caso 1 perchè LED è sul bit 0)
xorwf PORTB,f

Buon divertimento!

Michele

Grazie..ora trasformo la tua spiegazione in Assembler..o almeno ci provo..


Tutti gli orari sono GMT +2. Adesso sono le 23:08.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002