Mikro denetleyici pıc c programlama 3 tane sorum vardır yardımcı olursanız sevinirim

CYA

Üye
Katılım
9 Ocak 2023
Mesajlar
4
Puanları
1
Yaş
24
1) -PIC161887 mikrodenetleyicisine 4x3'lük bir tuş takım bağlanarak B portunun değişim kesmesi kullanılarak basılan tuş tespit edilmektedir. Tuş takımının satır pinlerini ifade eden A, B, C, D pinleri sırası ile PortB.4, PortB.5. PortB.6, PortB.7 pinlerine, tuş takımının sütun pinleri ise sırasıyla Port1. Port.2. PortB,3 bağlanmaktadır. PortB.4, PortB.5, PortB.6. PortB.7 pinleri kullanılarak B portundaki değişimler tespit edilecektir. Sistem çalışırken B portunun dahili pull-up dirençleri kullanılacaktır. Bu çalışma şartlarını sağlayacak olan MikroC ayarlama (Main) kod blogunu yazınız? (Kullanılmayan bitler 0 olarak alınacaktır)

2)-PortC.0 ve PortC.2 de iki adet LED bağlıdır. PortA.1 ve PortD.4 de iki adet pull-down bağlı buton vardır. LED'ler yazılımda Led1, Led2 olarak butonlar ise yazılım içerisinde Buton1 ve Buton2 olarak tanımlanacaktır. Başlangıçta LED'lerin sönük olması gerekmektedir. PortA.1'deki butona basıldığında PortC.0'deki LED durum değiştirmektedir. (Sönük ise yanacak, yanık ise sönecek). Ve PortD.4'deki butona basıldığında PortC.2'deki LED'in yanması istenmektedir. Bu işlemi yapan MikroC kodunun tamamını yazınız? (Kullanılmayan pinler çıkış (output) olarak tanımlanmalıdır.). (Değişken tanımlamaları, ayarlamalar ve döngü içerisindeki bütün kodlar istenmektedir)

3) PIC16f887'nin PortA.4, PortA.5 ve Portb.5 pinlerine üç adet potansiyometre bağlanmıştır. Potansiyometrelerin besleme gerilim değeri 5V2dur. Potansiyometrelerden okunan ADC değerleri LCD ekrana Değer1, Deger2 ve Değer3 olarak sırayla LCD'nin 1., 2. ve 3. satırlarının 7. sütunlarına yazdırılmaktadır. PortA.5, Portb.5 pinlerine bağlanan potansiyometrelerin değişimine göre sırasıyla PortC.1 ve Portc.2 kışlarından elde edilen 500hz frekans değerindeki PWM sinyallerinin potansiyometre değeri ile doğru orantılı olacak şekilde değişmesi istenmektedir. Okunan ADC değerinin sola yaslı olması gerekmektedir. Sistemin çalışmasını sağlayacak olan MikroC kodunu yazımız? (LCD ekran ile mikrodenetleyicinin pin bağlantılarının yazılımsal olarak yapıldığı varsayılmaktadır. Yazılan kod değişken tanımlamalarını, ayarlama kısmını ve while blogunun kodlarını içermelidir
 
Şimdi ben anlamadım. Siz öğrenci misiniz? Yoksa aracı mısınız?
 
Cevaplara ihtiyacım var kodları yorumlamak için aracıdan kastınız nedir?
Siz uğraşmadıktan sonra kimse size hazır cevabı vermez. Siz uğraşın takıldığınız yerleri sorun belki o şekilde yardım alabilirsiniz. Aracılık yapmak, yani hocanın sorduğu soruyu buraya yazıp buradan alacağınız cevabı hocaya vermek.
 
Siz uğraşmadıktan sonra kimse size hazır cevabı vermez. Siz uğraşın takıldığınız yerleri sorun belki o şekilde yardım alabilirsiniz. Aracılık yapmak, yani hocanın sorduğu soruyu buraya yazıp buradan alacağınız cevabı hocaya vermek.
soru 1



#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)

void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// Port B'nin pull-up dirençlerini etkinleştir
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);

// Port B'nin 4-7 bitlerini giriş olarak ayarla
set_tris_b(0xF0);

