Kreator Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 Buna ziua, Am facut un proiect cu PIC 16F88. Problema pe care o intampin vine de la PORTB 4-7 definit ca intrare digitala. Picul l-am initiat asa: AllDigital OSCCON = %01110111 ANSEL = %00000000 'All I/O pins are configured as digital CMCON = %00000111 'Disable comparators TRISA = %00000000 'PORTA All Outputs TRISB = %10010000 'PORTB All Outputs, Except RB4&RB7 INTCON = %10100000 OPTION_REG = %10000110 Se observa ca PORTB este weak pull-up dat de OPTION_REG.7 =1 Evenimentul de la Click la RB4 la intrerupere este: If PORTB.4 = 0 Then If x0 = 0 Then x0 = 1 PORTA.2 = Not PORTA.2 Endif Else x0 = 0Endif si PIC-ul functioneaza OK, la fiecare apasare la RB4 PORTA2 schimba starea. Atunci cind mai adaug si un eveniment la RB7 ca in exemplu: If PORTB.4 = 0 Then If x0 = 0 Then x0 = 1 PORTA.2 = Not PORTA.2 Endif Else x0 = 0EndifIf PORTB.7 = 0 Then If x0 = 0 Then x0 = 1 PORTA.2 = Not PORTA.2 Endif Else x0 = 0Endif PORTA.2 palpaie ca si cum ar oscila. Daca nu conectez push-urile la PORTB, teoretic pinii RB 4 si 7 ar trebui sa ramana in 1 ca-s configurati ca pull-up dar tot se intampla sa execute codul de la RB4. De ce? Link spre comentariu
UDAR Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 ”Se observa ca PORTB este weak pull-up dat de OPTION_REG.7 =1” Citat din DS : ”Each of the PORTB pins has a weak internal pull-up. A single control bit can turn on all the pull-ups. This is performed by clearing bit RBPU (OPTION_REG<7>).” Link spre comentariu
Liviu M Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 (editat) Hm, ce limbaj e asta? In basic nu era if conditie thenelseendif ? Daca e cum zic eu, ifurile tale sunt "defecte", Codul se compileaza? LE Sorry, cred ca m-au pacalit indenturile. Ignora ce am scris mai sus. Editat Iulie 31, 2014 de Liviu M Link spre comentariu
Kreator Postat Iulie 31, 2014 Autor Partajează Postat Iulie 31, 2014 (editat) @ Udar - Multumesc. Acolo era greseala cu pull-up. Problema persista atunci cand adaug eveniment pe oricare pin RB 5-7. LE Am gasit greseala in evenimentul de la celalalt port trebuie schimbat xo=0 in x1 ca in exemplul If PORTB.4 = 0 Then If x0 = 0 Then x0 = 1 PORTA.2 = Not PORTA.2 EndifElse x0 = 0EndifIf PORTB.7 = 0 Then If x1 = 0 Then x1 = 1 PORTA.2 = Not PORTA.2 EndifElse x1 = 0Endif Multumesc mult UDAR si Liviu M pentru interes si implicare! Editat Iulie 31, 2014 de Kreator Link spre comentariu
Kreator Postat August 11, 2014 Autor Partajează Postat August 11, 2014 (editat) Cu scuzele moderatorilor, continui aici cu o alta problema.Lucrez la un radio - ceas cu PIC16F88, TEA5767, DS 3232 si afisaj de Nokia 3310.Ce-a iesit arata cam asa: Optiunile pt radio: Autocautare, Preset si Mute merg OK, radio-ul se aude super. Partea de ceas: citeste si afiseaza ok, dar a fost initiat separat cu alt program. Cum partea grafica si calculele cu numere de tip long mananca cam multa memorie, mi s-a umplut memoria PIC-ului (98,5%) si nu mai imi incape codul pt setarea ceasului (foarte putine instructiuni zic eu). Stiu ca se poate optimiza programul, unele programe ofera aceasta optiune la variantele contracost. Intrebarile sunt: - In ce consta optimizarea hex-ului la PIC-uri? - Daca stiti vreun program free care poate folosi toata memoria unui PIC1847 (14k)? Multumesc. L.E. Asa arata memoria PICului: Ce reprezinta "Free GPR Location"? Multumesc! Editat August 11, 2014 de Kreator Link spre comentariu
sofian Postat August 12, 2014 Partajează Postat August 12, 2014 aia este memoria RAM nu ROM(Flash) free GPR este cit ram mai ai liber GPR adica ram de uz general 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