Atmega64 Proteus

thelion83

Üye
Katılım
25 May 2022
Mesajlar
17
Puanları
1
Yaş
44
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 ?
 
İ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
 
İ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);
}
 
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
 
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 ?
 
"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;
}
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,254
Kullanıcılar
449,841
Son üye
nazoyata

Yeni konular

Geri
Üst