while(true)
{
// Port B değişim kesmesi kontrol et
if(int_RB)
{
// Port B'nin 4-7 bitlerini oku
int portb = input_b() >> 4;

// Satır pinlerini kontrol et
if(portb & 0x01)
// Satır A basıldı
// ...
else if(portb & 0x02)
// Satır B basıldı
// ...
else if(portb & 0x04)
// Satır C basıldı
// ...
else if(portb & 0x08)
// Satır D basıldı
// ...

// Sütun pinlerini kontrol et
if(input(PIN_B0))
// Sütun 1 basıldı
// ...
else if(input(PIN_B1))
// Sütun 2 basıldı
// ...
else if(input(PIN_B2))
// Sütun 3 basıldı
// ...

// Port B değişim kesmesini sıfırla
clear_interrupt(INT_RB);
}
}
}

2 . cevap

#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)

void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// Kullanılmayan pinler çıkış olarak ayarla
set_tris_a(0b11111010);
set_tris_c(0b11111011);
set_tris_d(0b11111101);

// Başlangıçta LED'ler sönük
output_c(0b11111011);

// Butonların pull-down dirençlerini etkinleştir
setup_pullup(false, PULLUP_PORTA | PULLUP_PORTD);

while(true)
{
// Buton1'e basıldıysa
if(!input(PIN_A1))
{
// Led1'i durumunu değiştir
if(output_c & 0b0000001)
output_c(0b11111011);
else
output_c(0b11111010);
}
// Buton2'ye basıldıysa
if(!input(PIN_D4))
{
// Led2 yan
output_c(0b11111001);
}
}
}


3. soru

#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)

unsigned int16 adc_value1, adc_value2, adc_value3;

void main()
{
setup_adc_ports(AN0_TO_AN5);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// Pinleri çıkış olarak ayarlayın
set_tris_c(0b11111001);
// PWM sinyallerini oluşturalım
setup_CCP1(CCP_PWM);
setup_CCP2(CCP_PWM);
// PWM frekansını ayarlayın
setup_timer_2(T2_DIV_BY_16, 255, 1);

// LCD ekranının pinlerini ayarlayın (kod yazılmamış)
// ...

while(true)
{
// Potansiyometre 1 için ADC değerini okuyun
adc_value1 = read_adc(0);
// Potansiyometre 2 için ADC değerini okuyun
adc_value2 = read_adc(4);
// Potansiyometre 3 için ADC değerini okuyun
adc_value3 = read_adc(5);

// Potansiyometre 1 değerini PWM sinyalinde kullanın
set_pwm1_duty(adc_value1);
// Potansiyometre 2 değerini PWM sinyalinde kullanın
set_pwm2_duty(adc_value2);
// LCD ekrana değerleri yazdır
printf(lcd_putc,"\fDeger1: %u Deger2: %u Deger3: %u", adc_value1, adc_value2, adc_value3);
delay_ms(100);
}
}

---------------------------------------------------------------------------------------------------------
3 ün 2 . cevabı
#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)
#include <LCD.c>

void main() {
setup_adc_ports(sAN4 | sAN5 | sAN6);
setup_adc(ADC_CLOCK_INTERNAL);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_CCP1(CCP_PWM);
setup_CCP2(CCP_PWM);
set_pwm1_duty(0);
set_pwm2_duty(0);
setup_timer_2(T2_DIV_BY_16, 255, 1);

lcd_init();
lcd_putc("\f");

while(true) {
int adcValue1 = read_adc();
lcd_gotoxy(7, 1);
printf(lcd_putc, "Deger1: %Ld", adcValue1);
set_pwm1_duty(adcValue1);
delay_ms(50);

int adcValue2 = read_adc();
lcd_gotoxy(7, 2);
printf(lcd_putc, "Deger2: %Ld", adcValue2);
set_pwm2_duty(adcValue2);
delay_ms(50);

int adcValue3 = read_adc();
lcd_gotoxy(7, 3);
printf(lcd_putc, "Deger3: %Ld", adcValue3);
delay_ms(50);
}
}


uğraşmadığımı söylerken düşünmen gerekir uğraşıyorum fakat hata alıyorum gelen cevaplarla kendi cevaplarımı karşılaştımak istiyorum. Bunlar ayrıyeten ccs kodları bana mikro c kodları gerekiyor yardımcı olabilirseniz sevinirim
 
Son düzenleme:
soru 1



#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)

void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// Port B'nin pull-up dirençlerini etkinleştir
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);

// Port B'nin 4-7 bitlerini giriş olarak ayarla
set_tris_b(0xF0);

while(true)
{
// Port B değişim kesmesi kontrol et
if(int_RB)
{
// Port B'nin 4-7 bitlerini oku
int portb = input_b() >> 4;

// Satır pinlerini kontrol et
if(portb & 0x01)
// Satır A basıldı
// ...
else if(portb & 0x02)
// Satır B basıldı
// ...
else if(portb & 0x04)
// Satır C basıldı
// ...
else if(portb & 0x08)
// Satır D basıldı
// ...

// Sütun pinlerini kontrol et
if(input(PIN_B0))
// Sütun 1 basıldı
// ...
else if(input(PIN_B1))
// Sütun 2 basıldı
// ...
else if(input(PIN_B2))
// Sütun 3 basıldı
// ...

// Port B değişim kesmesini sıfırla
clear_interrupt(INT_RB);
}
}
}

2 . cevap

#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)

void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// Kullanılmayan pinler çıkış olarak ayarla
set_tris_a(0b11111010);
set_tris_c(0b11111011);
set_tris_d(0b11111101);

// Başlangıçta LED'ler sönük
output_c(0b11111011);

// Butonların pull-down dirençlerini etkinleştir
setup_pullup(false, PULLUP_PORTA | PULLUP_PORTD);

while(true)
{
// Buton1'e basıldıysa
if(!input(PIN_A1))
{
// Led1'i durumunu değiştir
if(output_c & 0b0000001)
output_c(0b11111011);
else
output_c(0b11111010);
}
// Buton2'ye basıldıysa
if(!input(PIN_D4))
{
// Led2 yan
output_c(0b11111001);
}
}
}


3. soru

#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)

unsigned int16 adc_value1, adc_value2, adc_value3;

void main()
{
setup_adc_ports(AN0_TO_AN5);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// Pinleri çıkış olarak ayarlayın
set_tris_c(0b11111001);
// PWM sinyallerini oluşturalım
setup_CCP1(CCP_PWM);
setup_CCP2(CCP_PWM);
// PWM frekansını ayarlayın
setup_timer_2(T2_DIV_BY_16, 255, 1);

// LCD ekranının pinlerini ayarlayın (kod yazılmamış)
// ...

while(true)
{
// Potansiyometre 1 için ADC değerini okuyun
adc_value1 = read_adc(0);
// Potansiyometre 2 için ADC değerini okuyun
adc_value2 = read_adc(4);
// Potansiyometre 3 için ADC değerini okuyun
adc_value3 = read_adc(5);

// Potansiyometre 1 değerini PWM sinyalinde kullanın
set_pwm1_duty(adc_value1);
// Potansiyometre 2 değerini PWM sinyalinde kullanın
set_pwm2_duty(adc_value2);
// LCD ekrana değerleri yazdır
printf(lcd_putc,"\fDeger1: %u Deger2: %u Deger3: %u", adc_value1, adc_value2, adc_value3);
delay_ms(100);
}
}

---------------------------------------------------------------------------------------------------------
3 ün 2 . cevabı
#include <16F887.h>
#device adc=10
#FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD
#use delay(clock=8000000)
#include <LCD.c>

void main() {
setup_adc_ports(sAN4 | sAN5 | sAN6);
setup_adc(ADC_CLOCK_INTERNAL);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_CCP1(CCP_PWM);
setup_CCP2(CCP_PWM);
set_pwm1_duty(0);
set_pwm2_duty(0);
setup_timer_2(T2_DIV_BY_16, 255, 1);

lcd_init();
lcd_putc("\f");

while(true) {
int adcValue1 = read_adc();
lcd_gotoxy(7, 1);
printf(lcd_putc, "Deger1: %Ld", adcValue1);
set_pwm1_duty(adcValue1);
delay_ms(50);

int adcValue2 = read_adc();
lcd_gotoxy(7, 2);
printf(lcd_putc, "Deger2: %Ld", adcValue2);
set_pwm2_duty(adcValue2);
delay_ms(50);

int adcValue3 = read_adc();
lcd_gotoxy(7, 3);
printf(lcd_putc, "Deger3: %Ld", adcValue3);
delay_ms(50);
}
}


