Sari la conținut
ELFORUM - Forumul electronistilor

Cum sa programez un PIC


sofian

Postări Recomandate

Vizitator gigi1968

Mai am o intrebare. Am facut un program ca sa aprind niste leduri in Flowcode dar daca utilizez WDT-ul nu il pot reseta din program si cand se reseteaza si imi reseteaza programul

Link spre comentariu
  • 3 săptămâni mai târziu...
  • Răspunsuri 604
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    54

  • Vlad Mihai

    28

  • bbogdanmircea

    27

  • seichter

    24

Top autori în acest subiect

Imagini postate

Vizitator mytza93

In codu de mai jos am incercat sa il modific astfel incat sa fie o "lumina curgatoare" dar pentru orice program care il modific ledul conectat pe RB5 nu se aprinde si pace, orice program as incerca, dar tensiune primeste. Cu un singur program se aprinde ledu de pe RB5 anume cu pwm ufo chaser ( http://picprojects.org.uk/projects/roundchaser/ ). Mentionez ca readerul e identic cu schema de ufo chaser. Aveti vre-o idee de ce nu se aprinde ledu de pe rb5 ? Va multumesc

 

list   p=16F628a   ;definire tip PIC   #include <p16F628a.inc>  ;include definiti ptr Port-uri,status,biti,etc   errorlevel  -302   ;nu mai ma atentioneaza sa fiu atent la Ram daca este in bank-ul respectiv   __CONFIG _BODEN_ON&_PWRTE_ON&_INTRC_OSC_NOCLKOUT      cblock 	0x20 			;start of general purpose registers		count1 			;used in delay routine		counta 			;used in delay routine 		countb 			;used in delay routine        	endc    org 0x0000          ;Adresa de start a microntrollerului  						  ;org sets the origin, 0x0000 for the 16F628,					;this is where the program starts running		movlw	0x01	movwf	CMCON			;turn comparators off (make it like a 16F84)   	bsf 	STATUS,		RP0	;select bank 1   	movlw 	b'00000000'		;set PortB all outputs   	movwf 	TRISB	movwf	TRISA			;set PortA all outputs	bcf	STATUS,		RP0	;select bank 0Loop		;movlw	0x1	;movwf	PORTB	bsf PORTB, 0	;nop				;the nop's make up the time taken by the goto    ;nop				;giving a square wave output	call	Delay		;movlw	0x2	;movwf	PORTB	bsf PORTB,1	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay			;this waits for a while!        ;movlw	0x4	;movwf	PORTB	bsf PORTB,2	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay		;movlw	0x8	;movwf	PORTB	bsf PORTB,3	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay			;this waits for a while!		bsf PORTB,4	;movlw	0x10	;movwf	PORTB	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay	bsf PORTB,5	;movlw	0x20	;movwf	PORTB	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay			;this waits for a while!		bsf PORTB,6	;movlw	0x40	;movwf	PORTB	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay		bsf PORTB,7	;movlw	0x80	;movwf	PORTB	;nop				;the nop's make up the time taken by the goto	;nop				;giving a square wave output	call	Delay    bcf PORTB,0   bcf PORTB,1   bcf PORTB,2   bcf PORTB,3   bcf PORTB,4   bcf PORTB,5   bcf PORTB,6   bcf PORTB,7            call Delay	goto	Loop			;go back and do it againDelay	movlw	d'250'			;delay 250 ms (4 MHz clock)	movwf	count1d1	movlw	0xC7	movwf	counta	movlw	0x01	movwf	countbDelay_0	decfsz	counta, f	goto	$+2	decfsz	countb, f	goto	Delay_0	decfsz	count1	,f	goto	d1	retlw	0x00	end
Link spre comentariu

pai daca tensiune primeste, cum sa nu se aprinda? adica ce tensiune ai si unde?codul initial vad ca era pentru un quartz de 4M, dar tu folosesti _INTRC_OSC. la ce frecventa merge?poate merge, dar e prea rapid si nu il vezi? sau toate se aprind si numai asta nu?

Link spre comentariu
Vizitator mytza93

Sunt incepator, dar din cate stiu pic 16f628a are oscilator intern de 4Mhz. Se aprind toate, si numai cel de pe RB5 nu se aprinde, primeste 1,78 V , dar led-ul tot nu se aprinde, chiar daca pun alt led.

 

Am atasat schema pe care am realizat-o.

 

 

Mersi fain ! :d Am modificat configul, si acum merge si RB5 cu codul postat mai sus, am pus configul urmator:

  __CONFIG   _CP_OFF & _WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF 
Link spre comentariu
  • 1 lună mai târziu...
Vizitator vladjoky

Ma ajuta si pe mine cineva cu o secventa de cod in limbaj de asamblare pentru? :sa imi definesc o baza de timp de ex 100ms si in acest interval sa numar cate impulsuri primesc pe o intrare (analog). Mc anticipat.

Link spre comentariu
Vizitator vladjoky

Sincer sa fiu, nu stiu exact unul anume , ceva de la microchip sau texas instruments, proiectul pe care vreau sal fac este sa reglez turatia unui motor, la o rotatie completa am un numar n de impulsuri, si de ex numar cate impulsuri vin in 100ms de ex, si pot calcula deacolo turatia , cei drept sunt putin afon in ale microcontrolerelor, dar vreau sa ma pun pe treaba, primesc orice documentatie pentru incepatori , si eventual un PIC cu care sa incep sa experimentez pana ma prind de smecherie , multumesc anticipat.

Link spre comentariu

1. Primadata cred ca trebuie sa clarifici cum vei primii semnalele pentru impusuri. S-ar putea sa nu iti trebuiesca o intrare analogica.2. Cred ca trebuie sa precizezi ce vrei sa faci cu microcontrolerul, deoarece sunt microntrolere care au intrarea gata facuta pentru comanda unui motor.

Link spre comentariu
Vizitator vladjoky

Poi ideea mea ii sa controlez turatia unui DC, mai am inca o dilema cum sai trimit la microcontrolor de ex 1200rpm sau 2500 rpm, iar la motor ori pun un led IR si un fototranzistor sau un tahometru ceva, in functie de numarul de impulsuri primite intro unitate de timp aflu ce rpm am. Mai am nevoie si de un element de comanda a motorului..... o punte H. Daca stii cumva un astfel de microcontrolor care are intrarea gata facuta, imi dai te rog denumirea lui sa i citesc datasheet-ul, mc anticipat.

Link spre comentariu

se poate face cum spui tu (daca ai cum prinde ceva cu o fanta pe motor), sau cu senzor hall si magnet...puntea H ti-o faci tu singur (gugalit).ca pic, poti folosi orice pentru inceput, cat mai simplu. nu pari a fi prea avansat ca si cunostinte si cred ca un controller cu pwm integrat te-ar enerva...

Link spre comentariu

Pun si eu o intrebare de giga,la pic-urile 12f629,675 au valoarea oscal interna ceva de genul :3444,3480,344c etc,etc ce valori sint defapt,exista vun "transformator ceva? :scarpin

Link spre comentariu

Acea valoare este de fapt o instructiune RETLW (Return with literal in W) care are opcode-ul 11 01xx kkkk kkkk, care dupa ce e executata este urmata de MOVWF OSCCAL, unde numarul kkkk kkkk ajunge in OSCCAL. OSCCAL nu foloseste ultimi 2 biti deci valorile posibile pentru acea valoare vor fi intre 0x3400 si 0x34FC , incrementate din 4 in 4. Cu cat modifica aceasta incrementare ceasul, nu vad specificat nicaieri (probabil cu vreo cativa Hz, sau kHz), dar se poate masura, cu un osciloscop pe clkout, pentru valoare maxima , si minima , se face diferenta , si impartire la 64.

Link spre comentariu

Multam frumos de explicatii ,eram curios sa vad cu cit difera de valoarea standard de 4 Mhz ,dar daca difera pina la citiva khz nu are importanta mare in aplicatiile mele ,am crezut ca difera cu 100-200 khz.

Link spre comentariu
  • 4 săptămâni mai târziu...

Salutare.De curand am facut un programator dupa instructiunile de pe usbpicprog.orgAm ajuns si la partea de programare a PIC-ului care este un PIC18F2550Am downloadat firmware de pe site si acolo am 2 fisiere .hex, unul m mic care este Boot.hex si altul care este firmware.hexAm incercat sa scriu acestea pe PIC dar inainte de scriere imi da un warning ca nush ce cuvinte de CONFIG nu se gasesc in .hex Iar cand il scriu si dau read nu imi arata ca as fi scris ceva chiar daca la write da successful.Am scris un mail la cel care a facut proiectul dar nu am primit raspuns.Puteti sa ma ajutati voi cu ceva ajutor poate?Multumesc anticipat!

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări