[ electron2008 @ 29.07.2012. 18:02 ] @
Kako da ovaj kod pisan za probu za 16F877A i 16F84A gde radi dobro, prebacim na 16F887 i podesim na interni oscilator:
Code:
define OSC 4
TRISB = $00           
               
          
symbol LED5=PORTB.3     
symbol LED4=PORTB.0     
SYMBOL LED3=PORTB.4    
symbol LED2=PORTB.5  
symbol LED1=PORTB.6  

 TRISB=$00  

 proba:

 PORTB = $FF    ' Upali sve LED diode
 pause 500
 PORTB = $00    ' Ugasi sve LED diode
 pause 500  

 led1=1:led2=1:led3=1 'Upali LED1,LED2,LED3 i zadrzava 2 sec
 Pause 2000
 led1=1:led2=1:led3=0:led5=1 'Nastavlja sa radom LED1,LED2, gasi se LED3, pali se i zadrzava 2 sec
 pause 2000
 led1=0:led2=0:led3=1:led5=0  'Gasi se LED1, LED2, pali se LED3, gasi se LED5 i zadrzava 0,5 sec
 pause 500
 portb=0       'sve se gasi i zadrzava 1 sec
 pause 1000
 led1=1:led2=1:led3=1:led4=1:led5=1    'sve se pali i zadrzava 1,5 sec
 pause 1500
 PORTB = $00
 pause 500    'Ugasi sve LED diode i zadrzi ugasene 0,5 sec


 goto proba
 end


probao sam da ubacim
Code:
OSCCON = %01100001          
DEFINE OSC 4 

ANSEL = %00000000           
OPTION_REG.7 = 0  

ali mi nepali led diode kao na prethodna dva mikrokontrolera
[ goran_68 @ 29.07.2012. 18:59 ] @
Postavi u ANSELH sve nule. Ne vidim kako si postavio konfiguracione bitove.
[ electron2008 @ 29.07.2012. 19:51 ] @
postavio i sve je OK. mozda bi bilo dobro neko malo da pojasni ANSEL i ANSELH odnosno ANSEL: ANALOG SELECT REGISTER i ANSELH: ANALOG SELECT HIGH REGISTER

Code:
OSCCON = %01100001
DEFINE OSC 4

ANSEL = %00000000
ANSELH = %00000000
OPTION_REG.7 = 0
TRISB = $00


symbol LED5=PORTB.3
symbol LED4=PORTB.0
SYMBOL LED3=PORTB.4
symbol LED2=PORTB.5
symbol LED1=PORTB.6

TRISB=$00

proba:

PORTB = $FF ' Upali sve LED diode
pause 500
PORTB = $00 ' Ugasi sve LED diode
pause 500

led1=1:led2=1:led3=1 'Upali LED1,LED2,LED3 i zadrzava 2 sec
Pause 2000
led1=1:led2=1:led3=0:led5=1 'Nastavlja sa radom LED1,LED2, gasi se LED3, pali se i zadrzava 2 sec
pause 2000
led1=0:led2=0:led3=1:led5=0 'Gasi se LED1, LED2, pali se LED3, gasi se LED5 i zadrzava 0,5 sec
pause 500
portb=0 'sve se gasi i zadrzava 1 sec
pause 1000
led1=1:led2=1:led3=1:led4=1:led5=1 'sve se pali i zadrzava 1,5 sec
pause 1500
PORTB = $00
pause 500 'Ugasi sve LED diode i zadrzi ugasene 0,5 sec


goto proba
end
[ ZAS011 @ 29.07.2012. 20:56 ] @
Sve što je vezano za registre mikrokontrolera piše u datasheet-u, samo treba pročitati.

Inače, delove programa koje upotrebljavaš više puta ne bi bilo loše da napišeš kao podprograme (subroutine)

Evo ti ovaj tvoj program, malko prepravljen, pa prekompajliraj i dojavi nam koliko je manje programskih reči zauzeo od tvog izvornog.

Code:
OSCCON = %01100001
DEFINE OSC 4

ANSEL = %00000000
ANSELH = %00000000
OPTION_REG.7 = 0
TRISB = $00


symbol LED5=PORTB.3
symbol LED4=PORTB.0
SYMBOL LED3=PORTB.4
symbol LED2=PORTB.5
symbol LED1=PORTB.6

TRISB=$00

proba:

