kit Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 hehe, da, in schema e 16f628. ce atata tevatura pentru un 'A' in coada, nu? oricum, amandoua merg in regim de oscilator intern la 4MHz (parca). trebuie doar refaci proiectul (in MPLAB) pentru acest pic, nu-i greu.recomandarea mea este ca pentru inceput sa reusesti sa aprinzi toate ledurile in rosu, de exemplu. dupa ce faci asta, ai putea trece la urmatorul pas. te-ai gandit cum ai putea face asta?bafta! Link spre comentariu
Vizitator dusmanu Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 picul folosit este 16f628a cumparat de pe mirvarom mai excact PIC16F628A-I/P Link spre comentariu
Vizitator dusmanu Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 Domnule kit cred ca asta ar fi codul sa aprind toate ledurile o culoare. #include P16F628.inc CBLOCK 0x20 count1 counta countb ENDC ORG 0x0000 MOVLW 0x07 MOVWF CMCON BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISB MOVWF TRISA BCF STATUS,RP0 CLRF PORTA CLRF PORTBLOOP: BSF PORTA,3 BSF PORTA,7 CALL DELAY BCF PORTA,3 CALL DELAY BSF PORTA,2 CALL DELAY BCF PORTA,2 CALL DELAY BSF PORTA,1 CALL DELAY BCF PORTA,1 CALL DELAY BSF PORTA,0 CALL DELAY BCF PORTA,0 CALL DELAY GOTO LOOPDELAY: movlw d'250' 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
kit Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 RA0-3 tin de masa virtuala (linii) atunci cand sunt in 0L. Daca sunt in 1L atunci ii poti considera ca sursa.cat timp unul din acesti pin este 0L el va fi masa. daca sunt mai multi, toti vor fi masa. cand setezi o coloana ( pui RA7,RA6 sau RB3 in 1L) tranzistorul de coloana se va satura si ca urmare toate ledurile cuplate la masa se vor aprinde.daca pui RA7 in 1L si RA0-RA3 tot in 1L, nici un led nu se va aprinde pe coloana rosie, deoarece ledurile nu-s cuplate la o diferenta de potential. daca tinand RA7 in 1L ducem RA0 in 0L (doar pe el, restul in 1L), atunci avem diferenta de potential si LED4R se va aprinde (doar el).daca ai RA0 si RA2 in 0L (iar restul in 1L), se vor aprinde LED4R si LED2R.daca RA0 - RA3 (toti) sunt in 0L, se vor aprinde toate ledurile in rosu. cred ca ar fi bine sa ai in vedere toate RA0-3, ca un tot unitar, nu sa le tratezi unitar.codul tau stinge LED1R cubsf PORTA,3apoi il aprinde cu bcf PORTA,3dar il lasa aprins.apoi stinge LED2R, il aprinde si-l lasa asa. samd, pe toate liniile. asa ceva nu este nici macar vizibil, caci ii tii stinsi doar cat tine rutina delay (cateva msec).eu asa face asa:banksel PORTBmovlw 0x0fmovwf PORTBastfel stingi toate ledurile (setezi RA0-3) si le tii stinse, indiferent de starea tranzistorului de comanda. apoi, cand vrei sa aprinzi un LED ii pui pinul in 0L. daca vrei sa le aprinzi pe toate deodata faci toti pinii 0L.O greseala IMENSA facuta de tine este ca nu ai setat bankul corespunzator registrului cu care lucrezi.asta se face cu banksel. vezi FIGURE 4-2: DATA MEMORY MAP OF THE PIC16F627A AND PIC16F628A din datasheet (daca nu l-ai descarcat deja, fa-o!).mai departe: ai ales metoda pooling. eu iti sugeram metoda intreruperilor, este mai eleganta. asa vei insira tot codul pe sute de pagini, in loc sa-l comprimi. nu-i bai, o sa te hotarasti mai tarziu cum vei face.inca ceva: ai scris#include P16F628.inciti recomand sa revezi exemplul propus de mine, ai alt pic!incearca sa compilezi ce ai scris si foloseste simulatorul ca sa verifici cum lucreaza codul. e cel mai bine.in final te rog sa renunti la domnule, ma faci sa ma simt aiurea.bafta! Link spre comentariu
Vizitator dusmanu Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 Am inteles cum e cu masa virtuala pe 0l. eu credeam ca am masa cand RA0-3 sunt pe 1L dar de fapt era invers, insa nu am inteles cum se ruleaza la 3 secunde codul care ar trebui sa il scriu eu in subrutina RGB Link spre comentariu
kit Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 1. emitorul pnp-ului ala era legat la 5V, asa ca mai era nevoie de o masa, undeva, nu?2. http://www.catb.org/~esr/faqs/smart-questions.htmlasta relativ la nelamurirea ta: insa nu am inteles cum se ruleaza la 3 secunde.de unde ai scos tu cele 3 secunde, n-am inteles.3. in exemplul dat de mine timerul 1 genera o intrerupere la aproximativ fiecare 3 ms. ti-am sugerat sa rulezi in simulator codul tocmai pentru a vedea chestia asta. rutina RGB (unde scrii tu comanda ledurilor) se va rula numai daca flag:0 este setat, iar acest flag este setat doar daca intervine o intrerupere TMR1 (in TMR1_int), adica o data la 3 ms. TMR1_int se ruleza daca TMR1IF este setat (sa inteleg ca nu cunosti mecanismul de lucru al unei intreruperi?)4. fa proiectul in mplab si ruleaza exemplul meu in simulator. vizualizeaza starea registrilor si o sa te lamuresti.5. in rutina scrisa de tine se executa cate o comanda (setare/resetare de biti) dupa o intarziere de un 'delay' oricat ar fi asta de lunga.bafta!off topic: la ce facultate esti? Link spre comentariu
Vizitator dusmanu Postat Decembrie 23, 2010 Partajează Postat Decembrie 23, 2010 Scuze am vrut sa scriu 3msDaca compilez codul dumneavoastra imi da build faildExecuting: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F452 "16F628ATMPO.ASM" /l"16F628ATMPO.lst" /e"16F628ATMPO.err" /o"16F628ATMPO.o" /d__DEBUG=1 /rDECWarning[215] C:\DOCUMENTS AND SETTINGS\IONUT\DESKTOP\RGB\16F628ATMPO.ASM 32 : Processor superseded by command line. Verify processor symbol.Message[301] C:\PROGRAM FILES\MICROCHIP\MPASM SUITE\P16F628A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)Warning[230] C:\DOCUMENTS AND SETTINGS\IONUT\DESKTOP\RGB\16F628ATMPO.ASM 37 : __CONFIG has been deprecated for PIC18 devices. Use directive CONFIG.Error[126] C:\DOCUMENTS AND SETTINGS\IONUT\DESKTOP\RGB\16F628ATMPO.ASM 37 : Argument out of range (not a valid config register address)Halting build on first failure as requested.----------------------------------------------------------------------Debug build of project `C:\Documents and Settings\Ionut\Desktop\Rgb\RGb.mcp' failed.Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37Preprocessor symbol `__DEBUG' is defined.Thu Dec 23 21:55:15 2010----------------------------------------------------------------------BUILD FAILEDLa automatica si calculatoare iasi :( Link spre comentariu
puiu Postat Decembrie 24, 2010 Partajează Postat Decembrie 24, 2010 1. Vezi ca ai undeva PIC18F452 in loc de PIC16F628A. Cred ca nu ai ales microcontrolerul cum trebuie in MPLAB, sectiunea Device. Link spre comentariu
kit Postat Decembrie 24, 2010 Partajează Postat Decembrie 24, 2010 despre cum se creeaza un proiect in mplab ai la viewtopic.php?f=11&t=73594 ,mai la coada.tot in t19 va cazeaza? Link spre comentariu
Vizitator dusmanu Postat Decembrie 24, 2010 Partajează Postat Decembrie 24, 2010 Asa a mers. Eu am facut ca la facultate la laborator: New project si la surce add new file salvam ca asm si apoi dadeam build all.Da marea majoritate in 19 apoi in 2 si 4.Multumesc pentru ajutor o sa ma pun pe studiat mai atent de pe bobotech si o sa continui incercarea de a face programelul peste cateva zile.Va urez sarbatori fericite si sa aveti parte doar de bucurii! Link spre comentariu
Vizitator dusmanu Postat Ianuarie 9, 2011 Partajează Postat Ianuarie 9, 2011 Am incarcat acest cod pe pic insa nu se intampla nimic cand il alimentez Imi puteti spune va rog unde am gresit ? #include P16F628A.inc CBLOCK 0x20 count1 counta countb ENDC ORG 0x0000 MOVLW 0x07 MOVWF CMCON BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISB MOVWF TRISA BCF STATUS,RP0 CLRF PORTA CLRF PORTB MOVLW b'00001111' MOVWF PORTALOOP: BSF PORTA,7 BCF PORTA,3 CALL DELAY CALL DELAY BSF PORTA,3 CALL DELAY CALL DELAY BCF PORTA,2 CALL DELAY CALL DELAY BSF PORTA,2 CALL DELAY CALL DELAY BCF PORTA,1 CALL DELAY CALL DELAY BSF PORTA,1 CALL DELAY CALL DELAY BCF PORTA,0 CALL DELAY CALL DELAY BSF PORTA,0 CALL DELAY CALL DELAY BSF PORTA,6 BCF PORTA,3 CALL DELAY CALL DELAY BSF PORTA,3 CALL DELAY CALL DELAY BCF PORTA,2 CALL DELAY CALL DELAY BSF PORTA,2 CALL DELAY CALL DELAY BCF PORTA,1 CALL DELAY CALL DELAY BSF PORTA,1 CALL DELAY CALL DELAY BCF PORTA,0 CALL DELAY CALL DELAY BSF PORTA,0 CALL DELAY CALL DELAY BSF PORTB,3 BCF PORTA,3 CALL DELAY CALL DELAY BSF PORTA,3 CALL DELAY CALL DELAY BCF PORTA,2 CALL DELAY CALL DELAY BSF PORTA,2 CALL DELAY CALL DELAY BCF PORTA,1 CALL DELAY CALL DELAY BSF PORTA,1 CALL DELAY CALL DELAY BCF PORTA,0 CALL DELAY CALL DELAY BSF PORTA,0 CALL DELAY CALL DELAY GOTO LOOPDELAY: movlw d'250' 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
puiu Postat Ianuarie 9, 2011 Partajează Postat Ianuarie 9, 2011 1. Ce cuvant de configurare ai folosit? Link spre comentariu
Vizitator dusmanu Postat Ianuarie 9, 2011 Partajează Postat Ianuarie 9, 2011 Imi pare rau nu stiu la ce va referiti,puteti fi mai explicit va rog.Am folosit iceprog sa incarc hexul Link spre comentariu
puiu Postat Ianuarie 9, 2011 Partajează Postat Ianuarie 9, 2011 1. Dar de biti de configuarare ai auzit. Ce ai la adresa 2007. Pentru PIC16F628A cuvantul de configurare este la adresa 2007. Din pacate nu am iceprog ca sa vad cum apare cuvantul de configurare sau biti de configurare. Link spre comentariu
Vizitator z0rin Postat Ianuarie 21, 2011 Partajează Postat Ianuarie 21, 2011 Observ ca este destul de activ acest topic si de accea am decis sa posez tot aici pentru a nu face un nou topic.Eu am o probl asemnatoare numai ca eu incerc sa fac in mikroC sau mikroC pro. Ce doresc eu e sa fac :- Am 2 PIC-uri unu 16F873A la emisie si unu 16F876A la receptie. -La emisie am 6 butoane care trimit pe UART cate un caracter distinct -La receptie am un RGB ce trebuie comandat prin PWM pe fiecare culoare. PIC-ul nu stie decat 2 PWM hardware unul trebuie impelentat software. Ce nu stiu eu e cum sa fac ca atunci cand receptonez un caracter sa se produca o intrerupere in care sa incrementez/decrementez duty_cycle-ul la fiecare PWM. Pentru ca am incercat fara intreruperi iar din cauza functiei cu care e facut PWM-ul software intra intr-o bucla si nu le mai pot modifica pe nici unu din ele. Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum