avatar_elektro77

Kesmeden çıkmıyor.

Başlatan elektro77, 16 Aralık 2016, 00:25:11

Hattuşa

çalışmayan proton kodunuzu son hali ile ekleyebilirmisiniz?

ta3usl

Merhaba,

forumda proton basic kesme ile ilgili çok güzel bir açıklama vardı. Orada diyordu ki , kesme basla rutininden önce olduğunda stabil çalışıyor diye. Ben de genelde kesmeleri basla rutini üzerine koyuyorum.

On_Hardware_Interrupt GoTo

context save  ve context restore  ile kullanıyorum genelde.  Kesme olayını aşağıda verdiğim gibi revize edip dener misin ?



On_Hardware_Interrupt GoTo INT

goto basla

INT:

context save

Toggle LED
    GIE=0
    HSerIn [Wait("$UM"),BILGI]
    TEMP=RCREG
    GIE=1

context restore

BASLA:
If BILGI=1   Then  LOGIC=1
If BILGI=101 Then  LOGIC=0             

GoTo BASLA

end

elektro77

Revize ettim ama çalışmadı.Bu kez  kesmeye giriyor ordan çıkmıyor. Kodlar aşağıda
Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
Declare HSER_TXSTA 24h ' Enable transmit, BRGH = 1
Declare HSER_SPBRG 51  ' 9600 Baud @ 8MHz, 0,16%
Declare HSER_CLROERR 1 ' Clear overflow automatically
'-------------------------------------------------------------------------------
Symbol LED   = PORTD.1
Symbol SES1  = PORTA.2
Symbol LOGIC = PORTA.3
LOGIC=0
Dim TEMP   As Byte
Dim BILGI  As Byte
Symbol GIE  =INTCON.7   'genel interruptlar  aciyor
Symbol PEIE =INTCON.6   'Cevresel kesmeleri  aciyor
Symbol INTE =INTCON.4   'RB0 Kesmesini aciyor
Symbol INTF =INTCON.1   'RB0 kesme bayragi
Symbol RCIE =PIE1.5     'USART kesmesini aciyor
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
GIE=0     'Butun kesmeler devrede
INTE=1    'RB0 kesmesi devrede       
RCIE=1    'USART kesmesi devrede
PEIE=1    'Cevresel kesmeler devrede
GIE=1     'Butun kesmeler devrede

'Symbol GIE  =INTCON.7   'genel interruptları açıyor
'Symbol PEIE =INTCON.6   'peripheralinterruptları açıyor
'Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
'Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
'RCIE=1
'PEIE=1
'GIE=1
'On Interrupt GoTo INT
On_Hardware_Interrupt GoTo INT

GoTo BASLA

INT:
Context Save
Toggle LED
    GIE=0
    HSerIn [Wait("$UM"),BILGI]
    TEMP=RCREG
    GIE=1
Context Restore

BASLA:
If BILGI=1   Then  LOGIC=1
If BILGI=101 Then  LOGIC=0             

GoTo BASLA
'Disable
'INT:
'Toggle LED
'    GIE=0
'    HSerIn 100,devam, [Wait("$UM"),BILGI]
'devam:   
'TEMP=RCREG
'    GIE=1
'    Resume
'    Enable
End

'Include "arialk10.txt"
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

fakat üstteki yazılımda hserin altına devam etiketi koyup temp i rcreg e eşitlersem kesme sorunsuz çalışıyor. Ama şartları yine yerine getirmiyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ta3usl

Hserin 'i timeout ile kullan diyecektim ki , sen yazmışsın.

o zaman senin sorun , daha önce Pro-tr 'nin de dediği gibi usart haberleşme kısmında. simülasyon ve tüm program kodlarını ekler misin? Biz de bi test edip bakalım. Belki hiç tahmin edemeyeceğimiz bir şeydendir.

Hattuşa

#20
Device = 16F877A
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, PWRTE_OFF, WDT_OFF, HS_OSC, BOREN_OFF, CP_OFF, WDT_ON, WRT_OFF
Xtal = 8
TRISA=%00000001
TRISB=0
TRISC=%10000000
TRISD=%00000000
TRISE=0
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
CMCON=7
ADCON1 = 7
INTCON=%11000000
OPTION_REG.7=1
'---------------------------------------------------------------------------
Declare All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
Declare LCD_DTPort = PORTB                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
Declare LCD_RSPin = PORTC.5                'GLCD RS PİNİ PORTC.5 BAĞLI
Declare LCD_ENPin = PORTC.1                'GLCD ENABLE PİNİ PORTC.1 BAĞLI
Declare LCD_RWPin = PORTC.4                'GLCD RW PİNİ PORTC.4 BAĞLI
Declare LCD_CS1Pin = PORTC.2               'GLCD CS1 PİNİ PORTC.2 BAĞLI
Declare LCD_CS2Pin = PORTC.3               'GLCD CS2 PİNİ PORTC.3 BAĞLI
Declare LCD_Type = Graphic
Declare Internal_Font =On               
Declare Font_Addr =0
Declare GLCD_CS_Invert =OFF
'Declare GLCD_EXTERNAL_PRINT =PPRINT
Declare GLCD_Strobe_Delay 100
Cls
DelayMS  300
Include "font.inc"
Declare Hserial_Baud  =9600      ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000  ' Bit7 SPEN: Serial Port Enable bit
Declare Hserial_TXSTA = %00100100
Declare Hserial_Clear =On         ' Optionally clear the buffer before receiving
Declare Hserial_SPBRG =51       
Declare FSR_CONTEXT_SAVE =On




'Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
'Declare HSER_TXSTA 24h ' Enable transmit, BRGH = 1
'Declare HSER_SPBRG 51  ' 9600 Baud @ 8MHz, 0,16%
'Declare HSER_CLROERR 1 ' Clear overflow automatically
'-------------------------------------------------------------------------------
Symbol LED   = PORTD.1
Symbol SES1  = PORTA.2
Symbol LOGIC = PORTA.3
Output LOGIC
LOGIC=0
Dim TEMP   As Byte
Dim BILGI  As Byte
Symbol GIE  =INTCON.7   'genel interruptlar  aciyor
Symbol PEIE =INTCON.6   'Cevresel kesmeleri  aciyor
Symbol INTE =INTCON.4   'RB0 Kesmesini aciyor
Symbol INTF =INTCON.1   'RB0 kesme bayragi
Symbol RCIE =PIE1.5     'USART kesmesini aciyor
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
GIE=0     'Butun kesmeler devrede
INTE=1    'RB0 kesmesi devrede       
RCIE=1    'USART kesmesi devrede
PEIE=1    'Cevresel kesmeler devrede
GIE=1     'Butun kesmeler devrede
On_Hardware_Interrupt GoTo INT

GoTo BASLA

INT:
Context Save
Toggle LED
'    GIE=0
    HSerIn 50,DeVaM,[Wait("$UM"),BILGI]
    DeVaM:
    TEMP=RCREG
'    GIE=1
Context Restore

BASLA:
If BILGI=1   Then  LOGIC=1
If BILGI=101 Then  LOGIC=0 
Print At 1,1,Dec BILGI,"   "
DelayMS 100           

GoTo BASLA
End



elektro usta alıcı 877a bu şekilde derleyip deneyebilirmisiniz? zira ilk mesajınızda vermiş olduğunuz isis simülasyon devresinde çalışıyor.
YALNIZ;
LOGIC çıkışınız porta.3 olarak belirlemişsiniz ancak orada bişey bağlı değil onun 1 ve 0 olduğunu göremezsiniz.porta.3 e bir led bağlayabilirmisiniz?
benim son verdiğim kodu derlerken ekran configrasyonunu takrar gözden geçirin ancak interrupt ve usart ayarları ile oynamayın.
kodu deneyince olup olmadığını bildirin ki bizimde aklımızdan çıksın

elektro77

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

Tam üyelik mesajımın bu şekilde denk gelmesi de bir tesadüf.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Hattuşa

Alıntı yapılan: elektro77 - 16 Aralık 2016, 18:29:53
LANET OLSUN PROTONA

son verdiğim şekliyle çalışmadı mı? oysa sizin isis şemanızda çalışıyordu,çok ilginç...

malum tüm türk erkeklerinin ortak paydası askerlik anılarıdır. bende askerlik zamanımdan bir hikayemi anlatacam:
askerliğimi normal piyade olarak yaptım. atış talimlerine çok giderdik ve keskin nişancı olduğum için. başımızda bir üst teğmen vardı, atışta atıp vuramayınca bize çok kızardı. bizde onun kızmaması için komutanım tüfeğin nişangahı bozuldu derdik ama genede adamın hışmından kurtulamazdık. bize derdi ki;
"biliyorum evladım bu tüfeğin gerisi bozuk"
lafım size değil elektro77 usta 10 yıldır bu derleyici ile çalışırım. bir master 21 slaveli devre kurdum sorunsuz çalışıyor. insan bazen bir konuya takılıp kalıyor onu aşmak zaman alıyor. bence siz basit bir hata yapıyorsunuzdur da farkına varamadınız. bu iş hani kulağının arkasına taktığın kurşun kalemi aramak gibi bişey, arar-tararsın bir türlü lanet kalem bulunmaz. olmadık bir anda da pat diye önüne düşüverir.

saygılarımla...

elektro77

