Vizitator mosu90 Postat Iunie 8, 2011 Partajează Postat Iunie 8, 2011 Salutare! In primul rand vreau sa va spun ca sunt incepator cu programarea de microcontrollere. Ce vreau eu sa fac este sa afisez pe o matrice de leduri cifrele de la 1 la 9. Am avut o tentativa cu cod ASM, dar m-am impotmolit la delayuri/interrupt.(Faceam delay intre fiecare linie/coloana sa afisez numarul, dar nu stiam cum sa opresc asta si sa trec la cifra urmatoare, cred ca trebuia sa folosesc ceva de genu interrupts probabil dar mi s-au parut dificile si am zis sa trec pe C) Am trecut pe C totul frumos pana cand vad ca MPLAB nu are compilator pentru microcontrollerul meu, eu citisem o carte cu un PIC24 unde foloseau MPLAB C30 ca si compilator, codul era foarte OK, mi se parea foarte asemanator de programarea pe care o stiam, insa m-am lovit de faptul ca acest compilator nu merge cu microcontrollerul meu. Am citit ceva forumuri si am vazut ca as putea folosii HiTech sa-mi compileze codul. Am scris un cod simplu sa-mi setez cateva din iesirile PORTA si PORTB pe high dar m-a bagat in ceata de tot! Codul : #include <pic16f628a.h>main(){ TRISA=0; //Am inteles ca trebuie sa scriu asta pentru a seta iesirile din A pe output PORTA=0b00010111; // cu 1 ar fi porturile pe care le vreau high TRISB=0; //AD1PCFG=0xffff; asta scria in carte ca trebuie pusa neaparat sa pot lucra cu PORTB cum trebuie. PORTB=0b11111111;} Dupa ce am dat Build si totul scria ca e OK am incercat o simulare si la Watch PORTA:00010000, PORTB:00000001 E de la compilator, e de la cod, nu mai inteleg nimic, ma poate ajuta cineva? am un proiect la facultate si deja cam intru in criza de timp. Link spre comentariu
Th3_uN1Qu3 Postat Iunie 8, 2011 Partajează Postat Iunie 8, 2011 Eu zic sa ramai la ASM ca o sa te tot lovesti de el, picul nu e suficient de puternic cat sa te descurci doar intr'un limbaj de nivel inalt. Cu interrupt'urile e relativ usor de lucrat pt ce vrei tu, citeste datasheet'ul la capitolul timer0. Eu am invatat tot ce tine de jocuri de lumini pe LED in 3 zile, pornind cu 0 cunostinte de pic (ce'i drept stiam ceva ASM x86, dar putin si acolo). Link spre comentariu
Liviu M Postat Iunie 8, 2011 Partajează Postat Iunie 8, 2011 #include <pic16f628a.h> HiTech recomanda #include <htc.h>.Pentru selectarea microcontrollerului cu care lucrezi foloseste mplab (pe undeva prin settings).In afara de asta, e recomandata o sectiune __CONFIG(), in care sa setezi bitii de configurare (watchdog, clock...). Un ex. (pentru un 16F877)__CONFIG(WDTDIS // WD disable & HS // 20 Mhz crystal oscillator & DUNPROT // Data read EE unprotected & LVPEN // Low Voltage Programming enable & UNPROTECT // Flash Write Pritection Off & BORDIS // Brown out disable & PWRTEN); // Power up timer enable main(){ TRISA=0; //Am inteles ca trebuie sa scriu asta pentru a seta iesirile din A pe output PORTA=0b00010111; // cu 1 ar fi porturile pe care le vreau high La 16F628 PORTA are mai multe functii multiplexate; presupun ca mai trebuie sa dezactivezi partea analogica - citeste despre CMCON in data-sheet.Despre PORTB n-am nici o idee.Dupa parerea mea, poti ramane linistit la C. Nu o sa ai prea curand nevoie de "fineturile" ASM. Link spre comentariu
Vizitator mosu90 Postat Iunie 8, 2011 Partajează Postat Iunie 8, 2011 am rezolvat cu PORTA , ma chinui la B de o ora, mai citesc poate gasesc ceva, multumesc oricum! Link spre comentariu
Liviu M Postat Iunie 9, 2011 Partajează Postat Iunie 9, 2011 La mine codul de mai jos functioneaza OK (in debuger): #include <htc.h>;__CONFIG(BORDIS & UNPROTECT & CPD & PWRTEN & WDTDIS & LVPDIS & MCLREN & INTCLK);/* !!! Selecteaza 16F628A in mplab->Configure->SelectDevice!!!*/void main(void){// PORTA = 0x00; CMCON = 0b00000111; TRISA = 0b00000000; /***** PortB Code **** * Port directions: 1=input, 0=output */ TRISB = 0b00000000; PORTA=0xFF; //toate iesirile 0 PORTB=0xFF; //toate iesirile 0 PORTA=0x0F; PORTB=0x0F; } Link spre comentariu
Vizitator mosu90 Postat Iunie 10, 2011 Partajează Postat Iunie 10, 2011 mersi mult, nu m-am descurcat cu COUNTERUL dar am folosit niste FOR-uri pentru intarzieri Link spre comentariu
Liviu M Postat Iunie 10, 2011 Partajează Postat Iunie 10, 2011 In functie de versiunea de picc pe care o ai, daca vrei intarzieri chioare (echivalenti cu "NOP"- nu fa nimic in timpul asta), ai diverse functii pentru intarzieri.In ultima versiune (9.80 parca), ai __delay_ms() si __delay_us() (parca, vezi in directorul Program Files -> HT_Soft -> Docs ca ai manualul; poate e trecuta acolo).Daca vrei sa mai faci si altceva cat timp astepti, merge cu intreruperi si timere. Link spre comentariu
Vizitator mosu90 Postat Iunie 10, 2011 Partajează Postat Iunie 10, 2011 multumesc liviu, m-am lovit acum de urmatoarea problemanu vreau sa memorez si combinatiile binare pentru PORTA pentru ca as consuma aiurea memoria daca le-as baga in arrayul cu combinatiile binare pentru a aprinde ledurile (linii)la PORTA am decat 5 variante000000 00000000 01000000 10000000 1100000 1 0 0eu pentru a repeta aceste combinatii la fiecare cifra afisata ma folosesc de o variabila pe care o folosesc la un for "j"formula era PORTA=j%5;problema e ca nu stiu de ce cand probez schema in PROTEUS cu fisierul HEX generat, coloanele nu se aprind cum trebuie.daca las doar j si sterg % merge (doar pentru prima cifra) Link spre comentariu
Liviu M Postat Iunie 10, 2011 Partajează Postat Iunie 10, 2011 Pai dupa umila mea parere, pentru j=0..4 cele doua forme, PORTA=j si PORTA=j%5 sunt echivalente. Sau? Oricum ca sa stim despre ce vorbim, poate pui o poza cu schema in proteus (poza, nu schema, ca n-am proteus). Link spre comentariu
Vizitator mosu90 Postat Iunie 10, 2011 Partajează Postat Iunie 10, 2011 da sunt echivalente... dar cand voi trece la cifra DOI j-ul va fi intre 5 si 9 (indicii in array ai combinatiilor binare)am rezolvat acum cu o sol care insa nu se misca asa bine... "forul" nu se misca asa repede incat ochiul sa nu-si dea seama ca se sting pe acolo niste coloane.. asta in PROTEUS. Maine imi vine programatorul si o sa vad atunci pe viu ce o sa fie.Oricum iti multumesc mult Liviu pentru ajutor, si scuze daca sunt putin stresant 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