mikroişlemci donanım ve programlarında başlıca sorunlar resetlerdir bu resetlerden korunmanın bazı yolları var
en önce donanımınızı iyi tasarlamanız gerekmekte bu konu epey geniş bir konu ama kısaca
PCB kartınızı bölüm bölüm yapın güç katı digital kontrol katı ve besleme katı bunlar birbirinden izoleli veya uzak olsun
bir çok denemelerin sonunca MCRL pinine 4k7 direnç ve bir ters diyot attığınızda problem kalmıyor eğer kondansatör köymak istiyorsanız kesinlikler bir iki direnç seri bağlayınız
sizler ile paylaşmak istediğim konu, resetleri donanım olarak engellemek zordur zaten parazitleri yok edemezsiniz sadece biraz düşürebilirsiniz
yazılımda bazı tedbirlerden bahsedeceğim sizelere; işlemcilerde reset registerleri var bu bölümlerden yola çıkarak reset gelse bile kaldığınız yerden devam edebilirsiniz.
yazılımda eğer her hangi bir sebebten dolayı reset oluşmuş ise bunu yazılımın ilk başında kontrol edip yazılımın kaldığı yerden devam ettirebilirsiniz ayrıca reset durumlarında iç registerlede bu değişiklik olmuyor yani eğer üzerine çalıştığınız sayı 255 ise aynen öyle kalıyor ve pin durumlarındada bir değişiklik olmuyor,
bu mantıktan yola çıkarak reset gelse bile yazılım aynen devam edebilir çalışmasına çünkü bu işlemler çok hızlı oluyor
ayrıca bir hatırlatma Analog veya EEPROM işlemlerinizi yan int. içinde yapın yada int kapatın
kısa bir örnek
Device = 18F452
XTAL = 20
Dim hata As Byte
hata = RCON ' hata register
Config = %00100001100010 ' config ayarlanıyor
T1CON = 0
TRISA = %11111111 'gırısler 1
TRISB = %11101011 'cikislar 0
TRISC = %00001110
TRISD = %00110011
TRISE = %111
LCD_DTPIN = PORTC.4 ' LCD tanıtım
LCD_RSPIN = PORTD.3
LCD_ENPIN = PORTD.2
LCD_LINES = 4
LCD_INTERFACE = 4
LCD_TYPE = 0
Declare ADIN_RES = 10 ' 10-bit result required
Declare ADIN_TAD FRC ' RC OSC chosen
Declare ADIN_STIME 10 ' Allow 50us sample time
Symbol cikis = PORTD.1
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
If hata.1 = 1 Then ' resetlenme sonucu başladı
sayac = 0
else ' normal başlangıç çıkışlar kapatılıyor
sayac = 1
cikis = 0
cls
endif
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
main:
Program kısmı
goto main
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
en önce donanımınızı iyi tasarlamanız gerekmekte bu konu epey geniş bir konu ama kısaca
PCB kartınızı bölüm bölüm yapın güç katı digital kontrol katı ve besleme katı bunlar birbirinden izoleli veya uzak olsun
bir çok denemelerin sonunca MCRL pinine 4k7 direnç ve bir ters diyot attığınızda problem kalmıyor eğer kondansatör köymak istiyorsanız kesinlikler bir iki direnç seri bağlayınız
sizler ile paylaşmak istediğim konu, resetleri donanım olarak engellemek zordur zaten parazitleri yok edemezsiniz sadece biraz düşürebilirsiniz
yazılımda bazı tedbirlerden bahsedeceğim sizelere; işlemcilerde reset registerleri var bu bölümlerden yola çıkarak reset gelse bile kaldığınız yerden devam edebilirsiniz.
yazılımda eğer her hangi bir sebebten dolayı reset oluşmuş ise bunu yazılımın ilk başında kontrol edip yazılımın kaldığı yerden devam ettirebilirsiniz ayrıca reset durumlarında iç registerlede bu değişiklik olmuyor yani eğer üzerine çalıştığınız sayı 255 ise aynen öyle kalıyor ve pin durumlarındada bir değişiklik olmuyor,
bu mantıktan yola çıkarak reset gelse bile yazılım aynen devam edebilir çalışmasına çünkü bu işlemler çok hızlı oluyor
ayrıca bir hatırlatma Analog veya EEPROM işlemlerinizi yan int. içinde yapın yada int kapatın
kısa bir örnek
Device = 18F452
XTAL = 20
Dim hata As Byte
hata = RCON ' hata register
Config = %00100001100010 ' config ayarlanıyor
T1CON = 0
TRISA = %11111111 'gırısler 1
TRISB = %11101011 'cikislar 0
TRISC = %00001110
TRISD = %00110011
TRISE = %111
LCD_DTPIN = PORTC.4 ' LCD tanıtım
LCD_RSPIN = PORTD.3
LCD_ENPIN = PORTD.2
LCD_LINES = 4
LCD_INTERFACE = 4
LCD_TYPE = 0
Declare ADIN_RES = 10 ' 10-bit result required
Declare ADIN_TAD FRC ' RC OSC chosen
Declare ADIN_STIME 10 ' Allow 50us sample time
Symbol cikis = PORTD.1
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
If hata.1 = 1 Then ' resetlenme sonucu başladı
sayac = 0
else ' normal başlangıç çıkışlar kapatılıyor
sayac = 1
cikis = 0
cls
endif
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
main:
Program kısmı
goto main
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx