avatar_ete

16F628 - 16F628A işlemcisinin İncelenmesi

Başlatan ete, 28 Ağustos 2011, 20:45:21

truvali

#60
CMCON=%00001001
OPTIONREG.7=0
CM2:CM0=100
C1_Vin+>C1_Vin-




ete

#61
Hiç açıklama vermeyince bir terslik olduğunu görüyorum.
CMCON=%00001001 değerini verince otomatikman CM2:CM0=001 vermiş oluyorsun.
Ama sen ,100 verilecek diyorsun hangisi esas alınacak.?
Şimdi bize tek bir komparatör gerekiyor. Bakıyoruz tabloya "one independent komparatör" seçeneğinde CM2:CM0=101 değerini vermeliyiz. PortA.1 den bir giriş, portA.2 den de diğer giriş (ref girişi) yapılır. Sonucu cmcon registerinin 7 nolu biti olan C2 out bitinden öğrenirsin.
CMCON=%00000101 değerini verirsek, porta.0 ve porta.3 birleştirilip gnd ye bağlanır ise ve dedğim pinlerden giriş yapılır ise sonuca Cmcon.7 bitine bakarak alırız.
Bu bit=1 ise porta.2 girişi, porta.1 den büyüktür, bu  bit=0 ise porta.1 girişi porta.2 den büyüktür şeklindedeğerlendirme yapılacaktır.
Giriş yapılacak pinlerin Tris registerinden giriş yapılması ve sonuçta CMCON.7=0 ise şunu yap , CMCON.7=1 ise şunu yap şeklinde bir komut mantığı kullanılmalıdır. Hayal gücün geniş değil doğru şeyleri hayal ediyorsun.

Ete

truvali

Teşekkür ederim ETE hocam ve F.T kardeşim en kisa surede deneyip dönüs yapacağım

truvali

Hocam yaptım ama olmadı
@ DEVICE pic16F628A                                                   
@ DEVICE pic16F628A, WDT_OFF             
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT             
@ DEVICE pic16F628A, PROTECT_ON   
 
        TRISB=%11111111
        TRISA=%00000110
        PORTA=%00000110
        PORTB=0
        CMCON=%00000101       
 
        LED var  PORTA.7
BASLA: 
    IF CMCON.7= 1 THEN AC KAPA
AC KAPA:
          PAUSE 1000
          HIGH LED
          PAUSE 10000
          LOW LED
          PAUSE 10000
          HIGH LED
          PAUSE 10000
          LOW LED
          PAUSE 10000
          HIGH LED
          PAUSE 10000
          LOW LED
          PAUSE 1000
          GOTO BASLA

truvali

#64
porta 0 ve 3 gnd çektim porta1 boş bıraktım porta2 telsizden mandal yapınca 4 volt gerilim geliyor yani porta2 porta1 den büyük oluyor ama çalışmadı led a bağlı role var roleyede motor bağlı ben 4 volt gerilim gönderince motor 10dk çalışacak 10dk dinlenecek tekrar çalışacak 3 defa böyle çalışıp diğer komutu bekliyecek. yani bidaha mandala basarsam tekrar çalışacak...

F®T

ra0 ve ra3 gnd yapmana gerek yok.program zaten bu ayakları gnd ye bağlıyor.onları dijital giriş olarak kullanabilirsin.ayrıca ölçeceğin giriş 4 volt ise ra1 e bağlıyacaksın ve ra2 yede referans voltu vereceksin atıyorum 3.8 volt.ölçme girişin ra1 3.8 voltu geçince c2vout çıkış verecek
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Ne program bilgin nede elektronik bilgin bu işi yapmaya yeterli değil maalesef.
Önce işin donanım kısmına bakalım. Bir komparatör yani karşılaştırıcı yapıyorsun. İki ayrı girişten girilen voltajı karşılaştırman gerekiyor ve içlerinden büyük olanı tespit edeceksin. Ama girişin birisini boş bırakıyorsun boş bırakmak demek elektronikte float yani yüzen yada aklına estiği gibi davranan konumu yaratacağını bilmiyorsun anlaşılan. Elektronikte hiç bir şey boş bırakılmamalıdır, havadan nem kapar. Girişin birini boş bırakırsan diğer girişin sağlıklı değerlendirileceğini sanmıyorum.

İşin program kısmına gelince,
Basla deyip işe başlamışsın. Hemen ardından,
IF CMCON.7=1 then ackapa
Ackapa:
Şeklinde satırlar yazmışsın. Bakalım ne anlama geliyor. CMCON.7 biti 1 ise ackapa etiketine git demişsin. Peki ya o bit 1 değilse o zaman ne olacak ? Senin yazdıklarına bakınca bit 1 ise ackapa etiketine gidecek ama  sıfır ise yine gidecek çünki if satırından sonra zaten ackapa etiketi geliyor. Program satır takip eder. If şartı doğru ise if etiketinde belirlenmiş etikete dallanır program. Şart yanlış ise bir alt satıra geçer. İşte orada ackapa etiketi olduğuna göre program her halukarda ackapa etiketine gelecek demektir. Buda yanlış sonuçlar doğurur elbette. Programcılıkta daima bir şartın doğru olduğu ve olmadığı iki konum değerlendirilmelidir, Tek konumu değerlendirirseniz sonuç yanlış olur.

Ete

truvali

Hocam gerçekten nedeseniz haklisiniz boynum kıldan ince ben daha bir aydır bu iş icindeyim ama inatla bu işi öğreneceğim allahın izniyle  benim biraz daha sizin deslerinize bakmam gerek ben size ve F.T kardeşimize çok teşekkür ederim 1 hafta sonra görüşmek üzere::)))

erdo

 Selamlar, STM32F4 ile 16F628A seri haberleştirmeye çalışıyorum, yalnız bir türlü başarılı olamadım, pic stabil çalışmıyor, test olarak STM32F4 'den gönderdiğim char'ı bir artırırp geri almaya çalışıyorum, yalnız , sanırım gürültüden kaynaklı bir sorun olarak belli bir süre pic doğru karekteri gönderirken, daha sonra 10, 13 karekterlerini gönderiyor.

Beslemenin önüne 100nf decoupler capasitor de yerleştirdim, yine de sorunu düzeltemedim, bu konuda bir tecrübesi olan varsa paylaşabilir mi? Teşekkürler

erdo

Yukarıdaki sorunun çözümü, lvp (low voltage programming) özelliğinin devredışı bırakılmasıyla mümkün oldu...

Powered by EzPortal