Arkadaşlar. PBP ile proton kesinlikle haberleşemiyor. Yani alıcıyı proton vericiyi de pbp yapayım demeyin sakın. Isıs te iki yazılım dili aynı anda çalışıp haberleşemiyor. Bunu vericiyi de protonla yazıp denedikten sonra tespit ettim. Ekte gönderdiğim kodlar ve simülasyon kısmen çalışıyor. Bir şekilde çalıştı ama sıkıntılı çalışıyor. Sürekli kesmeye gidip geliyor. şartları da yerine getiriyor. Anlamış değilim. 
          Bu kodlar bütün projemin bir en küçük özet hali. Geriye kalan sadece "print at" komutlarını ihtiyacım doğrultusunda revize edip kopyala yapıştır yapıp yazılımı bitirmek.
Neden kesmede dönüp duruyor bir bakar mısınız? Sigorta ayarlarından olabilir mi? Lütfen. Artık gına geldi. Daha gerçekte denenecek. of! of!....
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Hattuşa

#25
Alıntı yapılan: elektro77 - 16 Aralık 2016, 18:58:56
Arkadaşlar. PBP ile proton kesinlikle haberleşemiyor. Yani alıcıyı proton vericiyi de pbp yapayım demeyin sakın. Isıs te iki yazılım dili aynı anda çalışıp haberleşemiyor. Bunu vericiyi de protonla yazıp denedikten sonra tespit ettim. Ekte gönderdiğim kodlar ve simülasyon kısmen çalışıyor. Bir şekilde çalıştı ama sıkıntılı çalışıyor. Sürekli kesmeye gidip geliyor. şartları da yerine getiriyor. Anlamış değilim. 
          Bu kodlar bütün projemin bir en küçük özet hali. Geriye kalan sadece "print at" komutlarını ihtiyacım doğrultusunda revize edip kopyala yapıştır yapıp yazılımı bitirmek.
Neden kesmede dönüp duruyor bir bakar mısınız? Sigorta ayarlarından olabilir mi? Lütfen. Artık gına geldi. Daha gerçekte denenecek. of! of!....


usta;
size kesinlikle katılmıyorum. kodun hangi dilde yazıldığının bir önemi yok. bakın size yazdıklarımı okumyor veya okuyor dinlemiyorsunuz. 2 mesaj öncesinde;


Alıntı yapılan: pro-TR - 16 Aralık 2016, 18:17:29
Device = 16F877A
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, PWRTE_OFF, WDT_OFF, HS_OSC, BOREN_OFF, CP_OFF, WDT_ON, WRT_OFF
Xtal = 8
TRISA=%00000001
TRISB=0
TRISC=%10000000
TRISD=%00000000
TRISE=0
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
CMCON=7
ADCON1 = 7
INTCON=%11000000
OPTION_REG.7=1
'---------------------------------------------------------------------------
Declare All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
Declare LCD_DTPort = PORTB                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
Declare LCD_RSPin = PORTC.5                'GLCD RS PİNİ PORTC.5 BAĞLI
Declare LCD_ENPin = PORTC.1                'GLCD ENABLE PİNİ PORTC.1 BAĞLI
Declare LCD_RWPin = PORTC.4                'GLCD RW PİNİ PORTC.4 BAĞLI
Declare LCD_CS1Pin = PORTC.2               'GLCD CS1 PİNİ PORTC.2 BAĞLI
Declare LCD_CS2Pin = PORTC.3               'GLCD CS2 PİNİ PORTC.3 BAĞLI
Declare LCD_Type = Graphic
Declare Internal_Font =On               
Declare Font_Addr =0
Declare GLCD_CS_Invert =OFF
'Declare GLCD_EXTERNAL_PRINT =PPRINT
Declare GLCD_Strobe_Delay 100
Cls
DelayMS  300
Include "font.inc"
Declare Hserial_Baud  =9600      ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000  ' Bit7 SPEN: Serial Port Enable bit
Declare Hserial_TXSTA = %00100100
Declare Hserial_Clear =On         ' Optionally clear the buffer before receiving
Declare Hserial_SPBRG =51       
Declare FSR_CONTEXT_SAVE =On




'Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
'Declare HSER_TXSTA 24h ' Enable transmit, BRGH = 1
'Declare HSER_SPBRG 51  ' 9600 Baud @ 8MHz, 0,16%
'Declare HSER_CLROERR 1 ' Clear overflow automatically
'-------------------------------------------------------------------------------
Symbol LED   = PORTD.1
Symbol SES1  = PORTA.2
Symbol LOGIC = PORTA.3
Output LOGIC
LOGIC=0
Dim TEMP   As Byte
Dim BILGI  As Byte
Symbol GIE  =INTCON.7   'genel interruptlar  aciyor
Symbol PEIE =INTCON.6   'Cevresel kesmeleri  aciyor
Symbol INTE =INTCON.4   'RB0 Kesmesini aciyor
Symbol INTF =INTCON.1   'RB0 kesme bayragi
Symbol RCIE =PIE1.5     'USART kesmesini aciyor
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
GIE=0     'Butun kesmeler devrede
INTE=1    'RB0 kesmesi devrede       
RCIE=1    'USART kesmesi devrede
PEIE=1    'Cevresel kesmeler devrede
GIE=1     'Butun kesmeler devrede
On_Hardware_Interrupt GoTo INT

