[ AxeXea @ 14.07.2015. 11:07 ] @
Pozdrav narode, Uzeo sam da napravim elektroniku za jednu jednostavnu masinu za secenje,sama elektronike je prilicno jednostavna,a ni kod nije nesto komplikovan. Masina je relativno jednostavna,Ima jedan taster (noznu pedalu),dva senzora i tri ventila koji upravljaju pneumatikom. Kad se pritisne pedala,to uzrokuje promenu logickog stanja(pojava logicke nule je aktiviranje) na pinu PORTA.RA2 na mikrokontroleru.Tad se aktivira ventil(PORTB.RB0 ide na logicko 1) koji pokrece drzac koji priteze i fiksira kabel u lezistu,Da je radnja izvrsena uveravamo se tako sto senzor drzanja menja logicko stanje na pinu PORTA.RA0 sa logicko 1 na logicku 0.Ako je sve u redu program nastavlja dalje tako sto aktivira ventil koji pokrece noz za secenje.Da je noz na mestu uveravamo se preko senzora secenja (PORTA.RA1),isti su logicki nivoi kao i za prvi senzor. Ako je sve u redu,program nastavlja dalje tako sto aktivira povlakac koji skida izolaciju sa kabla (PORTB.RB2 ide na logicko 1). Nakon toga svi ventili se otpustaju (PORTB.RB0 : PORTB.RB1 : PORTB.RB2 idu na logicko 0). Nakon toga proveriti senzore da li su iskljuceni (PORTA.RA0 : PORTA.RA1 da li su se vratili na logicko 1). Za kraj proveriti da li je pedala otpustena,odnosno da li je PORTA.RA2 vraceno na logicko 1,ako nije onda nanovo proveravati.Tek kad je pedala otpustena odnosno kad je PORTA.RA2 = 1 tada se vratiti na pocetak programa i cekati da se pedala pritisne za pocetak novog ciklusa.... Obrati paznju da je za senzore pojava logicke nule aktiviranje,a ventili pneumatike se aktiviraju sa logickom 1... Evo koda: void main() { TRISA = 0xFF; // Port A je ulazni PORTA = 0xFF; // inicijalno stanje porta A je 1 TRISB = 0x00; // Port B je izlazni PORTB = 0x00; // inicijalno stanje porta B je 0 //pedala iskljucena pocetno stanje while (1) { if (PORTA.RA2 == 0) { while (PORTA.RA0 != 0) //dok ne ocitamo da je drzac aktiviran { PORTB.RB0 = 1; //aktiviraj drzac Delay_ms(400); } while (PORTA.RA1 != 0) //dok ne ocitamo da je sekac aktiviran { PORTB.RB1 = 1; //aktiviraj sekac Delay_ms(400); } PORTB.RB2 = 1; //aktiviraj povlacenje Delay_ms(1100); PORTB = 0x00; Delay_ms(400); //dok je masina ili pedala zaglavljena - cekaj while ((PORTA.RA0 == 0) || (PORTA.RA1 == 0)|| (PORTA.RA2 == 0)) { Delay_ms(500); } } } Problem koji mi se javlja je da su pinovi porta A na logickoj nuli, iako sam ih setovao da budu na logicko 1 ,kad izvadim mikrokontroler iz podnozja i merim na kontaktima gde dolaze pinovi, imam +5V koji su dovedeni preko otpornika od 10k. Medjutim cim ubacim mikrokontroler i aktiviram elektroniku ti pinovi su na logickoj nuli sto uzrokuje da program samo "protrci".Znaci da sam mikrokontroler uzrokuje taj pad napona na pinovima. Nasao sam jedan podatak u datasheetu, ali nisam siguran kako da ga iskoristim...copy/paste: On Reset, the TRISA register is set to all inputs. The digital inputs (RA<3:0>) are disabled and the comparator inputs are forced to ground to reduce current consumption. Kao kompajler koristim MikroC. Pitajte ako sta treba da se doda. Mnogo pozdrava i hvala unapred... |