Atmega64 Proteus

thelion83

Üye
Katılım
25 May 2022
Mesajlar
17
Puanları
1
Yaş
42
Atmega64, proteusta çok hızlı çalışıyor, osiltör 16mhz ve ayarlardan ex. osc lerin hepsini denedim fakat olmadı, mesela butona 1 defa basıyorum sanki 2-3 saniye boyunca basılı kalmış gibi işlem yapıyor, led blink kodu denedim delay 1000 verdim o da 10 ms de çalışıyor gibi simülasyon yapıyor, acaba sorun nedir ?
 

ibrahim1996

Katılımcı Üye
Katılım
18 Nis 2014
Mesajlar
1,251
Puanları
56
İlk önce kodu da yükleyin ki şurayı değiştirmeniz işinizi çözer demek doğru olsun kodu görmeden bir şey söylemek çok da dofru değil ama muhtemelen butonun durumunu okuyup işlem yaptırıp misal 1 ise gir işlem yap diyip sıfır olma durumunu okutup kodu orda kitlemelisiniz ki işlem bir defa çalışıp butonu bırakma anına kadar 1 kere çalışsın veya buronun durumunu sınar Ken bir değişkeni de sınayıp butona basıldığı an bir yapıp bırakıldığında da sıfır yaparsın kısacası buton arkı ve kod daki açık bir kapı sebep oluyor olabilr ve ya devre pul down veya hıgh direnç olmadığı için de olabilir
 
Konu Sah
thelion83

thelion83

Üye
Katılım
25 May 2022
Mesajlar
17
Puanları
1
Yaş
42
İlk önce kodu da yükleyin ki şurayı değiştirmeniz işinizi çözer demek doğru olsun kodu görmeden bir şey söylemek çok da dofru değil ama muhtemelen butonun durumunu okuyup işlem yaptırıp misal 1 ise gir işlem yap diyip sıfır olma durumunu okutup kodu orda kitlemelisiniz ki işlem bir defa çalışıp butonu bırakma anına kadar 1 kere çalışsın veya buronun durumunu sınar Ken bir değişkeni de sınayıp butona basıldığı an bir yapıp bırakıldığında da sıfır yaparsın kısacası buton arkı ve kod daki açık bir kapı sebep oluyor olabilr ve ya devre pul down veya hıgh direnç olmadığı için de olabilir
Cevabınız için teşekkür ederim, pulpup dirençleri yapılandırılmış durumadır ve kod aşağıdaki gibidir...

if(digitalRead(btnsens) == LOW){
switch(nextState){
case 0:
Serial.println("50");
sense = 50 ;
digitalWrite(ledhiz2, HIGH);
break;
case 1:
Serial.println("100");
sense = 100 ;
digitalWrite(ledhiz2, HIGH);
break;
case 2:
Serial.println("200");
sense = 200 ;
digitalWrite(ledhiz3, HIGH);
break;
case 3:
Serial.println("300");
sense = 300 ;
digitalWrite(ledhiz4, HIGH);
break;
case 4:
Serial.println("400");
sense = 400;
digitalWrite(ledhiz5, HIGH);
break;
default:
sense = 25;
digitalWrite(ledhiz1, HIGH);
}
nextState = (nextState + 1) % 10;
delay(1000);
}
 

mehmet.bey

Profesyonel Üye
Katılım
19 Ara 2011
Mesajlar
1,879
Puanları
281
Konum
Galaksi Dışı
delay() yerine _delay_ms() kullanınız...
C++:
//Arduino
int led = 33;
void setup()
{
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
}

void loop(void)
{
  digitalWrite(led, HIGH);
  _delay_ms(500);
  digitalWrite(led, LOW);
  _delay_ms(500);
}
Ekran-g-r-nt-s-2022-07-03-17-11-54.png
 
Konu Sah
thelion83

thelion83

Üye
Katılım
25 May 2022
Mesajlar
17
Puanları
1
Yaş
42
delay() yerine _delay_ms() kullanınız...
C++:
//Arduino
int led = 33;
void setup()
{
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
}

void loop(void)
{
  digitalWrite(led, HIGH);
  _delay_ms(500);
  digitalWrite(led, LOW);
  _delay_ms(500);
}
Ekli dosyayı görüntüle 88850
Cevap içi teşekkür ederim
_delay_ms() ile oldu, sade delay ile arasında ne fark var ki ? sonuçta her iki kod ms cinsinden işlem yürütmüyor mu ?
 

mehmet.bey

Profesyonel Üye
Katılım
19 Ara 2011
Mesajlar
1,879
Puanları
281
Konum
Galaksi Dışı
"util/delay.h" kütüphanesini kullanıyor sanıyorum.
Bu nedenle F_CPU tanımlamasını algılamıyor olabilir.
Tam olarak neden olduğunu bilemiyorum.

Eclipse kodu:
C++:
#include <avr/io.h>
#include <util/delay.h>

//#define F_CPU 16000000UL //AVR kısmında tanımlanmıştır
//_BV() tanımlaması "avr/include/avr/sfr_defs.h" içerisinde yapılmış

#define sbi(port, n)          (port) |= _BV(n)
#define cbi(port, n)          (port) &= ~_BV(n)
#define rbi(m, n)             ((m) &    _BV(n))
#define fbi(m, n)             ((m) ^=   _BV(n)))

#define pinToggle(PORT, n)  (PORT ^= _BV(n))

int main(void)
{
    sbi(DDRC, 5); //Arduino LED(Pin 33)

    while(1)
    {
        sbi(PORTC, 5);
        _delay_ms(500);
        cbi(PORTC, 5);
        _delay_ms(500);
    }

    return 0;
}
 

Yeni mesajlar

Forum istatistikleri

Konular
121,741
Mesajlar
858,283
Kullanıcılar
437,717
Son üye
Semaozturk

Yeni konular

Çevrimiçi üyeler

Üst