PORTB = $FF ' Upali sve LED diode
'pause 500
GoSub Pause500
PORTB = $00 ' Ugasi sve LED diode
'pause 500
GoSub Pause500

led1=1:led2=1:led3=1 'Upali LED1,LED2,LED3 i zadrzava 2 sec
'Pause 2000
GoSub Pause2000
led1=1:led2=1:led3=0:led5=1 'Nastavlja sa radom LED1,LED2, gasi se LED3, pali se i zadrzava 2 sec
'pause 2000
GoSub Pause2000
led1=0:led2=0:led3=1:led5=0 'Gasi se LED1, LED2, pali se LED3, gasi se LED5 i zadrzava 0,5 sec
'pause 500
GoSub Pause500
portb=0 'sve se gasi i zadrzava 1 sec
pause 1000
led1=1:led2=1:led3=1:led4=1:led5=1 'sve se pali i zadrzava 1,5 sec
pause 1500
PORTB = $00
pause 500 'Ugasi sve LED diode i zadrzi ugasene 0,5 sec


goto proba
end

Pause500:
    pause 500
return

Pause2000:
    pause 2000
return
[ goran_68 @ 30.07.2012. 08:01 ] @
PIC16F887 ima 14 pinova koji mogu biti analogni (AN0 do AN13) ili digitalni I/O. Da bi neki od tih pinova bio digitalan moras u ANSEL ili ANSELH odgovarajuci bit (ANS0 do ANS13) postaviti na nulu.
[ electron2008 @ 30.07.2012. 20:14 ] @
Jedan 119, drugi 121 words used
[ electron2008 @ 03.10.2012. 21:55 ] @
Citat:
goran_68:
PIC16F887 ima 14 pinova koji mogu biti analogni (AN0 do AN13) ili digitalni I/O. Da bi neki od tih pinova bio digitalan moras u ANSEL ili ANSELH odgovarajuci bit (ANS0 do ANS13) postaviti na nulu.

Kako recimo da sve pinove na PIC16F887, odnosno sve analogne pinove postavim da i oni budu digitalni I/O?
[ ZAS011 @ 03.10.2012. 22:11 ] @
Ti izgleda ne voliš da čitaš dokumentaciju

Code:
ANSEL = %00000000
ANSELH = %00000000

odnosno
Code:
ANSEL = 0
ANSELH = 0
[ electron2008 @ 03.10.2012. 22:16 ] @
Postavljeno tako, ali imam izgleda onda sa necim drugim problem
[ ZAS011 @ 04.10.2012. 15:15 ] @
Imaš problem sa WDT

Ovako izgleda konfiguracija tvog komtrolera kada se .hex učita u softver za programiranje.



Ovako bi trebalo da izgleda konfighuracija



Inače, programče radi ono što si napisao.
[ electron2008 @ 04.10.2012. 17:44 ] @
Hteo bi da upotrebim port Ra6 i Ra7 na 16f887 kao ulazni (ustvari sve pinove na PortA i PortE kao ulazne, PortB i PortC kao izlazne a displej na portu D) u kodu sve odradim kako treba, ali mi programator prilikom ucitavanja hex-a prijavljuje gresku, kontam da je negde greska u podesavanju programatora, dali je neko mozda radio tako nesto? Program US Burn v1.11a5 programator Brenner8 firmware v0.16? Pokusao sam US Burn podesiiti prema Mikroelektronikinom ali izgleda da ima jos nesto, sto sam ispustio?
[ electron2008 @ 04.10.2012. 17:58 ] @
Edit: dali je moguce da je bilo do slabe baterije na lap-topu, sad upucava hex u PIC bez greske, a i programcic radi?
[ electron2008 @ 07.10.2012. 06:14 ] @
Code:
DEFINE LCD_DREG PORTD ' LCD se nalazi na portu D
DEFINE LCD_DBIT 4 ' Data bits D4..D7
DEFINE LCD_RSREG PORTD ' RS na PORTD
DEFINE LCD_RSBIT 1 ' RS na D1
DEFINE LCD_EREG PORTD ' E na PORTD
DEFINE LCD_EBIT 0 ' E na D0
DEFINE LCD_BITS 4 ' LCD 4 bit mode
DEFINE LCD_LINES 2 ' 2 linije LCD display


OSCCON = %01110001 'Int CLK 8MHz
DEFINE OSC 8 '8MHz << NOTICE UPPERCASE ON DEFINE

'END of timer/oscillator defines


ANSEL = %00000000 'All digital
ANSELH = %00000000
OPTION_REG.7 = 1 'Weak pull-ups enabled
DEFINE BUTTON_PAUSE 100
'port clear
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
'end of port clear

'--------------------ULAZI--------------------------------------

symbol AU=PORTE.0 'Taster automatski
symbol RU=PORTE.1 'Taster rucno
symbol ST=PORTE.2 'Taster stop
symbol TP=PORTA.0 'Temperatura 1
symbol TS=PORTA.1 'Temperatura 2
symbol SNS=PORTA.2 'Sonda nivoa 1
Symbol SNI=PORTA.3 'Sonda nivoa 2
symbol SNK=PORTA.4 'Sonda nivoa 2
symbol SV=PORTA.5 'Sonda vlage
symbol SNP=PORTA.6 'Sonda nivoa 4
symbol TR=PORTA.7 'Trip greska MZS
'-------------------IZLAZI-------------------------------------
symbol TV=PORTB.7 'Transportni ventilator
symbol I=PORTB.6 'Izvlakac
SYMBOL MS=PORTB.5 'Mesac 1
symbol MII=PORTB.4 'Mesac 2
symbol VP=PORTB.3 'Ventilator 1
symbol VGS=PORTB.2 'Ventilator 2
symbol VGI=PORTB.1 'Ventilator 2
symbol DP=PORTB.0 'Dozator 1
symbol DK=PORTC.7 'Dozator 2
symbol DS=PORTC.6 'Dozator 3
symbol AS=PORTC.5 'Aspiracija
symbol RR=PORTC.4 'Relej rucno

'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00 'Svi portovi B su izlazni
TRISC=$00 'Svi portovi C su ulazni
TRISE=$FF 'Svi portovi E su ulazni
PAUSE 1500

'----------------Blokada------------------------------------------
Blokada:
Lcdout $fe, 1 ' Clear screen
Pause 500
goto Blokada1
'-----------------------------------------------------------------
Blokada1:

if AU=0 then automatski
if ru=0 then Rucno

LCDOUT $FE,2, " Stop "
LCDOUT $FE,$C0, " Zaustavljeno "


TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=1
goto Blokada1

Rucno:

LCDOUT $FE,2, " Rad "
LCDOUT $FE,$C0, " RUCNO "


TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=0
if st=0 then Blokada


goto rucno

'---------------AUTOMATSKI-------------------------------------------

Automatski:

LCDOUT $FE,2, " AUTOMATSKI "
LCDOUT $FE,$C0, " RAD "

TV=0:I=0:MS=0:MII=0:VP=0:VGS=0:VGI=0:DP=0:DK=0:DS=0:AS=0:RR=0
if st=0 then Blokada

goto automatski

Kako da resim, prilikom paljenja, ili reseta PIC-a, upale mi se za trenutak svi releji, plocica je vec uradjena, otpornici R1-R16 10K, preveliki, stavio sam od 1K?



end

[ veselinovic @ 07.10.2012. 07:50 ] @
U ovom trenutku je najbolje hardverski rijesiti.
NA napajanje releja stavis vremenjak, da napon napajanja releja ( ili optokaplera) dodje kasnije sekundu dvije od napajanja pic-a.
Moze i neki slobodni pin kontrolera da kontrolise napajanje, ali najsigurnije je hardverski.
Posto je plocica gotova daj plocicu da razmislimo.
[ electron2008 @ 07.10.2012. 10:03 ] @
A ovako?
Code:
TRISA=$FF  'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
TRISC=$00  'Svi portovi C su izlazni
TRISD=$00  'Svi portovi D su izlazni
TRISE=$FF  'Svi portovi E su ulazni

OSCCON = %01110001          'Int CLK 8MHz
DEFINE OSC 8                '8MHz << NOTICE UPPERCASE ON DEFINE

'END of timer/oscillator defines


ANSEL = %00000000           'All digital
ANSELH = %00000000
OPTION_REG.7 = 1            'Weak pull-ups enabled

  
DEFINE LCD_DREG PORTD                   ' LCD se nalazi na portu D
DEFINE LCD_DBIT 4                       ' Data bits D4..D7
DEFINE LCD_RSREG PORTD                  ' RS na PORTD
DEFINE LCD_RSBIT 1                      ' RS na D1 
DEFINE LCD_EREG PORTD                   ' E na PORTD
DEFINE LCD_EBIT 0                       ' E na D0
DEFINE LCD_BITS 4                       ' LCD 4 bit mode
DEFINE LCD_LINES 2                      ' 2 linije LCD display