GoTo BASLA

INT:
Context Save
Toggle LED
'    GIE=0
    HSerIn 50,DeVaM,[Wait("$UM"),BILGI]
    DeVaM:
    TEMP=RCREG
'    GIE=1
Context Restore

BASLA:
If BILGI=1   Then  LOGIC=1
If BILGI=101 Then  LOGIC=0 
Print At 1,1,Dec BILGI,"   "
DelayMS 100           

GoTo BASLA
End



elektro usta alıcı 877a bu şekilde derleyip deneyebilirmisiniz? zira ilk mesajınızda vermiş olduğunuz isis simülasyon devresinde çalışıyor.
YALNIZ;
LOGIC çıkışınız porta.3 olarak belirlemişsiniz ancak orada bişey bağlı değil onun 1 ve 0 olduğunu göremezsiniz.porta.3 e bir led bağlayabilirmisiniz?
benim son verdiğim kodu derlerken ekran configrasyonunu takrar gözden geçirin ancak interrupt ve usart ayarları ile oynamayın.
kodu deneyince olup olmadığını bildirin ki bizimde aklımızdan çıksın

sizin ilk mesajda verdiğiniz isis şemasında sizin PBP da yazılmış vericinin datalarını yukarıdaki protonla yazılmış alıcıda çalıştırdığımı belirttim. alıcıda yapılan hataları söyledim. şimdi de vericide yapmış olduğunuz hataları farkettim. (vericinin hangi dilde yazıldığına bakmak için açtım)

 IF tus1=1 THEN  
          VERICI=1
          GOSUB GONDER
          WHILE TUS1=1:WEND
          PAUSE 100
        ENDIF


yukarıda yazmış olduğunu tuş1 basma işleminiz hatalı, zira siz o butona bastığınız sürece 3'er li grup halinde usarttan bilgi yolluyorsunuz. düşünün gönder etiketi 10 ms süre ile kendisini icra etse ve siz parmağınızı 1 sn boyunca butona basmış olsanız 1000/10 = 100 yani 100 kez usarttan bilgi yollamış oluyorsunuz ayrıca gonder rutininde de 3 kez datayı gönderiyorsunuz 100x3 =300 kez aynı datayı yolladınız. ki buna gerek varmı? haa bu şekliyle çalışmaz demiyorum çalışır elbette ama sağlıklı olmaz.
burda ki butona basma rutini aşağıdaki şekliyle olsa daha sağlıklı olurdu.

 IF tus1=1 THEN  
         
          WHILE TUS1=1:WEND
VERICI=1
          GOSUB GONDER

          PAUSE 100
        ENDIF


elektro77

Kusura balmayın pro-tr
İlkmesajımda ne gönderdimse yanlış olmalı. Çünkü porta.3 e lojik prop bağlıydı. Birazdan tekrar işyerime geçince hemen bakacağım. Zira evde pc yok
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Hattuşa

Alıntı yapılan: elektro77 - 16 Aralık 2016, 19:55:38
Kusura balmayın pro-tr
İlkmesajımda ne gönderdimse yanlış olmalı. Çünkü porta.3 e lojik prop bağlıydı. Birazdan tekrar işyerime geçince hemen bakacağım. Zira evde pc yok


lojik prob porta.1 de bağlı porta.3 hiçbir bağlantı yok, şu benim kurşun kalem hikayesine döndü, belkide yazılan bir çok kod çalışıyordu ama yanlış pinde lojik bağlı olduğu için çalıştığını görmedin. yani benim düşüncem bu kadar kod parçalmaya bu usartın çalışması lazımdı. zira çok zor bir konu değil.
kusurluk birşey yok. hepimizin derdi üzüm yemek bağcı dövmekle işimiz olmaz....

elektro77

sayın pro tr
inanın dediğiniz herşeyi onlarca kez denedim. Porta.3 ü de porta.1 ide herşeyi.
Artık proton versiyonumdan olduğunu düşünüyorum.
Ben flash diskte çelışan versiyonunu kullanıyorum.
Sizde başka bir versiyonu varsa e mail olarak atabilir misiniz. Lütfen.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#29
Sayın arkadaşalar
ekte gönderdiğim simülasyon sizin proteusunuzda çalışacak mı lütfen deneyip bilgi verir misiniz? Lütfen Acil.
amacım sorunumun benim proton ve ısıs versiyonlarından mı kaynaklandığını anlayacağım
Bende portd.1 deki led toggle oluyor
fakat porta.1 deki logıc prob konum değiştirmiyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal