criss Postat Decembrie 7, 2007 Partajează Postat Decembrie 7, 2007 Buna am o problema cu un PIC12F675, nu merge.Adica am luat acest exemplu ca sa il testez si nu merge.Picul lam conectat astfel:pinul1 '+'pinul8 '-'pinul3 o rezistenta inseriat un led si apoi la masa. ma gandesc ca oscilatorul intern nu merge sau ceva eu nu am facut bine.si ce trebuie sa setez pe ICprog,mai precis la oscilator?(la diferite setari imi sta ledul aprins iar la altele stins,dar el trebuie sa palpaie).Unde am gresit?folosesc un programator Multi PIC Programmer 5v2.Am folosit mai multe programe gasite pe net dar nici unul nu a mers,+am gasit si un exemplu in microC si nici acesta nu merge. void main() { TRISIO = 0; do { GPIO = 0xFF; Delay_ms(1000); GPIO = 0; Delay_ms(1000); } while(1); } Link spre comentariu
Abram Burel Postat Decembrie 8, 2007 Partajează Postat Decembrie 8, 2007 Sunt cel putin 2 chestii care iti pot crea probleme.1. 12F675 are si comparator si convertor A/D. Daca nu setezi registrii ANSEL si CMCON corect, nu o sa-ti mearga I/O simplu.Cod asembler: BSF STATUS, RP0 ; CMCON e in bancul 1 MOVLW 0x07 ; dezactivare comparator MOVWF CMCON ; BCF STATUS, RP0 ; ANSEL e in bancul 0 CLRF ANSEL ; dezactivare convertorCod limbaje de nivel inalt (poate mai trebuie un ; in functie de limbaj): CMCON=7 ANSEL=02. Daca in programele ASM nu s-a folosit directiva CONFIG sau ai lucrat intr-un limbaj de nivel inalt, nu ai sansa ca bitii de configurare sa fie setati corect.Pentru ambele situatii, citeste foaia de catalog, verifica si seteaza corect. Link spre comentariu
criss Postat Decembrie 8, 2007 Autor Partajează Postat Decembrie 8, 2007 salut Mama bagat dea binelea in treaba....am crezut ca cu acest microcontroler o sami mearga mai usor(fiind mai ieftin am optat pt ea).Limbajul cu care fac testele este C.ai putea sami dai un exemplu(aprinderea si stingerea unui led pe pinul3) in asm sa am de unde porni.am atasat cateva poze cu setarea programatorului(ce trebuie sa setez la oscilator?) si a fisierului config din mikroC. Link spre comentariu
Abram Burel Postat Decembrie 8, 2007 Partajează Postat Decembrie 8, 2007 Hai sa incerc. N-am unul de-a gata, dar incropim din ce avem. Mai intai o erata: cele doua registre CMCON si ANSEL sunt exact pe dos de cum spuneam anterior :( Atentie la directiva CONFIG. Ea arata cum trebuie sa arate si bitii de configurare setati in programator sau in C. _WDT_OFF nu-ti trebuie watchdog in mod normal _INTRC_OSC_NOCLKOUT asta este oscilatorul intern _CP_OFF cod neprotejat _CPD_OFF data neprotejate _BODEN_ON nu e esential, dar nu strica sa fie ON _MCLRE_ON pinul MCLR trebuie conectat la +5V printr-o rezistenta de 1-10K _PWRTE_ON ajuta la o pornire normala cu orice sursa de alimentare Nu am pus rutina de delay ca nu-mi plac. Gasesti pe net rutine "standard". Ledul il poti pune pe oricare din pinii GPIO0-2, fie spre masa fie spre +5V cu o rezistenta de 330ohmi (220ohmi - 10K in functie de led). In ceea ce priveste imaginile, trebuie sa alegi o optiune pentru fiecare "pereche" (de exemplu _WDT_ON _WDT_OFF). E mai sanatos, chiar daca compilatorul alege el ceva. Am mai lucrat si eu cu mikroPascal si n-am priceput de ce au preferat ei casutele alea de bifat, pentru niste chestii care sunt ON/OFF) LIST P=12F675 #INCLUDE <P12F675.INC> __CONFIG _WDT_OFF & _INTRC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_ON & _PWRTE_ON; CODE ORG 0 GOTO _START ORG 4 RETFIE_START: BCF STATUS,RP0 ;IN BANK0 CLRF GPIO ; CLEAR GPIO MOVLW 0x07 ; DEACTIVATE COMPARATOR MOVWF CMCON ; ; BSF STATUS,RP0 ;IN BANK 1 CALL 0X3FF ; CALIBRATE OSCILATOR MOVWF OSCCAL ; CLRF ANSEL ; MOVLW 0x38 ; GPIO0-2 OUT, 3-5 IN MOVWF TRISIO ; ; BCF STATUS,RP0 ;IN BANK 0 ;LOOP: MOVLW 07FH ; MOVWF GPIO ; CALL DELAY ; CLRF GPIO ; CALL DELAY ; GOTO LOOP ;DELAY:; ENTER ANY DELAY PROCEDURE HERE RETURN; END[/code] Link spre comentariu
criss Postat Decembrie 9, 2007 Autor Partajează Postat Decembrie 9, 2007 salut mersi pt informatii dar nu stiu dece imi da eroare cand incerc sa compilez codul.folosesc MPlab.am facut un nou proiect pt acest tip de procesor dar imi da eroare.Warning[215] D:\PROJECT\MLAB\TEST_LED\TEST_LED.ASM 1 : Processor superseded by command line. Verify processor symbol.Error[129] D:\PROJECT\MLAB\TEST_LED\TEST_LED.ASM 2 : Expected (END)am observat ca la mai multe fisiere imi da eroarea. Link spre comentariu
criss Postat Decembrie 9, 2007 Autor Partajează Postat Decembrie 9, 2007 pana la urma am rezolvat cu iesirile in asm si in C. cu configul a fost problema. list p=12f675 include "p12f675.inc" __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF &_PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUTsmall_delay_tmp equ 0x20long_delay_tmp equ 0x21 goto mainsmall_delay: movlw 0xff movwf small_delay_tmpsmall_delay_L1: decfsz small_delay_tmp, F goto small_delay_L1 return; ---------------------------- long_delay: movwf long_delay_tmplong_delay_L1: call small_delay decfsz long_delay_tmp, F goto long_delay_L1 returnmain: bcf STATUS, RP0 clrf GPIO movlw 0x7 movwf CMCON ; disable comparator bsf STATUS, RP0 movlw 0x0 movwf TRISIO ; All pins outputs bcf STATUS, RP0infinite: bcf GPIO, GP0 movlw 0x82 call long_delay bsf GPIO, GP0 movlw 0x82 call long_delay;*************************** bcf GPIO, GP2 movlw 0x82 call long_delay bsf GPIO, GP2 movlw 0x82 call long_delay goto infinite end Daca nu te deranjez cum pot comanda o intrare?si o iesire deodata. Ex. GP5 intrare(pt intrerupator) GP4 iesire in acest caz iesirile sau intarile(dupa caz) trebuie setate pt fiecare port? Si inca o intrebare portul GP3 ii port doar pt intare si reset? Multumesc Link spre comentariu
Abram Burel Postat Decembrie 10, 2007 Partajează Postat Decembrie 10, 2007 Chiar "deodata" nu poti, pentru ca la un moment dat nu se executa decat o instructiuni si aceasta nu poate fi decat fie de "citire", fie de "scriere".Setarea unuia din cei 6 pini ai portului GPIO se face prin setarea corespunzatoare a bitilor in registrul TRISIO: 1 pentru intrare si 0 pentru iesire.Da GP3 este doar intrare sau pin de reset sau pin pentru programare.Mai multe detalii in foaia de catalog. Fara sa citesti cu atentie si sa te straduiesti sa intelegi ce scrie in ea e greu sa progresezi (daca nu imposibil la un moment dat). Link spre comentariu
criss Postat Decembrie 10, 2007 Autor Partajează Postat Decembrie 10, 2007 am inceput sa citesc foaia de catalog dar nu inteleg mai nimica de acolo.ai putea da un exemplu pt acesta: vreau sa am o iesire(digitala) pe GP0 si o intrare pe GP1.si inca ceva daca am aplicat un semnal la o intrare (intrerupator) pe o alta poarta sa am un semnal de iesire(pe moment).daca ai putea sami dai ceva link de tutorial cred ca as intelege mai bine decat din foaia de catalog.multumesc Link spre comentariu
Abram Burel Postat Decembrie 10, 2007 Partajează Postat Decembrie 10, 2007 Sunt destule topice cu tutoriale. Ce vrei tu nu mai e specific 12F675, asa ca treci la cautat si invatat Poti incepe de aici: http://www.winpicprog.co.uk/pic_tutorial.htm. Link spre comentariu
Vizitator zundapp Postat Ianuarie 7, 2008 Partajează Postat Ianuarie 7, 2008 Salut! Pentru ca tot e vorba de 12F675, ma confrunt cu o problema: pentru 3 pini de intrare (GP1/2/4) am activat PullUp-urile si pe aceste intrari folosesc 3 jumperi care pot conecta intrarile la masa sau nu (in cazul asta pullup-urile tinindu-le in "1"). Problema este ca PullUp-urile functioneaza numai cind vor, uneori da alteori nu. Banuiesc (si va intreb) ca atunci cind pe o intrare aflata "in aer" daca este activ PullUp-ul, daca masor cu multimetrul ar trebui sa gasesc "1" - ceea ce uneori se intimpla, alteori nu... Cu cei 3 jumperi incerc sa setez durata unei temporizari. Problema e ca de cele mai multe ori, indiferent de cum sint pusi jumperii programul porneste ca si cum toate intrarile ar fi in "0", desi acestea sint in aer (cu PullUp-ul intern activat). Nu imi dau seama ce gresesc si ii rog pe cei mai experimentati sa ma ajute (Multumesc!). Codul ar fi cam asa: ;*********************************************************************************** #include "p12f675.inc" __CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT bsf STATUS,RP0 ; Sel Bank 1 movlw b'00000000' movwf PCON movlw b'00111110' ; Specifiy GPIO port direction movwf TRISIO ; Set GPIO ports as xxIIIIIO movlw b'01111111' movwf OPTION_REG ;0xxx.xxx - PullUp=enable movlw b'00110110' movwf WPU ;PullUp=enable for GP1/GP2/GP4/GP5 movlw b'01010000' movwf ANSEL bcf STATUS,RP0 ; Sel Bank 0 movlw b'00000111' ; 0000.0111 - comparator= OFF movwf CMCON ; movlw b'00000000' ; movwf ADCON0 ; cblock 0x20 T2 T3 endc ;************************************ PROGRAM ************************************ _START call _WD bcf GPIO, GP0 ;out=0 btfss GPIO, GP5 ; goto _START btfsc GPIO, GP4 ;J1 goto _x ;1 //// 1xx goto _k ;0 //// 0xx _k btfsc GPIO, GP1 ;J2 goto _p ;1 //// 01x goto _t ;0 //// 00x _x btfsc GPIO, GP1 ;J2 goto _y ;1 //// 11x goto _z ;0 //// 10x _p btfsc GPIO, GP2 ;J3 goto _8 ;1 //// 011 goto _4 ;0 //// 010 _t btfsc GPIO, GP2 ;J3 goto _2 ;1 //// 001 goto _1 ;0 //// 000 _y btfsc GPIO, GP2 ;J3 goto _120 ;1 //// 111 goto _60 ;0 //// 110 _z btfsc GPIO, GP2 ;J3 goto _30 ;1 //// 101 goto _15 ;0 //// 100 _1 movlw d'10' ;1min movwf T2 ; movlw d'1' ; movwf T3 ; goto _1A ; _2 movlw d'20' ;2min movwf T2 ; movlw d'1' ; movwf T3 ; goto _1A ; _4 movlw d'40' ;4min movwf T2 ; movlw d'1' ; movwf T3 ; goto _1A ; _8 movlw d'80' ;8min movwf T2 ; movlw d'1' ; movwf T3 ; goto _1A ; _15 movlw d'150' ;15min movwf T2 ; movlw d'1' ; movwf T3 ; goto _1A ; _30 movlw d'150' ;30min movwf T2 ; movlw d'2' ; movwf T3 ; goto _1A ; _60 movlw d'150' ;60min movwf T2 ; movlw d'4' ; movwf T3 ; goto _1A ; _120 movlw d'150' ;120min movwf T2 ; movlw d'8' ; movwf T3 ; goto _1A ; _1A call _WD .................... .................... ====etc==== .................... .................... goto _START _WD CLRWDT bsf STATUS,RP0 movlw b'11111111' movwf OPTION_REG bcf STATUS,RP0 return end ;*********************************************************************************** Link spre comentariu
puiu Postat Ianuarie 7, 2008 Partajează Postat Ianuarie 7, 2008 Din documentatia tehnica a lui PIC12F675:3.2.1 WEAK PULL-UPEach of the GPIO pins, except GP3, has an individuallyconfigurable weak internal pull-up. Control bits WPUxenable or disable each pull-up. Refer to Register 3-3.Each weak pull-up is automatically turned off when theport pin is configured as an output. The pull-ups aredisabled on a Power-on Reset by the GPPU bit(OPTION<7>). Link spre comentariu
Vizitator zundapp Postat Ianuarie 8, 2008 Partajează Postat Ianuarie 8, 2008 Multumesc pentru raspuns! Numai ca eu zic ca am respectat cele mentionate in datasheet si amintite de tine... Ceva imi scapa... :smt010 Link spre comentariu
Abram Burel Postat Ianuarie 8, 2008 Partajează Postat Ianuarie 8, 2008 Cam ciudat layout-ul programului. Ma refer la ordinea declaratiilor:- CBLOCK dupa initializare- lipsa ORGRevenind la programul propriu-zis, cum vrei tu sa vada pullup-urile daca la _START chemi _WD si aici setezi bitul 7 din OPTION_REG, adica tocmai ala care ar trebui sa... activeze pullup-urile (si care e setat corect la initializare) :rolleyes: Ceea ce ma mira este ca zici ca merge cateodata, desi nu zici ca ar merge cum trebuie Link spre comentariu
Vizitator zundapp Postat Ianuarie 9, 2008 Partajează Postat Ianuarie 9, 2008 Multumesc Abram Burel!Mesteru'-i mester dom'le...Ciudat e ca uneori (rareori) mergea, ciudat rau... :rolleyes: ORG? In datasheet-ul lui 12f675 nu se aminteste mai nimic... Ce e aia? Link spre comentariu
Abram Burel Postat Ianuarie 9, 2008 Partajează Postat Ianuarie 9, 2008 ORG e o declaratie a asamblorului care ii spune unde sa locateze codul in hex (de la ce adresa). Implicit o ia de la 0, deci n-ar fi nevoie de o declaratie explicita, dar pentru eleganta codului nu strica sa incepi secventa de program cu ORG 0.Asa ceva tine de mediul de programare (in cazul asta asamblor) si nu de foaia de catalog a PIC-ului.Un layout "normal" ar putea fi:Directive (CONFIG, RADIX, ERROR)Definire variabile (CBLOCK)Definire constante (DEFINE)Cod de inceput ORG 0 GOTO _MAIN ORG 4 ; optional GOTO _ISR ; optionalCod principal_MAIN...Cod intreruperi_ISR...Cod subrutine 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