DEFINE BUTTON_PAUSE 100




'--------------------ULAZI--------------------------------------

symbol AU=PORTE.0   'Taster automatski
symbol RU=PORTE.1   'Taster rucno
symbol ST=PORTE.2   'Taster stop
symbol TP=PORTA.0  'Temperatura1
symbol TS=PORTA.1  'Temperatura2
symbol SNS=PORTA.2 'Sonda nivoa1
Symbol SNI=PORTA.3 'Sonda nivoa2
symbol SNK=PORTA.4 'Sonda nivoa3
symbol SV=PORTA.5  'Sonda vlage
symbol SNP=PORTA.6 'Sonda nivoa4
symbol TR=PORTA.7  'Trip
'-------------------IZLAZI-------------------------------------
symbol TV=PORTB.7   'Transportni ventilator
symbol I=PORTB.6    'Izvlakac
SYMBOL MS=PORTB.5   'Mesac 
symbol MII=PORTB.4  'Mesac isparivaca sa izvlakacem
symbol VP=PORTB.3   'Ventilator1
symbol VGS=PORTB.2  'Ventilator grejanja1
symbol VGI=PORTB.1  'Ventilator grejanja2
symbol DP=PORTB.0   'Dozator peci
symbol DK=PORTC.7   'Doziranje kosa
symbol DS=PORTC.6   'Doziranje ...
symbol AS=PORTC.5    'Aspiracija
symbol RR=PORTC.4    'Relej rucno (Lice mesta)


'*****************************************************************************   
 
pocetak:
TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=1   
Lcdout $fe, 1      ' Clear screen
   Pause 500      ' Wait .5 second

   Lcdout           "  Welcome screen1 "    
   Lcdout $fe, $c0, "  verzija "    
   Pause 2000      ' Wait 2 second
   
Lcdout $fe, 1      ' Clear screen
Pause 500      ' Wait .5 second

Lcdout          "     Welcome screen2  "      
LCDOUT $FE,$C0, "  v1.0 datum "
Pause 2000      ' Wait 2 second
Lcdout $fe, 1      ' Clear screen  (izbrisi lcd)




'----------------Blokada------------------------------------------
Blokada:
Lcdout $fe, 1      ' Clear screen
Pause 500
goto Blokada1
'-----------------------------------------------------------------
Blokada1:

if AU=0 then automatski
if ru=0 then Rucno

LCDOUT $FE,2,   "     Stop     "
LCDOUT $FE,$C0, "  Zaustavljeno  "
 

TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=1
goto Blokada1

Rucno:

 LCDOUT $FE,2,   "      Rad       "
 LCDOUT $FE,$C0, "     RUCNO      " 


TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=0
if st=0 then Blokada
if tr=0 then Trip


goto rucno

'---------------AUTOMATSKI-------------------------------------------

Automatski:

LCDOUT $FE,2,   "   AUTOMATSKI   "
LCDOUT $FE,$C0, "      RAD       "
.
.
.
.
.
[ foxhunter1 @ 07.10.2012. 12:46 ] @
Po difoltu, osim ako se nesto nije promenilo u medjuvremenu, svi pinovi kod PICova posle reseta su ULAZI.
Nema veze dal' su analogni, dal' digitalni - bice ulazi. Iskoristis tu osobinu odmah na pocetku programa i
definises potrebna pocetna stanja za tvoje portove/pinove. Koliko sam video, onako na brzinu, tebi je ceo
portB izlazni i ganja OCove, aktivno stanje ti je 0, znaci da ne bi izlazi bili ukljuceni (ono sto tebi treba) svi
bitovi na portB treba da budu jedinice. Tek posle definisanja zeljenog stanja TRIS registrima definises portove
kao izlazne.
To mozes da uradis kao sto si uradio u odgovoru samom sebi - definisanjem
stanja sukcesivno, ili sto je krace i brze jednom jedinom komandom. PortD ti je mesovit (ne koristis ga 100% za
izlaze, ali ne menja stvari), portC takodje. Videces u kodu kako se to resava.

Code:
 
    PORTB = 255  ' ili portb = %11111111 ' svi bitovi porta B bice jedinice
    PORTC = 255  ' ili portc = %11111111 ' svi bitovi porta C bice jedinice
    PORTD = 255  ' ili portd = %11111111 ' svi bitovi porta D bice jedinice