uğraşmadığımı söylerken düşünmen gerekir uğraşıyorum fakat hata alıyorum gelen cevaplarla kendi cevaplarımı karşılaştımak istiyordum bilmeden yorum yapmanız sizin kötü düşüncenizi gösterir
Henüz niyet okuma mertebesine ulaşamadım. Soruyu ilk baştaki sorma tarzıyla sonradan kodları ekleyip sorma tarzı arasında dağlar kadar fark var.
Kolay gelsin.
 
Son düzenleme:
Henüz niyet okuma mertebesine ulaşamadım. Soruyu ilk baştaki sorma tarzıyla sonradan kodları ekleyip sorma tarzı arasında dağlar kadar fark var.
Kolay gelsin.
Teşekkür ederim , sizin direkt olarak soruları yazıp cevap bekliyorsunuz, kimse hazır cevap vermez gibisinden konuşmanız benim hakkımda bilmeden yorum yapmanızı gösterir tanımadığınız kişilere bu şekilde cevap verirken düşünmenizi öneririm. cevabını biliyorsanız beni cevabı bulma yönüne teşvik etseniz daha anlaşılır ve güzel sohbet olurdu bilmiyorsanız da cevap yazmanıza gerek yoktu illaki yazacaksanız bilmiyorum araştırayım yardımcı olmaya çalışacağım gibisinden bir yazı daha iyi olurdu dediğimi anlatabilmişimdir umarım iyi günler dilerim sağlıcakla kalın.
 
Teşekkür ederim , sizin direkt olarak soruları yazıp cevap bekliyorsunuz, kimse hazır cevap vermez gibisinden konuşmanız benim hakkımda bilmeden yorum yapmanızı gösterir tanımadığınız kişilere bu şekilde cevap verirken düşünmenizi öneririm. cevabını biliyorsanız beni cevabı bulma yönüne teşvik etseniz daha anlaşılır ve güzel sohbet olurdu bilmiyorsanız da cevap yazmanıza gerek yoktu illaki yazacaksanız bilmiyorum araştırayım yardımcı olmaya çalışacağım gibisinden bir yazı daha iyi olurdu dediğimi anlatabilmişimdir umarım iyi günler dilerim sağlıcakla kalın.
Birşeyi istemeninde bir üslubu vardır. Burada ilk üslupla soru sorarsanız cevap almanız zor olur, yıllardır forumdaki arkadaşlardan gözlemlediğim budur, benimde tarzım bu şekilde. Kimin ne niyetli sorduğunu bilemeyiz. Açıklama yapmadan doğrudan soruyu yapıştırırsanız nasıl düşünmemiz gerekir? Sizi tanımıyoruz. Mesela soruyu ilk şekli ile değilde sonraki şekli ile sorsaydınız sizin için seve seve yardımcı olmaya çalışırdım. Arkadaş uğraşmış yardım istiyor diye düşünürdüm.
Nitekim soruyla uğraşmış ama çözemeyip forumdan yardım istemiş olanlara yardımcı olabilmek için eğer soru bilgim dahilindeyse gecenin kaçı olduğu farketmeksizin uğraşmışımdır.
Buraya o kadar çok öğrenci gelip soruyu yapıştırıp gidiyor ki! Burada biraz zaman geçirirseniz görürsünüz.
Sizde benim hakkımda kötü düşünceli olduğum gibi bir yorumda bulundunuz değil mi beni hiç tanımadan! Kolay gelsin.​
 

Forum istatistikleri

Konular
127,610
Mesajlar
911,424
Kullanıcılar
449,040
Son üye
Resul yiğit

Çevrimiçi üyeler

Geri
Üst