TRISA=$FF  'Svi portovi A su ulazni 
TRISB=$00  'Svi portovi B su izlazni ' ovog momenta na portB idu sve jedinice
TRISC=$00  'Svi portovi C su izlazni ' isto
TRISD=$00  'Svi portovi D su izlazni  'isto
TRISE=$FF  'Svi portovi E su ulazni


[ electron2008 @ 07.10.2012. 13:35 ] @
PortA je ulazni, na njega su vezani optokapleri, portE takodje ulazni na njega su tasteri, portB i portC su izlazni i na njih su optokapleri i ULN 2803, sa relejima 16kom na portD je displej i dva pina su ostavljena ka se iskoriste ako zatreba
[ foxhunter1 @ 07.10.2012. 14:06 ] @
Citat:
electron2008: PortA je ulazni, na njega su vezani optokapleri, portE takodje ulazni na njega su tasteri, portB i portC su izlazni i na njih su optokapleri i ULN 2803, sa relejima 16kom na portD je displej i dva pina su ostavljena ka se iskoriste ako zatreba


Ma to je OK. Ja sam samo pokazao (pokusao?) kako da se stvari drze pod kontrolom. Nisam siguran da si shvatio,
pa cu probati na drugi nacin.
Na samom pocetku definisati port kao ulazni (odgovarajuci TRISovi = jedinici). Jeste on po difoltu ulazni (tako pise,
al' i na tarabi pise ono...). Sa PORT = xxxxxxxxx postaviti odgovarajuca stanja na izlazima. Ovo je jos uvek na internom
nivou, zato sto TRISovi nisu odgovarajuci. Kada smo to uradili, TRISove postavimo bas onako kako nam to treba -
et voila . Bitan je redosled operacija:
1. sa TRISx portove postaviti kao ulazne (bez obzira sto nam trebaju kao izlazni)
2. sa PORTx = xxxxx postaviti zeljena stanja na izlazima (ovde se jos uvek nista ne dogadja na izlazima)
3. sada sa TRISx = xxxxxxxxxxx postaviti sta ce stvarno biti ulazi, a sta izlazi. Kod onih koji su deklarisani kao izlazi bice preneto stanje
iz tacke 2, kod onih koji su sada deklarisani kao ulazi - nema sta da se prenese, bice ulazi.
[ electron2008 @ 08.10.2012. 20:12 ] @
Kada je logicka jedinica releji su otpusteni tj bez napona, a kada je nula releji su pod naponom, dali to ima neke veze?
Kad resetujem pic na lcd displeju mi bude ispisan samo 1 red, sve radi ok ali nema 2-og reda, kad skinem s napona i upalim sve radi ok , znaci samo kad se resetuje?
Koliko mogu biti duzine kablovi, najduzi izmedju pica i lcd-a?
[ rsinisa @ 09.10.2012. 07:37 ] @
Citat:
electron2008: Kada je logicka jedinica releji su otpusteni tj bez napona, a kada je nula releji su pod naponom, dali to ima neke veze?

Pa što ga tako poveza? Uvek se gleda da se poveže tako da log.1 uključuje rele.
Sad pogledah šemu koju si dao i ukapirah gde je problem - pogrešno si povezao optokaplere; ti si kolektore NPN tranzistora povezao na zajednički plus, a emitere na pull-down otpore. Trebalo je da uradis suprotno, da sve emitere vežeš na masu, a koletore na pull-up otpornike.

Pozdrav.
Sinisha
[ ZAS011 @ 09.10.2012. 07:46 ] @
Za rešavanje vidljivosti drugog reda posle reseta, trebalo bi da na početku programa imaš jednu kratku pauzu radi inicijalizacije LCD-a. Takođe, mora malko da rearanžiraš sam početak.

Code:
DEFINE OSC 8                '8MHz << NOTICE UPPERCASE ON DEFINE

'END of timer/oscillator defines

OSCCON = %01110001          'Int CLK 8MHz
ANSEL = %00000000           'All digital
ANSELH = %00000000
OPTION_REG.7 = 1            'Weak pull-ups enabled

  
DEFINE LCD_DREG PORTD                   ' LCD se nalazi na portu D
DEFINE LCD_DBIT 4                       ' Data bits D4..D7
DEFINE LCD_RSREG PORTD                  ' RS na PORTD
DEFINE LCD_RSBIT 1                      ' RS na D1 
DEFINE LCD_EREG PORTD                   ' E na PORTD
DEFINE LCD_EBIT 0                       ' E na D0
DEFINE LCD_BITS 4                       ' LCD 4 bit mode
DEFINE LCD_LINES 2                      ' 2 linije LCD display

DEFINE BUTTON_PAUSE 100




'--------------------ULAZI--------------------------------------

symbol AU=PORTE.0   'Taster automatski
symbol RU=PORTE.1   'Taster rucno
symbol ST=PORTE.2   'Taster stop
symbol TP=PORTA.0  'Temperatura1
symbol TS=PORTA.1  'Temperatura2
symbol SNS=PORTA.2 'Sonda nivoa1
Symbol SNI=PORTA.3 'Sonda nivoa2
symbol SNK=PORTA.4 'Sonda nivoa3
symbol SV=PORTA.5  'Sonda vlage
symbol SNP=PORTA.6 'Sonda nivoa4
symbol TR=PORTA.7  'Trip
'-------------------IZLAZI-------------------------------------
symbol TV=PORTB.7   'Transportni ventilator
symbol I=PORTB.6    'Izvlakac
SYMBOL MS=PORTB.5   'Mesac 
symbol MII=PORTB.4  'Mesac isparivaca sa izvlakacem
symbol VP=PORTB.3   'Ventilator1
symbol VGS=PORTB.2  'Ventilator grejanja1
symbol VGI=PORTB.1  'Ventilator grejanja2
symbol DP=PORTB.0   'Dozator peci
symbol DK=PORTC.7   'Doziranje kosa
symbol DS=PORTC.6   'Doziranje ...
symbol AS=PORTC.5    'Aspiracija
symbol RR=PORTC.4    'Relej rucno (Lice mesta)


'*****************************************************************************  

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'! Inicijalizacija portova
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

TRISA=$FF  'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
TRISC=$00  'Svi portovi C su izlazni
TRISD=$00  'Svi portovi D su izlazni
TRISE=$FF  'Svi portovi E su ulazni 

PORTB = 255  ' ili portb = %11111111 ' svi bitovi porta B bice jedinice
PORTC = 255  ' ili portc = %11111111 ' svi bitovi porta C bice jedinice
PORTD = 255  ' ili portd = %11111111 ' svi bitovi porta D bice jedinice

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'! Kraj Inicijalizacije portova
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Pause  200      ' vreme dovoljno da se LCD inicijalizuje

pocetak:
TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=1   
Lcdout $fe, 1      ' Clear screen
   Pause 500      ' Wait .5 second

   Lcdout           "  Welcome screen1 "    
   Lcdout $fe, $c0, "  verzija "    
   Pause 2000      ' Wait 2 second
   
Lcdout $fe, 1      ' Clear screen
Pause 500      ' Wait .5 second

Lcdout          "     Welcome screen2  "      
LCDOUT $FE,$C0, "  v1.0 datum "
Pause 2000      ' Wait 2 second
Lcdout $fe, 1      ' Clear screen  (izbrisi lcd)




'----------------Blokada------------------------------------------
Blokada:
Lcdout $fe, 1      ' Clear screen
Pause 500
goto Blokada1
'-----------------------------------------------------------------
Blokada1:

if AU=0 then automatski
if ru=0 then Rucno

LCDOUT $FE,2,   "     Stop     "
LCDOUT $FE,$C0, "  Zaustavljeno  "
 

TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=1
goto Blokada1

Rucno:

 LCDOUT $FE,2,   "      Rad       "
 LCDOUT $FE,$C0, "     RUCNO      " 


TV=1:I=1:MS=1:MII=1:VP=1:VGS=1:VGI=1:DP=1:DK=1:DS=1:AS=1:RR=0
if st=0 then Blokada
if tr=0 then Trip


goto rucno

'---------------AUTOMATSKI-------------------------------------------

Automatski:

LCDOUT $FE,2,   "   AUTOMATSKI   "
LCDOUT $FE,$C0, "      RAD       "
.
.
.
.
.
[ electron2008 @ 09.10.2012. 12:23 ] @
kako resiti smetnje od kontaktora, spojio sam na releje dva kontaktora za probu, ponekad mi displ. pobrljavi prilikom rada, mikrokontoler nastavi da radi normalno, samo na displ. ponekad neke crtice ili stagod vec ispise...? Dali bi resilo da za napajanje mikrokontrolera iskoristim jednu fazu, a za komandni napon kontaktora drugu, kontaktore bi stavio u drugi ormar?
[ rsinisa @ 09.10.2012. 12:36 ] @
To je već par puta razmatrano na ES-u, recimo ovde:
http://www.elitesecurity.org/p1142488

Pozdrav.
Sinisha
[ ZAS011 @ 09.10.2012. 17:44 ] @

Očekivao sam ovakav rasplet događaja.
Prvo pamuško (PLC)
Zaštita od smetnji uopšte nije naivna stvar. Osnovna premisa stabilnosti bilo kog mikrokontrolerskog uređaja u industrijskom okruženju podrazumeva nezavisno i veoma dobro izfiltrirano napajanje mikrokontrolera, razdvajanje ulaza i izlaza opto kaplerima, rasprezanje na svim mogućim i nemogućim mestima - na svakom čipu obavezno 100n + 1u do 10u i sve ostalo što je u temi koju je Siniša pomenuo. Kada se sve izpoštuje, mogu i gromovi da tuku i da se mikrokontroler ne zaglupi.
[ electron2008 @ 09.10.2012. 20:07 ] @
Nadam se da ce se i ovo razresiti oko napajanja i smetnji...
[ rsinisa @ 09.10.2012. 22:31 ] @
Jedini način da ovo razrešiš je da napraviš novu pločicu poštujući sve savete koji su ti dati, imaćeš najmanje glavobolja. I ne razumem zašto si stavio kaplere izmedju PIC-a i ULN-a, logičnije je da idu posle ULN-a.

Pozdrav.
Sinisha
[ goran_68 @ 10.10.2012. 07:17 ] @
Siniša,
Ukoliko kaplere postavi posle ULN onda mu ULN i ne treba!
[ rsinisa @ 10.10.2012. 10:14 ] @
Da, u pravu si, moja greška.

Pozdrav.
Sinisha
[ electron2008 @ 17.10.2012. 08:19 ] @
Evo da napisem gde sam stigao i na koje probleme nailazim tokom realizacije uredjaja. Sve sam smestio u metalni ormar i radi bez problema, dok ne spojim kontaktore.
:( Kad njih spojim ponekad dodje do ispisivanja gluposti na lcd-u i to sam ustanovio, samo prilikom prekidanja kola tj prilikom otpustanja kontaktora usled varnicenja na relejima. Probao sam sa raznoraznim napajanjima EMI filterima...isto. Mikrokontroler ima jedno, a releji i uln drugo napajanje. Takodje uC se nije ni jednog trenutka zablesavio. Izvadio sam releje iz ormara i stavio 2-3 metra dalje tik uz same kontaktore i smetnje su nestale. Naravno, jos uvek kontaktori ne prekidaju nikakvo opterecenje... Evo i jedna slika sa testa dok jos nisam popakovao kablove
[ foxhunter1 @ 17.10.2012. 09:37 ] @
Jesi li probao RC clan paralelno sa spulnom kontaktora? R = 47-100 Oma, na red sa njim kondenzator 33 - 47nF/275V AC (tzv X2 klasa) i tu kombinaciju vezes paralelno sa spulnom kontaktora. Jednom sam, slucaj kao sto je tvoj, izlecio stavljanjem VDR (varistora) za 275 V AC, takodje paralelno spulni (nasao se tog momenta u torbi ).
[ rsinisa @ 17.10.2012. 09:39 ] @
Kao prvo bi svakako bilo poželjno da staviš RC član paraleleno svakoj špulni kontaktora, bez obzira da li imaš probleme ili ne jer tako smanjuješ ili sprečavaš "prljanje" napona. Za detalje pogledaj ovde
http://www.ceejay.com/aler26.html
deo sa naslovom "Contact protection", s tim da varijanta sa diodom otpada jer špulnu pobudjuješ sa AC.


Što se tiče LCD-a, bilo bi dobro da D0 do D3 spojiš na masu jer koristiš 4-bitni mod, mada dok se na E ne pojavi impuls, ne bi smeo da se promeni prikaz na displeju, što bi značilo da ti iz nekog razloga dobiješ impuls na Enable pinu, iako ga kontroler drži na log. 0 (nadam se da ne postavljaš taj pin u stanje visoke impedanse). To se, verovatno, dešava jer ti je kabl za vezu MCU-LCD malo duži ili prolazi pored nekog voda u kome se indukuju impulsi od smetnji. Probaj da oklopiš taj kabl npr. sa ALU folijom i da jedan kraj povežeš na masu.
Imaš i softversko rešenje, a to je da povremeno, u odgovarajućem momentu, postaviš sistemsku promenljivu FLAGS na 0:

Code:
FLAGS=0


Pozdrav.
Sinisha

P.S. Eto, lovac-na-lisice bio malo brži, ali vidiš da daje iste savete. Probaj pa javi.
[ electron2008 @ 17.10.2012. 09:53 ] @
A postavljanje diode, to za jednosmerne napone, kao na slici? Gde tacno u kodu da postavim
Code:
FLAGS=0


[ rsinisa @ 17.10.2012. 09:57 ] @
Nisam odmah obratio pažnju na tvoju fotografiju, sad pogledah i mislim da sam u pravu za trakasti kabl do LCD-a jer jeste malo duži i velike su šanse da se u njemu indukuje neki napon.
Dalje, što se tiče ormana, loša ti je organizacija komponenti i ožičenja. Treba jasno odvojiti niskonaponski deo od visokonaponskog i ne treba voditi žice od 220V pored elektronike. Npr. gore staviš elektroniku, dole energeski deo i špulne, 220V uvodiš u orman odozdo, ispravljač takodje dole, a niskonaposke signale vodiš u gornjem delu i ne preklapaš ih nikad. Ili ako baš moraš, onda koristiš oklopljeni kabl. E sad, možda i grešim jer se ne vidi šta kuda ide po kanalicama, ali vidim kanalice i sa gornje strane i pored elektronike pa verujem da si malo "mešao" signale.
Takodje i pregarada od lima izmedju elektronike i energetike ne bi bila na odmet.

Pozdrav.
Sinisha
[ rsinisa @ 17.10.2012. 09:58 ] @
Citat:
electron2008:A postavljanje diode, to za jednosmerne napone, kao na slici?


Da, naravno.

Pozdrav.
Sinisha

[ electron2008 @ 17.10.2012. 10:00 ] @
Gde tacno u kodu da postavim
Code:
FLAGS=0
D0 do D3 su spojeni na masu, probacu sa varistorima, imam par komada od vesmasina, a u medjuvremenu sam vec isprebacivao komponente
[ rsinisa @ 17.10.2012. 10:05 ] @
Prvo probaj da rešiš problem skraćivanjem kabla, ako je moguće, ili njegovim pomeranjem i fiksiranjem tako da ne prolazi pored vodova sa 220V, ili oklapanjem.
A FLAGS stavi tamo gde je tebi zgodno, zavisi od samog programa. Recimo, pre nekog ispisa, ili pre ispitivanja nekih uslova koji mogu da odvedu program na ispis ili sl.

Pozdrav.
Sinisha
[ electron2008 @ 17.10.2012. 16:52 ] @
Uradjena mala reorganizacija ormara, desava se isto, ali manje








Na kraju stavljen RC clan PMR210MB533, 0,033uF+100E

Link

i smetnje su nestale
[ rsinisa @ 17.10.2012. 18:02 ] @
Odlično. Eto, mislim da si dosta naučio iz ovoga, jer jedno je kad uredjaj radi na stolu u tzv. laboratorijskim uslovima, a drugo kada radi u realnim uslovima koji su po pravilu surovi za digitalnu elektroniku.

Pozdrav.
Sinisha
[ foxhunter1 @ 17.10.2012. 18:20 ] @
Citat:
electron2008:
Na kraju stavljen RC clan PMR210MB533, 0,033uF+100E
i smetnje su nestale

Stavljen ili stavljeni? Pretpostavljam da si stavio na svaku spulnu? Eh, kad porastem, a ima vremena za mene, tek sam u prvoj polovini seste decenije, zaradicu i ja za DSO (Digital Storage O'scope), pa onda necemo vise ovako da ga nagadjamo , no cemo zmiju pravo u glavu :). Hebi ga, analognim osciloskopom tesko moze da se uhvati po kojoj zici te smetnje ulecu. DSO je vec druga prica, k'o sto ribololovci zabace pa cekaju, tako i on :). Na srecu, u mojem slucaju, nikada se nije zaglupio glavni uC, vec samo u displeju - a on se ne pita nista :).
[ electron2008 @ 17.10.2012. 20:46 ] @
Stavljen RC-clan, (imao sam 3) posto sam ga skinuo sa nekog kontrolera rashodovane stare masine i stavio na 3 kontaktora, za ostale cu morati napraviti...